aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 04da8686a86..906a40b2261 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2422,6 +2422,8 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
break;
}
+ CallScriptAfterUnitTargetSelectHandlers(unitList, SpellEffIndex(i));
+
for (std::list<Unit*>::iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
AddUnitTarget(*itr, i);
}
@@ -2834,17 +2836,6 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
++itr;
}
break;
- case 69782: case 69796: // Ooze Flood
- case 69798: case 69801: // Ooze Flood
- // get 2 targets except 2 nearest
- unitList.sort(Trinity::ObjectDistanceOrderPred(m_caster));
- unitList.resize(4);
- while (unitList.size() > 2)
- unitList.pop_front();
- // crashfix
- if (unitList.empty())
- return;
- break;
case 68921: case 69049: // Soulstorm
for (std::list<Unit*>::iterator itr = unitList.begin(); itr != unitList.end();)
{
@@ -2917,6 +2908,9 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
}
}
}
+
+ CallScriptAfterUnitTargetSelectHandlers(unitList, SpellEffIndex(i));
+
for (std::list<Unit*>::iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
AddUnitTarget(*itr, i);
}
@@ -7404,3 +7398,17 @@ void Spell::CallScriptAfterHitHandlers()
(*scritr)->_FinishScriptCall();
}
}
+
+void Spell::CallScriptAfterUnitTargetSelectHandlers(std::list<Unit*>& unitTargets, SpellEffIndex effIndex)
+{
+ for(std::list<SpellScript *>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end() ; ++scritr)
+ {
+ (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_UNIT_TARGET_SELECT);
+ std::list<SpellScript::UnitTargetHandler>::iterator hookItrEnd = (*scritr)->OnUnitTargetSelect.end(), hookItr = (*scritr)->OnUnitTargetSelect.begin();
+ for(; hookItr != hookItrEnd ; ++hookItr)
+ if ((*hookItr).IsEffectAffected(m_spellInfo, effIndex))
+ (*hookItr).Call(*scritr, unitTargets);
+
+ (*scritr)->_FinishScriptCall();
+ }
+}