aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-02-08 21:36:31 +0100
committerShauren <shauren.trinity@gmail.com>2022-02-08 21:36:31 +0100
commit8e2d1e328ebec60c76d65651b268ec3ad2ce26fc (patch)
treecebc7c310a12d3983151000e766e96a510a8a2d4 /src/server/game/Spells/Spell.cpp
parentd3fc34a203d97ca0aa076bc939286d601629fe70 (diff)
Core/Spells: Pass cast item level to triggered spells
* Fixes value on trinkets like Ignition Mage's Fuse
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp19
1 files changed, 11 insertions, 8 deletions
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;
}