diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp | 11 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp index e455a399f17..490b98da128 100644 --- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp @@ -17,6 +17,7 @@ #include "ChaseMovementGenerator.h" #include "Creature.h" +#include "CreatureAI.h" #include "G3DPosition.hpp" #include "MotionMaster.h" #include "MoveSpline.h" @@ -33,6 +34,13 @@ static bool IsMutualChase(Unit* owner, Unit* target) return (static_cast<ChaseMovementGenerator const*>(target->GetMotionMaster()->top())->GetTarget() == owner); } +static void DoMovementInform(Unit* owner, Unit* target) +{ + if (Creature* cOwner = owner->ToCreature()) + if (CreatureAI* ai = cOwner->AI()) + ai->MovementInform(CHASE_MOTION_TYPE, target->GetGUID().GetCounter()); +} + static bool PositionOkay(Unit* owner, Unit* target, Optional<float> minDistance, Optional<float> maxDistance, Optional<ChaseAngle> angle) { float const distSq = owner->GetExactDistSq(target); @@ -96,6 +104,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) _path = nullptr; owner->StopMoving(); owner->SetInFront(target); + DoMovementInform(owner, target); return true; } } @@ -107,6 +116,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) _path = nullptr; owner->ClearUnitState(UNIT_STATE_CHASE_MOVE); owner->SetInFront(target); + DoMovementInform(owner, target); } // if the target moved, we have to consider whether to adjust diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp index 63d848331cb..9c83684dbca 100644 --- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp @@ -16,6 +16,7 @@ */ #include "FollowMovementGenerator.h" +#include "CreatureAI.h" #include "MoveSpline.h" #include "MoveSplineInit.h" #include "Optional.h" @@ -27,6 +28,14 @@ FollowMovementGenerator::FollowMovementGenerator(Unit* target, float range, ChaseAngle angle) : AbstractFollower(ASSERT_NOTNULL(target)), _range(range), _angle(angle) {} FollowMovementGenerator::~FollowMovementGenerator() = default; +static void DoMovementInform(Unit* owner, Unit* target) +{ + if (owner->GetTypeId() != TYPEID_UNIT) + return; + if (UnitAI* ai = owner->GetAI()) + static_cast<CreatureAI*>(ai)->MovementInform(FOLLOW_MOTION_TYPE, target->GetGUID().GetCounter()); +} + static bool PositionOkay(Unit* owner, Unit* target, float range, Optional<ChaseAngle> angle = {}) { if (owner->GetExactDistSq(target) > square(owner->GetCombatReach() + target->GetCombatReach() + range)) @@ -70,6 +79,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff) { _path = nullptr; owner->StopMoving(); + DoMovementInform(owner, target); return true; } } @@ -79,6 +89,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff) { _path = nullptr; owner->ClearUnitState(UNIT_STATE_FOLLOW_MOVE); + DoMovementInform(owner, target); } if (_lastTargetPosition.GetExactDistSq(target->GetPosition()) > 0.0f) |