diff options
author | Golrag <Golrag@users.noreply.github.com> | 2017-06-08 19:25:26 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-06-08 19:25:26 +0200 |
commit | a2c123b5296b2723ae2a0211e7aaafe37fb9246d (patch) | |
tree | 80de68ed876cb986e4d32c023cbbaa832e2c1a7e /src | |
parent | f9cfc202e90ded24fe0dcf5d06035d2aab2cf6af (diff) |
Core/Maps: Corrected GetWaterOrGroundLevel (#19863)
* When a gameobject was above water like in ToC. It would return water level
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 4bac7b84669..41e8129889f 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2331,7 +2331,15 @@ float Map::GetWaterOrGroundLevel(uint32 phasemask, float x, float y, float z, fl LiquidData liquid_status; ZLiquidStatus res = GetLiquidStatus(x, y, ground_z, MAP_ALL_LIQUIDS, &liquid_status); - return res ? liquid_status.level : ground_z; + switch (res) + { + case LIQUID_MAP_ABOVE_WATER: + return std::max<float>(liquid_status.level, ground_z); + case LIQUID_MAP_NO_WATER: + return ground_z; + default: + return liquid_status.level; + } } return VMAP_INVALID_HEIGHT_VALUE; @@ -2727,7 +2735,7 @@ bool Map::getObjectHitPos(uint32 phasemask, float x1, float y1, float z1, float float Map::GetHeight(uint32 phasemask, float x, float y, float z, bool vmap/*=true*/, float maxSearchDist/*=DEFAULT_HEIGHT_SEARCH*/) const { - return std::max<float>(GetHeight(x, y, z, vmap, maxSearchDist), _dynamicTree.getHeight(x, y, z, maxSearchDist, phasemask)); + return std::max<float>(GetHeight(x, y, z, vmap, maxSearchDist), GetGameObjectFloor(phasemask, x, y, z, maxSearchDist)); } bool Map::IsInWater(float x, float y, float pZ, LiquidData* data) const diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index b6509ceb9f3..ec7f1cc8752 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -526,7 +526,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType> bool ContainsGameObjectModel(const GameObjectModel& model) const { return _dynamicTree.contains(model);} float GetGameObjectFloor(uint32 phasemask, float x, float y, float z, float maxSearchDist = DEFAULT_HEIGHT_SEARCH) const { - return _dynamicTree.getHeight(x, y, z, phasemask, maxSearchDist); + return _dynamicTree.getHeight(x, y, z, maxSearchDist, phasemask); } bool getObjectHitPos(uint32 phasemask, float x1, float y1, float z1, float x2, float y2, float z2, float& rx, float &ry, float& rz, float modifyDist); |