diff options
| author | Ovah <dreadkiller@gmx.de> | 2020-04-07 23:28:44 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-01-01 12:42:17 +0100 |
| commit | d18d2b84f2c3e6e1005316625da80c99dd414bcc (patch) | |
| tree | 0fdf01612054c463fde784110d8c8d3f8a50554b /src/server/game/Entities/Object | |
| parent | fa1eb9f36f2e703ba29446064ae1957934fa7e5e (diff) | |
Core/Objects: cache current liquid status of objects when updating position data and use it to replace unnecessary vmap lookups (#24399)
* dropped unneeded IsUnderwater override for players since the default position data update considers collision height already so we don't have to rely on that tempfix anymore. This actually fixes breathing bars showing up depending on your characters size (gnomes get their breathing bar earlier, taurens later etc)
(cherry picked from commit bea850fb73c6c3b3cc4e51bd3a42d178947882a5)
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.h | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index a530c580be8..ae18e8422d9 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -796,8 +796,8 @@ void MovementInfo::OutDebug() WorldObject::WorldObject(bool isWorldObject) : Object(), WorldLocation(), LastUsedScriptID(0), m_movementInfo(), m_name(), m_isActive(false), m_isFarVisible(false), m_isWorldObject(isWorldObject), m_zoneScript(nullptr), -m_transport(nullptr), m_zoneId(0), m_areaId(0), m_staticFloorZ(VMAP_INVALID_HEIGHT), m_outdoors(false), m_currMap(nullptr), m_InstanceId(0), -_dbPhase(0), m_notifyflags(0) +m_transport(nullptr), m_zoneId(0), m_areaId(0), m_staticFloorZ(VMAP_INVALID_HEIGHT), m_outdoors(false), m_liquidStatus(LIQUID_MAP_NO_WATER), +m_currMap(nullptr), m_InstanceId(0), _dbPhase(0), m_notifyflags(0) { m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST); m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE); @@ -896,6 +896,7 @@ void WorldObject::ProcessPositionDataChanged(PositionFullTerrainStatus const& da m_zoneId = area->ParentAreaID; m_outdoors = data.outdoors; m_staticFloorZ = data.floorZ; + m_liquidStatus = data.liquidStatus; } void WorldObject::AddToWorld() diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 0d7e237e937..5af44a47e69 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -63,6 +63,7 @@ class ZoneScript; struct FactionTemplateEntry; struct PositionFullTerrainStatus; struct QuaternionData; +enum ZLiquidStatus : uint32; namespace WorldPackets { @@ -486,6 +487,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation uint32 GetAreaId() const { return m_areaId; } void GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const { zoneid = m_zoneId, areaid = m_areaId; } bool IsOutdoors() const { return m_outdoors; } + ZLiquidStatus GetLiquidStatus() const { return m_liquidStatus; } bool IsInWorldPvpZone() const; InstanceScript* GetInstanceScript() const; @@ -733,6 +735,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation uint32 m_areaId; float m_staticFloorZ; bool m_outdoors; + ZLiquidStatus m_liquidStatus; //these functions are used mostly for Relocate() and Corpse/Player specific stuff... //use them ONLY in LoadFromDB()/Create() funcs and nowhere else! |
