aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/AI')
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.cpp4
-rw-r--r--src/server/game/AI/CoreAI/CombatAI.h4
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h7
-rw-r--r--src/server/game/AI/CreatureAI.h4
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp4
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h12
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h2
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;