diff options
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 37 |
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) |