diff options
author | offl <11556157+offl@users.noreply.github.com> | 2025-09-09 19:31:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-09 18:31:44 +0200 |
commit | 19382995de1a30ad249388a8b6280dede02d24d5 (patch) | |
tree | bd47c2f047a1c25433b5cda3cf9caf7db800975a /src | |
parent | f9a6d912891294e2b13f18356784f1d94a743586 (diff) |
Scripts/Spells: Migrate some spell linked spells to spell scripts (#31182)
Diffstat (limited to 'src')
18 files changed, 1014 insertions, 4 deletions
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index ad5f9e9588c..f641abf1763 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -31,6 +31,7 @@ EndScriptData */ #include "MotionMaster.h" #include "ObjectAccessor.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "TemporarySummon.h" #include "Weather.h" #include "zulaman.h" @@ -46,7 +47,16 @@ enum Spells SPELL_ELECTRICAL_OVERLOAD = 43658, SPELL_EAGLE_SWOOP = 44732, SPELL_ZAP = 43137, - SPELL_SAND_STORM = 25160 + SPELL_SAND_STORM = 25160, + + SPELL_ELECTRICAL_STORM_AURA = 44007, + SPELL_TELEPORT_SELF = 44006, + + SPELL_ELECTRICAL_ARC_1 = 43653, + SPELL_ELECTRICAL_ARC_2 = 43654, + SPELL_ELECTRICAL_ARC_3 = 43655, + SPELL_ELECTRICAL_ARC_4 = 43656, + SPELL_ELECTRICAL_ARC_5 = 43659 }; enum Says @@ -466,8 +476,66 @@ class npc_akilzon_eagle : public CreatureScript } }; +// 43648 - Electrical Storm +class spell_akilzon_electrical_storm : public SpellScript +{ + PrepareSpellScript(spell_akilzon_electrical_storm); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ELECTRICAL_STORM_AURA, SPELL_TELEPORT_SELF }); + } + + void HandleAfterHit() + { + Unit* target = GetHitUnit(); + target->CastSpell(target, SPELL_ELECTRICAL_STORM_AURA, true); + target->CastSpell(target, SPELL_TELEPORT_SELF, true); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_akilzon_electrical_storm::HandleAfterHit); + } +}; + +// 43658 - Electrical Overload Graphic Pulse +class spell_akilzon_electrical_overload : public SpellScript +{ + PrepareSpellScript(spell_akilzon_electrical_overload); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_ELECTRICAL_ARC_1, + SPELL_ELECTRICAL_ARC_2, + SPELL_ELECTRICAL_ARC_3, + SPELL_ELECTRICAL_ARC_4, + SPELL_ELECTRICAL_ARC_5 + }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + caster->CastSpell(caster, SPELL_ELECTRICAL_ARC_1, true); + caster->CastSpell(caster, SPELL_ELECTRICAL_ARC_2, true); + caster->CastSpell(caster, SPELL_ELECTRICAL_ARC_3, true); + caster->CastSpell(caster, SPELL_ELECTRICAL_ARC_4, true); + caster->CastSpell(caster, SPELL_ELECTRICAL_ARC_5, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_akilzon_electrical_overload::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_boss_akilzon() { new boss_akilzon(); new npc_akilzon_eagle(); + RegisterSpellScript(spell_akilzon_electrical_storm); + RegisterSpellScript(spell_akilzon_electrical_overload); } diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp index 3744aaca6ed..4143047c002 100644 --- a/src/server/scripts/Events/hallows_end.cpp +++ b/src/server/scripts/Events/hallows_end.cpp @@ -95,6 +95,32 @@ class spell_hallow_end_candy_pirate : public AuraScript } }; +enum TrickInitial +{ + SPELL_TRICK_INITIAL = 24750 +}; + +// 24714 - Trick +class spell_hallow_end_trick_initial : public SpellScript +{ + PrepareSpellScript(spell_hallow_end_trick_initial); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TRICK_INITIAL }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_TRICK_INITIAL); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_initial::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + enum TrickSpells { SPELL_PIRATE_COSTUME_MALE = 24708, @@ -302,12 +328,43 @@ class spell_hallow_end_wand : public SpellScript } }; +enum CreateWaterBucket +{ + SPELL_CREATE_WATER_BUCKET_BARREL_SPLASH = 43244, + SPELL_JUST_LOOTED_WATER_BARREL = 44410 +}; + +// 42144 - Headless Horseman - Create Water Bucket +class spell_hallow_end_create_water_bucket : public SpellScript +{ + PrepareSpellScript(spell_hallow_end_create_water_bucket); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_CREATE_WATER_BUCKET_BARREL_SPLASH, SPELL_JUST_LOOTED_WATER_BARREL }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* target = GetHitUnit(); + target->CastSpell(target, SPELL_CREATE_WATER_BUCKET_BARREL_SPLASH); + target->CastSpell(target, SPELL_JUST_LOOTED_WATER_BARREL); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hallow_end_create_water_bucket::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_event_hallows_end() { RegisterSpellScript(spell_hallow_end_candy); RegisterSpellScript(spell_hallow_end_candy_pirate); + RegisterSpellScript(spell_hallow_end_trick_initial); RegisterSpellScript(spell_hallow_end_trick); RegisterSpellScript(spell_hallow_end_trick_or_treat); RegisterSpellScript(spell_hallow_end_tricky_treat); RegisterSpellScript(spell_hallow_end_wand); + RegisterSpellScript(spell_hallow_end_create_water_bucket); } diff --git a/src/server/scripts/Events/midsummer.cpp b/src/server/scripts/Events/midsummer.cpp index aff921d63ba..b36fd1a04b6 100644 --- a/src/server/scripts/Events/midsummer.cpp +++ b/src/server/scripts/Events/midsummer.cpp @@ -490,6 +490,57 @@ public: explicit spell_midsummer_cleansing_flames(CleansingFlames triggeredSpell) : _triggeredSpell(triggeredSpell) { } }; +enum StampOutBonfire +{ + SPELL_STAMP_OUT_BONFIRE_EVENT = 45443, + SPELL_STAMP_OUT_BONFIRE_ART_KIT = 46903, + SPELL_STAMP_OUT_BONFIRE_DUMMY = 45437 +}; + +// 45458 - Holiday - Midsummer, Stamp Out Bonfire, Quest Complete +class spell_midsummer_stamp_out_bonfire_quest_complete : public AuraScript +{ + PrepareAuraScript(spell_midsummer_stamp_out_bonfire_quest_complete); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_STAMP_OUT_BONFIRE_EVENT }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_STAMP_OUT_BONFIRE_EVENT, true); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_midsummer_stamp_out_bonfire_quest_complete::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 45443 - Stamp Out Bonfire, Event +class spell_midsummer_stamp_out_bonfire_event : public SpellScript +{ + PrepareSpellScript(spell_midsummer_stamp_out_bonfire_event); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_STAMP_OUT_BONFIRE_ART_KIT, SPELL_STAMP_OUT_BONFIRE_DUMMY }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + caster->CastSpell(caster, SPELL_STAMP_OUT_BONFIRE_ART_KIT, true); + caster->CastSpell(caster, SPELL_STAMP_OUT_BONFIRE_DUMMY, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_midsummer_stamp_out_bonfire_event::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_event_midsummer() { RegisterSpellScript(spell_midsummer_braziers_hit); @@ -511,4 +562,6 @@ void AddSC_event_midsummer() RegisterSpellScriptWithArgs(spell_midsummer_cleansing_flames, "spell_midsummer_cleansing_flames_the_undercity", SPELL_CREATE_FLAME_OF_THE_UNDERCITY); RegisterSpellScriptWithArgs(spell_midsummer_cleansing_flames, "spell_midsummer_cleansing_flames_silvermoon", SPELL_CREATE_FLAME_OF_SILVERMOON); RegisterSpellScriptWithArgs(spell_midsummer_cleansing_flames, "spell_midsummer_cleansing_flames_the_exodar", SPELL_CREATE_FLAME_OF_THE_EXODAR); + RegisterSpellScript(spell_midsummer_stamp_out_bonfire_quest_complete); + RegisterSpellScript(spell_midsummer_stamp_out_bonfire_event); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 3573cf7b610..62cd8395880 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -30,6 +30,7 @@ #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" #include "SpellInfo.h" +#include "SpellScript.h" #include "ScriptMgr.h" #include "SplineChainMovementGenerator.h" #include "TemporarySummon.h" @@ -1465,6 +1466,32 @@ public: } }; +enum TeleportToStratholme +{ + SPELL_TELEPORT_TO_COT_STRATHOLME = 53436 +}; + +// 53435 - Teleport to CoT Stratholme Phase 4 +class spell_cos_teleport_to_cot_stratholme_phase_4 : public SpellScript +{ + PrepareSpellScript(spell_cos_teleport_to_cot_stratholme_phase_4); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TELEPORT_TO_COT_STRATHOLME }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_TELEPORT_TO_COT_STRATHOLME); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_cos_teleport_to_cot_stratholme_phase_4::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_culling_of_stratholme() { new npc_hearthsinger_forresten_cot(); @@ -1480,4 +1507,6 @@ void AddSC_culling_of_stratholme() new npc_sergeant_morigan(); new npc_roger_owens(); new npc_crate_helper(); + + RegisterSpellScript(spell_cos_teleport_to_cot_stratholme_phase_4); } diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 78448c14103..2480516cf95 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -665,6 +665,64 @@ class spell_azuremyst_isle_cast_fishing_net : public SpellScript } }; +/*###### +## Quest 9542: Totem of Vark +######*/ + +enum TotemOfVark +{ + SPELL_SHADOW_OF_THE_FOREST_SI_DND = 32213 +}; + +// 30447 - Shadow of the Forest +class spell_azuremyst_isle_shadow_of_the_forest_creature : public AuraScript +{ + PrepareAuraScript(spell_azuremyst_isle_shadow_of_the_forest_creature); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHADOW_OF_THE_FOREST_SI_DND }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_OF_THE_FOREST_SI_DND, true); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_azuremyst_isle_shadow_of_the_forest_creature::AfterApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 30448 - Shadow of the Forest +class spell_azuremyst_isle_shadow_of_the_forest_player : public AuraScript +{ + PrepareAuraScript(spell_azuremyst_isle_shadow_of_the_forest_player); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHADOW_OF_THE_FOREST_SI_DND }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->CastSpell(GetTarget(), SPELL_SHADOW_OF_THE_FOREST_SI_DND, true); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_SHADOW_OF_THE_FOREST_SI_DND); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_azuremyst_isle_shadow_of_the_forest_player::AfterApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_azuremyst_isle_shadow_of_the_forest_player::AfterRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_azuremyst_isle() { new npc_draenei_survivor(); @@ -674,4 +732,6 @@ void AddSC_azuremyst_isle() new npc_geezle(); RegisterSpellScript(spell_inoculate_nestlewood); RegisterSpellScript(spell_azuremyst_isle_cast_fishing_net); + RegisterSpellScript(spell_azuremyst_isle_shadow_of_the_forest_creature); + RegisterSpellScript(spell_azuremyst_isle_shadow_of_the_forest_player); } diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index 1f4d9053f8f..b9bc4293c1f 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -141,10 +141,41 @@ class spell_dustwallow_marsh_salvage_wreckage : public SpellScript } }; +/*###### +## Quest 11142: Survey Alcaz Island +######*/ + +enum SurveyAlcazIsland +{ + SPELL_ALCAZ_SURVEY_CREDIT = 42316 +}; + +// 42385 - Alcaz Survey Aura +class spell_dustwallow_marsh_alcaz_survey_aura : public AuraScript +{ + PrepareAuraScript(spell_dustwallow_marsh_alcaz_survey_aura); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ALCAZ_SURVEY_CREDIT }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_ALCAZ_SURVEY_CREDIT, true); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_dustwallow_marsh_alcaz_survey_aura::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_dustwallow_marsh() { RegisterSpellScript(spell_ooze_zap); RegisterSpellScript(spell_ooze_zap_channel_end); RegisterSpellScript(spell_energize_aoe); RegisterSpellScript(spell_dustwallow_marsh_salvage_wreckage); + RegisterSpellScript(spell_dustwallow_marsh_alcaz_survey_aura); } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 04098b968b7..9c9237d5bc6 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -45,7 +45,10 @@ enum Spells SPELL_SOULSTORM = 68872, SPELL_SOULSTORM_CHANNEL = 69008, // Pre-fight SPELL_SOULSTORM_VISUAL = 68870, // Pre-cast Soulstorm - SPELL_PURPLE_BANISH_VISUAL = 68862 // Used by Soul Fragment (Aura) + SPELL_PURPLE_BANISH_VISUAL = 68862, // Used by Soul Fragment (Aura) + + SPELL_KNOCKDOWN_STUN = 68848, + SPELL_DRAW_CORRUPTED_SOUL = 68846 }; enum Events @@ -328,6 +331,29 @@ class spell_bronjahm_soulstorm_targeting : public SpellScript } }; +// 68839 - Corrupt Soul +class spell_bronjahm_corrupt_soul : public AuraScript +{ + PrepareAuraScript(spell_bronjahm_corrupt_soul); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_KNOCKDOWN_STUN, SPELL_DRAW_CORRUPTED_SOUL }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_KNOCKDOWN_STUN, true); + target->CastSpell(target, SPELL_DRAW_CORRUPTED_SOUL, true); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_bronjahm_corrupt_soul::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + class achievement_bronjahm_soul_power : public AchievementCriteriaScript { public: @@ -348,5 +374,6 @@ void AddSC_boss_bronjahm() RegisterSpellScriptWithArgs(spell_bronjahm_soulstorm_visual, "spell_bronjahm_soulstorm_channel"); RegisterSpellScriptWithArgs(spell_bronjahm_soulstorm_visual, "spell_bronjahm_soulstorm_visual"); RegisterSpellScript(spell_bronjahm_soulstorm_targeting); + RegisterSpellScript(spell_bronjahm_corrupt_soul); new achievement_bronjahm_soul_power(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index bb927142fdd..93acc9e9a91 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -202,6 +202,7 @@ enum PreAddSpells SPELL_RUNIC_STRIKE = 62322, SPELL_AURA_OF_CELERITY = 62320, + SPELL_AURA_OF_CELERITY_VISUAL = 62398, SPELL_IMPALE = 62331, SPELL_WHIRLING_TRIP = 64151, @@ -2129,6 +2130,27 @@ class spell_thorim_activate_lightning_orb_periodic : public SpellScriptLoader } }; +// 62320 - Aura of Celerity +class spell_thorim_aura_of_celerity : public AuraScript +{ + PrepareAuraScript(spell_thorim_aura_of_celerity); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_AURA_OF_CELERITY_VISUAL }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_AURA_OF_CELERITY_VISUAL); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_thorim_aura_of_celerity::AfterRemove, EFFECT_0, SPELL_AURA_MELEE_SLOW, AURA_EFFECT_HANDLE_REAL); + } +}; + class achievement_dont_stand_in_the_lightning : public AchievementCriteriaScript { public: @@ -2203,6 +2225,7 @@ void AddSC_boss_thorim() new spell_thorim_arena_leap(); new spell_thorim_runic_smash(); new spell_thorim_activate_lightning_orb_periodic(); + RegisterSpellScript(spell_thorim_aura_of_celerity); new achievement_dont_stand_in_the_lightning(); new achievement_lose_your_illusion(); new achievement_i_ll_take_you_all_on(); diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index efc7f28a3d7..19620eeb30d 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -18,6 +18,7 @@ #include "ScriptMgr.h" #include "InstanceScript.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "violet_hold.h" enum ZuramatTexts @@ -187,6 +188,27 @@ private: SummonList _summons; }; +// 54361, 59743 - Void Shift +class spell_zuramat_void_shift : public AuraScript +{ + PrepareAuraScript(spell_zuramat_void_shift); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_VOID_SHIFTED }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_VOID_SHIFTED, true); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_zuramat_void_shift::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + } +}; + class achievement_void_dance : public AchievementCriteriaScript { public: @@ -209,5 +231,6 @@ void AddSC_boss_zuramat() { RegisterVioletHoldCreatureAI(boss_zuramat); RegisterVioletHoldCreatureAI(npc_void_sentry); + RegisterSpellScript(spell_zuramat_void_shift); new achievement_void_dance(); } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index caed83fb973..838baad156b 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1904,6 +1904,111 @@ class spell_borean_tundra_ultrasonic_screwdriver : public SpellScript } }; +/*###### +## Quest 11652: The Plains of Nasam +######*/ + +enum ThePlainsOfNasam +{ + SPELL_DROP_WARSONG_LAND_MINE_1 = 45751, + SPELL_DROP_WARSONG_LAND_MINE_2 = 45752, + SPELL_DROP_WARSONG_LAND_MINE_3 = 45753, + SPELL_DROP_WARSONG_LAND_MINE_4 = 45754, + SPELL_DROP_WARSONG_LAND_MINE_5 = 45755, + SPELL_DROP_WARSONG_LAND_MINE_6 = 45756, + SPELL_DROP_WARSONG_LAND_MINE_7 = 47839, + SPELL_DROP_WARSONG_LAND_MINE_8 = 45749 +}; + +static constexpr std::array<uint32, 8> DropLandMineSpells = +{ + SPELL_DROP_WARSONG_LAND_MINE_1, SPELL_DROP_WARSONG_LAND_MINE_2, SPELL_DROP_WARSONG_LAND_MINE_3, SPELL_DROP_WARSONG_LAND_MINE_4, + SPELL_DROP_WARSONG_LAND_MINE_5, SPELL_DROP_WARSONG_LAND_MINE_6, SPELL_DROP_WARSONG_LAND_MINE_7, SPELL_DROP_WARSONG_LAND_MINE_8 +}; + +// 45750 - Land Mine Barrier +class spell_borean_tundra_land_mine_barrier : public SpellScript +{ + PrepareSpellScript(spell_borean_tundra_land_mine_barrier); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(DropLandMineSpells); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + for (uint32 spells : DropLandMineSpells) + caster->CastSpell(caster, spells); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_borean_tundra_land_mine_barrier::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +/*###### +## Quest 11681: Rescuing Evanor +######*/ + +enum RescuingEvanor +{ + SPELL_AMBER_LEDGE_TO_BERYL_POINT = 45883 +}; + +// 45992 - Taxi - Amber Ledge to Beryl Point Platform +class spell_borean_tundra_taxi_amber_ledge_to_beryl_point_platform : public AuraScript +{ + PrepareAuraScript(spell_borean_tundra_taxi_amber_ledge_to_beryl_point_platform); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_AMBER_LEDGE_TO_BERYL_POINT }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_AMBER_LEDGE_TO_BERYL_POINT); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_borean_tundra_taxi_amber_ledge_to_beryl_point_platform::AfterRemove, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL); + } +}; + +/*###### +## Quest 11969: Springing the Trap +######*/ + +enum SpringingTheTrap +{ + SPELL_COLDARRA_TO_TRANSITUS = 46814 +}; + +// 46813 - Taxi - Coldarra Ledge to Transitus Shield +class spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield : public AuraScript +{ + PrepareAuraScript(spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_COLDARRA_TO_TRANSITUS }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_COLDARRA_TO_TRANSITUS); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_borean_tundra() { RegisterCreatureAI(npc_beryl_sorcerer); @@ -1936,4 +2041,7 @@ void AddSC_borean_tundra() RegisterSpellScript(spell_borean_tundra_weakness_to_lightning_on_quest_complete); RegisterSpellScript(spell_borean_tundra_signal_alliance); RegisterSpellScript(spell_borean_tundra_ultrasonic_screwdriver); + RegisterSpellScript(spell_borean_tundra_land_mine_barrier); + RegisterSpellScript(spell_borean_tundra_taxi_amber_ledge_to_beryl_point_platform); + RegisterSpellScript(spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield); } diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index e63d63c14e4..fec320bea96 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -913,6 +913,36 @@ class spell_dragonblight_fill_blood_unholy_frost_gem : public SpellScript } }; +/*###### +## Quest 12076: Messy Business +######*/ + +enum MessyBusiness +{ + SPELL_CORROSIVE_SPIT = 47447 +}; + +// 47435 - Scrape Corrosive Spit +class spell_dragonblight_scrape_corrosive_spit : public SpellScript +{ + PrepareSpellScript(spell_dragonblight_scrape_corrosive_spit); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_CORROSIVE_SPIT }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetCaster()->RemoveAurasDueToSpell(SPELL_CORROSIVE_SPIT); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_dragonblight_scrape_corrosive_spit::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + // 47447 - Corrosive Spit class spell_dragonblight_corrosive_spit : public AuraScript { @@ -1035,6 +1065,36 @@ class spell_dragonblight_end_of_the_line_quest_completion_script : public SpellS } }; +/*###### +## Quest 12028: Spiritual Insight +######*/ + +enum SpiritualInsight +{ + SPELL_SPIRITUAL_INSIGHT = 47189 +}; + +// 47190 - Toalu'u's Spiritual Incense +class spell_dragonblight_toaluus_spiritual_incense : public AuraScript +{ + PrepareAuraScript(spell_dragonblight_toaluus_spiritual_incense); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SPIRITUAL_INSIGHT }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_SPIRITUAL_INSIGHT); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_dragonblight_toaluus_spiritual_incense::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_dragonblight() { RegisterCreatureAI(npc_commander_eligor_dawnbringer); @@ -1052,8 +1112,10 @@ void AddSC_dragonblight() RegisterSpellScript(spell_dragonblight_bombard_the_ballistae_fx_master); RegisterSpellScript(spell_dragonblight_surge_needle_teleporter); RegisterSpellScript(spell_dragonblight_fill_blood_unholy_frost_gem); + RegisterSpellScript(spell_dragonblight_scrape_corrosive_spit); RegisterSpellScript(spell_dragonblight_corrosive_spit); RegisterSpellScript(spell_dragonblight_focus_on_the_beach_quest_completion_script); RegisterSpellScript(spell_dragonblight_atop_the_woodlands_quest_completion_script); RegisterSpellScript(spell_dragonblight_end_of_the_line_quest_completion_script); + RegisterSpellScript(spell_dragonblight_toaluus_spiritual_incense); } diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 1ec851a1f8c..32017d9f486 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -1066,6 +1066,39 @@ class spell_grizzly_hills_hand_over_reins : public SpellScript } }; +/*###### +## Quest 12121: See You on the Other Side +######*/ + +enum SeeYouOnTheOtherSide +{ + SPELL_SUMMON_YOUR_CORPSE = 61612, + SPELL_ON_THE_OTHER_SIDE = 61611 +}; + +// 47744 - Rage of Jin'arrak +class spell_grizzly_hills_rage_of_jinarrak : public AuraScript +{ + PrepareAuraScript(spell_grizzly_hills_rage_of_jinarrak); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_YOUR_CORPSE, SPELL_ON_THE_OTHER_SIDE }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_SUMMON_YOUR_CORPSE, true); + target->CastSpell(target, SPELL_ON_THE_OTHER_SIDE, true); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_grizzly_hills_rage_of_jinarrak::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_grizzly_hills() { RegisterCreatureAI(npc_emily); @@ -1091,4 +1124,5 @@ void AddSC_grizzly_hills() RegisterSpellScript(spell_grizzly_hills_escape_from_silverbrook); RegisterSpellScript(spell_grizzly_hills_escape_from_silverbrook_summon_worgen); RegisterSpellScript(spell_grizzly_hills_hand_over_reins); + RegisterSpellScript(spell_grizzly_hills_rage_of_jinarrak); } diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index f9fec626827..d7518888cf5 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -749,6 +749,94 @@ class spell_fjord_failed_mix_concoction_2 : public SpellScript } }; +/*###### +## Quest 11448: The Explorers' League Outpost +######*/ + +enum TheExplorersLeagueOutpost +{ + SPELL_TAXI_TO_EXPLORERS_LEAGUE = 44280 +}; + +// 51221 - Taxi to Explorers' League Outpost +class spell_fjord_taxi_to_explorers_league_outpost : public AuraScript +{ + PrepareAuraScript(spell_fjord_taxi_to_explorers_league_outpost); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TAXI_TO_EXPLORERS_LEAGUE }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_TAXI_TO_EXPLORERS_LEAGUE); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_fjord_taxi_to_explorers_league_outpost::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +/*###### +## Quest 11323, 11325: In Worg's Clothing +######*/ + +enum InWorgsClothing +{ + SPELL_WORG_DISGUISE_DUMMY = 68347, + SPELL_WORG_DISGUISE = 43369 +}; + +// 43369 - Worg Disguise +class spell_fjord_worg_disguise : public AuraScript +{ + PrepareAuraScript(spell_fjord_worg_disguise); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WORG_DISGUISE_DUMMY }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_WORG_DISGUISE_DUMMY); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_WORG_DISGUISE_DUMMY); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_fjord_worg_disguise::AfterApply, EFFECT_0, SPELL_AURA_FORCE_REACTION, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_fjord_worg_disguise::AfterRemove, EFFECT_0, SPELL_AURA_FORCE_REACTION, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 68347 - Worg Disguise +class spell_fjord_worg_disguise_dummy : public AuraScript +{ + PrepareAuraScript(spell_fjord_worg_disguise_dummy); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WORG_DISGUISE }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_WORG_DISGUISE); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_fjord_worg_disguise_dummy::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_howling_fjord() { RegisterCreatureAI(npc_daegarn); @@ -769,4 +857,7 @@ void AddSC_howling_fjord() RegisterSpellScript(spell_fjord_mixing_vrykul_blood); RegisterSpellScript(spell_fjord_failed_mix_concoction_1); RegisterSpellScript(spell_fjord_failed_mix_concoction_2); + RegisterSpellScript(spell_fjord_taxi_to_explorers_league_outpost); + RegisterSpellScript(spell_fjord_worg_disguise); + RegisterSpellScript(spell_fjord_worg_disguise_dummy); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index a76580a65e6..9bcc0f7733c 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -1321,6 +1321,39 @@ class spell_storm_peaks_flaming_arrow_triggered_effect : public AuraScript } }; +/*###### +## Quest 12920: Catching up with Brann +######*/ + +enum CatchingUpWithBrann +{ + SPELL_DESPAWN_BRANN = 61121, + SPELL_CONTACT_BRANN = 55038 +}; + +// 61122 - Contact Brann +class spell_storm_peaks_contact_brann : public SpellScript +{ + PrepareSpellScript(spell_storm_peaks_contact_brann); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DESPAWN_BRANN, SPELL_CONTACT_BRANN }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + caster->CastSpell(caster, SPELL_DESPAWN_BRANN); + caster->CastSpell(caster, SPELL_CONTACT_BRANN); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_storm_peaks_contact_brann::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_storm_peaks() { RegisterCreatureAI(npc_brunnhildar_prisoner); @@ -1350,4 +1383,5 @@ void AddSC_storm_peaks() RegisterSpellScript(spell_storm_peaks_unstable_explosive_detonation); RegisterSpellScript(spell_storm_peaks_call_of_earth); RegisterSpellScript(spell_storm_peaks_flaming_arrow_triggered_effect); + RegisterSpellScript(spell_storm_peaks_contact_brann); } diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index a4b18fbd7a7..8d6c19b5b95 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1075,6 +1075,27 @@ class spell_zuldrak_quenching_mist : public AuraScript } }; +// 52989 - Akali's Stun +class spell_zuldrak_akalis_stun : public AuraScript +{ + PrepareAuraScript(spell_zuldrak_akalis_stun); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_FLICKERING_FLAMES }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_FLICKERING_FLAMES); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_zuldrak_akalis_stun::AfterApply, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); + } +}; + /*###### ## Quest 12661: Infiltrating Voltarus / 12669: So Far, So Bad / 12676: Sabotage / 12677: Hazardous Materials / 12713: Betrayal ######*/ @@ -1196,6 +1217,109 @@ class spell_zuldrak_gymers_throw : public SpellScript } }; +/*###### +## Quest 12557: Lab Work +######*/ + +enum LabWork +{ + SPELL_LAB_WORK_HAVE_WITHERED_BATWING = 51060, + SPELL_LAB_WORK_HAVE_MUDDY_MIRE_MAGGOT = 51068, + SPELL_LAB_WORK_HAVE_AMBERSEED = 51088, + SPELL_LAB_WORK_HAVE_CHILLED_SERPENT_MUCUS = 51094, + + SPELL_WITHERED_BATWING_KILL_CREDIT = 51226, + SPELL_MUDDY_MIRE_MAGGOT_KILL_CREDIT = 51227, + SPELL_AMBERSEED_KILL_CREDIT = 51228, + SPELL_CHILLED_SERPENT_MUCUS_KILL_CREDIT = 51229 +}; + +// 51060 - Have Withered Batwing +// 51068 - Have Muddy Mire Maggot +// 51088 - Have Amberseed +// 51094 - Have Chilled Serpent Mucus +class spell_zuldrak_have_ingredient : public AuraScript +{ + PrepareAuraScript(spell_zuldrak_have_ingredient); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_WITHERED_BATWING_KILL_CREDIT, + SPELL_MUDDY_MIRE_MAGGOT_KILL_CREDIT, + SPELL_AMBERSEED_KILL_CREDIT, + SPELL_CHILLED_SERPENT_MUCUS_KILL_CREDIT + }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + switch (GetId()) + { + case SPELL_LAB_WORK_HAVE_WITHERED_BATWING: + GetTarget()->CastSpell(GetTarget(), SPELL_WITHERED_BATWING_KILL_CREDIT); + break; + case SPELL_LAB_WORK_HAVE_MUDDY_MIRE_MAGGOT: + GetTarget()->CastSpell(GetTarget(), SPELL_MUDDY_MIRE_MAGGOT_KILL_CREDIT); + break; + case SPELL_LAB_WORK_HAVE_AMBERSEED: + GetTarget()->CastSpell(GetTarget(), SPELL_AMBERSEED_KILL_CREDIT); + break; + case SPELL_LAB_WORK_HAVE_CHILLED_SERPENT_MUCUS: + GetTarget()->CastSpell(GetTarget(), SPELL_CHILLED_SERPENT_MUCUS_KILL_CREDIT); + break; + default: + break; + } + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_zuldrak_have_ingredient::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +/*###### +## Quest 12710: Disclosure +######*/ + +// 52839 - Summon Escort Aura +class spell_zuldrak_summon_escort_aura : public AuraScript +{ + PrepareAuraScript(spell_zuldrak_summon_escort_aura); + + enum Disclosure + { + SPELL_SCOURGE_DISGUISE = 51966, + SPELL_SUMMON_ESCORT = 52775, + SPELL_SCOURGE_DISGUISE_ESCORT = 52842 + }; + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_SCOURGE_DISGUISE, + SPELL_SUMMON_ESCORT, + SPELL_SCOURGE_DISGUISE_ESCORT + }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->RemoveAurasDueToSpell(SPELL_SCOURGE_DISGUISE); + target->CastSpell(target, SPELL_SUMMON_ESCORT); + target->CastSpell(target, SPELL_SCOURGE_DISGUISE_ESCORT); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_zuldrak_summon_escort_aura::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_zuldrak() { RegisterCreatureAI(npc_released_offspring_harkoa); @@ -1220,8 +1344,11 @@ void AddSC_zuldrak() RegisterSpellScript(spell_zuldrak_summon_nass); RegisterSpellScript(spell_zuldrak_remove_akalis_stun); RegisterSpellScript(spell_zuldrak_quenching_mist); + RegisterSpellScript(spell_zuldrak_akalis_stun); RegisterSpellScript(spell_zuldrak_summon_stefan); RegisterSpellScript(spell_zuldrak_zuldrak_rat); RegisterSpellScript(spell_zuldrak_gymers_grab); RegisterSpellScript(spell_zuldrak_gymers_throw); + RegisterSpellScript(spell_zuldrak_have_ingredient); + RegisterSpellScript(spell_zuldrak_summon_escort_aura); } diff --git a/src/server/scripts/Outland/outland_script_loader.cpp b/src/server/scripts/Outland/outland_script_loader.cpp index 605d0e383c5..95c9dc5a9af 100644 --- a/src/server/scripts/Outland/outland_script_loader.cpp +++ b/src/server/scripts/Outland/outland_script_loader.cpp @@ -136,7 +136,7 @@ void AddSC_netherstorm(); void AddSC_shadowmoon_valley(); // void AddSC_shattrath_city(); void AddSC_terokkar_forest(); -// void AddSC_zangarmarsh(); +void AddSC_zangarmarsh(); // The name of this function should match: // void Add${NameOfDirectory}Scripts() @@ -262,5 +262,5 @@ void AddOutlandScripts() AddSC_shadowmoon_valley(); // AddSC_shattrath_city(); AddSC_terokkar_forest(); - // AddSC_zangarmarsh(); + AddSC_zangarmarsh(); } diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index e3edce057eb..97b57e3e125 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -1308,6 +1308,87 @@ class spell_bem_check_fly_mount : public SpellScript } }; +enum ApexisSwiftness +{ + SPELL_APEXIS_VIBRATIONS = 40623, + SPELL_APEXIS_EMANATIONS = 40625, + SPELL_APEXIS_ENLIGHTENMENT = 40626, + SPELL_SWIFTNESS_APEXIS_VIBRATIONS = 40624, + SPELL_SWIFTNESS_APEXIS_EMANATIONS = 40627, + SPELL_SWIFTNESS_APEXIS_ENLIGHTENMENT = 40628 +}; + +// 40623 - Apexis Vibrations +// 40625 - Apexis Emanations +// 40626 - Apexis Enlightenment +class spell_bem_apexis_swiftness : public AuraScript +{ + PrepareAuraScript(spell_bem_apexis_swiftness); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_SWIFTNESS_APEXIS_VIBRATIONS, + SPELL_SWIFTNESS_APEXIS_EMANATIONS, + SPELL_SWIFTNESS_APEXIS_ENLIGHTENMENT + }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + switch (GetId()) + { + case SPELL_APEXIS_VIBRATIONS: + GetTarget()->RemoveAurasDueToSpell(SPELL_SWIFTNESS_APEXIS_VIBRATIONS); + break; + case SPELL_APEXIS_EMANATIONS: + GetTarget()->RemoveAurasDueToSpell(SPELL_SWIFTNESS_APEXIS_EMANATIONS); + break; + case SPELL_APEXIS_ENLIGHTENMENT: + GetTarget()->RemoveAurasDueToSpell(SPELL_SWIFTNESS_APEXIS_ENLIGHTENMENT); + break; + default: + break; + } + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_bem_apexis_swiftness::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +/*###### +## Quest 10525: Vision Guide +######*/ + +enum VisionGuide +{ + SPELL_VISION_GUIDE = 36573 +}; + +// 36587 - Vision Guide +class spell_bem_vision_guide : public AuraScript +{ + PrepareAuraScript(spell_bem_vision_guide); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_VISION_GUIDE }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_VISION_GUIDE, true); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_bem_vision_guide::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_blades_edge_mountains() { new npc_nether_drake(); @@ -1329,4 +1410,6 @@ void AddSC_blades_edge_mountains() RegisterSpellScript(spell_bem_aggro_burst); RegisterSpellScript(spell_bem_choose_loc); RegisterSpellScript(spell_bem_check_fly_mount); + RegisterSpellScript(spell_bem_apexis_swiftness); + RegisterSpellScript(spell_bem_vision_guide); } diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp new file mode 100644 index 00000000000..113002e999e --- /dev/null +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -0,0 +1,100 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "ScriptMgr.h" +#include "SpellScript.h" +#include "Unit.h" + +/*###### +## Quest 9718: As the Crow Flies +######*/ + +enum AsTheCrowFlies +{ + SPELL_STORMCROW_SHAPE = 31746, + SPELL_WHISPER_AURA_1 = 31773, + SPELL_WHISPER_AURA_2 = 31774, + SPELL_WHISPER_AURA_3 = 31775, + SPELL_WHISPER_AURA_4 = 31776, + SPELL_WHISPER_AURA_5 = 31777 +}; + +// 31606 - Stormcrow Amulet +class spell_zangarmarsh_stormcrow_amulet : public AuraScript +{ + PrepareAuraScript(spell_zangarmarsh_stormcrow_amulet); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_STORMCROW_SHAPE, SPELL_WHISPER_AURA_1 }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_STORMCROW_SHAPE, true); + target->CastSpell(target, SPELL_WHISPER_AURA_1, true); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_zangarmarsh_stormcrow_amulet::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 31773, 31774, 31775, 31776 - As the Crow Flies Whisper Aura +class spell_zangarmarsh_whisper_aura : public AuraScript +{ + PrepareAuraScript(spell_zangarmarsh_whisper_aura); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WHISPER_AURA_5 }); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + switch (GetId()) + { + case SPELL_WHISPER_AURA_1: + GetTarget()->CastSpell(GetTarget(), SPELL_WHISPER_AURA_2, true); + break; + case SPELL_WHISPER_AURA_2: + GetTarget()->CastSpell(GetTarget(), SPELL_WHISPER_AURA_3, true); + break; + case SPELL_WHISPER_AURA_3: + GetTarget()->CastSpell(GetTarget(), SPELL_WHISPER_AURA_4, true); + break; + case SPELL_WHISPER_AURA_4: + GetTarget()->CastSpell(GetTarget(), SPELL_WHISPER_AURA_5, true); + break; + default: + break; + } + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_zangarmarsh_whisper_aura::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +void AddSC_zangarmarsh() +{ + RegisterSpellScript(spell_zangarmarsh_stormcrow_amulet); + RegisterSpellScript(spell_zangarmarsh_whisper_aura); +} |