diff options
| author | offl <11556157+offl@users.noreply.github.com> | 2026-01-09 15:15:12 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-09 14:15:12 +0100 |
| commit | 502afe50e88a7bea74e0c7c6eb7bf9488c5a3911 (patch) | |
| tree | a8d4f529ac7a92be8c9b63388f4d0e8ffe87b944 | |
| parent | 38b1977e9078614127e3dd3b295681d16ea4c383 (diff) | |
Scripts/Spells: Get rid of remaining database spell scripts (#31471)3.3.5
| -rw-r--r-- | sql/updates/world/3.3.5/2026_01_09_00_world.sql | 144 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_borean_tundra.cpp | 113 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_howling_fjord.cpp | 62 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_sholazar_basin.cpp | 31 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_wintergrasp.cpp | 17 | ||||
| -rw-r--r-- | src/server/scripts/Outland/zone_blades_edge_mountains.cpp | 55 | ||||
| -rw-r--r-- | src/server/scripts/Pet/pet_generic.cpp | 40 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 23 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 73 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 46 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 25 |
11 files changed, 605 insertions, 24 deletions
diff --git a/sql/updates/world/3.3.5/2026_01_09_00_world.sql b/sql/updates/world/3.3.5/2026_01_09_00_world.sql new file mode 100644 index 00000000000..fc6e155c278 --- /dev/null +++ b/sql/updates/world/3.3.5/2026_01_09_00_world.sql @@ -0,0 +1,144 @@ +-- +UPDATE `creature_template` SET `unit_flags` = 768 WHERE `entry` = 38374; +UPDATE `creature_template_addon` SET `SheathState` = 1 WHERE `entry` = 38374; + +DELETE FROM `spell_scripts` WHERE `id` IN (71848,71874); +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ( +'spell_pet_gen_toxic_wasteling_find_target', +'spell_pet_gen_toxic_wasteling_devour'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(71848, 'spell_pet_gen_toxic_wasteling_find_target'), +(71874, 'spell_pet_gen_toxic_wasteling_devour'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 38374; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 38374 AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 3837400 AND `source_type` = 9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(38374,0,0,0,31,0,100,0,71847,0,0,0,0,80,3837400,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Toxic Wasteling - On Target Spellhit 'Toxic Wasteling Attack' - Run Script"), +-- After jumping default follow movement is launched, making it work not like on retail +(3837400,9,0,0,0,0,100,0,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Toxic Wasteling - On Script - Stop Follow"), +(3837400,9,1,0,0,0,100,0,1500,1500,0,0,0,11,71874,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Toxic Wasteling - On Script - Cast 'Toxic Wasteling Devour'"), +(3837400,9,3,0,0,0,100,0,1500,1500,0,0,0,11,71854,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Toxic Wasteling - On Script - Cast 'Toxic Wasteling Grow'"), +(3837400,9,4,0,0,0,100,0,2500,2500,0,0,0,29,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,"Toxic Wasteling - On Script - Follow Owner"); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 50499; + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ( +'spell_item_disco_ball_listening_to_music_periodic', +'spell_item_disco_ball_listening_to_music_check', +'spell_item_disco_ball_listening_to_music_parent'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(50493, 'spell_item_disco_ball_listening_to_music_periodic'), +(50492, 'spell_item_disco_ball_listening_to_music_check'), +(50499, 'spell_item_disco_ball_listening_to_music_parent'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 50492; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,50492,0,0,31,0,3,27989,0,0,0,0,"","Group 0: Spell 'Listening to Music CHECK' (Effect 0) targets creature 'D.I.S.C.O.'"); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (50493,50317,-50493,-50314); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 27989; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 27989 AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(27989,0,0,0,11,0,100,0,0,0,0,0,0,11,50314,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"D.I.S.C.O. - On Spawn - Cast 'Disco Ball'"), +(27989,0,1,0,11,0,100,0,0,0,0,0,0,11,50487,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"D.I.S.C.O. - On Spawn - Cast 'Create Disco Ball Visual Object'"), +(27989,0,2,0,11,0,100,0,0,0,0,0,0,11,50493,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"D.I.S.C.O. - On Spawn - Cast 'Listening to Music'"), +(27989,0,3,0,11,0,100,0,0,0,0,0,0,11,28782,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"D.I.S.C.O. - On Spawn - Cast 'Stun Self + Immune'"); + +UPDATE `creature_template_addon` SET `auras` = '' WHERE `entry` = 27989; + +-- +DELETE FROM `spell_scripts` WHERE `id` = 49899; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_wintergrasp_activate_robotic_arms'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(49899, 'spell_wintergrasp_activate_robotic_arms'); + +-- +DELETE FROM `spell_scripts` WHERE `id` IN (49625,49634); +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ( +'spell_fjord_braves_flare', +'spell_fjord_sergeants_flare'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(49625, 'spell_fjord_braves_flare'), +(49634, 'spell_fjord_sergeants_flare'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 44563; + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 24823; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 24823 AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(24823,0,0,0,8,0,100,512,44563,0,0,0,0,11,44569,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Iron Rune Construct - On Spellhit 'Bluff Quest Credit' - Cast 'Bluff Quest Credit'"); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 51659; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 28379 AND `source_type` = 0 AND `id` = 2; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(28379,0,2,0,8,0,100,0,51659,0,0,0,0,11,51656,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Shattertusk Mammoth - On Spellhit 'Apply Harness' - Cast 'Mount Mammoth Cue'"); + +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_sholazar_mount_mammoth_cue'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(51656, 'spell_sholazar_mount_mammoth_cue'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 21977; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_warr_warriors_wrath'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(21977, 'spell_warr_warriors_wrath'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 49203; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_dk_hungering_cold_init'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(49203, 'spell_dk_hungering_cold_init'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 31231; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_rog_cheat_death_cooldown'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(31231, 'spell_rog_cheat_death_cooldown'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 51662; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_rog_hunger_for_blood'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(51662, 'spell_rog_hunger_for_blood'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 40109; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_bem_kfc_the_bolt'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(40109, 'spell_bem_kfc_the_bolt'); + +-- +DELETE FROM `spell_scripts` WHERE `id` = 38173; +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_bem_summon_spirit'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(38173, 'spell_bem_summon_spirit'); + +-- +DELETE FROM `spell_scripts` WHERE `id` IN (45685,45691); + +UPDATE `spell_script_names` SET `ScriptName` = 'spell_borean_tundra_shortening_blaster' WHERE `ScriptName` = 'spell_q11653_shortening_blaster'; + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ( +'spell_borean_tundra_magnataur_on_death_1', +'spell_borean_tundra_magnataur_on_death_2'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(45691, 'spell_borean_tundra_magnataur_on_death_1'), +(45685, 'spell_borean_tundra_magnataur_on_death_2'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` IN (25432,25434) AND `SourceId` = 0; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (25432,25434) AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(25432,0,0,0,2,0,100,1,0,30,0,0,0,11,50420,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Mate of Magmothregar - Between 0-30% Health - Cast 'Enrage' (No Repeat)"), +(25432,0,1,0,83,0,100,0,50420,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Mate of Magmothregar - On Spell Cast 'Enrage' - Say Line 0"), +(25432,0,2,0,6,0,100,0,0,0,0,0,0,11,45691,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Mate of Magmothregar - On Death - Cast 'Hah... : Magnataur On Death 1'"), + +(25434,0,0,0,0,0,100,0,0,5000,10000,15000,0,11,50413,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Magmoth Crusher - In Combat - Cast 'Magnataur Charge'"), +(25434,0,1,0,0,0,100,0,5000,10000,10000,15000,0,11,50410,0,0,0,0,0,2,0,0,0,0,0,0,0,0,"Magmoth Crusher - In Combat - Cast 'Tusk Strike'"), +(25434,0,2,0,6,0,100,0,0,0,0,0,0,11,45691,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Magmoth Crusher - On Death - Cast 'Hah... : Magnataur On Death 1'"); diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 2f3f572dca6..07ad4665f8a 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1348,43 +1348,108 @@ private: ObjectGuid _playerGUID; }; -enum ShorteningBlaster +/*###### +## Quest 11653: Hah... You're Not So Big Now! +######*/ + +enum HahYoureNotSoBigNow { - SPELL_SHORTENING_BLASTER_BIGGER1 = 45674, - SPELL_SHORTENING_BLASTER_SHRUNK1 = 45675, - SPELL_SHORTENING_BLASTER_YELLOW1 = 45678, - SPELL_SHORTENING_BLASTER_GHOST1 = 45682, - SPELL_SHORTENING_BLASTER_POLYMORPH1 = 45684, - - SPELL_SHORTENING_BLASTER_BIGGER2 = 45673, - SPELL_SHORTENING_BLASTER_SHRUNK2 = 45672, - SPELL_SHORTENING_BLASTER_YELLOW2 = 45677, - SPELL_SHORTENING_BLASTER_GHOST2 = 45682, - SPELL_SHORTENING_BLASTER_POLYMORPH2 = 45683 + SPELL_BIGGER_1 = 45674, + SPELL_SHRUNK_1 = 45675, + SPELL_YELLOW_1 = 45678, + SPELL_GHOST_1 = 45682, + SPELL_POLYMORPH_1 = 45684, + + SPELL_BIGGER_2 = 45673, + SPELL_SHRUNK_2 = 45672, + SPELL_YELLOW_2 = 45677, + SPELL_GHOST_2 = 45681, + SPELL_POLYMORPH_2 = 45683, + + SPELL_MAGNATAUR_KILL_CREDIT = 45686, + SPELL_MAGNATAUR_ON_DEATH_2 = 45685 }; +static constexpr std::array<uint32, 5> BlasterCasterSpells = { SPELL_BIGGER_1, SPELL_SHRUNK_1, SPELL_YELLOW_1, SPELL_GHOST_1, SPELL_POLYMORPH_1 }; +static constexpr std::array<uint32, 5> BlasterTargetSpells = { SPELL_BIGGER_2, SPELL_SHRUNK_2, SPELL_YELLOW_2, SPELL_GHOST_2, SPELL_POLYMORPH_2 }; + // 45668 - Crafty's Ultra-Advanced Proto-Typical Shortening Blaster -class spell_q11653_shortening_blaster : public SpellScript +class spell_borean_tundra_shortening_blaster : public SpellScript { - PrepareSpellScript(spell_q11653_shortening_blaster); + PrepareSpellScript(spell_borean_tundra_shortening_blaster); - void HandleScript(SpellEffIndex /* effIndex */) + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(BlasterCasterSpells) && ValidateSpellInfo(BlasterTargetSpells); + } + + void HandleScript(SpellEffIndex /*effIndex*/) { Unit* caster = GetCaster(); Unit* target = GetHitUnit(); - uint32 spellId = RAND(SPELL_SHORTENING_BLASTER_BIGGER1, SPELL_SHORTENING_BLASTER_SHRUNK1, SPELL_SHORTENING_BLASTER_YELLOW1, - SPELL_SHORTENING_BLASTER_GHOST1, SPELL_SHORTENING_BLASTER_POLYMORPH1); - uint32 spellId2 = RAND(SPELL_SHORTENING_BLASTER_BIGGER2, SPELL_SHORTENING_BLASTER_SHRUNK2, SPELL_SHORTENING_BLASTER_YELLOW2, - SPELL_SHORTENING_BLASTER_GHOST2, SPELL_SHORTENING_BLASTER_POLYMORPH2); + caster->CastSpell(caster, Trinity::Containers::SelectRandomContainerElement(BlasterCasterSpells)); + target->CastSpell(target, Trinity::Containers::SelectRandomContainerElement(BlasterTargetSpells)); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_borean_tundra_shortening_blaster::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 45691 - Hah... : Magnataur On Death 1 +class spell_borean_tundra_magnataur_on_death_1 : public SpellScript +{ + PrepareSpellScript(spell_borean_tundra_magnataur_on_death_1); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(BlasterTargetSpells) && ValidateSpellInfo({ SPELL_MAGNATAUR_KILL_CREDIT, SPELL_MAGNATAUR_ON_DEATH_2 }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Creature* caster = GetCaster()->ToCreature(); + if (!caster) + return; + + Player* player = caster->GetLootRecipient(); + if (!player) + return; + + if (std::ranges::none_of(BlasterTargetSpells, [caster](uint32 spell) { return caster->HasAura(spell); })) + return; + + player->CastSpell(player, SPELL_MAGNATAUR_KILL_CREDIT); + caster->CastSpell(caster, SPELL_MAGNATAUR_ON_DEATH_2); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_borean_tundra_magnataur_on_death_1::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; - caster->CastSpell(caster, spellId, true); - target->CastSpell(target, spellId2, true); +// 45685 - Hah... : Magnataur On Death 2 +class spell_borean_tundra_magnataur_on_death_2 : public SpellScript +{ + PrepareSpellScript(spell_borean_tundra_magnataur_on_death_2); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(BlasterTargetSpells); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + for (uint32 spell : BlasterTargetSpells) + GetCaster()->RemoveAurasDueToSpell(spell); } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_q11653_shortening_blaster::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHit += SpellEffectFn(spell_borean_tundra_magnataur_on_death_2::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; @@ -2056,7 +2121,9 @@ void AddSC_borean_tundra() RegisterSpellScript(spell_windsoul_totem_aura); RegisterSpellScript(spell_q11719_bloodspore_ruination_45997); RegisterCreatureAI(npc_bloodmage_laurith); - RegisterSpellScript(spell_q11653_shortening_blaster); + RegisterSpellScript(spell_borean_tundra_shortening_blaster); + RegisterSpellScript(spell_borean_tundra_magnataur_on_death_1); + RegisterSpellScript(spell_borean_tundra_magnataur_on_death_2); RegisterSpellScript(spell_borean_tundra_nerubar_web_random_unit_not_on_quest); RegisterSpellScript(spell_borean_tundra_nerubar_web_random_unit_not_on_quest_dummy); RegisterSpellScript(spell_borean_tundra_nerubar_web_random_unit_on_quest_dummy); diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index d7518888cf5..5e62aa4e26a 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -837,6 +837,66 @@ class spell_fjord_worg_disguise_dummy : public AuraScript } }; +/*###### +## Quest 11259: Towers of Certain Doom +######*/ + +enum TowersOfCertainDoomHorde +{ + SPELL_BRAVES_FLARE_EFFECT = 43106 +}; + +// 49625 - Brave's Flare +class spell_fjord_braves_flare : public SpellScript +{ + PrepareSpellScript(spell_fjord_braves_flare); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_BRAVES_FLARE_EFFECT }); + } + + void HandleAfterCast() + { + GetCaster()->CastSpell(GetCaster(), SPELL_BRAVES_FLARE_EFFECT, true); + } + + void Register() override + { + AfterCast += SpellCastFn(spell_fjord_braves_flare::HandleAfterCast); + } +}; + +/*###### +## Quest 11245: Towers of Certain Doom +######*/ + +enum TowersOfCertainDoomAlliance +{ + SPELL_SERGEANTS_FLARE_EFFECT = 43068 +}; + +// 49634 - Sergeant's Flare +class spell_fjord_sergeants_flare : public SpellScript +{ + PrepareSpellScript(spell_fjord_sergeants_flare); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SERGEANTS_FLARE_EFFECT }); + } + + void HandleAfterCast() + { + GetCaster()->CastSpell(GetCaster(), SPELL_SERGEANTS_FLARE_EFFECT, true); + } + + void Register() override + { + AfterCast += SpellCastFn(spell_fjord_sergeants_flare::HandleAfterCast); + } +}; + void AddSC_howling_fjord() { RegisterCreatureAI(npc_daegarn); @@ -860,4 +920,6 @@ void AddSC_howling_fjord() RegisterSpellScript(spell_fjord_taxi_to_explorers_league_outpost); RegisterSpellScript(spell_fjord_worg_disguise); RegisterSpellScript(spell_fjord_worg_disguise_dummy); + RegisterSpellScript(spell_fjord_braves_flare); + RegisterSpellScript(spell_fjord_sergeants_flare); } diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index c0221b26ec2..44ca75915f6 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -733,6 +733,36 @@ class spell_sholazar_lifeblood_dummy : public SpellScript } }; +/*###### +## Quest 12607: A Mammoth Undertaking +######*/ + +enum AMammothUndertaking +{ + SPELL_RIDE_SHATTERTUSK_MAMMOTH = 51658 +}; + +// 51656 - Mount Mammoth Cue +class spell_sholazar_mount_mammoth_cue : public SpellScript +{ + PrepareSpellScript(spell_sholazar_mount_mammoth_cue); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_RIDE_SHATTERTUSK_MAMMOTH }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetCaster(), SPELL_RIDE_SHATTERTUSK_MAMMOTH, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sholazar_mount_mammoth_cue::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_sholazar_basin() { RegisterCreatureAI(npc_jungle_punch_target); @@ -748,4 +778,5 @@ void AddSC_sholazar_basin() RegisterSpellScript(spell_sholazar_flight_to_sholazar); RegisterSpellScript(spell_sholazar_despawn_fruit_tosser); RegisterSpellScript(spell_sholazar_lifeblood_dummy); + RegisterSpellScript(spell_sholazar_mount_mammoth_cue); } diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index b333db9e0e0..728f352581b 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -405,6 +405,22 @@ class spell_wintergrasp_grab_passenger : public SpellScript } }; +// 49899 - Activate Robotic Arms +class spell_wintergrasp_activate_robotic_arms : public SpellScript +{ + PrepareSpellScript(spell_wintergrasp_activate_robotic_arms); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_05); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_activate_robotic_arms::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + class achievement_wg_didnt_stand_a_chance : public AchievementCriteriaScript { public: @@ -556,6 +572,7 @@ void AddSC_wintergrasp() RegisterGameObjectAI(go_wg_vehicle_teleporter); RegisterSpellScript(spell_wintergrasp_force_building); RegisterSpellScript(spell_wintergrasp_grab_passenger); + RegisterSpellScript(spell_wintergrasp_activate_robotic_arms); new achievement_wg_didnt_stand_a_chance(); RegisterSpellScript(spell_wintergrasp_defender_teleport); RegisterSpellScript(spell_wintergrasp_defender_teleport_trigger); diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 97b57e3e125..b9d97664cf4 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -1201,6 +1201,7 @@ class spell_bem_q10720_poison_keg : public SpellScript enum BombingRun { + SPELL_FEL_FLAK_FIRE = 40075, SPELL_FLAK_CANNON_TRIGGER = 40110, SPELL_CHOOSE_LOC = 40056, SPELL_AGGRO_CHECK = 40112, @@ -1208,6 +1209,27 @@ enum BombingRun NPC_FEL_CANNON2 = 23082 }; +// 40109 - Knockdown Fel Cannon: The Bolt +class spell_bem_kfc_the_bolt : public SpellScript +{ + PrepareSpellScript(spell_bem_kfc_the_bolt); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_FEL_FLAK_FIRE }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_FEL_FLAK_FIRE, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_bem_kfc_the_bolt::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // 40113 - Knockdown Fel Cannon: The Aggro Check Aura class spell_bem_aggro_check_aura : public AuraScript { @@ -1389,6 +1411,37 @@ class spell_bem_vision_guide : public AuraScript } }; +/*###### +## Quest 10714: On Spirit's Wings +######*/ + +enum OnSpiritsWings +{ + SPELL_REXXARS_BIRD_EFFECT = 39074 +}; + +// 38173 - Summon Spirit +class spell_bem_summon_spirit : public SpellScript +{ + PrepareSpellScript(spell_bem_summon_spirit); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_REXXARS_BIRD_EFFECT }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + // This spell script requires sniff verification + GetCaster()->CastSpell(GetCaster(), SPELL_REXXARS_BIRD_EFFECT, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_bem_summon_spirit::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_blades_edge_mountains() { new npc_nether_drake(); @@ -1405,6 +1458,7 @@ void AddSC_blades_edge_mountains() RegisterSpellScript(spell_bem_coax_marmot); RegisterSpellScript(spell_bem_charm_rexxars_rodent); RegisterSpellScript(spell_bem_q10720_poison_keg); + RegisterSpellScript(spell_bem_kfc_the_bolt); RegisterSpellScript(spell_bem_aggro_check_aura); RegisterSpellScript(spell_bem_aggro_check); RegisterSpellScript(spell_bem_aggro_burst); @@ -1412,4 +1466,5 @@ void AddSC_blades_edge_mountains() RegisterSpellScript(spell_bem_check_fly_mount); RegisterSpellScript(spell_bem_apexis_swiftness); RegisterSpellScript(spell_bem_vision_guide); + RegisterSpellScript(spell_bem_summon_spirit); } diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index e0d66e3629f..13624ee954f 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -290,6 +290,44 @@ class spell_pet_gen_lich_pet_focus : public SpellScript } }; +// 71848 - Toxic Wasteling Find Target +class spell_pet_gen_toxic_wasteling_find_target : public SpellScript +{ + PrepareSpellScript(spell_pet_gen_toxic_wasteling_find_target); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_pet_gen_toxic_wasteling_find_target::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 71874 - Toxic Wasteling Devour +class spell_pet_gen_toxic_wasteling_devour : public SpellScript +{ + PrepareSpellScript(spell_pet_gen_toxic_wasteling_devour); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Creature* target = GetHitCreature()) + target->DespawnOrUnsummon(); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_pet_gen_toxic_wasteling_devour::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + enum ElwynnLambMisc { // Spells @@ -421,6 +459,8 @@ void AddSC_generic_pet_scripts() RegisterSpellScript(spell_pet_gen_lich_pet_periodic_emote); RegisterSpellScript(spell_pet_gen_lich_pet_emote); RegisterSpellScript(spell_pet_gen_lich_pet_focus); + RegisterSpellScript(spell_pet_gen_toxic_wasteling_find_target); + RegisterSpellScript(spell_pet_gen_toxic_wasteling_devour); RegisterCreatureAI(npc_elwynn_forest_wolf); RegisterSpellScript(spell_gen_elwynn_forest_wolf); RegisterSpellScript(spell_gen_elwynn_lamb); diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index bf023b9b6a6..b4de1633866 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -66,6 +66,7 @@ enum DeathKnightSpells SPELL_DK_GHOUL_EXPLODE = 47496, SPELL_DK_GLYPH_OF_DISEASE = 63334, SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE = 58625, + SPELL_DK_HUNGERING_COLD_PROC = 51209, SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1 = 50365, SPELL_DK_IMPROVED_FROST_PRESENCE_R1 = 50384, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_R1 = 50391, @@ -1089,6 +1090,27 @@ class spell_dk_hungering_cold : public AuraScript } }; +// 49203 - Hungering Cold +class spell_dk_hungering_cold_init : public SpellScript +{ + PrepareSpellScript(spell_dk_hungering_cold_init); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_HUNGERING_COLD_PROC }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_DK_HUNGERING_COLD_PROC, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_dk_hungering_cold_init::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // 48792 - Icebound Fortitude class spell_dk_icebound_fortitude : public AuraScript { @@ -2774,6 +2796,7 @@ void AddSC_deathknight_spell_scripts() RegisterSpellScript(spell_dk_hysteria); RegisterSpellScript(spell_dk_frost_fever); RegisterSpellScript(spell_dk_hungering_cold); + RegisterSpellScript(spell_dk_hungering_cold_init); RegisterSpellScript(spell_dk_icebound_fortitude); RegisterSpellScript(spell_dk_improved_blood_presence); RegisterSpellScript(spell_dk_improved_blood_presence_triggered); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 27eee95782b..9028d8673c3 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -4367,6 +4367,76 @@ class spell_item_darkmoon_card_illusion : public AuraScript } }; +enum DiscoBall +{ + SPELL_LISTENING_TO_MUSIC_CHECK = 50492, + SPELL_LISTENING_TO_MUSIC = 50493 +}; + +// 50493 - Listening to Music +class spell_item_disco_ball_listening_to_music_periodic : public AuraScript +{ + PrepareAuraScript(spell_item_disco_ball_listening_to_music_periodic); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_LISTENING_TO_MUSIC_CHECK }); + } + + void OnPeriodic(AuraEffect const* /*aurEff*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_LISTENING_TO_MUSIC_CHECK, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_item_disco_ball_listening_to_music_periodic::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + +// 50492 - Listening to Music CHECK +class spell_item_disco_ball_listening_to_music_check : public SpellScript +{ + PrepareSpellScript(spell_item_disco_ball_listening_to_music_check); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_LISTENING_TO_MUSIC }); + } + + void HandleAfterCast() + { + if (!GetUnitTargetCountForEffect(EFFECT_0)) + GetCaster()->RemoveAurasDueToSpell(SPELL_LISTENING_TO_MUSIC); + } + + void Register() override + { + AfterCast += SpellCastFn(spell_item_disco_ball_listening_to_music_check::HandleAfterCast); + } +}; + +// 50499 - Listening to Music (Parent) +class spell_item_disco_ball_listening_to_music_parent : public SpellScript +{ + PrepareSpellScript(spell_item_disco_ball_listening_to_music_parent); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_LISTENING_TO_MUSIC }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_LISTENING_TO_MUSIC, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_item_disco_ball_listening_to_music_parent::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_item_spell_scripts() { // 23074 Arcanite Dragonling @@ -4506,4 +4576,7 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_drums_of_the_wild); RegisterSpellScript(spell_item_thrallmar_and_honor_hold_favor); RegisterSpellScript(spell_item_darkmoon_card_illusion); + RegisterSpellScript(spell_item_disco_ball_listening_to_music_periodic); + RegisterSpellScript(spell_item_disco_ball_listening_to_music_check); + RegisterSpellScript(spell_item_disco_ball_listening_to_music_parent); } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index b0b6f4681f5..c93d4913265 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -37,6 +37,7 @@ enum RogueSpells { SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK = 22482, SPELL_ROGUE_CHEAT_DEATH_COOLDOWN = 31231, + SPELL_ROGUE_CHEATING_DEATH = 45182, SPELL_ROGUE_GLYPH_OF_PREPARATION = 56819, SPELL_ROGUE_KILLING_SPREE = 51690, SPELL_ROGUE_KILLING_SPREE_TELEPORT = 57840, @@ -50,6 +51,7 @@ enum RogueSpells SPELL_ROGUE_HONOR_AMONG_THIEVES = 51698, SPELL_ROGUE_HONOR_AMONG_THIEVES_PROC = 52916, SPELL_ROGUE_HONOR_AMONG_THIEVES_2 = 51699, + SPELL_ROGUE_HUNGER_FOR_BLOOD = 63848, SPELL_ROGUE_T10_2P_BONUS = 70804, SPELL_ROGUE_GLYPH_OF_BACKSTAB_TRIGGER = 63975, SPELL_ROGUE_QUICK_RECOVERY_ENERGY = 31663, @@ -145,6 +147,27 @@ class spell_rog_cheat_death : public AuraScript } }; +// 31231 - Cheat Death +class spell_rog_cheat_death_cooldown : public SpellScript +{ + PrepareSpellScript(spell_rog_cheat_death_cooldown); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_CHEATING_DEATH }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_ROGUE_CHEATING_DEATH, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_rog_cheat_death_cooldown::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // -51664 - Cut to the Chase class spell_rog_cut_to_the_chase : public AuraScript { @@ -923,6 +946,27 @@ class spell_rog_honor_among_thieves_proc_aura : public AuraScript } }; +// 51662 - Hunger For Blood +class spell_rog_hunger_for_blood : public SpellScript +{ + PrepareSpellScript(spell_rog_hunger_for_blood); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ROGUE_HUNGER_FOR_BLOOD }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_ROGUE_HUNGER_FOR_BLOOD, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_rog_hunger_for_blood::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // -51627 - Turn the Tables class spell_rog_turn_the_tables : public AuraScript { @@ -986,6 +1030,7 @@ void AddSC_rogue_spell_scripts() { RegisterSpellScript(spell_rog_blade_flurry); RegisterSpellScript(spell_rog_cheat_death); + RegisterSpellScript(spell_rog_cheat_death_cooldown); RegisterSpellScript(spell_rog_cut_to_the_chase); RegisterSpellScript(spell_rog_deadly_brew); RegisterSpellScript(spell_rog_deadly_poison); @@ -1005,6 +1050,7 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_tricks_of_the_trade_proc); RegisterSpellScript(spell_rog_honor_among_thieves); RegisterSpellAndAuraScriptPair(spell_rog_honor_among_thieves_proc, spell_rog_honor_among_thieves_proc_aura); + RegisterSpellScript(spell_rog_hunger_for_blood); RegisterSpellScript(spell_rog_turn_the_tables); RegisterSpellScript(spell_rog_vanish); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index d9b4014a7ae..b3ec1a16af6 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -71,7 +71,8 @@ enum WarriorSpells SPELL_WARRIOR_GLYPH_OF_BLOCKING = 58374, SPELL_WARRIOR_STOICISM = 70845, SPELL_WARRIOR_T10_MELEE_4P_BONUS = 70847, - SPELL_WARRIOR_INTERVENE_THREAT = 59667 + SPELL_WARRIOR_INTERVENE_THREAT = 59667, + SPELL_WARRIOR_WARRIORS_WRATH = 21887 }; enum WarriorSpellIcons @@ -913,6 +914,27 @@ class spell_warr_vigilance_trigger : public SpellScript } }; +// 21977 - Warrior's Wrath +class spell_warr_warriors_wrath : public SpellScript +{ + PrepareSpellScript(spell_warr_warriors_wrath); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARRIOR_WARRIORS_WRATH }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_WARRIOR_WARRIORS_WRATH, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_warr_warriors_wrath::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_warrior_spell_scripts() { RegisterSpellScript(spell_warr_bloodthirst); @@ -943,4 +965,5 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_vigilance); RegisterSpellScript(spell_warr_vigilance_redirect_threat); RegisterSpellScript(spell_warr_vigilance_trigger); + RegisterSpellScript(spell_warr_warriors_wrath); } |
