Core/AI: couple movement related corrections in FollowerAI

plus EnterEvadeMode streamline

(cherry picked from commit f309b49eb1)
This commit is contained in:
ccrs
2019-05-15 22:23:04 +02:00
committed by Shauren
parent 88f5536c43
commit bda32dfbd1

View File

@@ -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);