From c29516f1212c3260b129b6c95298d80e830b33ad Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 24 Aug 2020 23:49:12 -0400 Subject: [PATCH] Core/Player: Resequence Player::UpdateZone some more to hopefully prevent future edge cases Port From (https://github.com/TrinityCore/TrinityCore/commit/10b590acb62ef118cd6c0992f341db8f852958be) --- Source/Game/Entities/Player/Player.Map.cs | 29 +++++++++++------------ 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Source/Game/Entities/Player/Player.Map.cs b/Source/Game/Entities/Player/Player.Map.cs index 746d3d454..7f6895bd6 100644 --- a/Source/Game/Entities/Player/Player.Map.cs +++ b/Source/Game/Entities/Player/Player.Map.cs @@ -150,18 +150,6 @@ namespace Game.Entities { GetMap().UpdatePlayerZoneStats(m_zoneUpdateId, newZone); - if (m_zoneUpdateId != newZone) - { - Global.OutdoorPvPMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId); - Global.OutdoorPvPMgr.HandlePlayerEnterZone(this, newZone); - Global.BattleFieldMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId); - Global.BattleFieldMgr.HandlePlayerEnterZone(this, newZone); - SendInitWorldStates(newZone, newArea); // only if really enters to new zone, not just area change, works strange... - Guild guild = GetGuild(); - if (guild) - guild.UpdateMemberData(this, GuildMemberData.ZoneId, newZone); - } - // group update if (GetGroup()) { @@ -172,9 +160,6 @@ namespace Game.Entities pet.SetGroupUpdateFlag(GroupUpdatePetFlags.Full); } - m_zoneUpdateId = newZone; - m_zoneUpdateTimer = 1 * Time.InMilliseconds; - // zone changed, so area changed as well, update it UpdateArea(newArea); @@ -234,6 +219,20 @@ namespace Game.Entities UpdateLocalChannels(newZone); UpdateZoneDependentAuras(newZone); + + m_zoneUpdateTimer = 1 * Time.InMilliseconds; + if (m_zoneUpdateId != newZone) + { + m_zoneUpdateId = newZone; + Global.OutdoorPvPMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId); + Global.OutdoorPvPMgr.HandlePlayerEnterZone(this, newZone); + Global.BattleFieldMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId); + Global.BattleFieldMgr.HandlePlayerEnterZone(this, newZone); + SendInitWorldStates(newZone, newArea); // only if really enters to new zone, not just area change, works strange... + Guild guild = GetGuild(); + if (guild) + guild.UpdateMemberData(this, GuildMemberData.ZoneId, newZone); + } } public InstanceBind GetBoundInstance(uint mapid, Difficulty difficulty, bool withExpired = false)