aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index efe2b820de7..a42e9504184 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -109,6 +109,20 @@ namespace Movement
args.velocity = unit->GetSpeed(SelectSpeedType(moveFlagsForSpeed));
}
+ // limit the speed in the same way the client does
+ float speedLimit = [&]()
+ {
+ if (args.flags.unknown0x20000000)
+ return std::numeric_limits<float>::max();
+
+ if (args.flags.falling || args.flags.catmullrom || args.flags.flying || args.flags.parabolic)
+ return 50.0f;
+
+ return std::max(28.0f, unit->GetSpeed(MOVE_RUN) * 4.0f);
+ }();
+
+ args.velocity = std::min(args.velocity, speedLimit);
+
if (!args.Validate(unit))
return 0;