From 83cb9b9fe4eb2fbe6990adb2dd3c02154f78fc7e Mon Sep 17 00:00:00 2001 From: Acentech Dev Date: Tue, 21 Jul 2026 00:25:44 +0300 Subject: [PATCH] feat(hs): team-base respawn + reapply earned buffs on respawn Co-Authored-By: Claude Opus 4.8 (1M context) --- src/GameLogic/MiniGames/HeykelSavasiContext.cs | 4 ++++ src/GameLogic/Player.cs | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/GameLogic/MiniGames/HeykelSavasiContext.cs b/src/GameLogic/MiniGames/HeykelSavasiContext.cs index 5a4b890..ffe0578 100644 --- a/src/GameLogic/MiniGames/HeykelSavasiContext.cs +++ b/src/GameLogic/MiniGames/HeykelSavasiContext.cs @@ -624,6 +624,10 @@ public class HeykelSavasiContext : MiniGameContext } } + /// Reapplies the team's earned buffs to a player who just (re)spawned. + /// The player who (re)spawned. + public ValueTask OnPlayerRespawnedAsync(Player player) => this.ReapplyBuffsAsync(player); + /// /// Pure, dependency-free tracker for statue-break progress and win detection. Extracted out of /// so it can be unit-tested directly, without constructing a full diff --git a/src/GameLogic/Player.cs b/src/GameLogic/Player.cs index d55a86a..24f9cc0 100644 --- a/src/GameLogic/Player.cs +++ b/src/GameLogic/Player.cs @@ -1204,6 +1204,13 @@ public class Player : AsyncDisposable, IBucketMapObserver, IAttackable, IAttacke await this.CurrentMap.AddAsync(summon).ConfigureAwait(false); summon.OnSpawn(); } + + // ADAMU-CUSTOM: Heykel Savasi -> reapply the team's earned buffs after (re)spawning during battle. + if (this.CurrentMiniGame is HeykelSavasiContext heykelSavasiRebuff + && heykelSavasiRebuff.State == MiniGameState.Playing) + { + await heykelSavasiRebuff.OnPlayerRespawnedAsync(this).ConfigureAwait(false); + } } /// @@ -2325,6 +2332,14 @@ public class Player : AsyncDisposable, IBucketMapObserver, IAttackable, IAttacke }; } + // ADAMU-CUSTOM: Heykel Savasi -> respawn at the player's own team base while the battle is running. + if (this.CurrentMiniGame is HeykelSavasiContext heykelSavasiRespawn + && heykelSavasiRespawn.State == MiniGameState.Playing + && heykelSavasiRespawn.GetTeam(this) != HeykelSavasiTeam.None) + { + return heykelSavasiRespawn.GetTeamSpawnGate(heykelSavasiRespawn.GetTeam(this)); + } + var spawnTargetMapDefinition = this.CurrentMap.Definition.SafezoneMap ?? this.CurrentMap.Definition; var targetMap = await this.GameContext.GetMapAsync((ushort)spawnTargetMapDefinition.Number, false).ConfigureAwait(false); return targetMap?.SafeZoneSpawnGate