From c81213e5911a32d570f9c394a00854e27bde53ba Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 1 Jul 2023 09:33:56 -0400 Subject: [PATCH] Core/Players: Repop players at instance entrance when they release spirit Port From (https://github.com/TrinityCore/TrinityCore/commit/9e9f67d6bd6dcaabbf52f5c6809ca69440736f47) --- Source/Game/Entities/Player/Player.cs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index c8092a1da..fd49dde5e 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -4213,34 +4213,41 @@ namespace Game.Entities SpawnCorpseBones(); } - WorldSafeLocsEntry ClosestGrave; + WorldSafeLocsEntry closestGrave = null; // Special handle for Battlegroundmaps Battleground bg = GetBattleground(); if (bg) - ClosestGrave = bg.GetClosestGraveyard(this); + closestGrave = bg.GetClosestGraveyard(this); else { - BattleField bf = BattleFieldMgr.GetBattlefieldToZoneId(GetMap(), GetZoneId()); + var bf = BattleFieldMgr.GetBattlefieldToZoneId(GetMap(), GetZoneId()); if (bf != null) - ClosestGrave = bf.GetClosestGraveyard(this); + closestGrave = bf.GetClosestGraveyard(this); else - ClosestGrave = ObjectMgr.GetClosestGraveyard(this, GetTeam(), this); + { + InstanceScript instance = GetInstanceScript(); + if (instance != null) + closestGrave = ObjectMgr.GetWorldSafeLoc(instance.GetEntranceLocation()); + } } + if (closestGrave == null) + closestGrave = ObjectMgr.GetClosestGraveyard(this, GetTeam(), this); + // stop countdown until repop m_deathTimer = 0; // if no grave found, stay at the current location // and don't show spirit healer location - if (ClosestGrave != null) + if (closestGrave != null) { - TeleportTo(ClosestGrave.Loc, shouldResurrect ? TeleportToOptions.ReviveAtTeleport : 0); + TeleportTo(closestGrave.Loc, shouldResurrect ? TeleportToOptions.ReviveAtTeleport : 0); if (IsDead()) // not send if alive, because it used in TeleportTo() { DeathReleaseLoc packet = new(); - packet.MapID = (int)ClosestGrave.Loc.GetMapId(); - packet.Loc = ClosestGrave.Loc; + packet.MapID = (int)closestGrave.Loc.GetMapId(); + packet.Loc = closestGrave.Loc; SendPacket(packet); } }