aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-04-28 18:31:26 +0200
committerShauren <shauren.trinity@gmail.com>2022-04-28 18:31:26 +0200
commitdda375b9868d6dbe2a4d58b386bb90ae41d25e0d (patch)
tree9a4a55dd37d787b1384ed55ba99be0cc92cfa2e2 /src/server/game/Spells/SpellEffects.cpp
parentc88b602a2c7eda598a4205dd0ec9f562c31f21b0 (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.cpp26
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);
}