diff options
author | ccrs <ccrs@users.noreply.github.com> | 2019-05-15 22:23:04 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-05 16:51:19 +0100 |
commit | bda32dfbd13a880287e408a221e5d0a7f97de5d5 (patch) | |
tree | 81d92ab50f461aa66306e50a955f1d94c9a556f6 /src | |
parent | 88f5536c43713c1a253d73fce3049a6696bb44b8 (diff) |
Core/AI: couple movement related corrections in FollowerAI
plus EnterEvadeMode streamline
(cherry picked from commit f309b49eb12b09e7afc5d5af157f81688c346b8f)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp | 37 |
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); |