diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2017-12-30 20:28:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-12-30 20:28:41 +0100 |
| commit | d507a7e3388382960108b24143da48e5f912b4a7 (patch) | |
| tree | b4e3e62094e853cc8551126de438815779411cb7 /src/server/scripts/Spells | |
| parent | 671a34a966aefa409966f6eb86f88ce671be9b36 (diff) | |
[3.3.5] CastSpell unclusterfucking (that's a word now) (#21123)
Core/Spell: The giant CastSpell unclusterfucking (that's a word now) of this generation.
- CastSpell now always takes three arguments - target, spellId, and a struct containing extra arguments
- This struct (CastSpellExtraArgs, see SpellDefines.h) serves as a conglomerate of every previous combination of the 20 billion different CastSpell overloads, all merged into one
- It has some great utility constructors - check them out! All of these can be used to implicitly construct the ExtraArgs object.
- A gajillion refactors to make everything behave the way it always has
Diffstat (limited to 'src/server/scripts/Spells')
| -rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 153 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 151 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 39 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_holiday.cpp | 14 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 74 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 159 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 52 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 112 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 74 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 21 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 26 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 122 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 69 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 68 |
14 files changed, 700 insertions, 434 deletions
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index fde570b8c6b..31118c39f46 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -187,7 +187,7 @@ public: } if (Unit* target = eventInfo.GetActionTarget()) - target->CastSpell(target, triggerspell, true, nullptr, aurEff); + target->CastSpell(target, triggerspell, aurEff); } void Register() override @@ -341,8 +341,9 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader { // damage absorbed by Anti-Magic Shell energizes the DK with additional runic power. // This, if I'm not mistaken, shows that we get back ~20% of the absorbed damage as runic power. - int32 bp = CalculatePct(absorbAmount, 20); - GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(absorbAmount, 2)); + GetTarget()->CastSpell(GetTarget(), SPELL_DK_RUNIC_POWER_ENERGIZE, args); } void Register() override @@ -525,8 +526,9 @@ class spell_dk_blood_gorged : public SpellScriptLoader if (!damageInfo || !damageInfo->GetDamage()) return; - int32 bp = static_cast<int32>(damageInfo->GetDamage() * 1.5f); - GetTarget()->CastCustomSpell(SPELL_DK_BLOOD_GORGED_HEAL, SPELLVALUE_BASE_POINT0, bp, _procTarget, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damageInfo->GetDamage() * 1.5f); + GetTarget()->CastSpell(_procTarget, SPELL_DK_BLOOD_GORGED_HEAL, args); } void Register() override @@ -590,7 +592,9 @@ class spell_dk_butchery : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastCustomSpell(SPELL_DK_BUTCHERY_RUNIC_POWER, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_DK_BUTCHERY_RUNIC_POWER, args); } void Register() override @@ -679,10 +683,17 @@ class spell_dk_corpse_explosion : public SpellScriptLoader void HandleDamage(SpellEffIndex effIndex, Unit* target) { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); if (effIndex == EFFECT_0) - GetCaster()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_1].CalcValue(), SPELLVALUE_BASE_POINT0, GetEffectValue(), target, true); + { + args.SpellValueOverrides.AddBP0(GetEffectValue()); + GetCaster()->CastSpell(target, GetSpellInfo()->Effects[EFFECT_1].CalcValue(), args); + } else if (effIndex == EFFECT_1) - GetCaster()->CastCustomSpell(GetEffectValue(), SPELLVALUE_BASE_POINT0, GetSpell()->CalculateDamage(EFFECT_0, nullptr), target, true); + { + args.SpellValueOverrides.AddBP0(GetSpell()->CalculateDamage(EFFECT_0, nullptr)); + GetCaster()->CastSpell(target, GetEffectValue(), args); + } } void HandleCorpseExplosion(SpellEffIndex effIndex) @@ -796,8 +807,12 @@ class spell_dk_death_and_decay : public SpellScriptLoader void HandleDummyTick(AuraEffect const* aurEff) { - if (Unit* caster = GetCaster()) - caster->CastCustomSpell(SPELL_DK_DEATH_AND_DECAY_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + Unit* caster = GetCaster(); + if (!caster) + return; + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + caster->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, args); } void Register() override @@ -829,20 +844,23 @@ class spell_dk_death_coil : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 damage = GetEffectValue(); Unit* caster = GetCaster(); if (Unit* target = GetHitUnit()) { if (caster->IsFriendlyTo(target)) { - int32 bp = int32(damage * 1.5f); - caster->CastCustomSpell(target, SPELL_DK_DEATH_COIL_HEAL, &bp, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetEffectValue() * 1.5f); + caster->CastSpell(target, SPELL_DK_DEATH_COIL_HEAL, args); } else { + int32 damage = GetEffectValue(); if (AuraEffect const* auraEffect = caster->GetAuraEffect(SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART, EFFECT_1)) damage += auraEffect->GetBaseAmount(); - caster->CastCustomSpell(target, SPELL_DK_DEATH_COIL_DAMAGE, &damage, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(damage); + caster->CastSpell(target, SPELL_DK_DEATH_COIL_DAMAGE, args); } } } @@ -930,13 +948,9 @@ class spell_dk_death_grip : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 damage = GetEffectValue(); - Position const* pos = GetExplTargetDest(); if (Unit* target = GetHitUnit()) - { if (!target->HasAuraType(SPELL_AURA_DEFLECT_SPELLS)) // Deterrence - target->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), damage, true); - } + target->CastSpell(GetExplTargetDest()->GetPosition(), GetEffectValue(), true); } void Register() override @@ -1123,7 +1137,11 @@ class spell_dk_death_strike : public SpellScriptLoader // Improved Death Strike if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_DEATHKNIGHT, DK_ICON_ID_IMPROVED_DEATH_STRIKE, 0)) AddPct(bp, caster->CalculateSpellDamage(caster, aurEff->GetSpellInfo(), 2)); - caster->CastCustomSpell(caster, SPELL_DK_DEATH_STRIKE_HEAL, &bp, nullptr, nullptr, false); + + // @todo castspell refactor note: this is not triggered - is this intended?? + CastSpellExtraArgs args; + args.SpellValueOverrides.AddBP0(bp); + caster->CastSpell(caster, SPELL_DK_DEATH_STRIKE_HEAL, args); } } @@ -1237,7 +1255,7 @@ class spell_dk_glyph_of_scourge_strike : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_GLYPH_OF_SCOURGE_STRIKE_SCRIPT, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_GLYPH_OF_SCOURGE_STRIKE_SCRIPT, aurEff); } void Register() override @@ -1374,7 +1392,11 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader { Unit* target = GetTarget(); if ((target->HasAura(SPELL_DK_FROST_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED)) - target->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), target, true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, aurEff->GetAmount()); + target->CastSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, args); + } } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1424,8 +1446,11 @@ public: { PreventDefaultAction(); if (DamageInfo* dmgInfo = eventInfo.GetDamageInfo()) - eventInfo.GetActor()->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_HEAL, SPELLVALUE_BASE_POINT0, CalculatePct(static_cast<int32>(dmgInfo->GetDamage()), aurEff->GetAmount()), - eventInfo.GetActor(), true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(dmgInfo->GetDamage(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_DK_IMPROVED_BLOOD_PRESENCE_HEAL, args); + } } void Register() override @@ -1466,7 +1491,11 @@ class spell_dk_improved_frost_presence : public SpellScriptLoader { Unit* target = GetTarget(); if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED)) - target->CastCustomSpell(SPELL_DK_FROST_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + target->CastSpell(target, SPELL_DK_FROST_PRESENCE_TRIGGERED, args); + } } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1518,11 +1547,18 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader { // Not listed as any effect, only base points set in dbc int32 basePoints = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); - target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &basePoints, &basePoints, &basePoints, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), basePoints); + target->CastSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, args); } if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_FROST_PRESENCE)) && !target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED)) - target->CastCustomSpell(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + target->CastSpell(target, SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, args); + } } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1575,7 +1611,7 @@ class spell_dk_pvp_4p_bonus : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_DK_RUNIC_RETURN, true, nullptr, aurEff); + eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_DK_RUNIC_RETURN, aurEff); } void Register() override @@ -1609,7 +1645,7 @@ class spell_dk_mark_of_blood : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_MARK_OF_BLOOD_HEAL, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_MARK_OF_BLOOD_HEAL, aurEff); } void Register() override @@ -1647,8 +1683,9 @@ class spell_dk_necrosis : public SpellScriptLoader if (!damageInfo || !damageInfo->GetDamage()) return; - int32 amount = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); - eventInfo.GetActor()->CastCustomSpell(SPELL_DK_NECROSIS_DAMAGE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_NECROSIS_DAMAGE, args); } void Register() override @@ -1786,7 +1823,11 @@ class spell_dk_presence : public SpellScriptLoader target->CastSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, true); else if (AuraEffect const* impAurEff = target->GetAuraEffectOfRankedSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1, EFFECT_0)) if (!target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED)) - target->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT1, impAurEff->GetAmount(), target, true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, impAurEff->GetAmount()); + target->CastSpell(target, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, args); + } } void HandleImprovedFrostPresence(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) @@ -1797,7 +1838,11 @@ class spell_dk_presence : public SpellScriptLoader target->CastSpell(target, SPELL_DK_FROST_PRESENCE_TRIGGERED, true); else if (AuraEffect const* impAurEff = target->GetAuraEffectOfRankedSpell(SPELL_DK_IMPROVED_FROST_PRESENCE_R1, EFFECT_0)) if (!target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED)) - target->CastCustomSpell(SPELL_DK_FROST_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, impAurEff->GetAmount(), target, true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(impAurEff->GetAmount()); + target->CastSpell(target, SPELL_DK_FROST_PRESENCE_TRIGGERED, args); + } } void HandleImprovedUnholyPresence(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) @@ -1813,10 +1858,17 @@ class spell_dk_presence : public SpellScriptLoader { // Not listed as any effect, only base points set int32 bp = impAurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue(); - target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &bp, &bp, &bp, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), bp); + target->CastSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, args); } else if (!target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED)) - target->CastCustomSpell(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, impAurEff->GetAmount(), target, true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(impAurEff->GetAmount()); + target->CastSpell(target, SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, args); + } } } @@ -1971,11 +2023,7 @@ class spell_dk_raise_dead : public SpellScriptLoader void HandleRaiseDead(SpellEffIndex /*effIndex*/) { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(GetGhoulSpellId()); - SpellCastTargets targets; - targets.SetDst(*GetHitUnit()); - - GetCaster()->CastSpell(targets, spellInfo, nullptr, TRIGGERED_FULL_MASK); + GetCaster()->CastSpell(GetHitUnit()->GetPosition(), GetGhoulSpellId(), TRIGGERED_FULL_MASK); } void OverrideCooldown() @@ -2090,7 +2138,7 @@ class spell_dk_scent_of_blood : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_DK_SCENT_OF_BLOOD, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_DK_SCENT_OF_BLOOD, aurEff); ModStackAmount(-1); } @@ -2183,7 +2231,9 @@ class spell_dk_scourge_strike : public SpellScriptLoader if (AuraEffect* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_DK_BLACK_ICE_R1, EFFECT_0)) AddPct(bp, aurEff->GetAmount()); - caster->CastCustomSpell(unitTarget, SPELL_DK_SCOURGE_STRIKE_TRIGGERED, &bp, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(bp); + caster->CastSpell(unitTarget, SPELL_DK_SCOURGE_STRIKE_TRIGGERED, args); } } @@ -2286,7 +2336,7 @@ class spell_dk_sudden_doom : public SpellScriptLoader if (!spellId) return; - caster->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff); + caster->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff); } void Register() override @@ -2364,7 +2414,7 @@ class spell_dk_threat_of_thassarian : public SpellScriptLoader return; spellId = sSpellMgr->GetSpellWithRank(spellId, spellInfo->GetRank()); - caster->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff); + caster->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff); } void Register() override @@ -2420,7 +2470,9 @@ class spell_dk_unholy_blight : public SpellScriptLoader // Add remaining ticks to healing done amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_DK_UNHOLY_BLIGHT_DAMAGE, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_DK_UNHOLY_BLIGHT_DAMAGE, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_DK_UNHOLY_BLIGHT_DAMAGE, args); } void Register() override @@ -2479,9 +2531,10 @@ class spell_dk_vendetta : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - Unit* caster = eventInfo.GetActor(); - int32 amount = caster->CountPctFromMaxHealth(aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_DK_VENDETTA_HEAL, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + Unit* const caster = eventInfo.GetActor(); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_DK_VENDETTA_HEAL, args); } void Register() override @@ -2524,7 +2577,9 @@ class spell_dk_wandering_plague : public SpellScriptLoader return; int32 amount = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_DK_WANDERING_PLAGUE_DAMAGE, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_DK_WANDERING_PLAGUE_DAMAGE, args); } void Register() override diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 6840cd02f27..b498e121036 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -259,7 +259,7 @@ class spell_dru_eclipse : public SpellScriptLoader PreventDefaultAction(); _solarProcCooldownEnd = GameTime::GetGameTimeSteadyPoint() + Seconds(30); - eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_DRUID_ECLIPSE_SOLAR_PROC, TRIGGERED_FULL_MASK, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_DRUID_ECLIPSE_SOLAR_PROC, aurEff); } void ProcLunar(AuraEffect const* aurEff, ProcEventInfo& eventInfo) @@ -267,7 +267,7 @@ class spell_dru_eclipse : public SpellScriptLoader PreventDefaultAction(); _lunarProcCooldownEnd = GameTime::GetGameTimeSteadyPoint() + Seconds(30); - eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_DRUID_ECLIPSE_LUNAR_PROC, TRIGGERED_FULL_MASK, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_DRUID_ECLIPSE_LUNAR_PROC, aurEff); } void Register() override @@ -331,7 +331,11 @@ class spell_dru_enrage : public SpellScriptLoader { Unit* target = GetTarget(); if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0)) - target->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + target->CastSpell(target, SPELL_DRUID_ENRAGE_MOD_DAMAGE, args); + } // Item - Druid T10 Feral 4P Bonus if (target->HasAura(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS)) @@ -431,7 +435,7 @@ public: return; } - target->CastSpell(target, triggerspell, true, nullptr, aurEff); + target->CastSpell(target, triggerspell, aurEff); } void Register() override @@ -501,7 +505,9 @@ class spell_dru_frenzied_regeneration : public AuraScript int32 const mod = std::min(static_cast<int32>(rage), 100); int32 const regen = CalculatePct(GetTarget()->GetMaxHealth(), GetTarget()->CalculateSpellDamage(nullptr, GetSpellInfo(), EFFECT_1) * mod / 100.f); - GetTarget()->CastCustomSpell(SPELL_DRUID_FRENZIED_REGENERATION_HEAL, SPELLVALUE_BASE_POINT0, regen, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(regen); + GetTarget()->CastSpell(nullptr, SPELL_DRUID_FRENZIED_REGENERATION_HEAL, args); GetTarget()->SetPower(POWER_RAGE, rage - mod); } @@ -529,7 +535,7 @@ class spell_dru_glyph_of_barkskin : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_BARKSKIN_01, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_BARKSKIN_01, aurEff); } void Register() override @@ -570,7 +576,9 @@ class spell_dru_glyph_of_innervate : public SpellScriptLoader ASSERT(spellInfo->GetMaxTicks() > 0); amount /= spellInfo->GetMaxTicks(); - caster->CastCustomSpell(SPELL_DRUID_GLYPH_OF_INNERVATE_REGEN, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, SPELL_DRUID_GLYPH_OF_INNERVATE_REGEN, args); } void Register() override @@ -608,7 +616,7 @@ class spell_dru_glyph_of_rake : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_RAKE_TRIGGERED, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_RAKE_TRIGGERED, aurEff); } void Register() override @@ -651,8 +659,9 @@ class spell_dru_glyph_of_rejuvenation : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount()); - eventInfo.GetActor()->CastCustomSpell(SPELL_DRUID_GLYPH_OF_REJUVENATION_HEAL, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_REJUVENATION_HEAL, args); } void Register() override @@ -798,7 +807,7 @@ class spell_dru_glyph_of_starfire_dummy : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_STARFIRE_SCRIPT, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_STARFIRE_SCRIPT, aurEff); } void Register() override @@ -947,8 +956,9 @@ class spell_dru_leader_of_the_pack : public SpellScriptLoader if (caster->GetSpellHistory()->HasCooldown(SPELL_DRUID_IMP_LEADER_OF_THE_PACK_HEAL)) return; - int32 amount = caster->CountPctFromMaxHealth(aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_DRUID_IMP_LEADER_OF_THE_PACK_HEAL, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_DRUID_IMP_LEADER_OF_THE_PACK_HEAL, args); // Because of how proc system works, we can't store proc cd on db, it would be applied to entire aura // so aura could only proc once per 6 seconds, independently of caster @@ -961,8 +971,9 @@ class spell_dru_leader_of_the_pack : public SpellScriptLoader AuraEffect const* impLotpMana = caster->GetAuraEffectOfRankedSpell(SPELL_DRUID_IMP_LEADER_OF_THE_PACK_R1, EFFECT_0, aurEff->GetCasterGUID()); ASSERT(impLotpMana); - int32 manaAmount = CalculatePct(static_cast<int32>(caster->GetMaxPower(POWER_MANA)), impLotpMana->GetSpellInfo()->Effects[EFFECT_1].CalcValue()); - caster->CastCustomSpell(SPELL_DRUID_IMP_LEADER_OF_THE_PACK_MANA, SPELLVALUE_BASE_POINT0, manaAmount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args2(aurEff); + args2.SpellValueOverrides.AddBP0(CalculatePct(caster->GetMaxPower(POWER_MANA), impLotpMana->GetSpellInfo()->Effects[EFFECT_1].CalcValue())); + caster->CastSpell(nullptr, SPELL_DRUID_IMP_LEADER_OF_THE_PACK_MANA, args2); } void Register() override @@ -996,54 +1007,42 @@ class spell_dru_lifebloom : public SpellScriptLoader }); } - void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + void OnRemoveEffect(Unit* target, AuraEffect const* aurEff, uint32 stack) { - // Final heal only on duration end - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) - return; - - // final heal - int32 stack = GetStackAmount(); int32 healAmount = aurEff->GetAmount(); if (Unit* caster = GetCaster()) { - healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, stack); - healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack); - - GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); + healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, stack); + healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack); // restore mana - int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2; - caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); - return; + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.SpellValueOverrides.AddBP0(CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2); + caster->CastSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, args); } - GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.SpellValueOverrides.AddBP0(healAmount); + target->CastSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, args); + } + + void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + // Final heal only on duration end + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + return; + + // final heal + OnRemoveEffect(GetTarget(), aurEff, GetStackAmount()); } void HandleDispel(DispelInfo* dispelInfo) { if (Unit* target = GetUnitOwner()) - { if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) - { - // final heal - int32 healAmount = aurEff->GetAmount(); - if (Unit* caster = GetCaster()) - { - healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges()); - healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges()); - target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); - - // restore mana - int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * dispelInfo->GetRemovedCharges() / 2; - caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); - return; - } - - target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); - } - } + OnRemoveEffect(target, aurEff, dispelInfo->GetRemovedCharges()); // final heal } void Register() override @@ -1082,8 +1081,9 @@ class spell_dru_living_seed : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - int32 amount = CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount())); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_LIVING_SEED_PROC, args); } void Register() override @@ -1116,7 +1116,9 @@ class spell_dru_living_seed_proc : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_LIVING_SEED_HEAL, args); } void Register() override @@ -1205,7 +1207,7 @@ class spell_dru_omen_of_clarity : public SpellScriptLoader { Unit* target = GetTarget(); if (target->HasAura(SPELL_DRUID_BALANCE_T10_BONUS)) - target->CastSpell(nullptr, SPELL_DRUID_BALANCE_T10_BONUS_PROC, true, nullptr, aurEff); + target->CastSpell(nullptr, SPELL_DRUID_BALANCE_T10_BONUS_PROC, aurEff); } void Register() override @@ -1375,7 +1377,7 @@ class spell_dru_revitalize : public SpellScriptLoader return; } - eventInfo.GetActor()->CastSpell(target, spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(target, spellId, aurEff); } void Register() override @@ -1457,8 +1459,9 @@ class spell_dru_savage_defense : public SpellScriptLoader { PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - int32 amount = static_cast<int32>(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), aurEff->GetAmount())); - caster->CastCustomSpell(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), aurEff->GetAmount())); + caster->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, args); } void Register() override @@ -1510,7 +1513,7 @@ class spell_dru_savage_roar : public SpellScriptLoader void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, true, nullptr, aurEff, GetCasterGUID()); + target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, { aurEff, GetCasterGUID() }); } void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1646,8 +1649,9 @@ class spell_dru_survival_instincts : public SpellScriptLoader void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount()); - target->CastCustomSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, &bp0, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(target->CountPctFromMaxHealth(aurEff->GetAmount())); + target->CastSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, args); } void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1720,7 +1724,11 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader void OnHit() { if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_1)) - GetHitUnit()->CastCustomSpell(SPELL_DRUID_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_DRUID_TIGER_S_FURY_ENERGIZE, args); + } } void Register() override @@ -1812,7 +1820,7 @@ class spell_dru_t3_2p_bonus : public SpellScriptLoader return; } - eventInfo.GetActor()->CastSpell(target, spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(target, spellId, aurEff); } void Register() override @@ -1846,7 +1854,7 @@ class spell_dru_t3_6p_bonus : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_BLESSING_OF_THE_CLAW, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_BLESSING_OF_THE_CLAW, aurEff); } void Register() override @@ -1885,7 +1893,9 @@ class spell_dru_t3_8p_bonus : public SpellScriptLoader Unit* caster = eventInfo.GetActor(); int32 amount = CalculatePct(spellInfo->CalcPowerCost(caster, spellInfo->GetSchoolMask()), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_DRUID_EXHILARATE, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, SPELL_DRUID_EXHILARATE, args); } void Register() override @@ -1919,7 +1929,7 @@ class spell_dru_t4_2p_bonus : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_INFUSION, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_INFUSION, aurEff); } void Register() override @@ -1985,7 +1995,7 @@ class spell_dru_item_t6_trinket : public SpellScriptLoader return; if (roll_chance_i(chance)) - eventInfo.GetActor()->CastSpell(nullptr, spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -2056,7 +2066,7 @@ public: return; } - target->CastSpell(target, triggerspell, true, nullptr, aurEff); + target->CastSpell(target, triggerspell, aurEff); } void Register() override @@ -2106,7 +2116,9 @@ class spell_dru_t10_balance_4p_bonus : public SpellScriptLoader // Add remaining ticks to damage done amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_DRUID_LANGUISH, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_DRUID_LANGUISH, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_DRUID_LANGUISH, args); } void Register() override @@ -2212,8 +2224,9 @@ class spell_dru_t10_restoration_4p_bonus_dummy : public SpellScriptLoader { PreventDefaultAction(); - int32 amount = static_cast<int32>(eventInfo.GetHealInfo()->GetHeal()); - eventInfo.GetActor()->CastCustomSpell(SPELL_DRUID_REJUVENATION_T10_PROC, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(eventInfo.GetHealInfo()->GetHeal()); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_DRUID_REJUVENATION_T10_PROC, args); } void Register() override diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index d40d8a59a7c..3c1a63d9fce 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -138,7 +138,7 @@ class spell_gen_adaptive_warding : public AuraScript default: return; } - GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), spellId, aurEff); } void Register() override @@ -492,7 +492,9 @@ class spell_gen_blood_reserve : public AuraScript PreventDefaultAction(); Unit* caster = eventInfo.GetActionTarget(); - caster->CastCustomSpell(SPELL_GEN_BLOOD_RESERVE_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), caster, TRIGGERED_FULL_MASK, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + caster->CastSpell(caster, SPELL_GEN_BLOOD_RESERVE_HEAL, args); caster->RemoveAura(SPELL_GEN_BLOOD_RESERVE_AURA); } @@ -531,7 +533,9 @@ class spell_gen_blade_warding : public AuraScript for (uint8 i = 0; i < stacks; ++i) bp += spellInfo->Effects[EFFECT_0].CalcValue(caster); - caster->CastCustomSpell(SPELL_GEN_BLADE_WARDING_TRIGGERED, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetActor(), TRIGGERED_FULL_MASK, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + caster->CastSpell(eventInfo.GetActor(), SPELL_GEN_BLADE_WARDING_TRIGGERED, args); } void Register() override @@ -811,7 +815,11 @@ class spell_gen_chaos_blast : public SpellScript int32 basepoints0 = 100; Unit* caster = GetCaster(); if (Unit* target = GetHitUnit()) - caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, nullptr, nullptr, true); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(basepoints0); + caster->CastSpell(target, SPELL_CHAOS_BLAST, args); + } } void Register() override @@ -1257,7 +1265,7 @@ class spell_gen_defend : public AuraScript for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i) target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i); - target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, true, nullptr, aurEff); + target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, aurEff); } else GetTarget()->RemoveAurasDueToSpell(GetId()); @@ -1464,7 +1472,7 @@ class spell_gen_elune_candle : public SpellScript else spellId = SPELL_ELUNE_CANDLE_NORMAL; - GetCaster()->CastSpell(GetHitUnit(), spellId, true, nullptr); + GetCaster()->CastSpell(GetHitUnit(), spellId, true); } void Register() override @@ -1637,7 +1645,7 @@ class spell_gen_lifebloom : public SpellScriptLoader return; // final heal - GetTarget()->CastSpell(GetTarget(), _spellId, true, nullptr, aurEff, GetCasterGUID()); + GetTarget()->CastSpell(GetTarget(), _spellId, { aurEff, GetCasterGUID() }); } void Register() override @@ -2038,7 +2046,7 @@ class spell_gen_moss_covered_feet : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_FALL_DOWN, true, nullptr, aurEff); + eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_FALL_DOWN, aurEff); } void Register() override @@ -2061,7 +2069,9 @@ class spell_gen_negative_energy_periodic : public AuraScript { PreventDefaultAction(); - GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, SPELLVALUE_MAX_TARGETS, aurEff->GetTickNumber() / 10 + 1, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, aurEff->GetTickNumber() / 10 + 1); + GetTarget()->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, args); } void Register() override @@ -2240,7 +2250,7 @@ class spell_gen_obsidian_armor : public AuraScript default: return; } - GetTarget()->CastSpell(GetTarget(), spellId, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), spellId, aurEff); } void Register() override @@ -2359,7 +2369,7 @@ class spell_gen_paralytic_poison : public AuraScript if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) return; - GetTarget()->CastSpell(nullptr, SPELL_PARALYSIS, true, nullptr, aurEff); + GetTarget()->CastSpell(nullptr, SPELL_PARALYSIS, aurEff); } void Register() override @@ -3091,7 +3101,7 @@ class spell_gen_turkey_marker : public AuraScript // on stack 15 cast the achievement crediting spell if (GetStackAmount() >= 15) - target->CastSpell(target, SPELL_TURKEY_VENGEANCE, true, nullptr, aurEff, GetCasterGUID()); + target->CastSpell(target, SPELL_TURKEY_VENGEANCE, { aurEff, GetCasterGUID() }); } void OnPeriodic(AuraEffect const* /*aurEff*/) @@ -3172,8 +3182,9 @@ class spell_gen_vampiric_touch : public AuraScript return; Unit* caster = eventInfo.GetActor(); - int32 bp = damageInfo->GetDamage() / 2; - caster->CastCustomSpell(SPELL_VAMPIRIC_TOUCH_HEAL, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damageInfo->GetDamage() / 2); + caster->CastSpell(caster, SPELL_VAMPIRIC_TOUCH_HEAL, args); } void Register() override diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index 8c395077c96..dfaaaff9d6a 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -569,7 +569,7 @@ class spell_pilgrims_bounty_feast_on : public SpellScriptLoader if (Player* player = target->ToPlayer()) { player->CastSpell(player, SPELL_ON_PLATE_EAT_VISUAL, true); - caster->CastSpell(player, _spellId, true, nullptr, nullptr, player->GetGUID()); + caster->CastSpell(player, _spellId, player->GetGUID()); } if (Aura* aura = caster->GetAura(GetEffectValue())) @@ -1183,15 +1183,23 @@ class spell_brewfest_ram : public SpellScriptLoader target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_GREEN, true); break; case SPELL_RAM_CANTER: - target->CastCustomSpell(SPELL_RAM_FATIGUE, SPELLVALUE_AURA_STACK, 1, target, TRIGGERED_FULL_MASK); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, 1); + target->CastSpell(target, SPELL_RAM_FATIGUE, args); if (aurEff->GetTickNumber() == 8) target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_YELLOW, true); break; + } case SPELL_RAM_GALLOP: - target->CastCustomSpell(SPELL_RAM_FATIGUE, SPELLVALUE_AURA_STACK, target->HasAura(SPELL_RAM_FATIGUE) ? 4 : 5 /*Hack*/, target, TRIGGERED_FULL_MASK); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, target->HasAura(SPELL_RAM_FATIGUE) ? 4 : 5 /*Hack*/); + target->CastSpell(target, SPELL_RAM_FATIGUE, args); if (aurEff->GetTickNumber() == 8) target->CastSpell(target, SPELL_BREWFEST_QUEST_SPEED_BUNNY_RED, true); break; + } default: break; } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index eaee7a93fd9..fe2ba85de5b 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -179,14 +179,16 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader if (AuraEffect const* glyph = GetTarget()->GetAuraEffect(SPELL_HUNTER_GLYPH_OF_ASPECT_OF_THE_VIPER, EFFECT_0)) AddPct(mana, glyph->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(mana); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE, args); } void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { // Hunter T7 4P Bonus if (GetTarget()->HasAura(SPELL_HUNTER_VIPER_ATTACK_SPEED)) - GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_VICIOUS_VIPER, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_VICIOUS_VIPER, aurEff); } void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -288,7 +290,11 @@ class spell_hun_chimera_shot : public SpellScriptLoader } if (spellId) - caster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, basePoint, unitTarget, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD)); + { + CastSpellExtraArgs args(TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD)); + args.SpellValueOverrides.AddBP0(basePoint); + caster->CastSpell(unitTarget, spellId, args); + } } } @@ -324,7 +330,10 @@ class spell_hun_cobra_strikes : public SpellScriptLoader PreventDefaultAction(); SpellInfo const* triggeredSpellInfo = sSpellMgr->AssertSpellInfo(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell); - GetTarget()->CastCustomSpell(triggeredSpellInfo->Id, SPELLVALUE_AURA_STACK, triggeredSpellInfo->StackAmount, (Unit*)nullptr, true); + + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, triggeredSpellInfo->StackAmount); + GetTarget()->CastSpell(nullptr, triggeredSpellInfo->Id, args); } void Register() override @@ -441,7 +450,10 @@ class spell_hun_glyph_of_arcane_shot : public SpellScriptLoader int32 mana = procSpell->CalcPowerCost(GetTarget(), procSpell->GetSchoolMask()); ApplyPct(mana, aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_HUNTER_GLYPH_OF_ARCANE_SHOT, SPELLVALUE_BASE_POINT0, mana, GetTarget()); + // castspell refactor note: this is not triggered - is this intended? + CastSpellExtraArgs args; + args.SpellValueOverrides.AddBP0(mana); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_GLYPH_OF_ARCANE_SHOT, args); } void Register() override @@ -475,7 +487,7 @@ class spell_hun_glyph_of_mend_pet : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_HUNTER_GLYPH_OF_MEND_PET_HAPPINESS, true, nullptr, aurEff); + eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_HUNTER_GLYPH_OF_MEND_PET_HAPPINESS, aurEff); } void Register() override @@ -503,7 +515,11 @@ class spell_hun_explosive_shot : public AuraScript void PeriodicTick(AuraEffect const* aurEff) { if (Unit* caster = GetCaster()) - caster->CastCustomSpell(SPELL_HUNTER_EXPLOSIVE_SHOT_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + caster->CastSpell(GetTarget(), SPELL_HUNTER_EXPLOSIVE_SHOT_DAMAGE, args); + } } void Register() override @@ -530,7 +546,7 @@ class spell_hun_feeding_frenzy : public AuraScript uint32 spellId = triggerSpells[rank - 1]; if (GetTarget()->GetVictim() && GetTarget()->EnsureVictim()->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) - GetTarget()->CastSpell(nullptr, spellId, true, nullptr, aurEff); + GetTarget()->CastSpell(nullptr, spellId, aurEff); else GetTarget()->RemoveAurasDueToSpell(spellId); } @@ -559,7 +575,7 @@ class spell_hun_hunting_party : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff); } void Register() override @@ -597,7 +613,7 @@ class spell_hun_improved_mend_pet : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_MEND_PET, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_MEND_PET, aurEff); } void Register() override @@ -704,8 +720,9 @@ class spell_hun_last_stand_pet : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { Unit* caster = GetCaster(); - int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30)); - caster->CastCustomSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(30)); + caster->CastSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, args); } void Register() override @@ -905,7 +922,7 @@ class spell_hun_misdirection : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, aurEff); } void Register() override @@ -1035,7 +1052,9 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader { if (!caster->HasAura(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF)) { - owner->CastCustomSpell(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, SPELLVALUE_BASE_POINT0, 100, caster, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(100); // @todo shouldn't this be in spellmgr if it's constant? + owner->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, args); caster->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true); } } @@ -1091,7 +1110,9 @@ public: uint32 bp = CalculatePct(int32(dmg), aurEff->GetAmount()) / (duration / int32(amplitude)); bp += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_HUNTER_PIERCING_SHOTS, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_HUNTER_PIERCING_SHOTS, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + caster->CastSpell(target, SPELL_HUNTER_PIERCING_SHOTS, args); } } @@ -1128,9 +1149,9 @@ class spell_hun_rapid_recuperation : public SpellScriptLoader PreventDefaultAction(); Unit* target = GetTarget(); - uint32 mana = CalculatePct(target->GetMaxPower(POWER_MANA), aurEff->GetAmount()); - - target->CastCustomSpell(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, SPELLVALUE_BASE_POINT0, int32(mana), target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(target->GetMaxPower(POWER_MANA), aurEff->GetAmount())); + target->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, args); } void Register() override @@ -1188,7 +1209,7 @@ class spell_hun_rapid_recuperation_trigger : public SpellScriptLoader uint8 rank = GetSpellInfo()->GetRank(); uint32 spellId = triggerSpells[rank - 1]; - eventInfo.GetActor()->CastSpell(nullptr, spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -1280,8 +1301,9 @@ class spell_hun_roar_of_sacrifice : public SpellScriptLoader { PreventDefaultAction(); - uint32 damage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()); - eventInfo.GetActor()->CastCustomSpell(SPELL_ROAR_OF_SACRIFICE_TRIGGERED, SPELLVALUE_BASE_POINT0, damage, GetCaster(), TRIGGERED_FULL_MASK, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(GetCaster(), SPELL_ROAR_OF_SACRIFICE_TRIGGERED, args); } void Register() override @@ -1355,7 +1377,7 @@ class spell_hun_sniper_training : public SpellScriptLoader { Unit* target = GetTarget(); uint32 spellId = SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_HUNTER_SNIPER_TRAINING_R1; - target->CastSpell(target, spellId, true, 0, aurEff); + target->CastSpell(target, spellId, aurEff); if (Player* playerTarget = GetUnitOwner()->ToPlayer()) { int32 baseAmount = aurEff->GetBaseAmount(); @@ -1517,7 +1539,9 @@ class spell_hun_thrill_of_the_hunt : public SpellScriptLoader if (!amount) return; - caster->CastCustomSpell(SPELL_HUNTER_THRILL_OF_THE_HUNT_MANA, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, SPELL_HUNTER_THRILL_OF_THE_HUNT_MANA, args); } void Register() override @@ -1559,7 +1583,7 @@ public: PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, true, nullptr, aurEff); + caster->CastSpell(caster->ToPlayer()->GetPet(), SPELL_HUNTER_T9_4P_GREATNESS, aurEff); } void Register() override @@ -1597,7 +1621,7 @@ class spell_hun_viper_attack_speed : public SpellScriptLoader void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { if (GetTarget()->HasAura(SPELL_HUNTER_ASPECT_OF_THE_VIPER)) - GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_VICIOUS_VIPER, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_VICIOUS_VIPER, aurEff); } void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index a3ec935866d..91887c1b9f3 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -65,7 +65,7 @@ class spell_item_trigger_spell : public SpellScriptLoader { Unit* caster = GetCaster(); if (Item* item = GetCastItem()) - caster->CastSpell(caster, _triggeredSpellId, true, item); + caster->CastSpell(caster, _triggeredSpellId, item); } void Register() override @@ -98,7 +98,7 @@ class spell_item_aegis_of_preservation : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, aurEff); } void Register() override @@ -129,7 +129,7 @@ class spell_item_absorb_eye_of_grillok : public AuraScript if (!GetCaster() || GetTarget()->GetTypeId() != TYPEID_UNIT) return; - GetCaster()->CastSpell(GetCaster(), SPELL_EYE_OF_GRILLOK, true, nullptr, aurEff); + GetCaster()->CastSpell(GetCaster(), SPELL_EYE_OF_GRILLOK, aurEff); GetTarget()->ToCreature()->DespawnOrUnsummon(); } @@ -191,8 +191,9 @@ class spell_item_alchemists_stone : public AuraScript continue; } - int32 amount = CalculatePct(spellInfo->Effects[i].CalcValue(caster), 40); - caster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(spellInfo->Effects[i].CalcValue(caster), 40)); + caster->CastSpell(nullptr, spellId, args); } } @@ -252,7 +253,7 @@ class spell_item_anger_capacitor : public SpellScriptLoader if (player->GetWeaponForAttack(OFF_ATTACK, true) && roll_chance_i(50)) spellId = SPELL_MANIFEST_ANGER_OFF_HAND; - caster->CastSpell(target, spellId, true, nullptr, aurEff); + caster->CastSpell(target, spellId, aurEff); } void Register() override @@ -358,7 +359,7 @@ class spell_item_aura_of_madness : public AuraScript PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); uint32 spellId = Trinity::Containers::SelectRandomContainerElement(triggeredSpells[caster->getClass()]); - caster->CastSpell(caster, spellId, true, nullptr, aurEff); + caster->CastSpell(caster, spellId, aurEff); if (roll_chance_i(10)) caster->Unit::Say(SAY_MADNESS); @@ -387,7 +388,7 @@ class spell_item_dementia : public AuraScript void HandlePeriodicDummy(AuraEffect const* aurEff) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), RAND(SPELL_DEMENTIA_POS, SPELL_DEMENTIA_NEG), true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), RAND(SPELL_DEMENTIA_POS, SPELL_DEMENTIA_NEG), aurEff); } void Register() override @@ -434,7 +435,11 @@ class spell_item_blessing_of_ancient_kings : public AuraScript protEff->GetBase()->RefreshDuration(); } else - GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(absorb); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PROTECTION_OF_ANCIENT_KINGS, args); + } } void Register() override @@ -495,7 +500,9 @@ class spell_item_deadly_precision_dummy : public SpellScript void HandleDummy(SpellEffIndex /*effIndex*/) { SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_DEADLY_PRECISION); - GetCaster()->CastCustomSpell(spellInfo->Id, SPELLVALUE_AURA_STACK, spellInfo->StackAmount, GetCaster(), true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddMod(SPELLVALUE_AURA_STACK, spellInfo->StackAmount); + GetCaster()->CastSpell(GetCaster(), spellInfo->Id, args); } void Register() override @@ -584,7 +591,7 @@ class spell_item_deathbringers_will : public SpellScriptLoader return; uint32 spellId = Trinity::Containers::SelectRandomContainerElement(randomSpells); - caster->CastSpell(caster, spellId, true, nullptr, aurEff); + caster->CastSpell(caster, spellId, aurEff); } void Register() override @@ -670,7 +677,7 @@ class spell_item_defibrillate : public SpellScriptLoader { PreventHitDefaultEffect(effIndex); if (_failSpell) - GetCaster()->CastSpell(GetCaster(), _failSpell, true, GetCastItem()); + GetCaster()->CastSpell(GetCaster(), _failSpell, GetCastItem()); } } @@ -711,7 +718,7 @@ class spell_item_desperate_defense : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, aurEff); } void Register() override @@ -749,7 +756,7 @@ class spell_item_deviate_fish : public SpellScript { Unit* caster = GetCaster(); uint32 spellId = urand(SPELL_SLEEPY, SPELL_HEALTHY_SPIRIT); - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } void Register() override @@ -776,7 +783,7 @@ class spell_item_discerning_eye_beast_dummy : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_DISCERNING_EYE_BEAST, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_DISCERNING_EYE_BEAST, aurEff); } void Register() override @@ -914,7 +921,7 @@ class spell_item_flask_of_the_north : public SpellScript break; } - caster->CastSpell(caster, possibleSpells[urand(0, (possibleSpells.size() - 1))], true, nullptr); + caster->CastSpell(caster, possibleSpells[urand(0, (possibleSpells.size() - 1))], true); } void Register() override @@ -946,9 +953,10 @@ class spell_item_frozen_shadoweave : public AuraScript if (!damageInfo || !damageInfo->GetDamage()) return; - int32 amount = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); Unit* caster = eventInfo.GetActor(); - caster->CastCustomSpell(SPELL_SHADOWMEND, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_SHADOWMEND, args); } void Register() override @@ -1038,7 +1046,7 @@ class spell_item_healing_touch_refund : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_HEALING_TOUCH_MANA, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_HEALING_TOUCH_MANA, aurEff); } void Register() override @@ -1112,7 +1120,7 @@ class spell_item_heartpierce : public SpellScriptLoader return; } - caster->CastSpell(nullptr, spellId, true, nullptr, aurEff); + caster->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -1192,7 +1200,7 @@ class spell_item_make_a_wish : public SpellScript case 3: spellId = SPELL_SUMMON_FURIOUS_MR_PINCHY; break; case 4: spellId = SPELL_TINY_MAGICAL_CRAWDAD; break; } - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } void Register() override @@ -1225,7 +1233,7 @@ class spell_item_mark_of_conquest : public AuraScript // in that case, do not cast heal spell PreventDefaultAction(); // but mana instead - eventInfo.GetActor()->CastSpell(nullptr, SPELL_MARK_OF_CONQUEST_ENERGIZE, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_MARK_OF_CONQUEST_ENERGIZE, aurEff); } } @@ -1307,8 +1315,9 @@ class spell_item_necrotic_touch : public AuraScript if (!damageInfo || !damageInfo->GetDamage()) return; - int32 bp = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + GetTarget()->CastSpell(nullptr, SPELL_ITEM_NECROTIC_TOUCH_PROC, args); } void Register() override @@ -1352,7 +1361,7 @@ class spell_item_net_o_matic : public SpellScript else if (roll < 4) // 2% for 20 sec root, charge to target (off-like chance unknown) spellId = SPELL_NET_O_MATIC_TRIGGERED2; - GetCaster()->CastSpell(target, spellId, true, nullptr); + GetCaster()->CastSpell(target, spellId, true); } } @@ -1400,7 +1409,7 @@ class spell_item_noggenfogger_elixir : public SpellScript case 2: spellId = SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED2; break; } - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } void Register() override @@ -1459,7 +1468,9 @@ class spell_item_persistent_shield : public AuraScript if (shield->GetAmount() > bp0) return; - caster->CastCustomSpell(SPELL_PERSISTENT_SHIELD_TRIGGERED, SPELLVALUE_BASE_POINT0, bp0, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp0); + caster->CastSpell(target, SPELL_PERSISTENT_SHIELD_TRIGGERED, args); } void Register() override @@ -1493,9 +1504,9 @@ class spell_item_pet_healing : public AuraScript if (!damageInfo || !damageInfo->GetDamage()) return; - int32 bp = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); - Unit* caster = eventInfo.GetActor(); - caster->CastCustomSpell(SPELL_HEALTH_LINK, SPELLVALUE_BASE_POINT0, bp, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_HEALTH_LINK, args); } void Register() override @@ -1563,7 +1574,7 @@ class spell_item_savory_deviate_delight : public SpellScript // Yaaarrrr - pirate case 2: spellId = (caster->getGender() == GENDER_MALE ? SPELL_YAAARRRR_MALE : SPELL_YAAARRRR_FEMALE); break; } - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } void Register() override @@ -1720,14 +1731,14 @@ class spell_item_shadowmourne : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_SHADOWMOURNE_SOUL_FRAGMENT, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_SHADOWMOURNE_SOUL_FRAGMENT, aurEff); // this can't be handled in AuraScript of SoulFragments because we need to know victim if (Aura* soulFragments = GetTarget()->GetAura(SPELL_SHADOWMOURNE_SOUL_FRAGMENT)) { if (soulFragments->GetStackAmount() >= 10) { - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE, true, nullptr, aurEff); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE, aurEff); soulFragments->Remove(); } } @@ -1846,7 +1857,7 @@ class spell_item_six_demon_bag : public SpellScript target = caster; } - caster->CastSpell(target, spellId, true, GetCastItem()); + caster->CastSpell(target, spellId, GetCastItem()); } } @@ -1876,8 +1887,9 @@ class spell_item_swift_hand_justice_dummy : public AuraScript PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - int32 amount = caster->CountPctFromMaxHealth(aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_SWIFT_HAND_OF_JUSTICE_HEAL, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_SWIFT_HAND_OF_JUSTICE_HEAL, args); } void Register() override @@ -1905,7 +1917,7 @@ class spell_item_totem_of_flowing_water : public AuraScript void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_LESSER_HEALING_WAVE_MANA, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_LESSER_HEALING_WAVE_MANA, aurEff); } void Register() override @@ -1968,7 +1980,7 @@ class spell_item_underbelly_elixir : public SpellScript case 1: spellId = SPELL_UNDERBELLY_ELIXIR_TRIGGERED1; break; case 2: spellId = SPELL_UNDERBELLY_ELIXIR_TRIGGERED2; break; } - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } void Register() override @@ -2364,7 +2376,7 @@ class spell_item_purify_helboar_meat : public SpellScript void HandleDummy(SpellEffIndex /* effIndex */) { Unit* caster = GetCaster(); - caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true, nullptr); + caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true); } void Register() override @@ -2487,9 +2499,9 @@ class spell_item_nigh_invulnerability : public SpellScript if (Item* castItem = GetCastItem()) { if (roll_chance_i(86)) // Nigh-Invulnerability - success - caster->CastSpell(caster, SPELL_NIGH_INVULNERABILITY, true, castItem); + caster->CastSpell(caster, SPELL_NIGH_INVULNERABILITY, castItem); else // Complete Vulnerability - backfire in 14% casts - caster->CastSpell(caster, SPELL_COMPLETE_VULNERABILITY, true, castItem); + caster->CastSpell(caster, SPELL_COMPLETE_VULNERABILITY, castItem); } } @@ -2517,7 +2529,7 @@ class spell_item_poultryizer : public SpellScript void HandleDummy(SpellEffIndex /* effIndex */) { if (GetCastItem() && GetHitUnit()) - GetCaster()->CastSpell(GetHitUnit(), roll_chance_i(80) ? SPELL_POULTRYIZER_SUCCESS : SPELL_POULTRYIZER_BACKFIRE, true, GetCastItem()); + GetCaster()->CastSpell(GetHitUnit(), roll_chance_i(80) ? SPELL_POULTRYIZER_SUCCESS : SPELL_POULTRYIZER_BACKFIRE, GetCastItem()); } void Register() override @@ -2637,7 +2649,7 @@ class spell_item_complete_raptor_capture : public SpellScript GetHitCreature()->DespawnOrUnsummon(); //cast spell Raptor Capture Credit - caster->CastSpell(caster, SPELL_RAPTOR_CAPTURE_CREDIT, true, nullptr); + caster->CastSpell(caster, SPELL_RAPTOR_CAPTURE_CREDIT, true); } } @@ -2770,7 +2782,7 @@ class spell_item_nitro_boosts : public SpellScript bool success = true; if (areaEntry && areaEntry->IsFlyable() && !caster->GetMap()->IsDungeon()) success = roll_chance_i(95); // nitro boosts can only fail in flying-enabled locations on 3.3.5 - caster->CastSpell(caster, success ? SPELL_NITRO_BOOSTS_SUCCESS : SPELL_NITRO_BOOSTS_BACKFIRE, true, GetCastItem()); + caster->CastSpell(caster, success ? SPELL_NITRO_BOOSTS_SUCCESS : SPELL_NITRO_BOOSTS_BACKFIRE, GetCastItem()); } void Register() override @@ -2800,7 +2812,7 @@ class spell_item_nitro_boosts_backfire : public AuraScript if (curZ < lastZ) { if (roll_chance_i(80)) // we don't have enough sniffs to verify this, guesstimate - GetTarget()->CastSpell(GetTarget(), SPELL_NITRO_BOOSTS_PARACHUTE, true, nullptr, effect); + GetTarget()->CastSpell(GetTarget(), SPELL_NITRO_BOOSTS_PARACHUTE, effect); GetAura()->Remove(); } else @@ -2876,7 +2888,7 @@ class spell_item_rocket_boots : public SpellScript bg->EventPlayerDroppedFlag(caster); caster->GetSpellHistory()->ResetCooldown(SPELL_ROCKET_BOOTS_PROC); - caster->CastSpell(caster, SPELL_ROCKET_BOOTS_PROC, true, nullptr); + caster->CastSpell(caster, SPELL_ROCKET_BOOTS_PROC, true); } SpellCastResult CheckCast() @@ -3103,10 +3115,10 @@ class spell_item_shard_of_the_scale : public SpellScriptLoader Unit* target = eventInfo.GetProcTarget(); if (eventInfo.GetTypeMask() & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS) - caster->CastSpell(target, HealProc, true, nullptr, aurEff); + caster->CastSpell(target, HealProc, aurEff); if (eventInfo.GetTypeMask() & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG) - caster->CastSpell(target, DamageProc, true, nullptr, aurEff); + caster->CastSpell(target, DamageProc, aurEff); } void Register() override @@ -3153,16 +3165,16 @@ class spell_item_soul_preserver : public AuraScript switch (caster->getClass()) { case CLASS_DRUID: - caster->CastSpell(caster, SPELL_SOUL_PRESERVER_DRUID, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_SOUL_PRESERVER_DRUID, aurEff); break; case CLASS_PALADIN: - caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PALADIN, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PALADIN, aurEff); break; case CLASS_PRIEST: - caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PRIEST, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_SOUL_PRESERVER_PRIEST, aurEff); break; case CLASS_SHAMAN: - caster->CastSpell(caster, SPELL_SOUL_PRESERVER_SHAMAN, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_SOUL_PRESERVER_SHAMAN, aurEff); break; default: break; @@ -3237,10 +3249,10 @@ class spell_item_sunwell_neck : public SpellScriptLoader // Aggression checks are in the spell system... just cast and forget if (player->GetReputationRank(FACTION_ALDOR) == REP_EXALTED) - player->CastSpell(target, Aldors, true, nullptr, aurEff); + player->CastSpell(target, Aldors, aurEff); if (player->GetReputationRank(FACTION_SCRYERS) == REP_EXALTED) - player->CastSpell(target, Scryers, true, nullptr, aurEff); + player->CastSpell(target, Scryers, aurEff); } void Register() override @@ -3320,17 +3332,17 @@ class spell_item_death_choice : public AuraScript case SPELL_DEATH_CHOICE_NORMAL_AURA: { if (str > agi) - caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_STRENGTH, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_STRENGTH, aurEff); else - caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_AGILITY, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_DEATH_CHOICE_NORMAL_AGILITY, aurEff); break; } case SPELL_DEATH_CHOICE_HEROIC_AURA: { if (str > agi) - caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_STRENGTH, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_STRENGTH, aurEff); else - caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_AGILITY, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_DEATH_CHOICE_HEROIC_AGILITY, aurEff); break; } default: @@ -3389,7 +3401,7 @@ public: Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, _stackSpell, true, nullptr, aurEff); // cast the stack + caster->CastSpell(caster, _stackSpell, aurEff); // cast the stack Aura* dummy = caster->GetAura(_stackSpell); // retrieve aura @@ -3400,7 +3412,7 @@ public: // if right amount, remove the aura and cast real trigger caster->RemoveAurasDueToSpell(_stackSpell); if (Unit* target = eventInfo.GetActionTarget()) - caster->CastSpell(target, _triggerSpell, true, nullptr, aurEff); + caster->CastSpell(target, _triggerSpell, aurEff); } void Register() override @@ -3483,7 +3495,7 @@ class spell_item_darkmoon_card_greatness : public AuraScript stat = spi; } - caster->CastSpell(caster, spellTrigger, true, nullptr, aurEff); + caster->CastSpell(caster, spellTrigger, aurEff); } void Register() override @@ -3511,13 +3523,12 @@ class spell_item_charm_witch_doctor : public AuraScript { PreventDefaultAction(); - Unit* caster = eventInfo.GetActor(); - Unit* target = eventInfo.GetActionTarget(); - - if (target) + if (Unit* target = eventInfo.GetActionTarget()) { int32 bp = CalculatePct(target->GetCreateHealth(),aurEff->GetSpellInfo()->Effects[1].CalcValue()); - caster->CastCustomSpell(target, SPELL_CHARM_WITCH_DOCTOR_PROC, &bp, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + eventInfo.GetActor()->CastSpell(target, SPELL_CHARM_WITCH_DOCTOR_PROC, args); } } @@ -3555,10 +3566,10 @@ class spell_item_mana_drain : public AuraScript Unit* target = eventInfo.GetActionTarget(); if (caster->IsAlive()) - caster->CastSpell(caster, SPELL_MANA_DRAIN_ENERGIZE, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_MANA_DRAIN_ENERGIZE, aurEff); if (target && target->IsAlive()) - caster->CastSpell(target, SPELL_MANA_DRAIN_LEECH, true, nullptr, aurEff); + caster->CastSpell(target, SPELL_MANA_DRAIN_LEECH, aurEff); } void Register() override @@ -3648,7 +3659,7 @@ class spell_item_mind_control_cap : public SpellScript if (Unit* target = GetHitUnit()) { if (roll_chance_i(ROLL_CHANCE_NO_BACKFIRE)) - caster->CastSpell(target, roll_chance_i(ROLL_CHANCE_DULLARD) ? SPELL_DULLARD : SPELL_GNOMISH_MIND_CONTROL_CAP, true, GetCastItem()); + caster->CastSpell(target, roll_chance_i(ROLL_CHANCE_DULLARD) ? SPELL_DULLARD : SPELL_GNOMISH_MIND_CONTROL_CAP, GetCastItem()); else target->CastSpell(caster, SPELL_GNOMISH_MIND_CONTROL_CAP, true); // backfire - 5% chance } @@ -3690,11 +3701,11 @@ class spell_item_universal_remote : public SpellScript { uint8 chance = urand(0, 99); if (chance < 15) - GetCaster()->CastSpell(target, SPELL_TARGET_LOCK, true, GetCastItem()); + GetCaster()->CastSpell(target, SPELL_TARGET_LOCK, GetCastItem()); else if (chance < 25) - GetCaster()->CastSpell(target, SPELL_MOBILITY_MALFUNCTION, true, GetCastItem()); + GetCaster()->CastSpell(target, SPELL_MOBILITY_MALFUNCTION, GetCastItem()); else - GetCaster()->CastSpell(target, SPELL_CONTROL_MACHINE, true, GetCastItem()); + GetCaster()->CastSpell(target, SPELL_CONTROL_MACHINE, GetCastItem()); } } @@ -3827,7 +3838,7 @@ class spell_item_mad_alchemists_potion : public SpellScript } if (useElixir) - target->CastSpell(target, chosenElixir, true, GetCastItem()); + target->CastSpell(target, chosenElixir, GetCastItem()); } void Register() override @@ -3867,7 +3878,7 @@ class spell_item_crazy_alchemists_potion : public SpellScript uint32 chosenElixir = Trinity::Containers::SelectRandomContainerElement(availableElixirs); - target->CastSpell(target, chosenElixir, true, GetCastItem()); + target->CastSpell(target, chosenElixir, GetCastItem()); } void Register() override diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 8edb3e9cf03..750ee7e8ecf 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -98,7 +98,9 @@ class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_INCANTERS_ABSORBTION_R1, EFFECT_0)) { int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); - target->CastCustomSpell(target, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + target->CastSpell(target, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, args); } } }; @@ -139,7 +141,7 @@ class spell_mage_arcane_potency : public SpellScriptLoader PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); uint32 spellId = triggerSpell[GetSpellInfo()->GetRank() - 1]; - caster->CastSpell(caster, spellId, true, nullptr, aurEff); + caster->CastSpell(caster, spellId, aurEff); } void Register() override @@ -207,7 +209,7 @@ public: { PreventDefaultAction(); if (Unit* target = eventInfo.GetActionTarget()) - target->CastSpell(target, SPELL_MAGE_BLAZING_SPEED, true, nullptr, aurEff); + target->CastSpell(target, SPELL_MAGE_BLAZING_SPEED, aurEff); } void Register() override @@ -285,7 +287,9 @@ class spell_mage_burnout : public SpellScriptLoader int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()); mana = CalculatePct(mana, aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_MAGE_BURNOUT, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(mana); + GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_BURNOUT, args); } void Register() override @@ -448,7 +452,7 @@ class spell_mage_imp_blizzard : public SpellScriptLoader { PreventDefaultAction(); uint32 triggerSpellId = sSpellMgr->GetSpellWithRank(SPELL_MAGE_CHILLED, GetSpellInfo()->GetRank()); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), triggerSpellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), triggerSpellId, aurEff); } void Register() override @@ -482,7 +486,7 @@ class spell_mage_imp_mana_gems : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_MAGE_MANA_SURGE, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_MAGE_MANA_SURGE, aurEff); } void Register() override @@ -526,8 +530,9 @@ class spell_mage_empowered_fire : public SpellScriptLoader PreventDefaultAction(); Unit* target = GetTarget(); - int32 bp0 = int32(CalculatePct(target->GetCreateMana(), aurEff->GetAmount())); - target->CastCustomSpell(SPELL_MAGE_EMPOWERED_FIRE_PROC, SPELLVALUE_BASE_POINT0, bp0, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(target->GetCreateMana(), aurEff->GetAmount())); + target->CastSpell(target, SPELL_MAGE_EMPOWERED_FIRE_PROC, args); } void Register() override @@ -628,7 +633,9 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader { int32 bp = dmgInfo.GetDamage(); dmgInfo.AbsorbDamage(bp); - target->CastCustomSpell(target, SPELL_MAGE_FROST_WARDING_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + target->CastSpell(target, SPELL_MAGE_FROST_WARDING_TRIGGERED, args); absorbAmount = 0; PreventDefaultAction(); } @@ -673,7 +680,7 @@ class spell_mage_focus_magic : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, true, nullptr, aurEff); + GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, aurEff); } void Register() override @@ -880,7 +887,7 @@ class spell_mage_hot_streak : public SpellScriptLoader return; Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, SPELL_MAGE_HOT_STREAK_PROC, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_MAGE_HOT_STREAK_PROC, aurEff); } // reset counter @@ -942,7 +949,7 @@ class spell_mage_ice_barrier : public SpellScriptLoader if (Unit* caster = GetCaster()) if (AuraEffect* dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, SPELL_ICON_MAGE_SHATTERED_BARRIER, EFFECT_0)) if (roll_chance_i(dummy->GetSpellInfo()->ProcChance)) - caster->CastSpell(GetTarget(), SPELL_MAGE_SHATTERED_BARRIER, true, nullptr, aurEff); + caster->CastSpell(GetTarget(), SPELL_MAGE_SHATTERED_BARRIER, aurEff); } void Register() override @@ -989,7 +996,10 @@ class spell_mage_ignite : public SpellScriptLoader ASSERT(igniteDot->GetMaxTicks() > 0); int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks()); amount += eventInfo.GetProcTarget()->GetRemainingPeriodicAmount(eventInfo.GetActor()->GetGUID(), SPELL_MAGE_IGNITE, SPELL_AURA_PERIODIC_DAMAGE); - GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff); + + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_IGNITE, args); } void Register() override @@ -1027,7 +1037,7 @@ class spell_mage_living_bomb : public SpellScriptLoader return; if (Unit* caster = GetCaster()) - caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true, nullptr, aurEff); + caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), aurEff); } void Register() override @@ -1060,9 +1070,11 @@ class spell_mage_magic_absorption : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); + Unit* caster = eventInfo.GetActionTarget(); - int32 bp = CalculatePct(static_cast<int32>(caster->GetMaxPower(POWER_MANA)), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_MAGE_MAGIC_ABSORPTION_MANA, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(caster->GetMaxPower(POWER_MANA), aurEff->GetAmount())); + caster->CastSpell(caster, SPELL_MAGE_MAGIC_ABSORPTION_MANA, args); } void Register() override @@ -1111,7 +1123,7 @@ class spell_mage_mana_shield : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { Unit* caster = eventInfo.GetActionTarget(); - caster->CastSpell(caster, SPELL_MAGE_ARCANE_SURGE, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_MAGE_ARCANE_SURGE, aurEff); } void Register() override @@ -1161,7 +1173,11 @@ class spell_mage_master_of_elements : public SpellScriptLoader mana = CalculatePct(mana, aurEff->GetAmount()); if (mana > 0) - GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(mana); + GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, args); + } } void Register() override diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 811778eacc5..962861cf70d 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -184,12 +184,13 @@ class spell_pal_ardent_defender : public SpellScriptLoader float defenseSkillValue = victim->GetDefenseSkillValue(); // Max heal when defense skill denies critical hits from raid bosses - // Formula: max defense at level + 140 (raiting from gear) + // Formula: max defense at level + 140 (rating from gear) float reqDefForMaxHeal = victim->GetMaxSkillValueForLevel() + 140.0f; float defenseFactor = std::min(1.0f, defenseSkillValue / reqDefForMaxHeal); - int32 healAmount = int32(victim->CountPctFromMaxHealth(static_cast<uint32>(lroundf(_healPct * defenseFactor)))); - victim->CastCustomSpell(PAL_SPELL_ARDENT_DEFENDER_HEAL, SPELLVALUE_BASE_POINT0, healAmount, victim, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(victim->CountPctFromMaxHealth(lroundf(_healPct * defenseFactor))); + victim->CastSpell(victim, PAL_SPELL_ARDENT_DEFENDER_HEAL, args); victim->GetSpellHistory()->AddCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL, 0, std::chrono::minutes(2)); } else if (remainingHealth < int32(allowedHealth)) @@ -309,8 +310,9 @@ class spell_pal_avenging_wrath : public SpellScriptLoader Unit* target = GetTarget(); if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_PALADIN_SANCTIFIED_WRATH_TALENT_R1, EFFECT_2)) { - int32 basepoints = aurEff->GetAmount(); - target->CastCustomSpell(target, SPELL_PALADIN_SANCTIFIED_WRATH, &basepoints, &basepoints, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + target->CastSpell(target, SPELL_PALADIN_SANCTIFIED_WRATH, args); } } @@ -347,7 +349,7 @@ class spell_pal_beacon_of_light : public AuraScript PreventDefaultAction(); // area aura owner casts the spell - GetAura()->GetUnitOwner()->CastSpell(GetTarget(), GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, nullptr, aurEff, GetAura()->GetUnitOwner()->GetGUID()); + GetAura()->GetUnitOwner()->CastSpell(GetTarget(), GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, { aurEff, GetAura()->GetUnitOwner()->GetGUID() }); } void Register() override @@ -457,7 +459,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE, aurEff); } void Register() override @@ -584,7 +586,9 @@ class spell_pal_divine_storm : public SpellScriptLoader void TriggerHeal() { Unit* caster = GetCaster(); - caster->CastCustomSpell(SPELL_PALADIN_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * _healPct) / 100, caster, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(CalculatePct(GetHitDamage(), _healPct)); + caster->CastSpell(caster, SPELL_PALADIN_DIVINE_STORM_DUMMY, args); } void Register() override @@ -625,8 +629,9 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader if (!_targetCount || ! GetHitUnit()) return; - int32 heal = GetEffectValue() / _targetCount; - GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_PALADIN_DIVINE_STORM_HEAL, &heal, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetEffectValue() / _targetCount); + GetCaster()->CastSpell(GetHitUnit(), SPELL_PALADIN_DIVINE_STORM_HEAL, args); } uint32 _targetCount = 0; @@ -704,7 +709,9 @@ class spell_pal_eye_for_an_eye : public SpellScriptLoader // return damage % to attacker but < 50% own total health int32 damage = std::min(CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()), static_cast<int32>(GetTarget()->GetMaxHealth()) / 2); - GetTarget()->CastCustomSpell(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damage); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, args); } void Register() override @@ -745,8 +752,9 @@ class spell_pal_glyph_of_divinity : public SpellScriptLoader if (caster == eventInfo.GetProcTarget()) return; - int32 mana = spellInfo->Effects[EFFECT_1].CalcValue() * 2; - caster->CastCustomSpell(SPELL_PALADIN_GLYPH_OF_DIVINITY_PROC, SPELLVALUE_BASE_POINT1, mana, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, spellInfo->Effects[EFFECT_1].CalcValue() * 2); + caster->CastSpell(nullptr, SPELL_PALADIN_GLYPH_OF_DIVINITY_PROC, args); } void Register() override @@ -816,11 +824,9 @@ class spell_pal_glyph_of_holy_light_dummy : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - Unit* caster = eventInfo.GetActor(); - Unit* target = eventInfo.GetProcTarget(); - int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount()); - - caster->CastCustomSpell(SPELL_PALADIN_GLYPH_OF_HOLY_LIGHT_HEAL, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PALADIN_GLYPH_OF_HOLY_LIGHT_HEAL, args); } void Register() override @@ -956,7 +962,7 @@ class spell_pal_heart_of_the_crusader : public SpellScriptLoader PreventDefaultAction(); uint32 spellId = sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HEART_OF_THE_CRUSADER_EFF_R1, GetSpellInfo()->GetRank()); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff); } void Register() override @@ -1082,7 +1088,9 @@ public: { Unit* target = eventInfo.GetActor(); // Paladin is the target of the energize uint32 bp = CalculatePct(originalSpell->CalcPowerCost(target, originalSpell->GetSchoolMask()), aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue()); - target->CastCustomSpell(SPELL_PALADIN_ILLUMINATION_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + target->CastSpell(target, SPELL_PALADIN_ILLUMINATION_ENERGIZE, args); } } } @@ -1225,7 +1233,7 @@ class spell_pal_improved_lay_of_hands : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActionTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true, nullptr, aurEff, GetTarget()->GetGUID()); + eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActionTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, { aurEff, GetTarget()->GetGUID() }); } void Register() override @@ -1287,7 +1295,9 @@ class spell_pal_infusion_of_light : public SpellScriptLoader if (AuraEffect const* bonus = target->GetAuraEffect(SPELL_PALADIN_T9_HOLY_4P_BONUS, 0)) AddPct(bp0, bonus->GetAmount()); - target->CastCustomSpell(SPELL_PALADIN_FLASH_OF_LIGHT_PROC, SPELLVALUE_BASE_POINT0, bp0, procTarget, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp0); + target->CastSpell(procTarget, SPELL_PALADIN_FLASH_OF_LIGHT_PROC, args); } } // but should not proc on non-critical Holy Shocks @@ -1326,7 +1336,7 @@ class spell_pal_item_healing_discount : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, aurEff); } void Register() override @@ -1386,7 +1396,7 @@ class spell_pal_item_t6_trinket : public SpellScriptLoader return; if (roll_chance_i(chance)) - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff); } void Register() override @@ -1478,8 +1488,7 @@ class spell_pal_judgement_of_command : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { if (Unit* unitTarget = GetHitUnit()) - if (SpellInfo const* spell_proto = sSpellMgr->GetSpellInfo(GetEffectValue())) - GetCaster()->CastSpell(unitTarget, spell_proto, true, nullptr); + GetCaster()->CastSpell(unitTarget, GetEffectValue(), true); } void Register() override @@ -1514,9 +1523,11 @@ class spell_pal_judgement_of_light_heal : public SpellScriptLoader PreventDefaultAction(); Unit* caster = eventInfo.GetProcTarget(); - int32 amount = static_cast<int32>(caster->CountPctFromMaxHealth(aurEff->GetAmount())); - caster->CastCustomSpell(SPELL_PALADIN_JUDGEMENT_OF_LIGHT_HEAL, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_PALADIN_JUDGEMENT_OF_LIGHT_HEAL, args); } void Register() override @@ -1559,7 +1570,10 @@ class spell_pal_judgement_of_wisdom_mana : public SpellScriptLoader Unit* caster = eventInfo.GetProcTarget(); int32 const amount = CalculatePct(static_cast<int32>(caster->GetCreateMana()), spellInfo->Effects[EFFECT_0].CalcValue()); - caster->CastCustomSpell(spellInfo->Id, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, spellInfo->Id, args); } void Register() override @@ -1593,7 +1607,7 @@ class spell_pal_judgements_of_the_just : public SpellScriptLoader void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetActionTarget(), SPELL_PALADIN_JUDGEMENTS_OF_THE_JUST_PROC, true, nullptr, aurEff); + GetTarget()->CastSpell(eventInfo.GetActionTarget(), SPELL_PALADIN_JUDGEMENTS_OF_THE_JUST_PROC, aurEff); } void Register() override @@ -1632,8 +1646,8 @@ class spell_pal_judgements_of_the_wise : public SpellScriptLoader PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastSpell(nullptr, SPELL_PALADIN_JUDGEMENTS_OF_THE_WISE_MANA, true, nullptr, aurEff); - caster->CastSpell(nullptr, SPELL_REPLENISHMENT, true, nullptr, aurEff); + caster->CastSpell(nullptr, SPELL_PALADIN_JUDGEMENTS_OF_THE_WISE_MANA, aurEff); + caster->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff); } void Register() override @@ -1754,7 +1768,9 @@ class spell_pal_light_s_beacon : public SpellScriptLoader /// @todo: caster must be the healed unit to perform distance checks correctly /// but that will break animation on clientside /// caster in spell packets must be the healing unit - eventInfo.GetActor()->CastCustomSpell(healSpellId, SPELLVALUE_BASE_POINT0, heal, beaconTarget, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(heal); + eventInfo.GetActor()->CastSpell(beaconTarget, healSpellId, args); } void Register() override @@ -1866,7 +1882,9 @@ class spell_pal_righteous_vengeance : public SpellScriptLoader // Add remaining ticks to damage done amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_PALADIN_RIGHTEOUS_VENGEANCE_DAMAGE, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_PALADIN_RIGHTEOUS_VENGEANCE_DAMAGE, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_PALADIN_RIGHTEOUS_VENGEANCE_DAMAGE, args); } void Register() override @@ -1961,7 +1979,7 @@ class spell_pal_sacred_shield_dummy : public SpellScriptLoader cooldown = Seconds(bonus->GetAmount()); _cooldownEnd = now + cooldown; - caster->CastSpell(eventInfo.GetActionTarget(), SPELL_PALADIN_SACRED_SHIELD_TRIGGER, true, nullptr, aurEff); + caster->CastSpell(eventInfo.GetActionTarget(), SPELL_PALADIN_SACRED_SHIELD_TRIGGER, aurEff); } void Register() override @@ -2007,7 +2025,9 @@ class spell_pal_seal_of_righteousness : public SpellScriptLoader int32 holy = GetTarget()->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_HOLY); holy += eventInfo.GetProcTarget()->SpellBaseDamageBonusTaken(SPELL_SCHOOL_MASK_HOLY); int32 bp = int32((ap * 0.022f + 0.044f * holy) * GetTarget()->GetAttackTime(BASE_ATTACK) / 1000); - GetTarget()->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS, args); } void Register() override @@ -2075,7 +2095,7 @@ class spell_pal_seal_of_vengeance : public SpellScriptLoader } // don't cast triggered, spell already has SPELL_ATTR4_CAN_CAST_WHILE_CASTING attr - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), DoTSpell, TRIGGERED_DONT_RESET_PERIODIC_TIMER, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), DoTSpell, CastSpellExtraArgs(TRIGGERED_DONT_RESET_PERIODIC_TIMER).SetTriggeringAura(aurEff)); } void HandleSeal(AuraEffect const* aurEff, ProcEventInfo& eventInfo) @@ -2101,7 +2121,9 @@ class spell_pal_seal_of_vengeance : public SpellScriptLoader amount *= stacks; amount /= maxStacks; - caster->CastCustomSpell(DamageSpell, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, DamageSpell, args); } void Register() override @@ -2183,7 +2205,9 @@ class spell_pal_spiritual_attunement : public SpellScriptLoader HealInfo* healInfo = eventInfo.GetHealInfo(); int32 amount = CalculatePct(static_cast<int32>(healInfo->GetEffectiveHeal()), aurEff->GetAmount()); - eventInfo.GetActionTarget()->CastCustomSpell(SPELL_PALADIN_SPIRITUAL_ATTUNEMENT_MANA, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_PALADIN_SPIRITUAL_ATTUNEMENT_MANA, args); } void Register() override @@ -2233,7 +2257,9 @@ class spell_pal_sheath_of_light : public SpellScriptLoader // Add remaining ticks to healing done amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_PALADIN_SHEATH_OF_LIGHT_HEAL, SPELL_AURA_PERIODIC_HEAL); - caster->CastCustomSpell(SPELL_PALADIN_SHEATH_OF_LIGHT_HEAL, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_PALADIN_SHEATH_OF_LIGHT_HEAL, args); } void Register() override @@ -2300,7 +2326,7 @@ class spell_pal_t3_6p_bonus : public SpellScriptLoader return; } - caster->CastSpell(target, spellId, true, nullptr, aurEff); + caster->CastSpell(target, spellId, aurEff); } void Register() override @@ -2349,7 +2375,9 @@ class spell_pal_t8_2p_bonus : public SpellScriptLoader // Add remaining ticks to healing done amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_PALADIN_HOLY_MENDING, SPELL_AURA_PERIODIC_HEAL); - caster->CastCustomSpell(SPELL_PALADIN_HOLY_MENDING, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_PALADIN_HOLY_MENDING, args); } void Register() override diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index ee7fc69b71c..58bf170d012 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -130,8 +130,9 @@ class spell_pri_aq_3p_bonus : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), 10); - caster->CastCustomSpell(SPELL_PRIEST_ORACULAR_HEAL, SPELLVALUE_BASE_POINT0, amount, caster, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), 10)); + caster->CastSpell(caster, SPELL_PRIEST_ORACULAR_HEAL, args); } void Register() override @@ -177,7 +178,10 @@ public: ASSERT(triggerInfo->GetMaxTicks() > 0); bp /= triggerInfo->GetMaxTicks(); bp += target->GetRemainingPeriodicAmount(target->GetGUID(), triggerSpell, SPELL_AURA_PERIODIC_HEAL); - target->CastCustomSpell(triggerSpell, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff); + + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp); + target->CastSpell(target, triggerSpell, args); } void Register() override @@ -236,7 +240,7 @@ class spell_pri_body_and_soul : public SpellScriptLoader return; if (roll_chance_i(aurEff->GetAmount())) - caster->CastSpell(caster, SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_PRIEST_BODY_AND_SOUL_POISON_TRIGGER, aurEff); } void Register() override @@ -328,7 +332,9 @@ class spell_pri_divine_aegis : public SpellScriptLoader absorb = std::min(absorb, eventInfo.GetProcTarget()->getLevel() * 125); - GetTarget()->CastCustomSpell(SPELL_PRIEST_DIVINE_AEGIS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(absorb); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_DIVINE_AEGIS, args); } void Register() override @@ -402,11 +408,11 @@ class spell_pri_glyph_of_dispel_magic : public SpellScriptLoader if (!spellInfo || spellInfo->SpellIconID != 74) return; - Unit* caster = eventInfo.GetActor(); Unit* target = eventInfo.GetProcTarget(); - int32 amount = static_cast<int32>(target->CountPctFromMaxHealth(aurEff->GetAmount())); - caster->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(target->CountPctFromMaxHealth(aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(target, SPELL_PRIEST_GLYPH_OF_DISPEL_MAGIC_HEAL, args); } void Register() override @@ -447,8 +453,9 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader SpellInfo const* triggeredSpellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL); ASSERT(triggeredSpellInfo->GetMaxTicks() > 0); - int32 heal = int32(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); - GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, args); } void Register() override @@ -501,7 +508,9 @@ class spell_pri_guardian_spirit : public SpellScriptLoader int32 healAmount = int32(target->CountPctFromMaxHealth(healPct)); // remove the aura now, we don't want 40% healing bonus Remove(AURA_REMOVE_BY_ENEMY_SPELL); - target->CastCustomSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, &healAmount, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(healAmount); + target->CastSpell(target, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL, args); absorbAmount = dmgInfo.GetDamage(); } @@ -652,10 +661,10 @@ class spell_pri_item_t6_trinket : public SpellScriptLoader PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_HEAL) - caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_BLESSING, true, nullptr, aurEff); + caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_BLESSING, aurEff); if (eventInfo.GetSpellTypeMask() & PROC_SPELL_TYPE_DAMAGE) - caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_WRATH, true, nullptr, aurEff); + caster->CastSpell(nullptr, SPELL_PRIEST_DIVINE_WRATH, aurEff); } void Register() override @@ -781,7 +790,7 @@ class spell_pri_mana_leech : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, true, nullptr, aurEff); + GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, aurEff); } void Register() override @@ -1025,8 +1034,9 @@ class spell_pri_power_word_shield : public SpellScriptLoader if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0)) { - int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); - target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, &bp, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(absorbAmount, talentAurEff->GetAmount())); + target->CastSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, args); } } @@ -1110,8 +1120,9 @@ class spell_pri_renew : public SpellScriptLoader heal *= GetSpellInfo()->GetMaxTicks(); - int32 basepoints0 = CalculatePct(heal, empoweredRenewAurEff->GetAmount()); - caster->CastCustomSpell(SPELL_PRIEST_EMPOWERED_RENEW, SPELLVALUE_BASE_POINT0, basepoints0, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(heal, empoweredRenewAurEff->GetAmount())); + caster->CastSpell(GetTarget(), SPELL_PRIEST_EMPOWERED_RENEW, args); } } @@ -1159,7 +1170,7 @@ class spell_pri_shadowfiend_death : public SpellScriptLoader { PreventDefaultAction(); Unit* caster = eventInfo.GetActionTarget()->GetOwner(); - caster->CastSpell(caster, SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_PRIEST_GLYPH_OF_SHADOWFIEND_MANA, aurEff); } void Register() override @@ -1193,7 +1204,9 @@ class spell_pri_shadow_word_death : public SpellScriptLoader if (AuraEffect* aurEff = GetCaster()->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_PAIN_AND_SUFFERING, EFFECT_1)) AddPct(damage, aurEff->GetAmount()); - GetCaster()->CastCustomSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, &damage, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(damage); + GetCaster()->CastSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, args); } void Register() override @@ -1232,8 +1245,10 @@ class spell_pri_vampiric_embrace : public SpellScriptLoader int32 selfHeal = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); int32 partyHeal = selfHeal / 5; - Unit* caster = eventInfo.GetActor(); - caster->CastCustomSpell((Unit*)nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, &partyHeal, &selfHeal, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(partyHeal); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, selfHeal); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, args); } void Register() override @@ -1280,9 +1295,10 @@ class spell_pri_vampiric_touch : public SpellScriptLoader { if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) { - int32 damage = aurEff->GetAmount() * 8; // backfire damage - caster->CastCustomSpell(SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, SPELLVALUE_BASE_POINT0, damage, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount() * 8); + caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args); } } } @@ -1291,7 +1307,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff); } void Register() override @@ -1327,7 +1343,7 @@ class spell_pri_t3_4p_bonus : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_PRIEST_ARMOR_OF_FAITH, aurEff); } void Register() override @@ -1371,7 +1387,7 @@ class spell_pri_t5_heal_2p_bonus : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, aurEff); } void Register() override @@ -1421,7 +1437,9 @@ class spell_pri_t10_heal_2p_bonus : public SpellScriptLoader Unit* target = eventInfo.GetProcTarget(); amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_PRIEST_BLESSED_HEALING, SPELL_AURA_PERIODIC_HEAL); - caster->CastCustomSpell(SPELL_PRIEST_BLESSED_HEALING, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_PRIEST_BLESSED_HEALING, args); } void Register() override diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index eb6885f7e34..f29055af42f 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -157,7 +157,7 @@ class spell_q5206_test_fetid_skull : public SpellScriptLoader { Unit* caster = GetCaster(); uint32 spellId = roll_chance_i(50) ? SPELL_CREATE_RESONATING_SKULL : SPELL_CREATE_BONE_DUST; - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } void Register() override @@ -321,7 +321,7 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader if (target->GetTypeId() == TYPEID_UNIT && target->HasAura(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3)) // Make sure nobody else is channeling the same target if (!target->HasAura(SPELL_SCOURGING_CRYSTAL_CONTROLLER)) - GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, true, GetCastItem()); + GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, GetCastItem()); } void Register() override @@ -498,7 +498,7 @@ class spell_q11730_ultrasonic_screwdriver : public SpellScriptLoader default: return; } - caster->CastSpell(caster, spellId, true, castItem); + caster->CastSpell(caster, spellId, castItem); caster->CastSpell(caster, SPELL_ROBOT_KILL_CREDIT, true); target->DespawnOrUnsummon(); } @@ -608,7 +608,7 @@ class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader // sometimes, if you're lucky, you get a dwarf if (roll_chance_i(5)) spellId = SPELL_SUMMON_ADVENTUROUS_DWARF; - GetCaster()->CastSpell(GetCaster(), spellId, true, nullptr); + GetCaster()->CastSpell(GetCaster(), spellId, true); } void Register() override @@ -642,7 +642,7 @@ class spell_q12683_take_sputum_sample : public SpellScriptLoader if (caster->HasAuraEffect(reqAuraId, 0)) { uint32 spellId = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); - caster->CastSpell(caster, spellId, true, nullptr); + caster->CastSpell(caster, spellId, true); } } @@ -752,7 +752,7 @@ class spell_q12937_relief_for_the_fallen : public SpellScriptLoader Player* caster = GetCaster()->ToPlayer(); if (Creature* target = GetHitCreature()) { - caster->CastSpell(caster, SPELL_TRIGGER_AID_OF_THE_EARTHEN, true, nullptr); + caster->CastSpell(caster, SPELL_TRIGGER_AID_OF_THE_EARTHEN, true); caster->KilledMonsterCredit(NPC_FALLEN_EARTHEN_DEFENDER); target->DespawnOrUnsummon(); } @@ -1922,7 +1922,7 @@ class spell_q13086_cannons_target : public SpellScriptLoader void HandleEffectDummy(SpellEffIndex /*effIndex*/) { if (WorldLocation const* pos = GetExplTargetDest()) - GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), GetEffectValue(), true); + GetCaster()->CastSpell(pos->GetPosition(), GetEffectValue(), true); } void Register() override @@ -2215,7 +2215,7 @@ class spell_q12619_emblazon_runeblade : public SpellScriptLoader { PreventDefaultAction(); if (Unit* caster = GetCaster()) - caster->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, nullptr, aurEff); + caster->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, aurEff); } void Register() override @@ -2279,10 +2279,11 @@ class spell_q12919_gymers_grab : public SpellScriptLoader void HandleScript(SpellEffIndex /*effIndex*/) { - int8 seatId = 2; if (!GetHitCreature()) return; - GetHitCreature()->CastCustomSpell(SPELL_RIDE_GYMER, SPELLVALUE_BASE_POINT0, seatId, GetCaster(), true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(2); + GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE_GYMER, args); GetHitCreature()->CastSpell(GetHitCreature(), SPELL_GRABBED, true); } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index d7c0e61ec1e..8f024b95d7d 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -83,8 +83,9 @@ class spell_rog_blade_flurry : public SpellScriptLoader PreventDefaultAction(); if (DamageInfo* damageInfo = eventInfo.GetDamageInfo()) { - int32 damage = damageInfo->GetDamage(); - GetTarget()->CastCustomSpell(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damageInfo->GetDamage()); + GetTarget()->CastSpell(_procTarget, SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, args); } } @@ -221,7 +222,7 @@ class spell_rog_deadly_brew : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_CRIPPLING_POISON, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_CRIPPLING_POISON, aurEff); } void Register() override @@ -306,9 +307,9 @@ class spell_rog_deadly_poison : public SpellScriptLoader continue; if (spellInfo->IsPositive()) - player->CastSpell(player, enchant->spellid[s], true, item); + player->CastSpell(player, enchant->spellid[s], item); else - player->CastSpell(target, enchant->spellid[s], true, item); + player->CastSpell(target, enchant->spellid[s], item); } } } @@ -590,8 +591,9 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader { if (!target->HasAura(SPELL_ROGUE_PREY_ON_THE_WEAK)) { - int32 bp = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); - target->CastCustomSpell(target, SPELL_ROGUE_PREY_ON_THE_WEAK, &bp, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetSpellInfo()->Effects[EFFECT_0].CalcValue()); + target->CastSpell(target, SPELL_ROGUE_PREY_ON_THE_WEAK, args); } } else @@ -634,7 +636,9 @@ class spell_rog_quick_recovery : public SpellScriptLoader Unit* caster = eventInfo.GetActor(); int32 amount = CalculatePct(spellInfo->CalcPowerCost(caster, spellInfo->GetSchoolMask()), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_ROGUE_QUICK_RECOVERY_ENERGY, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, SPELL_ROGUE_QUICK_RECOVERY_ENERGY, args); } void Register() override @@ -733,7 +737,7 @@ class spell_rog_glyph_of_backstab : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_GLYPH_OF_BACKSTAB_TRIGGER, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_ROGUE_GLYPH_OF_BACKSTAB_TRIGGER, aurEff); } void Register() override @@ -995,7 +999,7 @@ public: return; Unit* target = GetTarget(); - target->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, nullptr, aurEff, caster->GetGUID()); + target->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, { aurEff, caster->GetGUID() }); } void Register() override @@ -1097,7 +1101,7 @@ class spell_rog_turn_the_tables : public SpellScriptLoader if (!caster) return; - caster->CastSpell(nullptr, GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true, nullptr, aurEff); + caster->CastSpell(nullptr, GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, aurEff); } void Register() override diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 87d426d4df9..3f03cb6a899 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -120,8 +120,9 @@ class spell_sha_ancestral_awakening : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount()); - eventInfo.GetActor()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_AWAKENING_DUMMY, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount())); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_SHAMAN_ANCESTRAL_AWAKENING_DUMMY, args); } void Register() override @@ -165,9 +166,13 @@ class spell_sha_ancestral_awakening_proc : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 damage = GetEffectValue(); - if (GetHitUnit()) - GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, &damage, nullptr, nullptr, true); + Unit* target = GetHitUnit(); + if (!target) + return; + + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetEffectValue()); + GetCaster()->CastSpell(target, SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, args); } void Register() override @@ -392,9 +397,12 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 bp = 1; if (GetCaster() && GetHitUnit() && GetOriginalCaster()) - GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT, nullptr, &bp, nullptr, true, nullptr, nullptr, GetOriginalCaster()->GetGUID()); + { + CastSpellExtraArgs args(GetOriginalCaster()->GetGUID()); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, 1); + GetCaster()->CastSpell(GetHitUnit(), SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT, args); + } } void Register() override @@ -435,7 +443,10 @@ class spell_sha_earth_shield : public SpellScriptLoader { PreventDefaultAction(); - GetTarget()->CastCustomSpell(SPELL_SHAMAN_EARTH_SHIELD_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_EARTH_SHIELD_HEAL, args); } void Register() override @@ -751,8 +762,10 @@ class spell_sha_flametongue_weapon : public SpellScriptLoader spellPowerBonus *= spCoeff * attackSpeed; // All done, now proc damage - int32 amount = static_cast<int32>(fireDamage + spellPowerBonus); - player->CastCustomSpell(SPELL_SHAMAN_FLAMETONGUE_ATTACK, SPELLVALUE_BASE_POINT0, amount, target, true, item, aurEff); + CastSpellExtraArgs args(aurEff); + args.CastItem = item; + args.SpellValueOverrides.AddBP0(fireDamage + spellPowerBonus); + player->CastSpell(target, SPELL_SHAMAN_FLAMETONGUE_ATTACK, args); } void Register() override @@ -798,7 +811,7 @@ class spell_sha_frozen_power : public SpellScriptLoader if (caster->GetDistance(target) < minDistance) return; - caster->CastSpell(target, SPELL_SHAMAN_FREEZE, true, nullptr, aurEff); + caster->CastSpell(target, SPELL_SHAMAN_FREEZE, aurEff); } void Register() override @@ -878,8 +891,9 @@ class spell_sha_glyph_of_healing_wave : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - int32 amount = CalculatePct(static_cast<int32>(healInfo->GetHeal()), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_SHAMAN_GLYPH_OF_HEALING_WAVE_HEAL, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_SHAMAN_GLYPH_OF_HEALING_WAVE_HEAL, args); } void Register() override @@ -937,7 +951,10 @@ class spell_sha_glyph_of_totem_of_wrath : public SpellScriptLoader int32 bp0 = CalculatePct(totemSpell->Effects[EFFECT_0].CalcValue(caster), aurEff->GetAmount()); int32 bp1 = CalculatePct(totemSpell->Effects[EFFECT_1].CalcValue(caster), aurEff->GetAmount()); - caster->CastCustomSpell((Unit*)nullptr, SPELL_SHAMAN_TOTEM_OF_WRATH_SPELL_POWER, &bp0, &bp1, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp0); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, bp1); + caster->CastSpell(nullptr, SPELL_SHAMAN_TOTEM_OF_WRATH_SPELL_POWER, args); } void Register() override @@ -992,7 +1009,9 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader damage = int32(target->SpellHealingBonusTaken(owner, triggeringSpell, damage, HEAL)); } - caster->CastCustomSpell(SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, SPELLVALUE_BASE_POINT0, damage, target, true, nullptr, nullptr, GetOriginalCaster()->GetGUID()); + CastSpellExtraArgs args(GetOriginalCaster()->GetGUID()); + args.SpellValueOverrides.AddBP0(damage); + caster->CastSpell(target, SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, args); } } } @@ -1093,7 +1112,7 @@ class spell_sha_imp_water_shield : public SpellScriptLoader return; uint32 spellId = waterShield->GetSpellInfo()->Effects[waterShield->GetEffIndex()].TriggerSpell; - caster->CastSpell(nullptr, spellId, true, nullptr, aurEff); + caster->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -1154,7 +1173,7 @@ class spell_sha_lightning_overload : public SpellScriptLoader spellId = sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD_R1, spellInfo->GetRank()); } - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff); } void Register() override @@ -1187,7 +1206,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, true, nullptr, aurEff); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, aurEff); } void Register() override @@ -1220,7 +1239,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, aurEff); } void Register() override @@ -1258,9 +1277,10 @@ class spell_sha_item_mana_surge : public SpellScriptLoader return; int32 mana = spellInfo->CalcPowerCost(GetTarget(), eventInfo.GetSchoolMask()); - int32 damage = CalculatePct(mana, 35); - GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(mana, 35)); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_MANA_SURGE, args); } void Register() override @@ -1326,7 +1346,7 @@ class spell_sha_item_t6_trinket : public SpellScriptLoader return; if (roll_chance_i(chance)) - eventInfo.GetActor()->CastSpell(nullptr, spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -1447,7 +1467,7 @@ public: PreventDefaultAction(); uint32 triggerSpell = sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_LIGHTNING_SHIELD_R1, aurEff->GetSpellInfo()->GetRank()); - eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActor(), triggerSpell, true, nullptr, aurEff); + eventInfo.GetActionTarget()->CastSpell(eventInfo.GetActor(), triggerSpell, aurEff); } void Register() override @@ -1492,7 +1512,7 @@ class spell_sha_maelstrom_weapon : public SpellScriptLoader if (!aurEff || !roll_chance_i(aurEff->GetAmount())) return; - caster->CastSpell(nullptr, SPELL_SHAMAN_MAELSTROM_POWER, true, nullptr, aurEff); + caster->CastSpell(nullptr, SPELL_SHAMAN_MAELSTROM_POWER, aurEff); } void Register() override @@ -1524,11 +1544,14 @@ class spell_sha_mana_spring_totem : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 damage = GetEffectValue(); if (Unit* target = GetHitUnit()) if (Unit* caster = GetCaster()) if (target->getPowerType() == POWER_MANA) - caster->CastCustomSpell(target, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE, &damage, nullptr, nullptr, true, nullptr, nullptr, GetOriginalCaster()->GetGUID()); + { + CastSpellExtraArgs args(GetOriginalCaster()->GetGUID()); + args.SpellValueOverrides.AddBP0(GetEffectValue()); + caster->CastSpell(target, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE, args); + } } void Register() override @@ -1558,7 +1581,9 @@ class spell_sha_mana_tide : public AuraScript { PreventDefaultAction(); - GetTarget()->CastCustomSpell(GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + GetTarget()->CastSpell(nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, args); } void Register() override @@ -1596,8 +1621,9 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader if (AuraEffect* dummy = owner->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_MANA_TIDE, 0)) effValue += dummy->GetAmount(); // Regenerate 6% of Total Mana Every 3 secs - int32 effBasePoints0 = int32(CalculatePct(unitTarget->GetMaxPower(POWER_MANA), effValue)); - caster->CastCustomSpell(SPELL_SHAMAN_MANA_TIDE_TOTEM, SPELLVALUE_BASE_POINT0, effBasePoints0, unitTarget, true, nullptr, nullptr, GetOriginalCaster()->GetGUID()); + CastSpellExtraArgs args(GetOriginalCaster()->GetGUID()); + args.SpellValueOverrides.AddBP0(CalculatePct(unitTarget->GetMaxPower(POWER_MANA), effValue)); + caster->CastSpell(unitTarget, SPELL_SHAMAN_MANA_TIDE_TOTEM, args); } } } @@ -1643,8 +1669,9 @@ public: { if (target->HealthBelowPctDamaged(healthpct, damageInfo->GetDamage())) { - uint32 bp = CalculatePct(target->GetMaxHealth(), aurEff->GetAmount()); - target->CastCustomSpell(SPELL_SHAMAN_NATURE_GUARDIAN, SPELLVALUE_BASE_POINT0, bp, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(target->GetMaxHealth(), aurEff->GetAmount())); + target->CastSpell(target, SPELL_SHAMAN_NATURE_GUARDIAN, args); // Threat reduction is around 10% confirmed in retail and from wiki Unit* attacker = eventInfo.GetActor(); @@ -1730,7 +1757,9 @@ class spell_sha_shamanistic_rage : public SpellScriptLoader Unit* target = GetTarget(); int32 amount = CalculatePct(static_cast<int32>(target->GetTotalAttackPowerValue(BASE_ATTACK)), aurEff->GetAmount()); - target->CastCustomSpell(SPELL_SHAMAN_SHAMANISTIC_RAGE_PROC, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + target->CastSpell(target, SPELL_SHAMAN_SHAMANISTIC_RAGE_PROC, args); } void Register() override @@ -1772,9 +1801,10 @@ class spell_sha_spirit_hunt : public SpellScriptLoader if (!target) return; - int32 amount = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_SHAMAN_SPIRIT_HUNT_HEAL, SPELLVALUE_BASE_POINT0, amount, caster, true, nullptr, aurEff); - caster->CastCustomSpell(SPELL_SHAMAN_SPIRIT_HUNT_HEAL, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + caster->CastSpell(caster, SPELL_SHAMAN_SPIRIT_HUNT_HEAL, args); + caster->CastSpell(target, SPELL_SHAMAN_SPIRIT_HUNT_HEAL, args); } void Register() override @@ -1816,7 +1846,7 @@ class spell_sha_static_shock : public SpellScriptLoader return; uint32 spellId = sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_LIGHTNING_SHIELD_DAMAGE_R1, lightningShield->GetSpellInfo()->GetRank()); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), spellId, aurEff); lightningShield->GetBase()->DropCharge(); } @@ -1916,7 +1946,7 @@ public: if (!target->m_SummonSlot[i]) return; - target->CastSpell(target, SPELL_SHAMAN_TOTEMIC_MASTERY, true, nullptr, aurEff); + target->CastSpell(target, SPELL_SHAMAN_TOTEMIC_MASTERY, aurEff); PreventDefaultAction(); } @@ -1984,7 +2014,7 @@ class spell_sha_t3_6p_bonus : public SpellScriptLoader return; } - caster->CastSpell(target, spellId, true, nullptr, aurEff); + caster->CastSpell(target, spellId, aurEff); } void Register() override @@ -2053,7 +2083,9 @@ class spell_sha_t8_elemental_4p_bonus : public SpellScriptLoader Unit* target = eventInfo.GetProcTarget(); amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_SHAMAN_ELECTRIFIED, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_SHAMAN_ELECTRIFIED, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_SHAMAN_ELECTRIFIED, args); } void Register() override @@ -2102,7 +2134,9 @@ class spell_sha_t9_elemental_4p_bonus : public SpellScriptLoader Unit* target = eventInfo.GetProcTarget(); amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE, args); } void Register() override @@ -2196,7 +2230,9 @@ class spell_sha_t10_restoration_4p_bonus : public SpellScriptLoader Unit* target = eventInfo.GetProcTarget(); amount += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_SHAMAN_CHAINED_HEAL, SPELL_AURA_PERIODIC_HEAL); - caster->CastCustomSpell(SPELL_SHAMAN_CHAINED_HEAL, SPELLVALUE_BASE_POINT0, amount, target, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(target, SPELL_SHAMAN_CHAINED_HEAL, args); } void Register() override @@ -2290,9 +2326,11 @@ class spell_sha_windfury_weapon : public SpellScriptLoader // Value gained from additional AP int32 amount = static_cast<int32>(extraAttackPower / 14.f * player->GetAttackTime(attType) / 1000.f); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); // Attack twice for (uint8 i = 0; i < 2; ++i) - player->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, item, aurEff); + player->CastSpell(eventInfo.GetProcTarget(), spellId, args); } void Register() override diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 3ee5f8f4e7c..22d85effdf3 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -255,7 +255,7 @@ class spell_warl_curse_of_doom : public SpellScriptLoader return; if (GetCaster()->ToPlayer()->isHonorOrXPTarget(GetTarget())) - GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT, true, nullptr, aurEff); + GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT, aurEff); } void Register() override @@ -424,8 +424,10 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader case CREATURE_FAMILY_VOIDWALKER: { SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER); - int32 hp = int32(targetCreature->CountPctFromMaxHealth(GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0))); - targetCreature->CastCustomSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, &hp, nullptr, nullptr, true); + int32 hp = targetCreature->CountPctFromMaxHealth(GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0)); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(hp); + targetCreature->CastSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, args); //unitTarget->CastSpell(unitTarget, 54441, true); break; } @@ -487,7 +489,9 @@ class spell_warl_drain_soul : public SpellScriptLoader return; int32 amount = CalculatePct(caster->GetMaxPower(POWER_MANA), impDrainSoul->GetSpellInfo()->Effects[EFFECT_2].CalcValue()); - caster->CastCustomSpell(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC, args); } void Register() override @@ -568,7 +572,9 @@ class spell_warl_fel_synergy : public SpellScriptLoader PreventDefaultAction(); int32 heal = CalculatePct(static_cast<int32>(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_WARLOCK_FEL_SYNERGY_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)nullptr, true, nullptr, aurEff); // TARGET_UNIT_PET + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(heal); + GetTarget()->CastSpell(nullptr, SPELL_WARLOCK_FEL_SYNERGY_HEAL, args); // TARGET_UNIT_PET } void Register() override @@ -604,7 +610,7 @@ class spell_warl_glyph_of_corruption_nightfall : public SpellScriptLoader { PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, SPELL_WARLOCK_SHADOW_TRANCE, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_WARLOCK_SHADOW_TRANCE, aurEff); } void Register() override @@ -638,7 +644,7 @@ public: { PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, SPELL_WARLOCK_GLYPH_OF_LIFE_TAP_TRIGGERED, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_WARLOCK_GLYPH_OF_LIFE_TAP_TRIGGERED, aurEff); } void Register() override @@ -671,7 +677,7 @@ class spell_warl_glyph_of_shadowflame : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, true, nullptr, aurEff); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, aurEff); } void Register() override @@ -722,8 +728,10 @@ class spell_warl_haunt : public SpellScriptLoader { if (Unit* caster = GetCaster()) { - int32 amount = aurEff->GetAmount(); - GetTarget()->CastCustomSpell(caster, SPELL_WARLOCK_HAUNT_HEAL, &amount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount()); + GetTarget()->CastSpell(caster, SPELL_WARLOCK_HAUNT_HEAL, args); } } @@ -822,7 +830,10 @@ class spell_warl_life_tap : public SpellScriptLoader if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_IMPROVED_LIFE_TAP, 0)) AddPct(mana, aurEff->GetAmount()); - caster->CastCustomSpell(target, SPELL_WARLOCK_LIFE_TAP_ENERGIZE, &mana, nullptr, nullptr, false); + // @todo castspell refactor note: this is not triggered - intended? + CastSpellExtraArgs args; + args.SpellValueOverrides.AddBP0(mana); + caster->CastSpell(target, SPELL_WARLOCK_LIFE_TAP_ENERGIZE, args); // Mana Feed int32 manaFeedVal = 0; @@ -832,7 +843,9 @@ class spell_warl_life_tap : public SpellScriptLoader if (manaFeedVal > 0) { ApplyPct(manaFeedVal, mana); - caster->CastCustomSpell(caster, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2, &manaFeedVal, nullptr, nullptr, true, nullptr); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(manaFeedVal); + caster->CastSpell(caster, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2, args); } } } @@ -931,7 +944,7 @@ public: } if (Unit* target = eventInfo.GetActionTarget()) - target->CastSpell(target, triggerspell, true, nullptr, aurEff); + target->CastSpell(target, triggerspell, aurEff); } void Register() override @@ -976,7 +989,9 @@ class spell_warl_demonic_pact : public SpellScriptLoader if (AuraEffect* aurEff = owner->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_DEMONIC_PACT, EFFECT_0)) { int32 bp0 = static_cast<int32>((aurEff->GetAmount() * owner->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_MAGIC) + 100.0f) / 100.0f); - owner->CastCustomSpell(SPELL_WARLOCK_DEMONIC_PACT_PROC, SPELLVALUE_BASE_POINT0, bp0, (Unit*)nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(bp0); + owner->CastSpell(nullptr, SPELL_WARLOCK_DEMONIC_PACT_PROC, args); } } } @@ -1126,7 +1141,7 @@ class spell_warl_seed_of_corruption_dummy : public SpellScriptLoader return; uint32 spellId = sSpellMgr->GetSpellWithRank(SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE_R1, GetSpellInfo()->GetRank()); - caster->CastSpell(eventInfo.GetActionTarget(), spellId, true, nullptr, aurEff); + caster->CastSpell(eventInfo.GetActionTarget(), spellId, aurEff); } void Register() override @@ -1182,7 +1197,7 @@ class spell_warl_seed_of_corruption_generic : public SpellScriptLoader if (!caster) return; - caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC, true, nullptr, aurEff); + caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC, aurEff); } void Register() override @@ -1271,7 +1286,9 @@ class spell_warl_siphon_life : public SpellScriptLoader if (AuraEffect const* glyph = GetTarget()->GetAuraEffect(SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE, EFFECT_0)) AddPct(amount, glyph->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_WARLOCK_SIPHON_LIFE_HEAL, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_SIPHON_LIFE_HEAL, args); } void Register() override @@ -1322,8 +1339,9 @@ class spell_warl_soul_leech : public SpellScriptLoader return; Unit* caster = eventInfo.GetActor(); - int32 bp = CalculatePct(static_cast<int32>(damageInfo->GetDamage()), aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_WARLOCK_SOUL_LEECH_HEAL, SPELLVALUE_BASE_POINT0, bp, caster, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + caster->CastSpell(caster, SPELL_WARLOCK_SOUL_LEECH_HEAL, args); // Improved Soul Leech code below AuraEffect const* impSoulLeech = GetTarget()->GetAuraEffectOfRankedSpell(SPELL_WARLOCK_IMP_SOUL_LEECH_R1, EFFECT_1, aurEff->GetCasterGUID()); @@ -1334,11 +1352,11 @@ class spell_warl_soul_leech : public SpellScriptLoader uint32 selfSpellId = casterMana[impSoulLeechRank - 1]; uint32 petSpellId = petMana[impSoulLeechRank - 1]; - caster->CastSpell(nullptr, selfSpellId, true, nullptr, aurEff); - caster->CastSpell(nullptr, petSpellId, true, nullptr, aurEff); + caster->CastSpell(nullptr, selfSpellId, aurEff); + caster->CastSpell(nullptr, petSpellId, aurEff); if (roll_chance_i(impSoulLeech->GetAmount())) - caster->CastSpell(nullptr, SPELL_REPLENISHMENT, true, nullptr, aurEff); + caster->CastSpell(nullptr, SPELL_REPLENISHMENT, aurEff); } void Register() override @@ -1412,7 +1430,7 @@ class spell_warl_t4_2p_bonus : public SpellScriptLoader { PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, Trigger, true, nullptr, aurEff); + caster->CastSpell(caster, Trigger, aurEff); } void Register() override @@ -1447,9 +1465,10 @@ class spell_warl_unstable_affliction : public SpellScriptLoader if (Unit* caster = GetCaster()) if (AuraEffect const* aurEff = GetEffect(EFFECT_0)) { - int32 damage = aurEff->GetAmount() * 9; // backfire damage and silence - caster->CastCustomSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, &damage, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount() * 9); + caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, args); } } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index be7e0d0421d..2ef5a2361f2 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -110,8 +110,9 @@ class spell_warr_bloodthirst : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 damage = GetEffectValue(); - GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, nullptr, nullptr, true, nullptr); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetEffectValue()); + GetCaster()->CastSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, args); } void Register() override @@ -172,9 +173,10 @@ class spell_warr_charge : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - int32 chargeBasePoints0 = GetEffectValue(); Unit* caster = GetCaster(); - caster->CastCustomSpell(caster, SPELL_WARRIOR_CHARGE, &chargeBasePoints0, nullptr, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetEffectValue()); + caster->CastSpell(caster, SPELL_WARRIOR_CHARGE, args); // Juggernaut crit bonus if (caster->HasAura(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT)) @@ -241,7 +243,9 @@ class spell_warr_damage_shield : public SpellScriptLoader // % of amount blocked int32 damage = CalculatePct(int32(GetTarget()->GetShieldBlockValue()), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damage); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, args); } void Register() override @@ -292,7 +296,10 @@ class spell_warr_deep_wounds : public SpellScriptLoader // Add remaining ticks to damage done damage += target->GetRemainingPeriodicAmount(caster->GetGUID(), SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, SPELL_AURA_PERIODIC_DAMAGE); - caster->CastCustomSpell(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, SPELLVALUE_BASE_POINT0, damage, target, true); + + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(damage); + caster->CastSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, args); } } @@ -344,7 +351,9 @@ class spell_warr_deep_wounds_aura : public SpellScriptLoader else damage = (actor->GetFloatValue(UNIT_FIELD_MINDAMAGE) + actor->GetFloatValue(UNIT_FIELD_MAXDAMAGE)) / 2.f; - actor->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, SPELLVALUE_BASE_POINT0, int32(damage), eventInfo.GetProcTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damage); + actor->CastSpell(eventInfo.GetProcTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, args); } void Register() override @@ -398,7 +407,9 @@ class spell_warr_execute : public SpellScriptLoader int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f); - caster->CastCustomSpell(target, SPELL_WARRIOR_EXECUTE, &bp, nullptr, nullptr, true, nullptr, nullptr, GetOriginalCaster()->GetGUID()); + CastSpellExtraArgs args(GetOriginalCaster()->GetGUID()); + args.SpellValueOverrides.AddBP0(bp); + caster->CastSpell(target, SPELL_WARRIOR_EXECUTE, args); } } @@ -446,13 +457,13 @@ class spell_warr_extra_proc : public SpellScriptLoader if (!roll_chance_i(bonusAurEff->GetAmount())) return; - target->CastSpell(nullptr, SPELL_WARRIOR_EXTRA_CHARGE, true, nullptr, aurEff); + target->CastSpell(nullptr, SPELL_WARRIOR_EXTRA_CHARGE, aurEff); SpellInfo const* auraInfo = aurEff->GetSpellInfo(); if (auraInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_BLOODSURGE_R1))) - target->CastSpell(nullptr, SPELL_WARRIOR_SLAM_GCD_REDUCED, true, nullptr, aurEff); + target->CastSpell(nullptr, SPELL_WARRIOR_SLAM_GCD_REDUCED, aurEff); else if (auraInfo->IsRankOf(sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_SUDDEN_DEATH_R1))) - target->CastSpell(nullptr, SPELL_WARRIOR_EXECUTE_GCD_REDUCED, true, nullptr, aurEff); + target->CastSpell(nullptr, SPELL_WARRIOR_EXECUTE_GCD_REDUCED, aurEff); } void Register() override @@ -486,7 +497,7 @@ class spell_warr_glyph_of_blocking : public SpellScriptLoader { PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, SPELL_WARRIOR_GLYPH_OF_BLOCKING, true, nullptr, aurEff); + caster->CastSpell(caster, SPELL_WARRIOR_GLYPH_OF_BLOCKING, aurEff); } void Register() override @@ -556,7 +567,9 @@ class spell_warr_improved_spell_reflection : public SpellScriptLoader { PreventDefaultAction(); Unit* caster = eventInfo.GetActor(); - caster->CastCustomSpell(SPELL_WARRIOR_IMPROVED_SPELL_REFLECTION_TRIGGER, SPELLVALUE_MAX_TARGETS, aurEff->GetAmount(), caster, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, aurEff->GetAmount()); + caster->CastSpell(caster, SPELL_WARRIOR_IMPROVED_SPELL_REFLECTION_TRIGGER, args); } void Register() override @@ -620,7 +633,9 @@ class spell_warr_item_t10_prot_4p_bonus : public SpellScriptLoader Unit* target = eventInfo.GetActionTarget(); int32 bp0 = CalculatePct(target->GetMaxHealth(), GetSpellInfo()->Effects[EFFECT_1].CalcValue()); - target->CastCustomSpell(SPELL_WARRIOR_STOICISM, SPELLVALUE_BASE_POINT0, bp0, (Unit*)nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(bp0); + target->CastSpell(nullptr, SPELL_WARRIOR_STOICISM, args); } void Register() override @@ -653,8 +668,9 @@ class spell_warr_last_stand : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { Unit* caster = GetCaster(); - int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(GetEffectValue())); - caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, nullptr, nullptr, true, nullptr); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(caster->CountPctFromMaxHealth(GetEffectValue())); + caster->CastSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, args); } void Register() override @@ -777,7 +793,7 @@ class spell_warr_retaliation : public SpellScriptLoader void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, true, nullptr, aurEff); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, aurEff); } void Register() override @@ -828,7 +844,7 @@ class spell_warr_second_wind : public SpellScriptLoader PreventDefaultAction(); Unit* caster = eventInfo.GetActionTarget(); uint32 spellId = triggeredSpells[GetSpellInfo()->GetRank() - 1]; - caster->CastSpell(caster, spellId, true, nullptr, aurEff); + caster->CastSpell(caster, spellId, aurEff); } void Register() override @@ -892,8 +908,11 @@ class spell_warr_slam : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - if (GetHitUnit()) - GetCaster()->CastCustomSpell(SPELL_WARRIOR_SLAM, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK); + if (!GetHitUnit()) + return; + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(GetEffectValue()); + GetCaster()->CastSpell(GetHitUnit(), SPELL_WARRIOR_SLAM, args); } void Register() override @@ -938,12 +957,13 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader if (spellInfo && (spellInfo->Id == SPELL_WARRIOR_BLADESTORM_PERIODIC_WHIRLWIND || (spellInfo->Id == SPELL_WARRIOR_EXECUTE && !_procTarget->HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT)))) { // If triggered by Execute (while target is not under 20% hp) or Bladestorm deals normalized weapon damage - GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2, true, nullptr, aurEff); + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2, aurEff); } else { - int32 damage = damageInfo->GetDamage(); - GetTarget()->CastCustomSpell(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(damageInfo->GetDamage()); + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, args); } } } @@ -1083,7 +1103,7 @@ class spell_warr_vigilance : public SpellScriptLoader void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, nullptr, aurEff); + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, aurEff); } void Register() override |
