diff options
| author | Ivan Beňovic <Ivan.Benovic2@gmail.com> | 2016-07-20 09:08:58 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-07-20 09:08:58 +0200 |
| commit | 8ff5b35be1256d03b85438b130dcec7cd4cae6e1 (patch) | |
| tree | 38d7460449eb774a0ffddcfb046df9c003ad5bfd /src/server/game/Spells/Spell.cpp | |
| parent | dc9e2a53aa27a0cad18b876234e13bba79995323 (diff) | |
Core/Spells: Add SpellMissInfo argument to BeforeHit hooks and call them also when the spell doesn't hit. (#17613)
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6f5e3d4a1af..5e07d43b4b4 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2338,9 +2338,13 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) } } + PrepareScriptHitHandlers(); + CallScriptBeforeHitHandlers(missInfo); + if (spellHitTarget) { SpellMissInfo missInfo2 = DoSpellHitOnUnit(spellHitTarget, mask, target->scaleAura); + if (missInfo2 != SPELL_MISS_NONE) { if (missInfo2 != SPELL_MISS_MISS) @@ -2519,9 +2523,6 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA if (!effectMask) return returnVal; - PrepareScriptHitHandlers(); - CallScriptBeforeHitHandlers(); - if (Player* player = unit->ToPlayer()) { player->StartCriteriaTimer(CRITERIA_TIMED_TYPE_SPELL_TARGET, m_spellInfo->Id); @@ -2782,7 +2783,7 @@ void Spell::DoAllEffectOnTarget(GOTargetInfo* target) return; PrepareScriptHitHandlers(); - CallScriptBeforeHitHandlers(); + CallScriptBeforeHitHandlers(SPELL_MISS_NONE); for (SpellEffectInfo const* effect : GetEffects()) if (effect && (effectMask & (1 << effect->EffectIndex))) @@ -2799,7 +2800,7 @@ void Spell::DoAllEffectOnTarget(ItemTargetInfo* target) return; PrepareScriptHitHandlers(); - CallScriptBeforeHitHandlers(); + CallScriptBeforeHitHandlers(SPELL_MISS_NONE); for (SpellEffectInfo const* effect : GetEffects()) if (effect && (effectMask & (1 << effect->EffectIndex))) @@ -7190,14 +7191,14 @@ void Spell::CallScriptSuccessfulDispel(SpellEffIndex effIndex) } } -void Spell::CallScriptBeforeHitHandlers() +void Spell::CallScriptBeforeHitHandlers(SpellMissInfo missInfo) { for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end(); ++scritr) { (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_BEFORE_HIT); - std::list<SpellScript::HitHandler>::iterator hookItrEnd = (*scritr)->BeforeHit.end(), hookItr = (*scritr)->BeforeHit.begin(); + std::list<SpellScript::BeforeHitHandler>::iterator hookItrEnd = (*scritr)->BeforeHit.end(), hookItr = (*scritr)->BeforeHit.begin(); for (; hookItr != hookItrEnd; ++hookItr) - (*hookItr).Call(*scritr); + (*hookItr).Call(*scritr, missInfo); (*scritr)->_FinishScriptCall(); } |
