summaryrefslogtreecommitdiff
path: root/src/server/game/Movement/MotionMaster.cpp
diff options
context:
space:
mode:
authorkillerwife <killerwife@gmail.com>2025-09-24 01:45:48 +0200
committerGitHub <noreply@github.com>2025-09-23 20:45:48 -0300
commit8e6d35c9b2642c296b0c3a5e257843859a45468f (patch)
treec3c167530228a7e42002703f2fba8edc5f537b25 /src/server/game/Movement/MotionMaster.cpp
parentbc30a6fba6273b0a4a9b24ec942468fc8a7bd376 (diff)
fix(Core/SAI): idle casters (#23005)
Diffstat (limited to 'src/server/game/Movement/MotionMaster.cpp')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp37
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)