diff options
author | Treeston <treeston.mmoc@gmail.com> | 2017-09-09 21:36:57 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-08-23 22:37:03 +0200 |
commit | 10b590acb62ef118cd6c0992f341db8f852958be (patch) | |
tree | 6f6bcb211d44f683aa042f427e2c0650abace58b /src | |
parent | 8db10c67d7232b7b1e479018cfbf020a3a91fa5c (diff) |
Core/Player: Resequence Player::UpdateZone some more to hopefully prevent future edge cases like #20289 from occurring.
(cherry picked from commit 0f7015012bd1813aa33e06bcb47cf8974edcc0cf)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5f3ac41c690..c136932fcc6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7155,17 +7155,6 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) { GetMap()->UpdatePlayerZoneStats(m_zoneUpdateId, newZone); - if (m_zoneUpdateId != newZone) - { - sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); - sOutdoorPvPMgr->HandlePlayerEnterZone(this, newZone); - sBattlefieldMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); - sBattlefieldMgr->HandlePlayerEnterZone(this, newZone); - SendInitWorldStates(newZone, newArea); // only if really enters to new zone, not just area change, works strange... - if (Guild* guild = GetGuild()) - guild->UpdateMemberData(this, GUILD_MEMBER_DATA_ZONEID, newZone); - } - // group update if (GetGroup()) { @@ -7174,9 +7163,6 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) pet->SetGroupUpdateFlag(GROUP_UPDATE_PET_FULL); } - m_zoneUpdateId = newZone; - m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL; - // zone changed, so area changed as well, update it. UpdateArea(newArea); @@ -7236,6 +7222,19 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) UpdateLocalChannels(newZone); UpdateZoneDependentAuras(newZone); + + m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL; + if (m_zoneUpdateId != newZone) + { + m_zoneUpdateId = newZone; + sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); + sOutdoorPvPMgr->HandlePlayerEnterZone(this, newZone); + sBattlefieldMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); + sBattlefieldMgr->HandlePlayerEnterZone(this, newZone); + SendInitWorldStates(newZone, newArea); // only if really enters to new zone, not just area change, works strange... + if (Guild* guild = GetGuild()) + guild->UpdateMemberData(this, GUILD_MEMBER_DATA_ZONEID, newZone); + } } //If players are too far away from the duel flag... they lose the duel |