diff options
author | killerwife <killerwife@gmail.com> | 2025-09-24 01:45:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-23 20:45:48 -0300 |
commit | 8e6d35c9b2642c296b0c3a5e257843859a45468f (patch) | |
tree | c3c167530228a7e42002703f2fba8edc5f537b25 /src/server/game/Movement/MotionMaster.cpp | |
parent | bc30a6fba6273b0a4a9b24ec942468fc8a7bd376 (diff) |
fix(Core/SAI): idle casters (#23005)
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r-- | src/server/game/Movement/MotionMaster.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 8189fd5058..2b2aba6ef9 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -310,12 +310,29 @@ void MotionMaster::MoveConfused() /** * @brief Force the unit to chase this target. Doesn't work with UNIT_FLAG_DISABLE_MOVE */ -void MotionMaster::MoveChase(Unit* target, std::optional<ChaseRange> dist, std::optional<ChaseAngle> angle) +void MotionMaster::MoveChase(Unit* target, std::optional<ChaseRange> dist, std::optional<ChaseAngle> angle) { // ignore movement request if target not exist if (!target || target == _owner || _owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE)) return; + if (GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) + { + if (_owner->IsPlayer()) + { + ChaseMovementGenerator<Player>* gen = (ChaseMovementGenerator<Player>*)top(); + gen->SetOffsetAndAngle(dist, angle); + gen->SetNewTarget(target); + } + else + { + ChaseMovementGenerator<Creature>* gen = (ChaseMovementGenerator<Creature>*)top(); + gen->SetOffsetAndAngle(dist, angle); + gen->SetNewTarget(target); + } + return; + } + //_owner->ClearUnitState(UNIT_STATE_FOLLOW); if (_owner->IsPlayer()) { @@ -331,6 +348,24 @@ void MotionMaster::MoveChase(Unit* target, std::optional<ChaseRange> dist, std: } } +void MotionMaster::DistanceYourself(float dist) +{ + if (GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) + { + if (_owner->IsPlayer()) + { + ChaseMovementGenerator<Player>* gen = (ChaseMovementGenerator<Player>*)top(); + gen->DistanceYourself((Player*)_owner, dist); + } + else + { + ChaseMovementGenerator<Creature>* gen = (ChaseMovementGenerator<Creature>*)top(); + gen->DistanceYourself((Creature*)_owner, dist); + } + return; + } +} + void MotionMaster::MoveBackwards(Unit* target, float dist) { if (!target) |