diff options
author | Ovah <dreadkiller@gmx.de> | 2020-04-25 15:54:08 -0300 |
---|---|---|
committer | Keader <keader.android@gmail.com> | 2020-04-25 16:07:18 -0300 |
commit | f1e4ee21f8da41c71f4cbafaa85e89c6275c1db2 (patch) | |
tree | ceafcc118375267a14fb381654147cfd4e1a9b27 /src | |
parent | 7c91c423d05aabc18d5c36af9ecc2a9c5f49970d (diff) |
Core/AI: Implemented OnSpellCastInterrupt and OnSuccessfulSpellCast hooks
Ported from: 020825902c066cee532f1b9a24205c196da2662d and 1aa42e97a81e285fa34316ad9cfe9657865e3c35
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/CreatureAI.h | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 5 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 0f9a7e5c817..fae81fdd4b8 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -145,6 +145,12 @@ class TC_GAME_API CreatureAI : public UnitAI virtual void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spellInfo*/) { } virtual void SpellHitTargetGameObject(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { } + // 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*/) { } + // Should return true if the NPC is currently being escorted virtual bool IsEscorted() const { return false; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0deaf977e8f..8901b638c03 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3011,6 +3011,9 @@ void Unit::InterruptSpell(CurrentSpellTypes spellType, bool withDelayed, bool wi m_currentSpells[spellType] = nullptr; spell->SetReferencedFromCurrent(false); } + + if (GetTypeId() == TYPEID_UNIT && IsAIEnabled()) + ToCreature()->AI()->OnSpellCastInterrupt(spell->GetSpellInfo()); } } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 52c634cc05a..5a75f6a0388 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3454,6 +3454,11 @@ void Spell::_cast(bool skipCheck) hitMask |= PROC_HIT_NORMAL; Unit::ProcSkillsAndAuras(m_originalCaster, 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()); } template <class Container> |