From 8e2d1e328ebec60c76d65651b268ec3ad2ce26fc Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 8 Feb 2022 21:36:31 +0100 Subject: Core/Spells: Pass cast item level to triggered spells * Fixes value on trinkets like Ignition Mage's Fuse --- src/server/game/Spells/Spell.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index eaf53def8f4..8afc6d1af6d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2777,8 +2777,7 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell) // Check for SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER if (MissCondition == SPELL_MISS_NONE && spell->m_spellInfo->HasAttribute(SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER) && unit->GetTypeId() != TYPEID_PLAYER) - caster->CastSpell(unit, SPELL_INTERRUPT_NONPLAYER, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(spell->m_castId)); + caster->CastSpell(unit, SPELL_INTERRUPT_NONPLAYER, spell); } if (_spellHitTarget) @@ -3085,7 +3084,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint32 effMask) if (CanExecuteTriggersOnHit(effMask, i->triggeredByAura) && roll_chance_i(i->chance)) { m_caster->CastSpell(unit, i->triggeredSpell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId) + .SetTriggeringSpell(this) .SetCastDifficulty(i->triggeredSpell->Difficulty)); TC_LOG_DEBUG("spells", "Spell %d triggered spell %d by SPELL_AURA_ADD_TARGET_TRIGGER aura", m_spellInfo->Id, i->triggeredSpell->Id); @@ -3119,7 +3118,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint32 effMask) else unit->CastSpell(unit, *i, CastSpellExtraArgs(TRIGGERED_FULL_MASK) .SetOriginalCaster(m_caster->GetGUID()) - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); } } } @@ -3669,7 +3668,7 @@ void Spell::_cast(bool skipCheck) } else m_caster->CastSpell(m_targets.GetUnitTarget() ? m_targets.GetUnitTarget() : m_caster, id, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); } } @@ -5996,7 +5995,7 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32 if (Pet* pet = unitCaster->ToPlayer()->GetPet()) pet->CastSpell(pet, 32752, CastSpellExtraArgs(TRIGGERED_FULL_MASK) .SetOriginalCaster(pet->GetGUID()) - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); } else if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET)) return SPELL_FAILED_ALREADY_HAVE_SUMMON; @@ -7188,7 +7187,7 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*= } else if (m_spellInfo->GetEffects().size() > EFFECT_1) player->CastSpell(player, m_spellInfo->GetEffect(EFFECT_1).CalcValue(), CastSpellExtraArgs() - .SetOriginalCastId(m_castId)); // move this to anywhere + .SetTriggeringSpell(this)); // move this to anywhere return SPELL_FAILED_DONT_REPORT; } } @@ -8889,7 +8888,11 @@ CastSpellTargetArg::CastSpellTargetArg(WorldObject* target) CastSpellExtraArgs& CastSpellExtraArgs::SetTriggeringSpell(Spell const* triggeringSpell) { - OriginalCastId = triggeringSpell->m_castId; + if (triggeringSpell) + { + OriginalCastItemLevel = triggeringSpell->m_castItemLevel; + OriginalCastId = triggeringSpell->m_castId; + } return *this; } -- cgit v1.2.3