diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-04-28 18:31:26 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-04-28 18:31:26 +0200 |
commit | dda375b9868d6dbe2a4d58b386bb90ae41d25e0d (patch) | |
tree | 9a4a55dd37d787b1384ed55ba99be0cc92cfa2e2 /src/server/game/Spells/SpellEffects.cpp | |
parent | c88b602a2c7eda598a4205dd0ec9f562c31f21b0 (diff) |
Core/Spells: Rename SpellAttr2 to use official attribute names
* Corrected implementation of SPELL_ATTR1_ALLOW_WHILE_STEALTHED
* Implemented SPELL_ATTR2_RETAIN_ITEM_CAST
* Implemented SPELL_ATTR2_ALLOW_WHILE_INVISIBLE
* Implemented SPELL_ATTR0_PROC_FAILURE_BURNS_CHARGE
* Implemented SPELL_ATTR2_PROC_COOLDOWN_ON_FAILURE
* Implemented SPELL_ATTR2_NO_TARGET_PER_SECOND_COSTS
* Implemented SPELL_ATTR2_DO_NOT_REPORT_SPELL_FAILURE
* Implemented SPELL_ATTR1_REQUIRE_ALL_TARGETS
* Implemented SPELL_ATTR2_CHAIN_FROM_CASTER
* Implemented SPELL_ATTR2_NO_ACTIVE_PETS
* Implemented SPELL_ATTR2_ENCHANT_OWN_ITEM_ONLY
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 4a9aaa12ef9..38e0661c9d9 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -641,18 +641,24 @@ void Spell::EffectTriggerSpell() if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_SPELL) delay = Milliseconds(effectInfo->MiscValue); - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SetOriginalCaster(m_originalCasterGUID); - args.SetTriggeringSpell(this); - // set basepoints for trigger with value effect - if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE) - for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) - args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); - - m_caster->m_Events.AddEventAtOffset([caster = m_caster, targets, triggered_spell_id, args]() mutable + 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 { // original caster guid only for GO cast - caster->CastSpell(std::move(targets), triggered_spell_id, args); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SetOriginalCaster(originalCaster); + args.OriginalCastId = originalCastId; + args.OriginalCastItemLevel = itemLevel; + if (!castItemGuid.IsEmpty() && sSpellMgr->AssertSpellInfo(spellEffectInfo->TriggerSpell, caster->GetMap()->GetDifficultyID())->HasAttribute(SPELL_ATTR2_RETAIN_ITEM_CAST)) + if (Player const* triggeringAuraCaster = Object::ToPlayer(args.TriggeringAura->GetCaster())) + args.CastItem = triggeringAuraCaster->GetItemByGuid(castItemGuid); + + // set basepoints for trigger with value effect + if (spellEffectInfo->Effect == SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE) + for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), value); + + caster->CastSpell(std::move(targets), spellEffectInfo->TriggerSpell, args); }, delay); } |