From 6eeb088211d5dc8ee629a1abf85b113f794dce56 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 4 Apr 2021 23:22:13 +0200 Subject: [PATCH] fix(Core/Movement): Corrected calculating ground level in shallow water. (#5114) --- src/server/game/Entities/Object/Object.cpp | 5 +++-- src/server/game/Spells/Spell.cpp | 2 +- 2 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 a3c5f0d7c..2e9ca224d 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1516,10 +1516,11 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float& z, float* grou if (max_z > INVALID_HEIGHT) { - if (canSwim && unit->GetMap()->IsInWater(x, y, max_z - Z_OFFSET_FIND_HEIGHT)) { + if (canSwim && unit->GetMap()->IsInWater(x, y, max_z - Z_OFFSET_FIND_HEIGHT)) + { // do not allow creatures to walk on // water level while swimming - max_z = max_z - GetMinHeightInWater(); + max_z = std::max(max_z - GetMinHeightInWater(), ground_z); } else { diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index eabb43050..92f9ceaf1 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1336,7 +1336,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici float ground = m_caster->GetMapHeight(x, y, z, true); float liquidLevel = VMAP_INVALID_HEIGHT_VALUE; LiquidData liquidData; - if (m_caster->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquidData)) + if (m_caster->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquidData, m_caster->GetCollisionHeight())) liquidLevel = liquidData.level; if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level