From 534920ada27aea393c8adea976fe5cf26284c78f Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Thu, 24 Feb 2022 17:25:04 +0100 Subject: [PATCH] fix(Core/Creatures): correct applying swimming moveflag to creatures in water (#10756) Fixed #10709 --- src/server/game/Entities/Creature/Creature.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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)