diff options
-rw-r--r-- | sql/updates/world/3.3.5/2016_09_09_01_world.sql | 4 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp | 5 |
3 files changed, 15 insertions, 5 deletions
diff --git a/sql/updates/world/3.3.5/2016_09_09_01_world.sql b/sql/updates/world/3.3.5/2016_09_09_01_world.sql new file mode 100644 index 00000000000..addcd9c17dd --- /dev/null +++ b/sql/updates/world/3.3.5/2016_09_09_01_world.sql @@ -0,0 +1,4 @@ +-- Fix SAI for quest "No Place to Run" (issue #16291) +UPDATE `creature_template` SET `unit_flags`=`unit_flags`&~0x4 WHERE `entry`=27430; +UPDATE `smart_scripts` SET `event_flags`=`event_flags`|0x200 WHERE `entryorguid`=2743000 AND `source_type`=9; +UPDATE `smart_scripts` SET `event_type`=54,`comment`="Destructive Ward - On Just Summoned - Run Script" WHERE `entryorguid`=27430 AND `id`=0; diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 40f71d94632..3ce27ae0105 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) + else if (Unit* target = mFollowGuid ? 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(target, 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 513cb823477..e3c258c3456 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; } |