diff options
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.cpp | 14 |
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; |
