From d507a7e3388382960108b24143da48e5f912b4a7 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 --- .../BlackrockDepths/boss_coren_direbrew.cpp | 7 ++++++- .../BlackrockMountain/MoltenCore/boss_baron_geddon.cpp | 8 ++++++-- .../EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp | 5 ++++- .../EasternKingdoms/Karazhan/boss_shade_of_aran.cpp | 2 +- .../MagistersTerrace/boss_felblood_kaelthas.cpp | 12 ++++++++++-- .../scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp | 16 ++++++++++++++-- .../scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp | 2 +- 7 files changed, 42 insertions(+), 10 deletions(-) (limited to 'src/server/scripts/EasternKingdoms') diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp index a58a24da301..fe66aa4f87c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp @@ -259,9 +259,14 @@ struct boss_coren_direbrew : public BossAI SummonSister(NPC_URSULA_DIREBREW); break; case EVENT_SUMMON_MOLE_MACHINE: - me->CastCustomSpell(SPELL_MOLE_MACHINE_TARGET_PICKER, SPELLVALUE_MAX_TARGETS, 1, nullptr, true); + { + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.SpellValueOverrides.AddMod(SPELLVALUE_MAX_TARGETS, 1); + me->CastSpell(nullptr, SPELL_MOLE_MACHINE_TARGET_PICKER, args); events.Repeat(Seconds(15)); break; + } case EVENT_DIREBREW_DISARM: DoCastSelf(SPELL_DIREBREW_DISARM_PRE_CAST, true); events.Repeat(Seconds(20)); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp index f2e2a8e3e15..92636ea82e4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp @@ -137,8 +137,12 @@ class spell_baron_geddon_inferno : public SpellScriptLoader void OnPeriodic(AuraEffect const* aurEff) { PreventDefaultAction(); - int32 damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 }; - GetTarget()->CastCustomSpell(SPELL_INFERNO_DMG, SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1], (Unit*)nullptr, TRIGGERED_FULL_MASK, nullptr, aurEff); + static const int32 damageForTick[8] = { 500, 500, 1000, 1000, 2000, 2000, 3000, 5000 }; + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.TriggeringAura = aurEff; + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damageForTick[aurEff->GetTickNumber() - 1]); + GetTarget()->CastSpell(nullptr, SPELL_INFERNO_DMG, args); } void Register() override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 2cb87b96262..71064907e2d 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -340,7 +340,10 @@ public: enfeeble_targets[i] = target->GetGUID(); enfeeble_health[i] = target->GetHealth(); - target->CastSpell(target, SPELL_ENFEEBLE, true, 0, 0, me->GetGUID()); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.OriginalCaster = me->GetGUID(); + target->CastSpell(target, SPELL_ENFEEBLE, args); target->SetHealth(1); } } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 3ed2240d2a7..c5af513d78e 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -460,7 +460,7 @@ public: Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]); if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3)) { - unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID()); + unit->CastSpell(unit, 20476, me->GetGUID()); unit->CastSpell(unit, 11027, true); FlameWreathTarget[i].Clear(); } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 3a10b0f5619..70eb2290903 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -236,8 +236,13 @@ public: { Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) + { // Knockback into the air - unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, true, 0, 0, me->GetGUID()); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.OriginalCaster = me->GetGUID(); + unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, args); + } } } @@ -251,7 +256,10 @@ public: if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) { // Also needs an exception in spell system. - unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_FLY, true, 0, 0, me->GetGUID()); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.OriginalCaster = me->GetGUID(); + unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_FLY, args); unit->SetCanFly(true); } } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index 42c9dd9d766..73339b8c820 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -171,7 +171,13 @@ class boss_akilzon : public CreatureScript if (Unit* target = (*i)) { if (Cloud && !Cloud->IsWithinDist(target, 6, false)) - Cloud->CastCustomSpell(target, SPELL_ZAP, &bp0, nullptr, nullptr, true, 0, 0, me->GetGUID()); + { + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.OriginalCaster = me->GetGUID(); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, bp0); + Cloud->CastSpell(target, SPELL_ZAP, args); + } } } @@ -190,7 +196,13 @@ class boss_akilzon : public CreatureScript trigger->SetHealth(100000); trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); if (Cloud) - Cloud->CastCustomSpell(trigger, /*43661*/SPELL_ZAP, &bp0, nullptr, nullptr, true, 0, 0, Cloud->GetGUID()); + { + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.OriginalCaster = Cloud->GetGUID(); + args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, bp0); + Cloud->CastSpell(trigger, SPELL_ZAP, args); + } } } } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index fa617532e00..3bd255bd26a 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -1024,7 +1024,7 @@ class spell_hexlord_unstable_affliction : public SpellScriptLoader void HandleDispel(DispelInfo* dispelInfo) { if (Unit* caster = GetCaster()) - caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, true, nullptr, GetEffect(EFFECT_0)); + caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, GetEffect(EFFECT_0)); } void Register() override -- cgit v1.2.3