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;