diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index fdbe3a40e..9e45d7983 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3249,7 +3249,22 @@ void Creature::UpdateMovementFlags() if (!isInAir) RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING); - SetSwim(CanSwim() && IsInWater()); + bool Swim = false; + LiquidData const& liquidData = GetLiquidData(); + switch (liquidData.Status) + { + case LIQUID_MAP_WATER_WALK: + case LIQUID_MAP_IN_WATER: + Swim = GetPositionZ() - liquidData.DepthLevel > GetCollisionHeight() * 0.75f; // Shallow water at ~75% of collision height + break; + case LIQUID_MAP_UNDER_WATER: + Swim = true; + break; + default: + break; + } + + SetSwim(CanSwim() && Swim); } void Creature::SetObjectScale(float scale)