Merge pull request #12171 from Ankso/player_update_zone
Core/Players: Update the player's zone and area only after the player's position is updated server-side.
This commit is contained in:
commit
7b49038454
3 files changed
+18
-5
No files matched your search
@@ -689,6 +689,8 @@ Player::Player(WorldSession* session): Unit(true)
|
||||
|
||||
m_areaUpdateId = 0;
|
||||
m_team = 0;
|
||||
|
||||
m_needsZoneUpdate = false;
|
||||
|
||||
m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
|
||||
|
||||
@@ -6757,6 +6759,15 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation, bool t
|
||||
// mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING);
|
||||
//AURA_INTERRUPT_FLAG_JUMP not sure
|
||||
|
||||
// Update player zone if needed
|
||||
if (m_needsZoneUpdate)
|
||||
{
|
||||
uint32 newZone, newArea;
|
||||
GetZoneAndAreaId(newZone, newArea);
|
||||
UpdateZone(newZone, newArea);
|
||||
m_needsZoneUpdate = false;
|
||||
}
|
||||
|
||||
// group update
|
||||
if (GetGroup())
|
||||
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
|
||||
|
||||
@@ -1675,7 +1675,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
void UpdatePvP(bool state, bool override=false);
|
||||
void UpdateZone(uint32 newZone, uint32 newArea);
|
||||
void UpdateArea(uint32 newArea);
|
||||
|
||||
void SetNeedsZoneUpdate(bool needsUpdate) { m_needsZoneUpdate = needsUpdate; }
|
||||
|
||||
void UpdateZoneDependentAuras(uint32 zone_id); // zones
|
||||
void UpdateAreaDependentAuras(uint32 area_id); // subzones
|
||||
|
||||
@@ -2561,6 +2562,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
bool IsAlwaysDetectableFor(WorldObject const* seer) const;
|
||||
|
||||
uint8 m_grantableLevels;
|
||||
|
||||
bool m_needsZoneUpdate;
|
||||
|
||||
private:
|
||||
// internal common parts for CanStore/StoreItem functions
|
||||
|
||||
@@ -500,10 +500,9 @@ void WorldSession::HandleZoneUpdateOpcode(WorldPacket& recvData)
|
||||
|
||||
TC_LOG_DEBUG("network", "WORLD: Recvd ZONE_UPDATE: %u", newZone);
|
||||
|
||||
// use server size data
|
||||
uint32 newzone, newarea;
|
||||
GetPlayer()->GetZoneAndAreaId(newzone, newarea);
|
||||
GetPlayer()->UpdateZone(newzone, newarea);
|
||||
// use server side data, but only after update the player position. See Player::UpdatePosition().
|
||||
GetPlayer()->SetNeedsZoneUpdate(true);
|
||||
|
||||
//GetPlayer()->SendInitWorldStates(true, newZone);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user