diff options
author | treeston <treeston.mmoc@gmail.com> | 2016-09-09 15:01:42 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-26 15:30:15 +0100 |
commit | 9c36dd7e947d483767b545b79e586c95e29e4305 (patch) | |
tree | 0dc106dfecf9cce3ae9ed922b62b3b80170b4977 /src | |
parent | 31eb40439e0ce92cb728268946138ebf6a5e66b3 (diff) |
AI/SmartAI: Fix an issue where SmartAI creatures would not properly follow their owner on evade. Also fix a bug where creatures with INHABIT_ROOT would get stuck in evade under certain conditions.
This allows us to fix quest 12261 (No Place to Run). Closes #16291.
(cherry picked from commit e69a483aa942c1c6c4bd9b5fa47139f89643b8d5)
Derp. Build fix.
(cherry picked from commit 9180bcd404ff0a89144bbe834a2efe189bd0eb86)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp | 5 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 270a32e2c73..5decf1e87c7 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -449,14 +449,17 @@ void SmartAI::EnterEvadeMode(EvadeReason /*why*/) AddEscortState(SMART_ESCORT_RETURNING); ReturnToLastOOCPos(); } - else if (!mFollowGuid.IsEmpty()) + else if (Unit* target = !mFollowGuid.IsEmpty() ? ObjectAccessor::GetUnit(*me, mFollowGuid) : nullptr) { - if (Unit* target = ObjectAccessor::GetUnit(*me, mFollowGuid)) - me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle); - + me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle); // evade is not cleared in MoveFollow, so we can't keep it me->ClearUnitState(UNIT_STATE_EVADE); } + else if (Unit* owner = me->GetCharmerOrOwner()) + { + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + me->ClearUnitState(UNIT_STATE_EVADE); + } else me->GetMotionMaster()->MoveTargetedHome(); diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 002e247dc14..4be89f9d5ce 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -44,7 +44,10 @@ void HomeMovementGenerator<Creature>::DoReset(Creature*) { } void HomeMovementGenerator<Creature>::_setTargetLocation(Creature* owner) { if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) + { // if we are ROOT/STUNNED/DISTRACTED even after aura clear, immediately finalize - otherwise we would get stuck in evade + arrived = true; return; + } Movement::MoveSplineInit init(owner); float x, y, z, o; @@ -65,6 +68,6 @@ void HomeMovementGenerator<Creature>::_setTargetLocation(Creature* owner) bool HomeMovementGenerator<Creature>::DoUpdate(Creature* owner, const uint32 /*time_diff*/) { - arrived = owner->movespline->Finalized(); + arrived = arrived || owner->movespline->Finalized(); return !arrived; } |