diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index cd6c45128..701715ad3 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4535,7 +4535,7 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) // trigger update zone for alive state zone updates uint32 newzone, newarea; GetZoneAndAreaId(newzone, newarea); - UpdateZone(newzone, newarea); + UpdateZone(newzone, newarea, true); sOutdoorPvPMgr->HandlePlayerResurrects(this, newzone); if (Battleground* bg = GetBattleground()) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 22e694143..2545c89e4 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1862,7 +1862,7 @@ public: itr->SetPvP(state); } void UpdatePvP(bool state, bool _override = false); - void UpdateZone(uint32 newZone, uint32 newArea); + void UpdateZone(uint32 newZone, uint32 newArea, bool force = false); void UpdateArea(uint32 newArea); void SetNeedZoneUpdate(bool needUpdate) { m_needZoneUpdate = needUpdate; } diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index e2862ace6..1196b4bc9 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -1249,17 +1249,20 @@ void Player::UpdateArea(uint32 newArea) RemoveRestFlag(REST_FLAG_IN_FACTION_AREA); } -void Player::UpdateZone(uint32 newZone, uint32 newArea) +void Player::UpdateZone(uint32 newZone, uint32 newArea, bool force) { if (!newZone) return; - if (m_zoneUpdateId != newZone) + if (m_zoneUpdateId != newZone || force) { sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); sOutdoorPvPMgr->HandlePlayerEnterZone(this, newZone); sWorldState->HandlePlayerLeaveZone(this, static_cast(m_zoneUpdateId)); sWorldState->HandlePlayerEnterZone(this, static_cast(newZone)); + } + if (m_zoneUpdateId != newZone) + { sBattlefieldMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); sBattlefieldMgr->HandlePlayerEnterZone(this, newZone); SendInitWorldStates(newZone,