diff options
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 22 |
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); } |