From c12531b0230d731804e59cd5cd681e5f8c9c1e65 Mon Sep 17 00:00:00 2001 From: Giacomo Pozzoni Date: Sun, 21 Feb 2021 20:26:21 +0100 Subject: [PATCH] Core/Maps: Use a fixed offset instead of full collision height when retrieving floor Z --- src/server/game/Entities/Object/Object.cpp | 4 ++-- src/server/game/Maps/Map.cpp | 2 +- src/server/game/Miscellaneous/SharedDefines.h | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 7e10543980d..b0d6930ea76 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2784,7 +2784,7 @@ float WorldObject::GetFloorZ() const { if (!IsInWorld()) return m_staticFloorZ; - return std::max(m_staticFloorZ, GetMap()->GetGameObjectFloor(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ() + GetCollisionHeight())); + return std::max(m_staticFloorZ, GetMap()->GetGameObjectFloor(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ() + Z_OFFSET_FIND_HEIGHT)); } float WorldObject::GetMapWaterOrGroundLevel(float x, float y, float z, float* ground/* = nullptr*/) const @@ -2797,7 +2797,7 @@ float WorldObject::GetMapWaterOrGroundLevel(float x, float y, float z, float* gr float WorldObject::GetMapHeight(float x, float y, float z, bool vmap/* = true*/, float distanceToSearch/* = DEFAULT_HEIGHT_SEARCH*/) const { if (z != MAX_HEIGHT) - z += GetCollisionHeight(); + z += Z_OFFSET_FIND_HEIGHT; return GetMap()->GetHeight(GetPhaseShift(), x, y, z, vmap, distanceToSearch); } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 7c155731eff..7b03f929610 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2543,7 +2543,7 @@ float Map::GetWaterOrGroundLevel(PhaseShift const& phaseShift, float x, float y, if (GetGrid(PhasingHandler::GetTerrainMapId(phaseShift, this, x, y), x, y)) { // we need ground level (including grid height version) for proper return water level in point - float ground_z = GetHeight(phaseShift, x, y, z + collisionHeight); + float ground_z = GetHeight(phaseShift, x, y, z + Z_OFFSET_FIND_HEIGHT); if (ground) *ground = ground_z; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 9166b92c58b..5ac268b3f87 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -22,6 +22,7 @@ #include "DetourNavMesh.h" float const GROUND_HEIGHT_TOLERANCE = 0.05f; // Extra tolerance to z position to check if it is in air or on ground. +constexpr float Z_OFFSET_FIND_HEIGHT = 0.5f; enum SpellEffIndex : uint8 {