diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 0572b1465a3..65741437904 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -153,6 +153,9 @@ class TC_GAME_API CreatureAI : public UnitAI // Called when a spell cast gets interrupted virtual void OnSpellCastInterrupt(SpellInfo const* /*spell*/) { } + // Called when a spell cast has been successfully finished + virtual void OnSuccessfulSpellCast(SpellInfo const* /*spell*/) { } + // Called at reaching home after evade virtual void JustReachedHome() { } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6633cfaac0c..98e67143ce3 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3468,6 +3468,11 @@ void Spell::_cast(bool skipCheck) hitMask |= PROC_HIT_NORMAL; m_originalCaster->ProcSkillsAndAuras(nullptr, procAttacker, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_CAST, hitMask, this, nullptr, nullptr); + + // Call CreatureAI hook OnSuccessfulSpellCast + if (Creature* caster = m_originalCaster->ToCreature()) + if (caster->IsAIEnabled) + caster->AI()->OnSuccessfulSpellCast(GetSpellInfo()); } void Spell::handle_immediate()