From 8ff5b35be1256d03b85438b130dcec7cd4cae6e1 Mon Sep 17 00:00:00 2001 From: Ivan Beňovic Date: Wed, 20 Jul 2016 09:08:58 +0200 Subject: Core/Spells: Add SpellMissInfo argument to BeforeHit hooks and call them also when the spell doesn't hit. (#17613) --- src/server/game/Spells/Spell.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') 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::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end(); ++scritr) { (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_BEFORE_HIT); - std::list::iterator hookItrEnd = (*scritr)->BeforeHit.end(), hookItr = (*scritr)->BeforeHit.begin(); + std::list::iterator hookItrEnd = (*scritr)->BeforeHit.end(), hookItr = (*scritr)->BeforeHit.begin(); for (; hookItr != hookItrEnd; ++hookItr) - (*hookItr).Call(*scritr); + (*hookItr).Call(*scritr, missInfo); (*scritr)->_FinishScriptCall(); } -- cgit v1.2.3