aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp37
1 files changed, 12 insertions, 25 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
index 088e9a17efb..f42fbcb1691 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
@@ -114,23 +114,25 @@ void FollowerAI::JustAppeared()
void FollowerAI::EnterEvadeMode(EvadeReason /*why*/)
{
+ if (!me->IsAlive())
+ return;
+
me->RemoveAllAuras();
me->GetThreatManager().ClearAllThreat();
me->CombatStop(true);
me->SetLootRecipient(nullptr);
+ me->SetCannotReachTarget(false);
+ me->DoNotReacquireTarget();
if (HasFollowState(STATE_FOLLOW_INPROGRESS))
{
TC_LOG_DEBUG("scripts.ai.followerai", "FollowerAI::EnterEvadeMode: left combat, returning to CombatStartPosition. (%s)", me->GetGUID().ToString().c_str());
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
- me->GetMotionMaster()->MovePoint(POINT_COMBAT_START, me->GetPosition());
+ if (me->HasUnitState(UNIT_STATE_CHASE))
+ me->GetMotionMaster()->Remove(CHASE_MOTION_TYPE);
}
else
- {
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
- me->GetMotionMaster()->MoveTargetedHome();
- }
+ me->GetMotionMaster()->MoveTargetedHome();
Reset();
}
@@ -226,11 +228,8 @@ void FollowerAI::StartFollow(Player* player, uint32 factionForFollower, Quest co
_questForFollow = quest;
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE)
- {
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveIdle();
- }
+ me->GetMotionMaster()->Clear(MOTION_PRIORITY_NORMAL);
+ me->PauseMovement();
me->SetNpcFlags(UNIT_NPC_FLAG_NONE);
me->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE);
@@ -252,13 +251,7 @@ void FollowerAI::SetFollowPaused(bool paused)
AddFollowState(STATE_FOLLOW_PAUSED);
if (me->HasUnitState(UNIT_STATE_FOLLOW))
- {
- me->ClearUnitState(UNIT_STATE_FOLLOW);
-
- me->StopMoving();
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveIdle();
- }
+ me->GetMotionMaster()->Remove(FOLLOW_MOTION_TYPE);
}
else
{
@@ -272,13 +265,7 @@ void FollowerAI::SetFollowPaused(bool paused)
void FollowerAI::SetFollowComplete(bool withEndEvent)
{
if (me->HasUnitState(UNIT_STATE_FOLLOW))
- {
- me->ClearUnitState(UNIT_STATE_FOLLOW);
-
- me->StopMoving();
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveIdle();
- }
+ me->GetMotionMaster()->Remove(FOLLOW_MOTION_TYPE);
if (withEndEvent)
AddFollowState(STATE_FOLLOW_POSTEVENT);