summaryrefslogtreecommitdiff
path: root/src/server/game/Movement/MotionMaster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 8189fd5058..2b2aba6ef9 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -310,12 +310,29 @@ void MotionMaster::MoveConfused()
/**
* @brief Force the unit to chase this target. Doesn't work with UNIT_FLAG_DISABLE_MOVE
*/
-void MotionMaster::MoveChase(Unit* target, std::optional<ChaseRange> dist, std::optional<ChaseAngle> angle)
+void MotionMaster::MoveChase(Unit* target, std::optional<ChaseRange> dist, std::optional<ChaseAngle> angle)
{
// ignore movement request if target not exist
if (!target || target == _owner || _owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
return;
+ if (GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
+ {
+ if (_owner->IsPlayer())
+ {
+ ChaseMovementGenerator<Player>* gen = (ChaseMovementGenerator<Player>*)top();
+ gen->SetOffsetAndAngle(dist, angle);
+ gen->SetNewTarget(target);
+ }
+ else
+ {
+ ChaseMovementGenerator<Creature>* gen = (ChaseMovementGenerator<Creature>*)top();
+ gen->SetOffsetAndAngle(dist, angle);
+ gen->SetNewTarget(target);
+ }
+ return;
+ }
+
//_owner->ClearUnitState(UNIT_STATE_FOLLOW);
if (_owner->IsPlayer())
{
@@ -331,6 +348,24 @@ void MotionMaster::MoveChase(Unit* target, std::optional<ChaseRange> dist, std:
}
}
+void MotionMaster::DistanceYourself(float dist)
+{
+ if (GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
+ {
+ if (_owner->IsPlayer())
+ {
+ ChaseMovementGenerator<Player>* gen = (ChaseMovementGenerator<Player>*)top();
+ gen->DistanceYourself((Player*)_owner, dist);
+ }
+ else
+ {
+ ChaseMovementGenerator<Creature>* gen = (ChaseMovementGenerator<Creature>*)top();
+ gen->DistanceYourself((Creature*)_owner, dist);
+ }
+ return;
+ }
+}
+
void MotionMaster::MoveBackwards(Unit* target, float dist)
{
if (!target)