aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp9
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();