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/SpellEffects.cpp | 56 ++++++++++++++------------------- 1 file changed, 23 insertions(+), 33 deletions(-) (limited to 'src/server/game/Spells/SpellEffects.cpp') diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 46e9bc693d8..3afd0a748d2 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -565,8 +565,7 @@ void Spell::EffectTriggerSpell() unitTarget->RemoveAurasByType(SPELL_AURA_MOD_STUN); // Cast Lesser Invisibility - unitTarget->CastSpell(unitTarget, 7870, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + unitTarget->CastSpell(unitTarget, 7870, this); return; } // Brittle Armor - (need add max stack of 24575 Brittle Armor) @@ -578,8 +577,7 @@ void Spell::EffectTriggerSpell() return; for (uint32 j = 0; j < spell->StackAmount; ++j) - m_caster->CastSpell(unitTarget, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + m_caster->CastSpell(unitTarget, spell->Id, this); return; } // Mercurial Shield - (need add max stack of 26464 Mercurial Shield) @@ -591,8 +589,7 @@ void Spell::EffectTriggerSpell() return; for (uint32 j = 0; j < spell->StackAmount; ++j) - m_caster->CastSpell(unitTarget, spell->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + m_caster->CastSpell(unitTarget, spell->Id, this); return; } } @@ -644,7 +641,7 @@ void Spell::EffectTriggerSpell() CastSpellExtraArgs args(TRIGGERED_FULL_MASK); args.SetOriginalCaster(m_originalCasterGUID); - args.SetOriginalCastId(m_castId); + 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) @@ -701,7 +698,7 @@ void Spell::EffectTriggerMissileSpell() CastSpellExtraArgs args(TRIGGERED_FULL_MASK); args.SetOriginalCaster(m_originalCasterGUID); - args.SetOriginalCastId(m_castId); + args.SetTriggeringSpell(this); // set basepoints for trigger with value effect if (effectInfo->Effect == SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) @@ -748,7 +745,7 @@ void Spell::EffectForceCast() { CastSpellExtraArgs args(TRIGGERED_FULL_MASK); args.SetOriginalCaster(m_originalCasterGUID); - args.SetOriginalCastId(m_castId); + args.SetTriggeringSpell(this); args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage); unitTarget->CastSpell(unitTarget, spellInfo->Id, args); return; @@ -761,12 +758,12 @@ void Spell::EffectForceCast() case 72298: // Malleable Goo Summon unitTarget->CastSpell(unitTarget, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK) .SetOriginalCaster(m_originalCasterGUID) - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); return; } CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SetOriginalCastId(m_castId); + args.SetTriggeringSpell(this); if (effectInfo->Effect == SPELL_EFFECT_FORCE_CAST_WITH_VALUE) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage); @@ -797,7 +794,7 @@ void Spell::EffectTriggerRitualOfSummoning() finish(); m_caster->CastSpell(nullptr, spellInfo->Id, CastSpellExtraArgs() - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); } void Spell::CalculateJumpSpeeds(SpellEffectInfo const* effInfo, float dist, float& speedXY, float& speedZ) @@ -2025,7 +2022,7 @@ void Spell::EffectSummonType() } CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SetOriginalCastId(m_castId); + args.SetTriggeringSpell(this); // if we have small value, it indicates seat position if (basePoints > 0 && basePoints < MAX_VEHICLE_SEATS) @@ -3042,8 +3039,7 @@ void Spell::EffectScriptEffect() return; // Shadow Flame - m_caster->CastSpell(unitTarget, 22682, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + m_caster->CastSpell(unitTarget, 22682, this); return; } // Mug Transformation @@ -3074,8 +3070,7 @@ void Spell::EffectScriptEffect() if (m_caster->ToPlayer()->GetItemByPos(bag, slot)->GetCount() == 1) m_caster->ToPlayer()->RemoveItem(bag, slot, true); else m_caster->ToPlayer()->GetItemByPos(bag, slot)->SetCount(m_caster->ToPlayer()->GetItemByPos(bag, slot)->GetCount()-1); // Spell 42518 (Braufest - Gratisprobe des Braufest herstellen) - m_caster->CastSpell(m_caster, 42518, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + m_caster->CastSpell(m_caster, 42518, this); return; } break; @@ -3087,8 +3082,7 @@ void Spell::EffectScriptEffect() //Workaround for Range ... should be global for every ScriptEffect float radius = effectInfo->CalcRadius(); if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->GetDistance(m_caster) >= radius && !unitTarget->HasAura(46394) && unitTarget != m_caster) - unitTarget->CastSpell(unitTarget, 46394, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + unitTarget->CastSpell(unitTarget, 46394, this); break; } @@ -3100,8 +3094,7 @@ void Spell::EffectScriptEffect() float radius = effectInfo->CalcRadius(); for (uint8 i = 0; i < 15; ++i) - m_caster->CastSpell(m_caster->GetRandomPoint(*destTarget, radius), 54522, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + m_caster->CastSpell(m_caster->GetRandomPoint(*destTarget, radius), 54522, this); break; } case 52173: // Coyote Spirit Despawn @@ -3140,10 +3133,9 @@ void Spell::EffectScriptEffect() if (Unit* parent = seat->GetVehicleBase()) { /// @todo a hack, range = 11, should after some time cast, otherwise too far - unitCaster->CastSpell(parent, 62496, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + unitCaster->CastSpell(parent, 62496, this); unitTarget->CastSpell(parent, damage, CastSpellExtraArgs() - .SetOriginalCastId(m_castId)); // DIFFICULTY_NONE, so effect always valid + .SetTriggeringSpell(this)); // DIFFICULTY_NONE, so effect always valid } } } @@ -3493,8 +3485,7 @@ void Spell::EffectApplyGlyph() player->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeGlyph); if (GlyphPropertiesEntry const* glyphProperties = sGlyphPropertiesStore.LookupEntry(glyphId)) - player->CastSpell(player, glyphProperties->SpellID, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + player->CastSpell(player, glyphProperties->SpellID, this); WorldPackets::Talent::ActiveGlyphs activeGlyphs; activeGlyphs.Glyphs.emplace_back(m_misc.SpellId, uint16(glyphId)); @@ -3580,7 +3571,7 @@ void Spell::EffectInebriate() currentDrunk = 100; if (rand_chance() < 25.0f) player->CastSpell(player, 67468, CastSpellExtraArgs() - .SetOriginalCastId(m_castId)); // Drunken Vomit + .SetTriggeringSpell(this)); // Drunken Vomit } else currentDrunk += drunkMod; @@ -3626,7 +3617,7 @@ void Spell::EffectFeedPet() /// @todo fix crash when a spell has two effects, both pointed at the same item target CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SetOriginalCastId(m_castId); + args.SetTriggeringSpell(this); args.AddSpellMod(SPELLVALUE_BASE_POINT0, pct); m_caster->CastSpell(pet, effectInfo->TriggerSpell, args); } @@ -4014,7 +4005,7 @@ void Spell::EffectCharge() if (effectInfo->TriggerSpell) m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK) .SetOriginalCaster(m_originalCasterGUID) - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); } } @@ -4045,7 +4036,7 @@ void Spell::EffectChargeDest() if (effectInfo->TriggerSpell) m_caster->CastSpell(*destTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK) .SetOriginalCaster(m_originalCasterGUID) - .SetOriginalCastId(m_castId)); + .SetTriggeringSpell(this)); } } @@ -4384,7 +4375,7 @@ void Spell::EffectDestroyAllTotems() if (mana) { CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.SetOriginalCastId(m_castId); + args.SetTriggeringSpell(this); args.AddSpellMod(SPELLVALUE_BASE_POINT0, mana); unitCaster->CastSpell(unitCaster, 39104, args); } @@ -5263,8 +5254,7 @@ void Spell::EffectSummonRaFFriend() if (m_caster->GetTypeId() != TYPEID_PLAYER || !unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) return; - m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); + m_caster->CastSpell(unitTarget, effectInfo->TriggerSpell, this); } void Spell::EffectUnlockGuildVaultTab() -- cgit v1.2.3