From fc71112af5b343f8311639910d4b1a6c622654aa Mon Sep 17 00:00:00 2001 From: insunaa Date: Fri, 9 Aug 2024 16:19:22 +0200 Subject: [PATCH 1/2] StaticFlags: Implement DONT_REPOSITION_IF_MELEE_TARGET_IS_TOO_CLOSE --- src/game/MotionGenerators/TargetedMovementGenerator.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/game/MotionGenerators/TargetedMovementGenerator.cpp b/src/game/MotionGenerators/TargetedMovementGenerator.cpp index 18241ee24e8..d5e1f491aa2 100644 --- a/src/game/MotionGenerators/TargetedMovementGenerator.cpp +++ b/src/game/MotionGenerators/TargetedMovementGenerator.cpp @@ -394,6 +394,9 @@ void ChaseMovementGenerator::Backpedal(Unit& owner) if (!owner.AI() || owner.AI()->GetCombatScriptStatus()) return; + if (owner.GetTypeId() == TYPEID_UNIT && static_cast(owner).GetSettings().HasFlag(CreatureStaticFlags4::DONT_REPOSITION_IF_MELEE_TARGET_IS_TOO_CLOSE)) + return; + m_closenessExpired = false; m_closenessAndFanningTimer = CHASE_CLOSENESS_TIMER; // Just in case path doesnt generate float targetDist = std::min(this->i_target->GetCombinedCombatReach(&owner, false), 3.75f); From fb631702e7629d23d3cdaecde0d64d45381a0fb9 Mon Sep 17 00:00:00 2001 From: insunaa Date: Tue, 8 Oct 2024 09:57:55 +0200 Subject: [PATCH 2/2] StaticFlags: cache backpedal enablement --- src/game/MotionGenerators/TargetedMovementGenerator.cpp | 3 ++- src/game/MotionGenerators/TargetedMovementGenerator.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/game/MotionGenerators/TargetedMovementGenerator.cpp b/src/game/MotionGenerators/TargetedMovementGenerator.cpp index d5e1f491aa2..875b76a2380 100644 --- a/src/game/MotionGenerators/TargetedMovementGenerator.cpp +++ b/src/game/MotionGenerators/TargetedMovementGenerator.cpp @@ -141,6 +141,7 @@ void ChaseMovementGenerator::Initialize(Unit& owner) _setLocation(owner); i_target->GetPosition(i_lastTargetPos.x, i_lastTargetPos.y, i_lastTargetPos.z); m_fanningEnabled = !(owner.GetTypeId() == TYPEID_UNIT && static_cast(owner).IsWorldBoss()); + m_backpedalEnabled = !(owner.GetTypeId() == TYPEID_UNIT && static_cast(owner).GetSettings().HasFlag(CreatureStaticFlags4::DONT_REPOSITION_IF_MELEE_TARGET_IS_TOO_CLOSE)); } void ChaseMovementGenerator::Finalize(Unit& owner) @@ -394,7 +395,7 @@ void ChaseMovementGenerator::Backpedal(Unit& owner) if (!owner.AI() || owner.AI()->GetCombatScriptStatus()) return; - if (owner.GetTypeId() == TYPEID_UNIT && static_cast(owner).GetSettings().HasFlag(CreatureStaticFlags4::DONT_REPOSITION_IF_MELEE_TARGET_IS_TOO_CLOSE)) + if (!m_backpedalEnabled) return; m_closenessExpired = false; diff --git a/src/game/MotionGenerators/TargetedMovementGenerator.h b/src/game/MotionGenerators/TargetedMovementGenerator.h index 2b5cf6cf6df..05c8d92af0f 100644 --- a/src/game/MotionGenerators/TargetedMovementGenerator.h +++ b/src/game/MotionGenerators/TargetedMovementGenerator.h @@ -112,7 +112,7 @@ class ChaseMovementGenerator : public TargetedMovementGeneratorMedium(target, offset, angle), m_moveFurther(moveFurther), m_walk(walk), m_combat(combat), m_currentMode(CHASE_MODE_NORMAL), - m_fanningEnabled(true), m_closenessAndFanningTimer(0), m_closenessExpired(false), m_reachable(true) {} + m_fanningEnabled(true), m_backpedalEnabled(true), m_closenessAndFanningTimer(0), m_closenessExpired(false), m_reachable(true) {} ~ChaseMovementGenerator() {} MovementGeneratorType GetMovementGeneratorType() const override { return CHASE_MOTION_TYPE; } @@ -166,6 +166,7 @@ class ChaseMovementGenerator : public TargetedMovementGeneratorMedium