aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanVS <33371360+DanVS@users.noreply.github.com>2018-09-25 15:05:36 +0000
committerShauren <shauren.trinity@gmail.com>2021-11-11 21:36:08 +0100
commit8ff0572ee30db22c81d9131348f5350781f64a4f (patch)
treea33a3014139ac9e0490f09aef1da4fadf8b932e9 /src
parent67b98348be628453387edc59e110344f2391dfa2 (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.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;