diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp index 056da0f5a5a..b3e9e56c81e 100644 --- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp @@ -26,6 +26,11 @@ #include "Unit.h" #include "Util.h" +static bool HasLostTarget(Unit* owner, Unit* target) +{ + return owner->GetVictim() != target; +} + static bool IsMutualChase(Unit* owner, Unit* target) { if (target->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE) @@ -97,8 +102,8 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) if (!target || !target->IsInWorld()) return false; - // the owner might be unable to move (rooted or casting), pause movement - if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting()) + // the owner might be unable to move (rooted or casting), or we have lost the target, pause movement + if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting() || HasLostTarget(owner, target)) { owner->StopMoving(); _lastTargetPosition.reset(); |