From 9f39c218db6be85a5bb4e9898611716df05f9ba0 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 4 Jan 2020 12:17:22 +0100 Subject: [PATCH] Core/Movement: backported a movemenet slot check to prevent PauseMovement from stopping movements that it's not suposed to stop --- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Movement/MotionMaster.cpp | 11 +++++++++++ src/server/game/Movement/MotionMaster.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 56aba98e4c..1c646f158b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11006,7 +11006,7 @@ void Unit::PauseMovement(uint32 timer/* = 0*/, uint8 slot/* = 0*/, bool forced/* if (MovementGenerator* movementGenerator = GetMotionMaster()->GetMotionSlot(MovementSlot(slot))) movementGenerator->Pause(timer); - if (forced) + if (forced && GetMotionMaster()->GetCurrentSlot() == MovementSlot(slot)) StopMoving(); } diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 64ae2a89b2..7df01aeae2 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -151,6 +151,17 @@ void MotionMaster::MovementExpired(bool reset /*= true*/) DirectExpire(reset); } +MovementSlot MotionMaster::GetCurrentSlot() const +{ + if (empty()) + return MOTION_SLOT_ACTIVE; + + if (topOrNull()) + return MOTION_SLOT_IDLE; + + return MAX_MOTION_SLOT; +} + MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType() const { if (empty()) diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 286e94351e..2259af58f7 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -148,6 +148,7 @@ class TC_GAME_API MotionMaster void Clear(MovementSlot slot); void MovementExpired(bool reset = true); + MovementSlot GetCurrentSlot() const; MovementGeneratorType GetCurrentMovementGeneratorType() const; MovementGeneratorType GetMotionSlotType(MovementSlot slot) const; MovementGenerator* GetMotionSlot(MovementSlot slot) const;