aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index c60832f784c..578a8d635b8 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -643,11 +643,15 @@ void Spell::EffectTriggerSpell()
}
SpellCastTargets targets;
+ Optional<int32> targetCount;
+ Optional<int32> targetIndex;
if (effectHandleMode == SPELL_EFFECT_HANDLE_LAUNCH_TARGET)
{
if (!spellInfo->NeedsToBeTriggeredByCaster(m_spellInfo))
return;
targets.SetUnitTarget(unitTarget);
+ targetCount = GetUnitTargetCountForEffect(effectInfo->EffectIndex);
+ targetIndex = GetUnitTargetIndexForEffect(unitTarget->GetGUID(), effectInfo->EffectIndex);
}
else //if (effectHandleMode == SPELL_EFFECT_HANDLE_LAUNCH)
{
@@ -673,7 +677,7 @@ void Spell::EffectTriggerSpell()
delay = Milliseconds(effectInfo->MiscValue);
m_caster->m_Events.AddEventAtOffset([caster = m_caster, targets, originalCaster = m_originalCasterGUID, castItemGuid = m_castItemGUID, originalCastId = m_castId,
- spellEffectInfo = effectInfo, value = damage, itemLevel = m_castItemLevel]() mutable
+ spellEffectInfo = effectInfo, value = damage, itemLevel = m_castItemLevel, targetCount, targetIndex]() mutable
{
targets.Update(caster); // refresh pointers stored in targets
@@ -691,6 +695,12 @@ void Spell::EffectTriggerSpell()
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), value);
+ if (targetCount)
+ args.AddSpellMod(SPELLVALUE_PARENT_SPELL_TARGET_COUNT, *targetCount);
+
+ if (targetIndex)
+ args.AddSpellMod(SPELLVALUE_PARENT_SPELL_TARGET_INDEX, *targetIndex);
+
caster->CastSpell(std::move(targets), spellEffectInfo->TriggerSpell, args);
}, delay);
}
@@ -717,11 +727,15 @@ void Spell::EffectTriggerMissileSpell()
}
SpellCastTargets targets;
+ Optional<int32> targetCount;
+ Optional<int32> targetIndex;
if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT_TARGET)
{
if (!spellInfo->NeedsToBeTriggeredByCaster(m_spellInfo))
return;
targets.SetUnitTarget(unitTarget);
+ targetCount = GetUnitTargetCountForEffect(effectInfo->EffectIndex);
+ targetIndex = GetUnitTargetIndexForEffect(unitTarget->GetGUID(), effectInfo->EffectIndex);
}
else //if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT)
{
@@ -745,6 +759,12 @@ void Spell::EffectTriggerMissileSpell()
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
+ if (targetCount)
+ args.AddSpellMod(SPELLVALUE_PARENT_SPELL_TARGET_COUNT, *targetCount);
+
+ if (targetIndex)
+ args.AddSpellMod(SPELLVALUE_PARENT_SPELL_TARGET_INDEX, *targetIndex);
+
// original caster guid only for GO cast
m_caster->CastSpell(std::move(targets), spellInfo->Id, args);
}