aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorOvah <dreadkiller@gmx.de>2020-04-07 23:28:44 +0200
committerGitHub <noreply@github.com>2020-04-07 23:28:44 +0200
commitbea850fb73c6c3b3cc4e51bd3a42d178947882a5 (patch)
tree325959486ee54499371ca71cce9eca81361f56d4 /src/server/game/Entities/Object
parentd962624d6107986fe7c349629878a121d27b186c (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)
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp5
-rw-r--r--src/server/game/Entities/Object/Object.h3
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 8fdaced5de4..17376cd2da8 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -964,8 +964,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),
-m_phaseMask(PHASEMASK_NORMAL), 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), m_phaseMask(PHASEMASK_NORMAL), m_notifyflags(0)
{
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST);
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
@@ -1070,6 +1070,7 @@ void WorldObject::ProcessPositionDataChanged(PositionFullTerrainStatus const& da
m_zoneId = area->zone;
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 edccf3c7651..ad915f3c373 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -58,6 +58,7 @@ class ZoneScript;
struct FactionTemplateEntry;
struct PositionFullTerrainStatus;
struct QuaternionData;
+enum ZLiquidStatus : uint32;
typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType;
@@ -317,6 +318,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; }
InstanceScript* GetInstanceScript() const;
@@ -545,6 +547,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!