aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-09-09 21:36:57 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-23 22:37:03 +0200
commit10b590acb62ef118cd6c0992f341db8f852958be (patch)
tree6f6bcb211d44f683aa042f427e2c0650abace58b /src
parent8db10c67d7232b7b1e479018cfbf020a3a91fa5c (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.cpp27
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