diff options
author | offl <11556157+offl@users.noreply.github.com> | 2022-06-22 22:37:52 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-22 22:37:52 +0300 |
commit | 3808e614d9760a2588fec0c1b0b4c30feda36dcc (patch) | |
tree | d784e9226c539c479cef16273cb38574f9a433e9 /src | |
parent | ffcc976524e3b1ba99023e40e7fc9cce4d01a2f7 (diff) |
Scripts/Spells: Get rid of several DB spell scripts (#28048)
Diffstat (limited to 'src')
6 files changed, 281 insertions, 9 deletions
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index ee0104f9b0f..09aff3b741f 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -362,8 +362,30 @@ class spell_brutallus_burn : public AuraScript } }; +// 45185 - Stomp +class spell_brutallus_stomp : public SpellScript +{ + PrepareSpellScript(spell_brutallus_stomp); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_BURN }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->RemoveAurasDueToSpell(SPELL_BURN); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_brutallus_stomp::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_boss_brutallus() { new boss_brutallus(); RegisterSpellScript(spell_brutallus_burn); + RegisterSpellScript(spell_brutallus_stomp); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 8ee87833f93..2470d23ba71 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -28,6 +28,11 @@ enum Spells SPELL_FRENZY = 48017, SPELL_SUMMON_CRYSTALLINE_TANGLER = 61564, SPELL_CRYSTAL_SPIKES = 47958, + + SPELL_SUMMON_CRYSTAL_SPIKE_1 = 47954, + SPELL_SUMMON_CRYSTAL_SPIKE_2 = 47955, + SPELL_SUMMON_CRYSTAL_SPIKE_3 = 47956, + SPELL_SUMMON_CRYSTAL_SPIKE_4 = 47957 }; enum Yells { @@ -243,10 +248,38 @@ private: }; +std::array<uint32, 4> const SummonSpells = +{ + SPELL_SUMMON_CRYSTAL_SPIKE_1, SPELL_SUMMON_CRYSTAL_SPIKE_2, SPELL_SUMMON_CRYSTAL_SPIKE_3, SPELL_SUMMON_CRYSTAL_SPIKE_4 +}; + +// 47958, 57082 - Crystal Spikes +class spell_ormorok_summon_crystal_spikes : public SpellScript +{ + PrepareSpellScript(spell_ormorok_summon_crystal_spikes); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(SummonSpells); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + for (uint32 spells : SummonSpells) + caster->CastSpell(caster, spells); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_ormorok_summon_crystal_spikes::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + // 47941 - Crystal Spike -class spell_crystal_spike : public AuraScript +class spell_ormorok_crystal_spike : public AuraScript { - PrepareAuraScript(spell_crystal_spike); + PrepareAuraScript(spell_ormorok_crystal_spike); void HandlePeriodic(AuraEffect const* /*aurEff*/) { @@ -262,7 +295,7 @@ class spell_crystal_spike : public AuraScript void Register() override { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_crystal_spike::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_ormorok_crystal_spike::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; @@ -270,5 +303,6 @@ void AddSC_boss_ormorok() { RegisterNexusCreatureAI(boss_ormorok); RegisterNexusCreatureAI(npc_crystal_spike_trigger); - RegisterSpellScript(spell_crystal_spike); + RegisterSpellScript(spell_ormorok_summon_crystal_spikes); + RegisterSpellScript(spell_ormorok_crystal_spike); } diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index fee88d9159c..a6675345ce5 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -869,6 +869,78 @@ class spell_dragonblight_bombard_the_ballistae_fx_master : public SpellScript } }; +/*###### +## Quest 12060, 12061: Projections and Plans +######*/ + +enum ProjectionsAndPlans +{ + SPELL_TELE_MOONREST_GARDENS = 47324, + SPELL_TELE_SURGE_NEEDLE = 47325, + + AREA_SURGE_NEEDLE = 4156, + AREA_MOONREST_GARDENS = 4157 +}; + +// 47097 - Surge Needle Teleporter +class spell_dragonblight_surge_needle_teleporter : public SpellScript +{ + PrepareSpellScript(spell_dragonblight_surge_needle_teleporter); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TELE_MOONREST_GARDENS, SPELL_TELE_SURGE_NEEDLE }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + switch (caster->GetAreaId()) + { + case AREA_SURGE_NEEDLE: + caster->CastSpell(caster, SPELL_TELE_MOONREST_GARDENS); + break; + case AREA_MOONREST_GARDENS: + caster->CastSpell(caster, SPELL_TELE_SURGE_NEEDLE); + break; + default: + break; + } + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_dragonblight_surge_needle_teleporter::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +/*###### +## Quest 12125, 12126, 12127: In Service of Blood & In Service of the Unholy & In Service of Frost +######*/ + +// 47703 - Unholy Union +// 47724 - Frost Draw +// 50252 - Blood Draw +class spell_dragonblight_fill_blood_unholy_frost_gem : public SpellScript +{ + PrepareSpellScript(spell_dragonblight_fill_blood_unholy_frost_gem); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue())); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_dragonblight_fill_blood_unholy_frost_gem::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_dragonblight() { RegisterCreatureAI(npc_commander_eligor_dawnbringer); @@ -884,4 +956,6 @@ void AddSC_dragonblight() RegisterSpellScript(spell_dragonblight_scarlet_raven_priest_image_master); RegisterSpellScript(spell_dragonblight_cancel_scarlet_raven_priest_image); RegisterSpellScript(spell_dragonblight_bombard_the_ballistae_fx_master); + RegisterSpellScript(spell_dragonblight_surge_needle_teleporter); + RegisterSpellScript(spell_dragonblight_fill_blood_unholy_frost_gem); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index 59a081f8fea..a66efc8c552 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -27,6 +27,7 @@ EndScriptData */ #include "MotionMaster.h" #include "ObjectAccessor.h" #include "ScriptedEscortAI.h" +#include "SpellScript.h" #include "serpent_shrine.h" #include "TemporarySummon.h" @@ -69,7 +70,7 @@ enum FathomlordKarathress //Caribdis Spells SPELL_WATER_BOLT_VOLLEY = 38335, SPELL_TIDAL_SURGE = 38358, - SPELL_TIDAL_SURGE_FREEZE = 38357, + SPELL_TIDAL_SURGE_EFFECT = 38353, SPELL_HEAL = 38330, SPELL_SUMMON_CYCLONE = 38337, SPELL_CYCLONE_CYCLONE = 29538, @@ -643,10 +644,7 @@ public: //TidalSurge_Timer if (TidalSurge_Timer <= diff) { - DoCastVictim(SPELL_TIDAL_SURGE); - // Hacky way to do it - won't trigger elseways - if (me->GetVictim()) - me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_TIDAL_SURGE_FREEZE, true); + DoCastSelf(SPELL_TIDAL_SURGE); TidalSurge_Timer = 15000 + rand32() % 5000; } else TidalSurge_Timer -= diff; @@ -709,10 +707,32 @@ public: }; }; +// 38358 - Tidal Surge +class spell_fathomlord_karathress_tidal_surge : public SpellScript +{ + PrepareSpellScript(spell_fathomlord_karathress_tidal_surge); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TIDAL_SURGE_EFFECT }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_TIDAL_SURGE_EFFECT, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_fathomlord_karathress_tidal_surge::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_boss_fathomlord_karathress() { new boss_fathomlord_karathress(); new boss_fathomguard_sharkkis(); new boss_fathomguard_tidalvess(); new boss_fathomguard_caribdis(); + RegisterSpellScript(spell_fathomlord_karathress_tidal_surge); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 23e210a58cc..7e37aadcce7 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1271,6 +1271,32 @@ class spell_item_heartpierce : public SpellScriptLoader } }; +enum HourglassSand +{ + SPELL_BROOD_AFFLICTION_BRONZE = 23170 +}; + +// 23645 - Hourglass Sand +class spell_item_hourglass_sand : public SpellScript +{ + PrepareSpellScript(spell_item_hourglass_sand); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_BROOD_AFFLICTION_BRONZE }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->RemoveAurasDueToSpell(SPELL_BROOD_AFFLICTION_BRONZE); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_item_hourglass_sand::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // 40971 - Bonus Healing (Crystal Spire of Karabor) class spell_item_crystal_spire_of_karabor : public AuraScript { @@ -2937,6 +2963,35 @@ class spell_item_impale_leviroth : public SpellScript } }; +enum LifegivingGem +{ + SPELL_GIFT_OF_LIFE_1 = 23782, + SPELL_GIFT_OF_LIFE_2 = 23783 +}; + +// 23725 - Gift of Life +class spell_item_lifegiving_gem : public SpellScript +{ + PrepareSpellScript(spell_item_lifegiving_gem); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_GIFT_OF_LIFE_1, SPELL_GIFT_OF_LIFE_2 }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + caster->CastSpell(caster, SPELL_GIFT_OF_LIFE_1, true); + caster->CastSpell(caster, SPELL_GIFT_OF_LIFE_2, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_item_lifegiving_gem::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + enum NitroBoosts { SPELL_NITRO_BOOSTS_SUCCESS = 54861, @@ -4178,6 +4233,7 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_healing_touch_refund); new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY, SPELL_INVIGORATION_MANA, SPELL_INVIGORATION_RAGE, SPELL_INVIGORATION_RP>("spell_item_heartpierce"); new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY_HERO, SPELL_INVIGORATION_MANA_HERO, SPELL_INVIGORATION_RAGE_HERO, SPELL_INVIGORATION_RP_HERO>("spell_item_heartpierce_hero"); + RegisterSpellScript(spell_item_hourglass_sand); RegisterSpellScript(spell_item_crystal_spire_of_karabor); RegisterSpellScript(spell_item_make_a_wish); RegisterSpellScript(spell_item_mark_of_conquest); @@ -4222,6 +4278,7 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_demon_broiled_surprise); RegisterSpellScript(spell_item_complete_raptor_capture); RegisterSpellScript(spell_item_impale_leviroth); + RegisterSpellScript(spell_item_lifegiving_gem); RegisterSpellScript(spell_item_nitro_boosts); RegisterSpellScript(spell_item_nitro_boosts_backfire); RegisterSpellScript(spell_item_rocket_boots); diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index f2f614b4481..b1a1d35d781 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1838,6 +1838,70 @@ class spell_quest_portal_with_condition : public SpellScript } }; +enum TributeSpells +{ + SPELL_GROMS_TROLL_TRIBUTE = 24101, + SPELL_GROMS_TAUREN_TRIBUTE = 24102, + SPELL_GROMS_UNDEAD_TRIBUTE = 24103, + SPELL_GROMS_ORC_TRIBUTE = 24104, + SPELL_GROMS_BLOODELF_TRIBUTE = 69530, + SPELL_UTHERS_HUMAN_TRIBUTE = 24105, + SPELL_UTHERS_GNOME_TRIBUTE = 24106, + SPELL_UTHERS_DWARF_TRIBUTE = 24107, + SPELL_UTHERS_NIGHTELF_TRIBUTE = 24108, + SPELL_UTHERS_DRAENEI_TRIBUTE = 69533 +}; + +// 24194 - Uther's Tribute +// 24195 - Grom's Tribute +class spell_quest_uther_grom_tribute : public SpellScript +{ + PrepareSpellScript(spell_quest_uther_grom_tribute); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_GROMS_TROLL_TRIBUTE, SPELL_UTHERS_HUMAN_TRIBUTE, + SPELL_GROMS_TAUREN_TRIBUTE, SPELL_UTHERS_GNOME_TRIBUTE, + SPELL_GROMS_UNDEAD_TRIBUTE, SPELL_UTHERS_DWARF_TRIBUTE, + SPELL_GROMS_ORC_TRIBUTE, SPELL_UTHERS_NIGHTELF_TRIBUTE, + SPELL_GROMS_BLOODELF_TRIBUTE, SPELL_UTHERS_DRAENEI_TRIBUTE + }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Player* caster = GetCaster()->ToPlayer(); + if (!caster) + return; + + uint32 spell = 0; + switch (caster->GetRace()) + { + case RACE_TROLL: spell = SPELL_GROMS_TROLL_TRIBUTE; break; + case RACE_TAUREN: spell = SPELL_GROMS_TAUREN_TRIBUTE; break; + case RACE_UNDEAD_PLAYER: spell = SPELL_GROMS_UNDEAD_TRIBUTE; break; + case RACE_ORC: spell = SPELL_GROMS_ORC_TRIBUTE; break; + case RACE_BLOODELF: spell = SPELL_GROMS_BLOODELF_TRIBUTE; break; + case RACE_HUMAN: spell = SPELL_UTHERS_HUMAN_TRIBUTE; break; + case RACE_GNOME: spell = SPELL_UTHERS_GNOME_TRIBUTE; break; + case RACE_DWARF: spell = SPELL_UTHERS_DWARF_TRIBUTE; break; + case RACE_NIGHTELF: spell = SPELL_UTHERS_NIGHTELF_TRIBUTE; break; + case RACE_DRAENEI: spell = SPELL_UTHERS_DRAENEI_TRIBUTE; break; + default: break; + } + + if (spell) + caster->CastSpell(caster, spell); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_quest_uther_grom_tribute::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -1897,4 +1961,5 @@ void AddSC_quest_spell_scripts() RegisterSpellScript(spell_q11306_failed_mix_43378); RegisterSpellScript(spell_quest_taming_the_beast); RegisterSpellScript(spell_quest_portal_with_condition); + RegisterSpellScript(spell_quest_uther_grom_tribute); } |