From 9b141207d170e4b2b4e6d9290d5f921f76cbcea0 Mon Sep 17 00:00:00 2001 From: Treeston Date: Sat, 30 Dec 2017 20:28:41 +0100 Subject: [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 (cherry picked from commit d507a7e3388382960108b24143da48e5f912b4a7) --- src/server/scripts/Spells/spell_dh.cpp | 2 +- src/server/scripts/Spells/spell_dk.cpp | 22 +++-- src/server/scripts/Spells/spell_druid.cpp | 117 +++++++++++----------- src/server/scripts/Spells/spell_generic.cpp | 41 ++++---- src/server/scripts/Spells/spell_holiday.cpp | 14 ++- src/server/scripts/Spells/spell_hunter.cpp | 18 ++-- src/server/scripts/Spells/spell_item.cpp | 144 +++++++++++++++------------- src/server/scripts/Spells/spell_mage.cpp | 22 +++-- src/server/scripts/Spells/spell_paladin.cpp | 18 ++-- src/server/scripts/Spells/spell_priest.cpp | 65 ++++++++----- src/server/scripts/Spells/spell_quest.cpp | 21 ++-- src/server/scripts/Spells/spell_rogue.cpp | 11 ++- src/server/scripts/Spells/spell_shaman.cpp | 63 ++++++++---- src/server/scripts/Spells/spell_warlock.cpp | 19 ++-- src/server/scripts/Spells/spell_warrior.cpp | 24 +++-- 15 files changed, 351 insertions(+), 250 deletions(-) (limited to 'src/server/scripts/Spells') diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp index b143cc23e97..ea4a389834a 100644 --- a/src/server/scripts/Spells/spell_dh.cpp +++ b/src/server/scripts/Spells/spell_dh.cpp @@ -44,7 +44,7 @@ class spell_dh_chaos_strike : public AuraScript void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastCustomSpell(SPELL_CHAOS_STRIKE_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_CHAOS_STRIKE_ENERGIZE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(aurEff->GetAmount()).SetTriggeringAura(aurEff)); } void Register() override diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 8519a42b06a..0f59df198c1 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -144,8 +144,9 @@ public: if (!GetTarget()->HasAura(SPELL_DK_VOLATILE_SHIELDING)) { - int32 bp = 2 * absorbAmount * 100 / maxHealth; - GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(absorbAmount, 2 * absorbAmount * 100 / maxHealth)); + GetTarget()->CastSpell(GetTarget(), SPELL_DK_RUNIC_POWER_ENERGIZE, args); } } @@ -153,8 +154,9 @@ public: { if (AuraEffect const* volatileShielding = GetTarget()->GetAuraEffect(SPELL_DK_VOLATILE_SHIELDING, EFFECT_1)) { - int32 damage = CalculatePct(absorbedAmount, volatileShielding->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_DK_VOLATILE_SHIELDING_DAMAGE, SPELLVALUE_BASE_POINT0, damage, nullptr, TRIGGERED_FULL_MASK, nullptr, volatileShielding); + CastSpellExtraArgs args(volatileShielding); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(absorbedAmount, volatileShielding->GetAmount())); + GetTarget()->CastSpell(nullptr, SPELL_DK_VOLATILE_SHIELDING_DAMAGE, args); } } @@ -308,7 +310,7 @@ class spell_dk_death_and_decay : public SpellScript { if (GetCaster()->HasAura(SPELL_DK_TIGHTENING_GRASP)) if (WorldLocation const* pos = GetExplTargetDest()) - GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), SPELL_DK_TIGHTENING_GRASP_SLOW, true); + GetCaster()->CastSpell(*pos, SPELL_DK_TIGHTENING_GRASP_SLOW, true); } void Register() override @@ -325,7 +327,7 @@ class spell_dk_death_and_decay_AuraScript : public AuraScript void HandleDummyTick(AuraEffect const* aurEff) { if (Unit* caster = GetCaster()) - caster->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, true, nullptr, aurEff); + caster->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, aurEff); } void Register() override @@ -349,7 +351,7 @@ class spell_dk_death_coil : public SpellScript Unit* caster = GetCaster(); caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_COIL_DAMAGE, true); if (AuraEffect const* unholyAura = caster->GetAuraEffect(SPELL_DK_UNHOLY, EFFECT_6)) // can be any effect, just here to send SPELL_FAILED_DONT_REPORT on failure - caster->CastSpell(caster, SPELL_DK_UNHOLY_VIGOR, true, nullptr, unholyAura); + caster->CastSpell(caster, SPELL_DK_UNHOLY_VIGOR, unholyAura); } void Register() override @@ -481,10 +483,10 @@ class spell_dk_death_strike : public SpellScript int32 pctOfMaxHealth = CalculatePct(spellInfo->GetEffect(EFFECT_2)->CalcValue(GetCaster()), caster->GetMaxHealth()); heal = std::max(heal, pctOfMaxHealth); - caster->CastCustomSpell(SPELL_DK_DEATH_STRIKE_HEAL, SPELLVALUE_BASE_POINT0, heal, caster, true); + caster->CastSpell(caster, SPELL_DK_DEATH_STRIKE_HEAL, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, heal)); if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_DK_BLOOD_SHIELD_MASTERY, EFFECT_0)) - caster->CastCustomSpell(SPELL_DK_BLOOD_SHIELD_ABSORB, SPELLVALUE_BASE_POINT0, CalculatePct(heal, aurEff->GetAmount()), caster); + caster->CastSpell(caster, SPELL_DK_BLOOD_SHIELD_ABSORB, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(heal, aurEff->GetAmount()))); if (caster->HasAura(SPELL_DK_FROST)) caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_STRIKE_OFFHAND, true); @@ -558,7 +560,7 @@ class spell_dk_festering_strike : public SpellScript void HandleScriptEffect(SpellEffIndex /*effIndex*/) { - GetCaster()->CastCustomSpell(SPELL_DK_FESTERING_WOUND, SPELLVALUE_AURA_STACK, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK); + GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_FESTERING_WOUND, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, GetEffectValue())); } void Register() override diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index f2e581b99b7..bede40f705b 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -193,7 +193,7 @@ class spell_dru_brambles : public AuraScript // reflect back damage to the attacker Unit* target = GetTarget(); if (Unit* attacker = dmgInfo.GetAttacker()) - target->CastCustomSpell(SPELL_DRUID_BRAMBLES_REFLECT, SPELLVALUE_BASE_POINT0, absorbAmount, attacker, TRIGGERED_FULL_MASK); + target->CastSpell(attacker, SPELL_DRUID_BRAMBLES_REFLECT, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, absorbAmount)); } void Register() override @@ -221,7 +221,7 @@ class spell_dru_bristling_fur : public AuraScript Unit* target = GetTarget(); uint32 rage = target->GetMaxPower(POWER_RAGE) * (float)damageInfo->GetDamage() / (float)target->GetMaxHealth(); if (rage > 0) - target->CastCustomSpell(SPELL_DRUID_BRISTLING_FUR_GAIN_RAGE, SPELLVALUE_BASE_POINT0, rage, target, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_DRUID_BRISTLING_FUR_GAIN_RAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, rage)); } } @@ -288,7 +288,7 @@ public: { Aura* aura = unitOwner->GetAura(spellId); if (!aura) - unitOwner->CastCustomSpell(spellId, SPELLVALUE_AURA_STACK, amount, nullptr, TRIGGERED_FULL_MASK); + unitOwner->CastSpell(unitOwner, spellId, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, amount)); else aura->SetStackAmount(amount); } @@ -615,7 +615,7 @@ public: return; } - target->CastSpell(target, triggerspell, true, nullptr, aurEff); + target->CastSpell(target, triggerspell, aurEff); } void Register() override @@ -820,7 +820,7 @@ public: return; if (roll_chance_i(chance)) - eventInfo.GetActor()->CastSpell(nullptr, spellId, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -850,64 +850,47 @@ public: return ValidateSpellInfo({ SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, SPELL_DRUID_LIFEBLOOM_ENERGIZE }); } - 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, aurEff->GetSpellEffectInfo(), stack); healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack); - GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); - // restore mana std::vector costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask()); auto m = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_MANA; }); if (m != costs.end()) { - int32 returnMana = m->Amount * stack / 2; - caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.AddSpellBP0(m->Amount * stack / 2); + caster->CastSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, args); } - return; } - GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); + CastSpellExtraArgs args(aurEff); + args.OriginalCaster = GetCasterGUID(); + args.AddSpellBP0(healAmount); + target->CastSpell(target, 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, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges()); - healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges()); - target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); - - // restore mana - std::vector costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask()); - auto m = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_MANA; }); - if (m != costs.end()) - { - int32 returnMana = m->Amount * 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 @@ -941,8 +924,14 @@ public: void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - int32 amount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff); + + HealInfo* healInfo = eventInfo.GetHealInfo(); + if (!healInfo || !healInfo->GetHeal()) + return; + + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(healInfo->GetHeal(), aurEff->GetAmount())); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_LIVING_SEED_PROC, args); } void Register() override @@ -975,7 +964,9 @@ public: void HandleProc(AuraEffect* 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 @@ -1041,7 +1032,7 @@ public: { Unit* target = GetTarget(); if (target->HasAura(SPELL_DRUID_BALANCE_T10_BONUS)) - target->CastSpell(nullptr, SPELL_DRUID_BALANCE_T10_BONUS_PROC, true, nullptr); + target->CastSpell(nullptr, SPELL_DRUID_BALANCE_T10_BONUS_PROC, true); } void Register() override @@ -1177,7 +1168,7 @@ public: 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*/) @@ -1253,8 +1244,8 @@ public: if (GetTarget()->GetShapeshiftForm() != FORM_CAT_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_CAT) return; - GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), true, nullptr, aurEff); - GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STAMPEDE_CAT_STATE, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STAMPEDE_CAT_STATE, aurEff); } void HandleEffectBearProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) @@ -1263,7 +1254,7 @@ public: if (GetTarget()->GetShapeshiftForm() != FORM_BEAR_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_BEAR) return; - GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), aurEff); } void Register() override @@ -1378,8 +1369,9 @@ public: 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); + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, target->CountPctFromMaxHealth(aurEff->GetAmount())); + target->CastSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, args); } void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1452,7 +1444,7 @@ class spell_dru_t3_6p_bonus : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -1496,7 +1488,9 @@ class spell_dru_t3_8p_bonus : public SpellScriptLoader return; int32 amount = CalculatePct(m->Amount, aurEff->GetAmount()); - caster->CastCustomSpell(SPELL_DRUID_EXHILARATE, SPELLVALUE_BASE_POINT0, amount, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, SPELL_DRUID_EXHILARATE, args); } void Register() override @@ -1530,7 +1524,7 @@ class spell_dru_t4_2p_bonus : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -1579,7 +1573,9 @@ public: // 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 @@ -1685,8 +1681,9 @@ public: { PreventDefaultAction(); - int32 amount = static_cast(eventInfo.GetHealInfo()->GetHeal()); - eventInfo.GetActor()->CastCustomSpell(SPELL_DRUID_REJUVENATION_T10_PROC, SPELLVALUE_BASE_POINT0, amount, 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 @@ -1799,7 +1796,7 @@ public: Player* player = GetTarget()->ToPlayer(); if (triggeredSpellId) // Apply new form - player->CastSpell(player, triggeredSpellId, true, nullptr, aurEff); + player->CastSpell(player, triggeredSpellId, aurEff); else // If not set, simply remove Travel Form dummy player->RemoveAura(SPELL_DRUID_TRAVEL_FORM); } @@ -1900,7 +1897,7 @@ public: // Outdoor check already passed - Travel Form (dummy) has SPELL_ATTR0_OUTDOORS_ONLY attribute. uint32 triggeredSpellId = spell_dru_travel_form::GetFormSpellId(player, GetCastDifficulty(), false); - player->CastSpell(player, triggeredSpellId, true, nullptr, aurEff); + player->CastSpell(player, triggeredSpellId, aurEff); } void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 6c9e8cd80ac..eeed540a725 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); } @@ -778,7 +780,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 @@ -1164,7 +1170,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()); @@ -1373,7 +1379,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 @@ -1542,7 +1548,7 @@ class spell_gen_interrupt : public AuraScript void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_GEN_THROW_INTERRUPT, true, nullptr, aurEff); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_GEN_THROW_INTERRUPT, aurEff); } void Register() override @@ -1614,7 +1620,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 @@ -1809,7 +1815,7 @@ class spell_gen_moss_covered_feet : public AuraScript void HandleProc(AuraEffect* 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 @@ -1832,7 +1838,9 @@ class spell_gen_negative_energy_periodic : public AuraScript { PreventDefaultAction(); - GetTarget()->CastCustomSpell(GetSpellInfo()->GetEffect(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()->GetEffect(aurEff->GetEffIndex())->TriggerSpell, args); } void Register() override @@ -2010,7 +2018,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 @@ -2113,7 +2121,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 @@ -2626,7 +2634,7 @@ class spell_gen_two_forms : public SpellScript if (target->HasAuraType(SPELL_AURA_WORGEN_ALTERED_FORM)) target->RemoveAurasByType(SPELL_AURA_WORGEN_ALTERED_FORM); else // Basepoints 1 for this aura control whether to trigger transform transition animation or not. - target->CastCustomSpell(SPELL_ALTERED_FORM, SPELLVALUE_BASE_POINT0, 1, target, TRIGGERED_FULL_MASK); + target->CastSpell(target, SPELL_ALTERED_FORM, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, 1)); } void Register() override @@ -3028,7 +3036,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*/) @@ -3109,8 +3117,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 @@ -3811,7 +3820,7 @@ class spell_gen_mark_of_kazrogal_hellfire_aura : public AuraScript if (target->GetPower(POWER_MANA) == 0) { - target->CastSpell(target, SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE, true, nullptr, aurEff); + target->CastSpell(target, SPELL_MARK_OF_KAZROGAL_DAMAGE_HELLFIRE, aurEff); // Remove aura SetDuration(0); } diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index dd90fb3d616..8bbae3ec773 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -570,7 +570,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())) @@ -1185,15 +1185,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 4dae0593f83..45a8e390b9c 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -181,8 +181,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 @@ -307,7 +308,7 @@ class spell_hun_misdirection : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -419,7 +420,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); + owner->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, args); caster->CastSpell(caster, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true); } } @@ -468,8 +471,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 @@ -637,7 +641,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 diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 58897220708..654667762af 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -68,7 +68,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 @@ -101,7 +101,7 @@ class spell_item_aegis_of_preservation : public AuraScript void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, aurEff); } void Register() override @@ -132,7 +132,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,7 +191,10 @@ class spell_item_alchemist_stone : public AuraScript if (!spellId) return; - GetTarget()->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, nullptr, aurEff); + Unit* caster = eventInfo.GetActionTarget(); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(amount); + caster->CastSpell(nullptr, spellId, args); } void Register() override @@ -251,7 +254,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 @@ -357,7 +360,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); @@ -386,7 +389,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 @@ -433,7 +436,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 @@ -494,7 +501,9 @@ class spell_item_deadly_precision_dummy : public SpellScript void HandleDummy(SpellEffIndex /*effIndex*/) { SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_DEADLY_PRECISION, GetCastDifficulty()); - 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 @@ -583,7 +592,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 @@ -669,7 +678,7 @@ class spell_item_defibrillate : public SpellScriptLoader { PreventHitDefaultEffect(effIndex); if (_failSpell) - GetCaster()->CastSpell(GetCaster(), _failSpell, true, GetCastItem()); + GetCaster()->CastSpell(GetCaster(), _failSpell, GetCastItem()); } } @@ -710,7 +719,7 @@ class spell_item_desperate_defense : public AuraScript void HandleProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, aurEff); } void Register() override @@ -748,7 +757,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 @@ -775,7 +784,7 @@ class spell_item_discerning_eye_beast_dummy : public AuraScript void HandleProc(AuraEffect* 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 @@ -951,9 +960,10 @@ class spell_item_frozen_shadoweave : public AuraScript if (!damageInfo || !damageInfo->GetDamage()) return; - int32 amount = CalculatePct(static_cast(damageInfo->GetDamage()), aurEff->GetAmount()); Unit* caster = eventInfo.GetActor(); - caster->CastCustomSpell(SPELL_SHADOWMEND, SPELLVALUE_BASE_POINT0, amount, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + caster->CastSpell(nullptr, SPELL_SHADOWMEND, args); } void Register() override @@ -1089,7 +1099,7 @@ class spell_item_heartpierce : public SpellScriptLoader return; } - caster->CastSpell(nullptr, spellId, true, nullptr, aurEff); + caster->CastSpell(nullptr, spellId, aurEff); } void Register() override @@ -1174,7 +1184,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 @@ -1207,7 +1217,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); } } @@ -1289,8 +1299,9 @@ class spell_item_necrotic_touch : public AuraScript if (!damageInfo || !damageInfo->GetDamage()) return; - int32 bp = CalculatePct(static_cast(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 @@ -1334,7 +1345,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); } } @@ -1382,7 +1393,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 @@ -1446,7 +1457,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 @@ -1480,9 +1493,9 @@ class spell_item_pet_healing : public AuraScript if (!damageInfo || !damageInfo->GetDamage()) return; - int32 bp = CalculatePct(static_cast(damageInfo->GetDamage()), aurEff->GetAmount()); - Unit* caster = eventInfo.GetActor(); - caster->CastCustomSpell(SPELL_HEALTH_LINK, SPELLVALUE_BASE_POINT0, bp, 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 @@ -1550,7 +1563,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 @@ -1707,14 +1720,14 @@ class spell_item_shadowmourne : public AuraScript void HandleProc(AuraEffect* 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(); } } @@ -1833,7 +1846,7 @@ class spell_item_six_demon_bag : public SpellScript target = caster; } - caster->CastSpell(target, spellId, true, GetCastItem()); + caster->CastSpell(target, spellId, GetCastItem()); } } @@ -1863,8 +1876,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, 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 @@ -1927,7 +1941,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 @@ -2372,7 +2386,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 @@ -2495,9 +2509,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); } } @@ -2525,7 +2539,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 @@ -2645,7 +2659,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); } } @@ -2778,7 +2792,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 @@ -2808,7 +2822,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 @@ -2884,7 +2898,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() @@ -3077,10 +3091,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 @@ -3127,16 +3141,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; @@ -3211,10 +3225,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 @@ -3294,17 +3308,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: @@ -3363,7 +3377,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 @@ -3374,7 +3388,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 @@ -3457,7 +3471,7 @@ class spell_item_darkmoon_card_greatness : public AuraScript stat = vers; } - caster->CastSpell(caster, spellTrigger, true, nullptr, aurEff); + caster->CastSpell(caster, spellTrigger, aurEff); } void Register() override @@ -3494,10 +3508,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 @@ -3587,7 +3601,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 } @@ -3629,11 +3643,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()); } } @@ -3971,7 +3985,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 @@ -4011,7 +4025,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 c30f9b22643..5a2f88df076 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -302,7 +302,7 @@ class spell_mage_fingers_of_frost : public AuraScript void Trigger(AuraEffect* aurEff, ProcEventInfo& eventInfo) { - eventInfo.GetActor()->CastSpell(GetTarget(), SPELL_MAGE_FINGERS_OF_FROST, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(GetTarget(), SPELL_MAGE_FINGERS_OF_FROST, aurEff); } void Register() override @@ -395,7 +395,10 @@ class spell_mage_ice_lance : public SpellScript } // put target index for chain value multiplier into EFFECT_1 base points, otherwise triggered spell doesn't know which damage multiplier to apply - caster->CastCustomSpell(SPELL_MAGE_ICE_LANCE_TRIGGER, SPELLVALUE_BASE_POINT1, index, target, true); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.AddSpellMod(SPELLVALUE_BASE_POINT1, index); + caster->CastSpell(target, SPELL_MAGE_ICE_LANCE_TRIGGER, args); } void Register() override @@ -455,7 +458,10 @@ class spell_mage_ignite : public AuraScript 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 @@ -501,7 +507,7 @@ class spell_mage_living_bomb : public SpellScript void HandleDummy(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); - GetCaster()->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_PERIODIC, SPELLVALUE_BASE_POINT2, 1, GetHitUnit(), TRIGGERED_FULL_MASK); + GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGE_LIVING_BOMB_PERIODIC, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT2, 1)); } void Register() override @@ -528,7 +534,7 @@ class spell_mage_living_bomb_explosion : public SpellScript void HandleSpread(SpellEffIndex /*effIndex*/) { if (GetSpellValue()->EffectBasePoints[EFFECT_0] > 0) - GetCaster()->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_PERIODIC, SPELLVALUE_BASE_POINT2, 0, GetHitUnit(), TRIGGERED_FULL_MASK); + GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGE_LIVING_BOMB_PERIODIC, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT2, 0)); } void Register() override @@ -554,7 +560,7 @@ class spell_mage_living_bomb_periodic : public AuraScript return; if (Unit* caster = GetCaster()) - caster->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_EXPLOSION, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), TRIGGERED_FULL_MASK); + caster->CastSpell(GetTarget(), SPELL_MAGE_LIVING_BOMB_EXPLOSION, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount())); } void Register() override @@ -636,7 +642,7 @@ class spell_mage_ring_of_frost : public AuraScript void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) { if (TempSummon* ringOfFrost = GetRingOfFrostMinion()) - GetTarget()->CastSpell(ringOfFrost->GetPositionX(), ringOfFrost->GetPositionY(), ringOfFrost->GetPositionZ(), SPELL_MAGE_RING_OF_FROST_FREEZE, true); + GetTarget()->CastSpell(ringOfFrost->GetPosition(), SPELL_MAGE_RING_OF_FROST_FREEZE, true); } void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -801,7 +807,7 @@ class spell_mage_touch_of_the_magi_aura : public AuraScript return; if (Unit* caster = GetCaster()) - caster->CastCustomSpell(SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE, SPELLVALUE_BASE_POINT0, amount, GetTarget(), TRIGGERED_FULL_MASK); + caster->CastSpell(GetTarget(), SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, amount)); } void Register() override diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index c69226f2587..3aba1eff8ae 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -676,7 +676,7 @@ class spell_pal_item_healing_discount : public AuraScript void HandleProc(AuraEffect* 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 @@ -725,7 +725,7 @@ class spell_pal_item_t6_trinket : public AuraScript 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 @@ -816,7 +816,11 @@ class spell_pal_light_s_beacon : public SpellScriptLoader std::list applications; (*itr)->GetApplicationList(applications); if (!applications.empty()) - eventInfo.GetActor()->CastCustomSpell(SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, SPELLVALUE_BASE_POINT0, heal, applications.front()->GetTarget(), true); + { + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(heal); + eventInfo.GetActor()->CastSpell(applications.front()->GetTarget(), SPELL_PALADIN_BEACON_OF_LIGHT_HEAL, args); + } return; } } @@ -985,7 +989,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 @@ -1034,7 +1038,9 @@ class spell_pal_t8_2p_bonus : public SpellScriptLoader // Add remaining ticks to damage 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 @@ -1062,7 +1068,7 @@ class spell_pal_zeal : public AuraScript void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/) { Unit* target = GetTarget(); - target->CastCustomSpell(SPELL_PALADIN_ZEAL_AURA, SPELLVALUE_AURA_STACK, aurEff->GetAmount(), target, true); + target->CastSpell(target, SPELL_PALADIN_ZEAL_AURA, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, aurEff->GetAmount())); PreventDefaultAction(); } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 6e452167e00..7e377f496a8 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -133,8 +133,9 @@ class spell_pri_aq_3p_bonus : public SpellScriptLoader if (!healInfo || !healInfo->GetHeal()) return; - int32 amount = CalculatePct(static_cast(healInfo->GetHeal()), 10); - caster->CastCustomSpell(SPELL_PRIEST_ORACULAR_HEAL, SPELLVALUE_BASE_POINT0, amount, caster, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(CalculatePct(static_cast(healInfo->GetHeal()), 10)); + caster->CastSpell(caster, SPELL_PRIEST_ORACULAR_HEAL, args); } void Register() override @@ -174,13 +175,14 @@ public: void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) { DamageInfo* damageInfo = eventInfo.GetDamageInfo(); - int32 heal = CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()); - _appliedAtonements.erase(std::remove_if(_appliedAtonements.begin(), _appliedAtonements.end(), [this, heal](ObjectGuid const& targetGuid) + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); + _appliedAtonements.erase(std::remove_if(_appliedAtonements.begin(), _appliedAtonements.end(), [this, &args](ObjectGuid const& targetGuid) { if (Unit* target = ObjectAccessor::GetUnit(*GetTarget(), targetGuid)) { if (target->GetExactDist(GetTarget()) < GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue()) - GetTarget()->CastCustomSpell(SPELL_PRIEST_ATONEMENT_HEAL, SPELLVALUE_BASE_POINT0, heal, target, true); + GetTarget()->CastSpell(target, SPELL_PRIEST_ATONEMENT_HEAL, args); return false; } @@ -337,7 +339,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(); } @@ -414,7 +418,7 @@ class spell_pri_leap_of_faith_effect_trigger : public SpellScriptLoader SpellCastTargets targets; targets.SetDst(destPos); targets.SetUnitTarget(GetCaster()); - GetHitUnit()->CastSpell(targets, sSpellMgr->GetSpellInfo(GetEffectValue(), GetCastDifficulty()), nullptr); + GetHitUnit()->CastSpell(targets, GetEffectValue(), GetCastDifficulty()); } void Register() override @@ -629,10 +633,11 @@ public: void CastPrayerOfMendingAura(Unit* caster, Unit* target, uint8 stack) { uint32 basePoints = caster->SpellHealingBonusDone(target, _spellInfoHeal, _healEffectDummy->CalcValue(caster), HEAL, _healEffectDummy); - CustomSpellValues values; - values.AddSpellMod(SPELLVALUE_AURA_STACK, stack); - values.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints); - caster->CastCustomSpell(SPELL_PRIEST_PRAYER_OF_MENDING_AURA, values, target, TRIGGERED_FULL_MASK); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.AddSpellMod(SPELLVALUE_AURA_STACK, stack); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, basePoints); + caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_AURA, args); } protected: @@ -674,12 +679,19 @@ class spell_pri_prayer_of_mending_aura : public AuraScript if (Unit* caster = GetCaster()) { // Cast the spell to heal the owner - caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, true, nullptr, aurEff); + caster->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_HEAL, aurEff); // Only cast jump if stack is higher than 0 int32 stackAmount = GetStackAmount(); if (stackAmount > 1) - target->CastCustomSpell(SPELL_PRIEST_PRAYER_OF_MENDING_JUMP, SPELLVALUE_BASE_POINT0, stackAmount - 1, target, true, nullptr, aurEff, caster->GetGUID()); + { + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.TriggeringAura = aurEff; + args.OriginalCaster = caster->GetGUID(); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, stackAmount - 1); + target->CastSpell(target, SPELL_PRIEST_PRAYER_OF_MENDING_JUMP, args); + } Remove(); } @@ -752,7 +764,7 @@ class spell_priest_spirit_of_redemption : public AuraScript Unit* target = GetTarget(); if (dmgInfo.GetDamage() >= target->GetHealth()) { - target->CastSpell(target, SPELL_PRIEST_SPIRIT_OF_REDEMPTION, TRIGGERED_FULL_MASK, nullptr, aurEff); + target->CastSpell(target, SPELL_PRIEST_SPIRIT_OF_REDEMPTION, aurEff); target->SetFullHealth(); return; } @@ -784,7 +796,7 @@ class spell_pri_t3_4p_bonus : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -828,7 +840,7 @@ class spell_pri_t5_heal_2p_bonus : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -878,7 +890,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 @@ -924,7 +938,10 @@ class spell_pri_vampiric_embrace : public SpellScriptLoader int32 selfHeal = int32(CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount())); int32 teamHeal = selfHeal / 2; - GetTarget()->CastCustomSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, &teamHeal, &selfHeal, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, teamHeal); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT1, selfHeal); + GetTarget()->CastSpell(nullptr, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL, args); } void Register() override @@ -990,9 +1007,10 @@ class spell_pri_vampiric_touch : public SpellScriptLoader { if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) { - int32 damage = aurEff->GetAmount() * 8; // backfire damage - caster->CastCustomSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, &damage, nullptr, nullptr, true, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.SpellValueOverrides.AddBP0(aurEff->GetAmount() * 8); + caster->CastSpell(target, SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL, args); } } } @@ -1006,7 +1024,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, true, nullptr, aurEff); + eventInfo.GetProcTarget()->CastSpell(nullptr, SPELL_GEN_REPLENISHMENT, aurEff); } void Register() override @@ -1052,7 +1070,10 @@ class spell_pri_angelic_feather_trigger : public SpellScriptLoader { SpellCastTargets targets; targets.SetDst(destPos); - GetCaster()->CastSpell(targets, sSpellMgr->GetSpellInfo(SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER, GetCastDifficulty()), nullptr); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.CastDifficulty = GetCastDifficulty(); + GetCaster()->CastSpell(targets, SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER, args); } } diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 47293321ad5..6c3e8d9cd6a 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()->GetEffect(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, aurEff->GetSpellEffectInfo()->TriggerSpell, true, nullptr, aurEff); + caster->CastSpell(caster, aurEff->GetSpellEffectInfo()->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 577c08c96b4..003b55c260e 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 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); } } @@ -179,9 +180,9 @@ class spell_rog_deadly_poison : public SpellScriptLoader continue; if (spellInfo->IsPositive()) - player->CastSpell(player, enchant->EffectArg[s], true, item); + player->CastSpell(player, enchant->EffectArg[s], item); else - player->CastSpell(target, enchant->EffectArg[s], true, item); + player->CastSpell(target, enchant->EffectArg[s], item); } } } @@ -605,7 +606,7 @@ public: PreventDefaultAction(); Unit* target = GetTarget(); - target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, TRIGGERED_FULL_MASK, nullptr, aurEff); + target->CastSpell(target, SPELL_ROGUE_HONOR_AMONG_THIEVES_ENERGIZE, aurEff); } void Register() override diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 09b3e0b40ad..618cb45e30f 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -117,7 +117,11 @@ public: PreventDefaultAction(); int32 bp0 = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); if (bp0) - eventInfo.GetActor()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_GUIDANCE_HEAL, SPELLVALUE_BASE_POINT0, bp0, eventInfo.GetActor(), true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, bp0); + eventInfo.GetActor()->CastSpell(eventInfo.GetActor(), SPELL_SHAMAN_ANCESTRAL_GUIDANCE_HEAL, args); + } } void Register() override @@ -237,8 +241,13 @@ public: { if (_targetsHit >= 2) GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_CRASH_LIGHTNING_CLEAVE, true); + if (AuraEffect const* gatheringStorms = GetCaster()->GetAuraEffect(SPELL_SHAMAN_GATHERING_STORMS, EFFECT_0)) - GetCaster()->CastCustomSpell(SPELL_SHAMAN_GATHERING_STORMS_BUFF, SPELLVALUE_BASE_POINT0, int32(gatheringStorms->GetAmount() * _targetsHit), GetCaster(), true); + { + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, int32(gatheringStorms->GetAmount() * _targetsHit)); + GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_GATHERING_STORMS_BUFF, args); + } } void Register() override @@ -282,7 +291,7 @@ class spell_sha_earth_shield : public SpellScriptLoader { PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_EARTH_SHIELD_HEAL, true, nullptr, aurEff, GetCasterGUID()); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_EARTH_SHIELD_HEAL, { aurEff, GetCasterGUID() }); } void Register() override @@ -452,7 +461,9 @@ class spell_sha_flametongue_weapon : public SpellScript if (!targetItem || !targetItem->GetTemplate()->IsWeapon()) return; - player->CastSpell(targetItem, SPELL_SHAMAN_FLAMETONGUE_WEAPON_ENCHANT, true); + SpellCastTargets targets; + targets.SetItemTarget(targetItem); + player->CastSpell(targets, SPELL_SHAMAN_FLAMETONGUE_WEAPON_ENCHANT, true); } void Register() override @@ -476,8 +487,9 @@ class spell_sha_flametongue_weapon_aura : public AuraScript PreventDefaultAction(); Unit* attacker = eventInfo.GetActor(); - int32 damage = std::max(1, int32(attacker->GetTotalAttackPowerValue(BASE_ATTACK) * 0.0264f)); - attacker->CastCustomSpell(SPELL_SHAMAN_FLAMETONGUE_ATTACK, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetActionTarget(), TRIGGERED_FULL_MASK, nullptr, aurEff); + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, std::max(1, int32(attacker->GetTotalAttackPowerValue(BASE_ATTACK) * 0.0264f))); + attacker->CastSpell(eventInfo.GetActionTarget(), SPELL_SHAMAN_FLAMETONGUE_ATTACK, args); } void Register() override @@ -495,7 +507,7 @@ public: void SetVisualDummy(TempSummon* summon) { _visualDummy = summon->GetGUID(); - summon->GetPosition(_x, _y, _z); + _dest = summon->GetPosition(); } private: @@ -503,7 +515,7 @@ private: void HandleEffectPeriodic(AuraEffect const* aurEff) { - GetTarget()->CastSpell(_x, _y, _z, SPELL_SHAMAN_HEALING_RAIN_HEAL, true, nullptr, aurEff); + GetTarget()->CastSpell(_dest, SPELL_SHAMAN_HEALING_RAIN_HEAL, aurEff); } void HandleEffecRemoved(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -519,7 +531,7 @@ private: } ObjectGuid _visualDummy; - float _x = 0.0f, _y = 0.0f, _z = 0.0f; + Position _dest; }; constexpr char const spell_sha_healing_rain_aura::ScriptName[]; @@ -654,7 +666,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -687,7 +699,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader void HandleProc(AuraEffect* 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 @@ -732,7 +744,11 @@ class spell_sha_item_mana_surge : public SpellScriptLoader { int32 mana = CalculatePct(m->Amount, 35); if (mana > 0) - GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, nullptr, aurEff); + { + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, mana); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_MANA_SURGE, args); + } } } @@ -1087,10 +1103,11 @@ class spell_sha_tidal_waves : public SpellScriptLoader void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); - int32 basePoints0 = -aurEff->GetAmount(); - int32 basePoints1 = aurEff->GetAmount(); + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, -aurEff->GetAmount()); + args.AddSpellMod(SPELLVALUE_BASE_POINT1, aurEff->GetAmount()); - GetTarget()->CastCustomSpell(GetTarget(), SPELL_SHAMAN_TIDAL_WAVES, &basePoints0, &basePoints1, nullptr, true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_TIDAL_WAVES, args); } void Register() override @@ -1157,7 +1174,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 @@ -1226,7 +1243,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 @@ -1275,7 +1294,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 @@ -1369,7 +1390,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 @@ -1404,7 +1427,7 @@ public: PreventDefaultAction(); for (uint32 i = 0; i < 2; ++i) - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_WINDFURY_ATTACK, true, nullptr, aurEff); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_WINDFURY_ATTACK, aurEff); } void Register() override diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 5ff9aa3145b..163c867d71d 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -280,14 +280,16 @@ class spell_warl_devour_magic : public SpellScriptLoader if (SpellEffectInfo const* effect = GetSpellInfo()->GetEffect(EFFECT_1)) { Unit* caster = GetCaster(); - int32 heal_amount = effect->CalcValue(caster); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.AddSpellBP0(effect->CalcValue(caster)); - caster->CastCustomSpell(caster, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, &heal_amount, nullptr, nullptr, true); + caster->CastSpell(caster, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, args); // Glyph of Felhunter if (Unit* owner = caster->GetOwner()) if (owner->GetAura(SPELL_WARLOCK_GLYPH_OF_DEMON_TRAINING)) - owner->CastCustomSpell(owner, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, &heal_amount, nullptr, nullptr, true); + owner->CastSpell(owner, SPELL_WARLOCK_DEVOUR_MAGIC_HEAL, args); } } @@ -530,7 +532,7 @@ class spell_warl_seed_of_corruption_dummy : public SpellScriptLoader if (!caster) return; - caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE, true); + caster->CastSpell(eventInfo.GetActionTarget(), SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE, aurEff); } void Register() override @@ -586,7 +588,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 @@ -858,7 +860,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 @@ -894,9 +896,10 @@ class spell_warl_unstable_affliction : public SpellScriptLoader if (Unit* caster = GetCaster()) if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) { - 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.AddSpellBP0(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 18ebf6a1263..3e9d168ed12 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -204,7 +204,7 @@ class spell_warr_charge_effect : public SpellScriptLoader { Unit* caster = GetCaster(); Unit* target = GetHitUnit(); - caster->CastCustomSpell(SPELL_WARRIOR_CHARGE_PAUSE_RAGE_DECAY, SPELLVALUE_BASE_POINT0, 0, caster, true); + caster->CastSpell(caster, SPELL_WARRIOR_CHARGE_PAUSE_RAGE_DECAY, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, 0)); caster->CastSpell(target, SPELL_WARRIOR_CHARGE_ROOT_EFFECT, true); caster->CastSpell(target, SPELL_WARRIOR_CHARGE_SLOW_EFFECT, true); } @@ -307,7 +307,7 @@ public: void HandleDummy(SpellEffIndex /*effIndex*/) { if (WorldLocation* dest = GetHitDest()) - GetCaster()->CastSpell(dest->GetPositionX(), dest->GetPositionY(), dest->GetPositionZ(), SPELL_WARRIOR_HEROIC_LEAP_JUMP, true); + GetCaster()->CastSpell(*dest, SPELL_WARRIOR_HEROIC_LEAP_JUMP, true); } void Register() override @@ -448,7 +448,9 @@ class spell_warr_item_t10_prot_4p_bonus : public SpellScriptLoader Unit* target = eventInfo.GetActionTarget(); int32 bp0 = CalculatePct(target->GetMaxHealth(), GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue()); - target->CastCustomSpell(SPELL_WARRIOR_STOICISM, SPELLVALUE_BASE_POINT0, bp0, nullptr, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.SpellValueOverrides.AddBP0(bp0); + target->CastSpell(nullptr, SPELL_WARRIOR_STOICISM, args); } void Register() override @@ -518,9 +520,10 @@ class spell_warr_rallying_cry : public SpellScriptLoader void HandleScript(SpellEffIndex /*effIndex*/) { - int32 basePoints0 = int32(GetHitUnit()->CountPctFromMaxHealth(GetEffectValue())); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, int32(GetHitUnit()->CountPctFromMaxHealth(GetEffectValue()))); - GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_WARRIOR_RALLYING_CRY, &basePoints0, nullptr, nullptr, true); + GetCaster()->CastSpell(GetHitUnit(), SPELL_WARRIOR_RALLYING_CRY, args); } void Register() override @@ -685,12 +688,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_WOUNDED_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.AddSpellMod(SPELLVALUE_BASE_POINT0, damageInfo->GetDamage()); + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, args); } } } @@ -732,7 +736,9 @@ public: int32 remainingDamage = target->GetRemainingPeriodicAmount(target->GetGUID(), SPELL_WARRIOR_TRAUMA_EFFECT, SPELL_AURA_PERIODIC_DAMAGE); //Get 25% of damage from the spell casted (Slam & Whirlwind) plus Remaining Damage from Aura int32 damage = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()) / sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_TRAUMA_EFFECT, GetCastDifficulty())->GetMaxTicks()) + remainingDamage; - GetCaster()->CastCustomSpell(SPELL_WARRIOR_TRAUMA_EFFECT, SPELLVALUE_BASE_POINT0, damage, target, true); + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, damage); + GetCaster()->CastSpell(target, SPELL_WARRIOR_TRAUMA_EFFECT, args); } void Register() override -- cgit v1.2.3