aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorIvan Beňovic <Ivan.Benovic2@gmail.com>2016-07-20 09:08:58 +0200
committerShauren <shauren.trinity@gmail.com>2016-07-20 09:08:58 +0200
commit8ff5b35be1256d03b85438b130dcec7cd4cae6e1 (patch)
tree38d7460449eb774a0ffddcfb046df9c003ad5bfd /src/server/game/Spells/Spell.cpp
parentdc9e2a53aa27a0cad18b876234e13bba79995323 (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.cpp17
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();
}