diff options
| author | DanVS <33371360+DanVS@users.noreply.github.com> | 2018-09-25 15:05:36 +0000 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-11-11 21:36:08 +0100 |
| commit | 8ff0572ee30db22c81d9131348f5350781f64a4f (patch) | |
| tree | a33a3014139ac9e0490f09aef1da4fadf8b932e9 /src | |
| parent | 67b98348be628453387edc59e110344f2391dfa2 (diff) | |
Core/Movement: Speed Limit for Spline (#22494)
* Limited speed
(cherry picked from commit 0dd3f0497dcb8c8dd8bed15916a8ca036b67673b)
Diffstat (limited to 'src')
| -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; |
