diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d162ac9463f..72a0dc12b86 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -327,7 +327,7 @@ Unit::Unit(bool isWorldObject) : i_AI(nullptr), i_disabledAI(nullptr), m_AutoRepeatFirstCast(false), m_procDeep(0), m_removedAurasCount(0), i_motionMaster(new MotionMaster(this)), m_combatManager(this), m_vehicle(nullptr), m_vehicleKit(nullptr), m_unitTypeMask(UNIT_MASK_NONE), - m_Diminishing(), m_threatManager(this), _lastDamagedTime(0), + m_Diminishing(), m_isEngaged(false), m_threatManager(this), _lastDamagedTime(0), m_spellHistory(new SpellHistory(this)) { m_objectType |= TYPEMASK_UNIT; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 1b4574334f1..828ded2795c 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2005,6 +2005,9 @@ class TC_GAME_API Unit : public WorldObject virtual void AtEnterCombat() { } virtual void AtExitCombat(); + virtual void AtEngage(Unit* /*target*/) { m_isEngaged = true; } + virtual void AtDisengage() { m_isEngaged = false; } + void InterruptMovementBasedAuras(); private: @@ -2033,6 +2036,9 @@ class TC_GAME_API Unit : public WorldObject TimeTrackerSmall m_splineSyncTimer; DiminishingReturn m_Diminishing[DIMINISHING_MAX]; + + // Threat+combat management + bool m_isEngaged; // Manage all Units that are threatened by us friend class CombatManager; CombatManager m_combatManager;