aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp57
-rw-r--r--src/server/game/Movement/MotionMaster.h1
2 files changed, 41 insertions, 17 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 295c70039e6..19e900a8806 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -117,23 +117,6 @@ void MotionMaster::Clear(bool reset /*= true*/)
DirectClean(reset);
}
-void MotionMaster::ClearExpireList()
-{
- for (auto itr : _expireList)
- DirectDelete(itr);
-
- _expireList.clear();
-
- if (empty())
- Initialize();
- else if (NeedInitTop())
- InitTop();
- else if (_cleanFlag & MMCF_RESET)
- top()->Reset(_owner);
-
- _cleanFlag &= ~MMCF_RESET;
-}
-
void MotionMaster::MovementExpired(bool reset /*= true*/)
{
if (_cleanFlag & MMCF_UPDATE)
@@ -148,6 +131,29 @@ void MotionMaster::MovementExpired(bool reset /*= true*/)
DirectExpire(reset);
}
+void MotionMaster::ExpireMovement(MovementSlot slot)
+{
+ if (empty() || slot >= MAX_MOTION_SLOT)
+ return;
+
+ if (MovementGenerator* motion = GetMotionSlot(slot))
+ {
+ DirectDelete(motion);
+ _slot[slot] = nullptr;
+ }
+
+ if (!top())
+ {
+ while (!empty() && !top())
+ --_top;
+
+ if (empty())
+ Initialize();
+ else if (NeedInitTop())
+ InitTop();
+ }
+}
+
MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType() const
{
if (empty())
@@ -847,3 +853,20 @@ void MotionMaster::DelayedDelete(MovementGenerator* curr)
_expireList.push_back(curr);
}
+
+void MotionMaster::ClearExpireList()
+{
+ for (auto itr : _expireList)
+ DirectDelete(itr);
+
+ _expireList.clear();
+
+ if (empty())
+ Initialize();
+ else if (NeedInitTop())
+ InitTop();
+ else if (_cleanFlag & MMCF_RESET)
+ top()->Reset(_owner);
+
+ _cleanFlag &= ~MMCF_RESET;
+}
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 7cb72c353f7..703ca60d50b 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -121,6 +121,7 @@ class TC_GAME_API MotionMaster
void Clear(bool reset = true);
void MovementExpired(bool reset = true);
+ void ExpireMovement(MovementSlot slot);
MovementGeneratorType GetCurrentMovementGeneratorType() const;
MovementGeneratorType GetMotionSlotType(int slot) const;