aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2023-07-01 13:45:47 +0200
committerGitHub <noreply@github.com>2023-07-01 13:45:47 +0200
commit9e9f67d6bd6dcaabbf52f5c6809ca69440736f47 (patch)
treedb64a6abe82576f597f5f968e65386b79c9e2a54
parent6a3c98ac3184ab3b93b90fa5bd297ba231165a7d (diff)
Core/Players: Repop players at instance entrance when they release spirit (#29014)
-rw-r--r--src/server/game/Entities/Player/Player.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index f6a68f82d42..0569a7eda5e 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4819,32 +4819,30 @@ void Player::RepopAtGraveyard()
SpawnCorpseBones();
}
- WorldSafeLocsEntry const* ClosestGrave;
-
- // Special handle for battleground maps
+ WorldSafeLocsEntry const* closestGrave = nullptr;
if (Battleground* bg = GetBattleground())
- ClosestGrave = bg->GetClosestGraveyard(this);
- else
- {
- if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(GetMap(), GetZoneId()))
- ClosestGrave = bf->GetClosestGraveyard(this);
- else
- ClosestGrave = sObjectMgr->GetClosestGraveyard(*this, GetTeam(), this);
- }
+ closestGrave = bg->GetClosestGraveyard(this);
+ else if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(GetMap(), GetZoneId()))
+ closestGrave = bf->GetClosestGraveyard(this);
+ else if (InstanceScript* instance = GetInstanceScript())
+ closestGrave = sObjectMgr->GetWorldSafeLoc(instance->GetEntranceLocation());
+
+ if (!closestGrave)
+ closestGrave = sObjectMgr->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)
+ if (closestGrave)
{
- TeleportTo(ClosestGrave->Loc, shouldResurrect ? TELE_REVIVE_AT_TELEPORT : TELE_TO_NONE);
+ TeleportTo(closestGrave->Loc, shouldResurrect ? TELE_REVIVE_AT_TELEPORT : TELE_TO_NONE);
if (isDead()) // not send if alive, because it used in TeleportTo()
{
WorldPackets::Misc::DeathReleaseLoc packet;
- packet.MapID = ClosestGrave->Loc.GetMapId();
- packet.Loc = ClosestGrave->Loc;
+ packet.MapID = closestGrave->Loc.GetMapId();
+ packet.Loc = closestGrave->Loc;
SendDirectMessage(packet.Write());
}
}