diff options
Diffstat (limited to 'src/server/game/AI')
| -rw-r--r-- | src/server/game/AI/CoreAI/CombatAI.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/AI/CoreAI/CombatAI.h | 4 | ||||
| -rw-r--r-- | src/server/game/AI/CoreAI/UnitAI.h | 7 | ||||
| -rw-r--r-- | src/server/game/AI/CreatureAI.h | 4 | ||||
| -rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedCreature.h | 12 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 2 |
8 files changed, 23 insertions, 16 deletions
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index b96a97d8734..6033992071f 100644 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -75,7 +75,7 @@ void CombatAI::JustDied(Unit* killer) me->CastSpell(killer, *i, true); } -void CombatAI::EnterCombat(Unit* who) +void CombatAI::JustEngagedWith(Unit* who) { for (SpellVct::iterator i = spells.begin(); i != spells.end(); ++i) { @@ -132,7 +132,7 @@ void CasterAI::InitializeAI() m_attackDist = MELEE_RANGE; } -void CasterAI::EnterCombat(Unit* who) +void CasterAI::JustEngagedWith(Unit* who) { if (spells.empty()) return; diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h index 9082ad515e8..27d80e38280 100644 --- a/src/server/game/AI/CoreAI/CombatAI.h +++ b/src/server/game/AI/CoreAI/CombatAI.h @@ -40,7 +40,7 @@ class TC_GAME_API CombatAI : public CreatureAI void InitializeAI() override; void Reset() override; - void EnterCombat(Unit* who) override; + void JustEngagedWith(Unit* who) override; void JustDied(Unit* killer) override; void UpdateAI(uint32 diff) override; void SpellInterrupted(uint32 spellId, uint32 unTimeMs) override; @@ -59,7 +59,7 @@ class TC_GAME_API CasterAI : public CombatAI void InitializeAI() override; void AttackStart(Unit* victim) override { AttackStartCaster(victim, m_attackDist); } void UpdateAI(uint32 diff) override; - void EnterCombat(Unit* /*who*/) override; + void JustEngagedWith(Unit* /*who*/) override; private: float m_attackDist; }; diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index a290c8ec402..c00f53a6c36 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -278,6 +278,13 @@ class TC_GAME_API UnitAI targetList.resize(num); } + // Called when the unit enters combat + // (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!) + virtual void JustEnteredCombat(Unit* /*who*/) { } + + // Called when the unit leaves combat + virtual void JustExitedCombat() { } + // Called at any Damage to any victim (before damage apply) virtual void DamageDealt(Unit* /*victim*/, uint32& /*damage*/, DamageEffectType /*damageType*/) { } diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 9f4db8bd193..4d946f569b8 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -85,8 +85,8 @@ class TC_GAME_API CreatureAI : public UnitAI // Called for reaction at stopping attack at no attackers or targets virtual void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER); - // Called for reaction when initially engaged - virtual void EnterCombat(Unit* /*victim*/) { } + // Called for reaction when initially engaged - this will always happen _after_ JustEnteredCombat + virtual void JustEngagedWith(Unit* /*who*/) { } // Called when the creature is killed virtual void JustDied(Unit* /*killer*/) { } diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 965fd290a1d..fc5e30d0ff1 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -480,7 +480,7 @@ void BossAI::_JustReachedHome() me->setActive(false); } -void BossAI::_EnterCombat() +void BossAI::_JustEngagedWith() { if (instance) { @@ -593,7 +593,7 @@ void WorldBossAI::_JustDied() summons.DespawnAll(); } -void WorldBossAI::_EnterCombat() +void WorldBossAI::_JustEngagedWith() { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); if (target) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 28d40b24856..5556f24872b 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -184,9 +184,9 @@ struct TC_GAME_API ScriptedAI : public CreatureAI void Reset() override { } //Called at creature aggro either by MoveInLOS or Attack Start - void EnterCombat(Unit* /*victim*/) override { } + void JustEngagedWith(Unit* /*victim*/) override { } - // Called before EnterCombat even before the creature is in combat. + // Called before JustEngagedWith even before the creature is in combat. void AttackStart(Unit* /*target*/) override; // ************* @@ -353,7 +353,7 @@ class TC_GAME_API BossAI : public ScriptedAI virtual void ScheduleTasks() { } void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) override { _EnterCombat(); } + void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); } void JustDied(Unit* /*killer*/) override { _JustDied(); } void JustReachedHome() override { _JustReachedHome(); } @@ -361,7 +361,7 @@ class TC_GAME_API BossAI : public ScriptedAI protected: void _Reset(); - void _EnterCombat(); + void _JustEngagedWith(); void _JustDied(); void _JustReachedHome(); void _DespawnAtEvade(Seconds delayToRespawn, Creature* who = nullptr); @@ -395,12 +395,12 @@ class TC_GAME_API WorldBossAI : public ScriptedAI virtual void ExecuteEvent(uint32 /*eventId*/) { } void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) override { _EnterCombat(); } + void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); } void JustDied(Unit* /*killer*/) override { _JustDied(); } protected: void _Reset(); - void _EnterCombat(); + void _JustEngagedWith(); void _JustDied(); EventMap events; diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 6ee8f6faefb..1651c794412 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -557,7 +557,7 @@ void SmartAI::JustReachedHome() me->GetMotionMaster()->MoveIdle(); // wait the order of leader } -void SmartAI::EnterCombat(Unit* enemy) +void SmartAI::JustEngagedWith(Unit* enemy) { if (IsAIControlled()) me->InterruptNonMeleeSpells(false); // must be before ProcessEvents diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 596625d7b4d..10aa34cc4a1 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -84,7 +84,7 @@ class TC_GAME_API SmartAI : public CreatureAI void JustReachedHome() override; // Called for reaction at enter to combat if not in combat yet (enemy can be nullptr) - void EnterCombat(Unit* enemy) override; + void JustEngagedWith(Unit* enemy) override; // Called for reaction at stopping attack at no attackers or targets void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER) override; |
