diff options
-rw-r--r-- | sql/updates/world/3.3.5/2025_07_12_00_world.sql | 219 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp | 134 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/eastern_kingdoms.cpp | 39 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_borean_tundra.cpp | 119 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_dragonblight.cpp | 54 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_grizzly_hills.cpp | 77 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_howling_fjord.cpp | 144 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_icecrown.cpp | 494 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_sholazar_basin.cpp | 90 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_storm_peaks.cpp | 54 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_zuldrak.cpp | 150 | ||||
-rw-r--r-- | src/server/scripts/Outland/zone_blades_edge_mountains.cpp | 118 | ||||
-rw-r--r-- | src/server/scripts/Outland/zone_terokkar_forest.cpp | 86 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 1751 |
14 files changed, 1802 insertions, 1727 deletions
diff --git a/sql/updates/world/3.3.5/2025_07_12_00_world.sql b/sql/updates/world/3.3.5/2025_07_12_00_world.sql new file mode 100644 index 00000000000..a937a837da3 --- /dev/null +++ b/sql/updates/world/3.3.5/2025_07_12_00_world.sql @@ -0,0 +1,219 @@ +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_fjord_scourging_crystal_controller' WHERE `ScriptName` = 'spell_q11396_11399_scourging_crystal_controller'; +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_q11396_11399_scourging_crystal_controller_dummy','spell_q11396_11399_force_shield_arcane_purple_x3'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 24464 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 +(24464,0,0,0,37,0,100,0,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Scourging Crystal - On AI Initialize - Set Reactstate Passive"), +(24464,0,1,0,37,0,100,0,0,0,0,0,0,116,5,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Scourging Crystal - On AI Initialize - Set Corpse Delay"), +(24464,0,2,0,8,0,100,0,43882,0,0,0,0,28,43874,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Scourging Crystal - On Spellhit 'Scourging Crystal Controller' - Remove Aura 'Scourge Mur'gul Camp: Force Shield Arcane Purple x3'"), +(24464,0,3,0,8,0,100,0,43882,0,0,0,0,144,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Scourging Crystal - On Spellhit 'Scourging Crystal Controller' - Remove ImmunePC"); + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_sholazar_despawn_fruit_tosser' WHERE `ScriptName` = 'spell_q12634_despawn_fruit_tosser'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_zuldrak_summon_stefan' WHERE `ScriptName` = 'spell_q12661_q12669_q12676_q12677_q12713_summon_stefan'; + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q12659_ahunaes_knife'; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 28465 AND `source_type` = 0 AND `id` IN (4,5); +DELETE FROM `smart_scripts` WHERE `entryorguid` = 28600 AND `source_type` = 0; +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28600; +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 +(28465,0,4,0,8,0,100,0,52090,0,0,0,0,33,28622,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Heb'Drakkar Striker - On Spellhit 'Ahunae's Knife' - Quest Credit 'Scalps!'"), +(28465,0,5,0,8,0,100,0,52090,0,0,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Heb'Drakkar Striker - On Spellhit 'Ahunae's Knife' - Delayed Despawn"), + +(28600,0,0,0,8,0,100,0,52090,0,0,0,0,33,28622,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Heb'Drakkar Headhunter - On Spellhit 'Ahunae's Knife' - Quest Credit 'Scalps!'"), +(28600,0,1,0,8,0,100,0,52090,0,0,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Heb'Drakkar Headhunter - On Spellhit 'Ahunae's Knife' - Delayed Despawn"); + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_zuldrak_quenching_mist' WHERE `ScriptName` = 'spell_q12730_quenching_mist'; + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q11515_fel_siphon_dummy'; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 24918 AND `source_type` = 0 AND `id` = 3; +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 +(24918,0,3,0,8,0,100,0,44936,0,0,0,0,36,24955,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Felblood Initiate - On Spellhit 'Quest - Fel Siphon Dummy' - Update Template To 'Emaciated Felblood'"); + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q10255_administer_antidote'; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 16880 AND `source_type` = 0 AND `id` = 4; +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 +(16880,0,4,0,8,0,100,0,34665,0,0,0,0,36,16992,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Hulking Helboar - On Spellhit 'Administer Antidote' - Update Template To 'Dreadtusk'"); + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q55_sacred_cleansing'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_illidan_kill_credit_master' WHERE `ScriptName` = 'spell_q13400_illidan_kill_master'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_zuldrak_zuldrak_rat' WHERE `ScriptName` = 'spell_q12527_zuldrak_rat'; + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q12066_bunny_kill_credit'; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 23837 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 +(23837,0,2,0,8,0,100,0,50546,0,0,0,0,11,47390,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"ELM General Purpose Bunny - On Spellhit 'The Focus on the Beach: Ley Line Focus Control Ring Effect' - Cast 'The Focus on the Beach: Ley Line Focus Bunny Beam'"); + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_plant_battle_standard' WHERE `ScriptName` = 'spell_q13280_13283_plant_battle_standard'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_jump_jets' WHERE `ScriptName` = 'spell_q13280_13283_jump_jets'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_grizzly_hills_escape_from_silverbrook' WHERE `ScriptName` = 'spell_q12308_escape_from_silverbrook'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_grizzly_hills_escape_from_silverbrook_summon_worgen' WHERE `ScriptName` = 'spell_q12308_escape_from_silverbrook_summon_worgen'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_grab_fake_soldier' WHERE `ScriptName` = 'spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_summon_frost_wyrm' WHERE `ScriptName` = 'spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon'; + +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` = 25752 AND `source_type` = 0 AND `id` = 6; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 25753 AND `source_type` = 0 AND `id` = 7; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 25758 AND `source_type` = 0 AND `id` = 6; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 25792 AND `source_type` = 0 AND `id` = 4; +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 +(25752,0,6,0,7,0,100,0,0,0,0,0,0,11,46446,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Scavenge-bot 004-A8 - On Evade - Cast 'Weakness to Lightning: Cancel Power of the Storm Aura'"), +(25753,0,7,0,7,0,100,0,0,0,0,0,0,11,46446,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sentry-bot 57-K - On Evade - Cast 'Weakness to Lightning: Cancel Power of the Storm Aura'"), +(25758,0,6,0,7,0,100,0,0,0,0,0,0,11,46446,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Defendo-tank 66D - On Evade - Cast 'Weakness to Lightning: Cancel Power of the Storm Aura'"), +(25792,0,4,0,7,0,100,0,0,0,0,0,0,11,46446,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Scavenge-bot 005-B6 - On Evade - Cast 'Weakness to Lightning: Cancel Power of the Storm Aura'"); + +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_borean_tundra_weakness_to_lightning_cancel_aura'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(46446, 'spell_borean_tundra_weakness_to_lightning_cancel_aura'); + +UPDATE `spell_script_names` SET `ScriptName` = 'spell_borean_tundra_weakness_to_lightning_cast_on_master' WHERE `ScriptName` = 'spell_q11896_weakness_to_lightning_46444'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_sholazar_lifeblood_dummy' WHERE `ScriptName` = 'spell_q12805_lifeblood_dummy'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_storm_peaks_flaming_arrow_triggered_effect' WHERE `ScriptName` = 'spell_q12851_going_bearback'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_eastern_kingdoms_thaumaturgy_channel' WHERE `ScriptName` = 'spell_q2203_thaumaturgy_channel'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_summon_soul_moveto_bunny' WHERE `ScriptName` = 'spell_q12847_summon_soul_moveto_bunny'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_cannons_target' WHERE `ScriptName` = 'spell_q13086_cannons_target'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_fjord_mixing_blood' WHERE `ScriptName` = 'spell_q11306_mixing_blood'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_fjord_mixing_vrykul_blood' WHERE `ScriptName` = 'spell_q11306_mixing_vrykul_blood'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_fjord_failed_mix_concoction_1' WHERE `ScriptName` = 'spell_q11306_failed_mix_43376'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_fjord_failed_mix_concoction_2' WHERE `ScriptName` = 'spell_q11306_failed_mix_43378'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_grizzly_hills_hand_over_reins' WHERE `ScriptName` = 'spell_q12414_hand_over_reins'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_bested_trigger' WHERE `ScriptName` = 'spell_q13665_q13790_bested_trigger'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_chapter1_siphon_of_acherus' WHERE `ScriptName` = 'spell_q12641_death_comes_from_on_high'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_chapter1_recall_eye_of_acherus' WHERE `ScriptName` = 'spell_q12641_recall_eye_of_acherus'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_chapter1_emblazon_runeblade' WHERE `ScriptName` = 'spell_q12619_emblazon_runeblade'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_chapter1_emblazon_runeblade_effect' WHERE `ScriptName` = 'spell_q12619_emblazon_runeblade_effect'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_quest_make_player_destroy_totems' WHERE `ScriptName` = 'spell_q14100_q14111_make_player_destroy_totems'; + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q12459_seeds_of_natures_wrath'; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 26841 AND `source_type` = 0 AND `id` = 1; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 27808 AND `source_type` = 0 AND `id` = 2; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 27122 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 +(26841,0,1,0,8,0,100,0,49587,0,0,0,0,36,27821,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Reanimated Frost Wyrm - On Spellhit 'Seeds of Nature's Wrath' - Update Template To 'Weakened Reanimated Frost Wyrm'"), +(27808,0,2,0,8,0,100,0,49587,0,0,0,0,36,27809,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Turgid the Vile - On Spellhit 'Seeds of Nature's Wrath' - Update Template To 'Weakened Turgid the Vile'"), +(27122,0,2,0,8,0,100,0,49587,0,0,0,0,36,27807,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Overseer Deathgaze - On Spellhit 'Seeds of Nature's Wrath' - Update Template To 'Weakened Overseer Deathgaze'"); + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_dragonblight_defending_wyrmrest_temple_cast_from_gossip' WHERE `ScriptName` = 'spell_q12372_cast_from_gossip_trigger'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_dragonblight_defending_wyrmrest_temple_dummy' WHERE `ScriptName` = 'spell_q12372_destabilize_azure_dragonshrine_dummy'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_borean_tundra_ultrasonic_screwdriver' WHERE `ScriptName` = 'spell_q11730_ultrasonic_screwdriver'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_zuldrak_gymers_grab' WHERE `ScriptName` = 'spell_q12919_gymers_grab'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_zuldrak_gymers_throw' WHERE `ScriptName` = 'spell_q12919_gymers_throw'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_bem_aggro_check_aura' WHERE `ScriptName` = 'spell_q11010_q11102_q11023_aggro_check_aura'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_bem_aggro_check' WHERE `ScriptName` = 'spell_q11010_q11102_q11023_aggro_check'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_bem_aggro_burst' WHERE `ScriptName` = 'spell_q11010_q11102_q11023_aggro_burst'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_bem_choose_loc' WHERE `ScriptName` = 'spell_q11010_q11102_q11023_choose_loc'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_bem_check_fly_mount' WHERE `ScriptName` = 'spell_q11010_q11102_q11023_q11008_check_fly_mount'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_burst_at_the_seams_59576' WHERE `ScriptName` = 'spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_burst_at_the_seams_59579' WHERE `ScriptName` = 'spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_bloated_abom_feign_death' WHERE `ScriptName` = 'spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_area_restrict_abom' WHERE `ScriptName` = 'spell_q13264_q13276_q13288_q13289_area_restrict_abom'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_assign_credit_to_master' WHERE `ScriptName` = 'spell_q13264_q13276_q13288_q13289_assign_credit_to_master'; +UPDATE `spell_script_names` SET `ScriptName` = 'spell_icecrown_burst_at_the_seams_52510' WHERE `ScriptName` = 'spell_q12690_burst_at_the_seams_52510'; + +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_q6124_6129_apply_salve'; + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (12296,12298); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (12296,12298) AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (1229600,1229800) 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 +(12296,0,0,0,8,0,100,0,19512,0,0,0,0,80,1229600,2,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sickly Gazelle - On Spellhit 'Apply Salve' - Run Action List"), +(12298,0,0,0,8,0,100,0,19512,0,0,0,0,80,1229800,2,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sickly Deer - On Spellhit 'Apply Salve' - Run Action List"), + +(1229600,9,0,0,0,0,100,0,0,0,0,0,0,36,12297,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sickly Gazelle - On Script - Update Template To 'Cured Gazelle'"), +(1229600,9,1,0,0,0,100,0,0,0,0,0,0,33,12297,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Sickly Gazelle - On Script - Quest Credit 'Curing the Sick'"), +(1229600,9,2,0,0,0,100,0,1500,1500,0,0,0,114,0,0,0,0,0,0,1,0,0,0,0,30,30,0,0,"Sickly Gazelle - On Script - Move Offset"), +(1229600,9,3,0,0,0,100,0,5000,5000,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sickly Gazelle - On Script - Despawn"), + +(1229800,9,0,0,0,0,100,0,0,0,0,0,0,36,12299,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sickly Deer - On Script - Update Template To 'Cured Deer'"), +(1229800,9,1,0,0,0,100,0,0,0,0,0,0,33,12299,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Sickly Deer - On Script - Quest Credit 'Curing the Sick'"), +(1229800,9,2,0,0,0,100,0,1500,1500,0,0,0,114,0,0,0,0,0,0,1,0,0,0,0,30,30,0,0,"Sickly Deer - On Script - Move Offset"), +(1229800,9,3,0,0,0,100,0,5000,5000,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sickly Deer - On Script - Despawn"); + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_terokkar_fumping' WHERE `ScriptName` = 'spell_q10929_fumping'; + +DELETE FROM `spell_script_names` WHERE `spell_id` = 39246 AND `ScriptName` = 'spell_terokkar_fumping_the_big_bone_worm'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(39246,'spell_terokkar_fumping_the_big_bone_worm'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` IN (39248,39250); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,39248,0,0,31,0,3,22105,0,0,0,0,"","Group 0: Spell 'Summon Hai'Shulud' (Effect 0) targets creature 'Decrepit Clefthoof'"), +(13,1,39250,0,0,31,0,3,22105,0,0,0,0,"","Group 0: Spell 'Despawn Clefthoof' (Effect 0) targets creature 'Decrepit Clefthoof'"); + +DELETE FROM `spell_script_names` WHERE `spell_id` = 39250 AND `ScriptName` = 'spell_gen_despawn_target'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(39250,'spell_gen_despawn_target'); + +UPDATE `creature_template` SET `speed_walk` = 1, `speed_run` = 1 WHERE `entry` = 22482; +UPDATE `creature_template` SET `speed_walk` = 1 WHERE `entry` = 22483; + +UPDATE `creature_text` SET `Language` = 0, `Emote` = 15 WHERE `CreatureID` = 22483; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 22483 AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 2248300 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 +(22483,0,0,0,11,0,100,0,0,0,0,0,0,80,2248300,2,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sand Gnome - On Spawn - Run Script"), + +(2248300,9,0,0,0,0,100,0,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sand Gnome - On Script - Set Reactstate Passive"), +(2248300,9,1,0,0,0,100,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sand Gnome - On Script - Say Line 0"), +(2248300,9,2,0,0,0,100,0,1500,1500,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Sand Gnome - On Script - Set Reactstate Aggressive"), +(2248300,9,3,0,0,0,100,0,0,0,0,0,0,49,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,"Sand Gnome - On Script - Start Attack Owner"); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 60437c0eb78..a67d266d288 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -31,6 +31,7 @@ #include "Player.h" #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" +#include "SpellAuraEffects.h" #include "SpellInfo.h" #include "SpellScript.h" #include "TemporarySummon.h" @@ -517,6 +518,92 @@ private: EventMap _events; }; +enum DeathComesFromOnHigh +{ + SPELL_FORGE_CREDIT = 51974, + SPELL_TOWN_HALL_CREDIT = 51977, + SPELL_SCARLET_HOLD_CREDIT = 51980, + SPELL_CHAPEL_CREDIT = 51982, + + NPC_NEW_AVALON_FORGE = 28525, + NPC_NEW_AVALON_TOWN_HALL = 28543, + NPC_SCARLET_HOLD = 28542, + NPC_CHAPEL_OF_THE_CRIMSON_FLAME = 28544 +}; + +// 51858 - Siphon of Acherus +class spell_chapter1_siphon_of_acherus : public SpellScript +{ + PrepareSpellScript(spell_chapter1_siphon_of_acherus); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_FORGE_CREDIT, + SPELL_TOWN_HALL_CREDIT, + SPELL_SCARLET_HOLD_CREDIT, + SPELL_CHAPEL_CREDIT + }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + uint32 spellId = 0; + + switch (GetHitCreature()->GetEntry()) + { + case NPC_NEW_AVALON_FORGE: + spellId = SPELL_FORGE_CREDIT; + break; + case NPC_NEW_AVALON_TOWN_HALL: + spellId = SPELL_TOWN_HALL_CREDIT; + break; + case NPC_SCARLET_HOLD: + spellId = SPELL_SCARLET_HOLD_CREDIT; + break; + case NPC_CHAPEL_OF_THE_CRIMSON_FLAME: + spellId = SPELL_CHAPEL_CREDIT; + break; + default: + return; + } + + GetCaster()->CastSpell(nullptr, spellId, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_chapter1_siphon_of_acherus::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 52694 - Recall Eye of Acherus +class spell_chapter1_recall_eye_of_acherus : public SpellScript +{ + PrepareSpellScript(spell_chapter1_recall_eye_of_acherus); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_THE_EYE_OF_ACHERUS }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Player* player = Object::ToPlayer(GetCaster()->GetCharmerOrOwner())) + { + player->StopCastingCharm(); + player->StopCastingBindSight(); + player->RemoveAura(SPELL_THE_EYE_OF_ACHERUS); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_chapter1_recall_eye_of_acherus::HandleDummy, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + /*###### ## npc_death_knight_initiate ######*/ @@ -1169,6 +1256,49 @@ class spell_chapter1_sky_darkener_assault : public SpellScript } }; +/*###### +## Quest 12619: The Emblazoned Runeblade +######*/ + +// 51769 - Emblazon Runeblade +class spell_chapter1_emblazon_runeblade : public AuraScript +{ + PrepareAuraScript(spell_chapter1_emblazon_runeblade); + + void HandleEffectPeriodic(AuraEffect const* aurEff) + { + PreventDefaultAction(); + if (Unit* caster = GetCaster()) + caster->CastSpell(caster, aurEff->GetSpellEffectInfo().TriggerSpell, aurEff); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_chapter1_emblazon_runeblade::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } +}; + +// 51770 - Emblazon Runeblade +class spell_chapter1_emblazon_runeblade_effect : public SpellScript +{ + PrepareSpellScript(spell_chapter1_emblazon_runeblade_effect); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), false); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_chapter1_emblazon_runeblade_effect::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_the_scarlet_enclave_c1() { new npc_unworthy_initiate(); @@ -1176,6 +1306,8 @@ void AddSC_the_scarlet_enclave_c1() new go_acherus_soul_prison(); RegisterSpellScript(spell_death_knight_initiate_visual); RegisterCreatureAI(npc_eye_of_acherus); + RegisterSpellScript(spell_chapter1_siphon_of_acherus); + RegisterSpellScript(spell_chapter1_recall_eye_of_acherus); new npc_death_knight_initiate(); RegisterCreatureAI(npc_dark_rider_of_acherus); new npc_salanar_the_horseman(); @@ -1187,4 +1319,6 @@ void AddSC_the_scarlet_enclave_c1() RegisterSpellScript(spell_gift_of_the_harvester); RegisterSpellScript(spell_chapter1_runeforging_credit); RegisterSpellScript(spell_chapter1_sky_darkener_assault); + RegisterSpellScript(spell_chapter1_emblazon_runeblade); + RegisterSpellScript(spell_chapter1_emblazon_runeblade_effect); } diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms.cpp index 4e36f5e5c39..c9c77f79970 100644 --- a/src/server/scripts/EasternKingdoms/eastern_kingdoms.cpp +++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms.cpp @@ -20,7 +20,7 @@ #include "SpellScript.h" #include "Unit.h" -enum Translocation +enum EasternKingdomsTranslocation { SPELL_TRANSLOCATION_DUSKWITHER_SPIRE_UP = 26566, SPELL_TRANSLOCATION_DUSKWITHER_SPIRE_DOWN = 26572, @@ -112,6 +112,10 @@ class spell_eastern_kingdoms_undercity_to_silvermoon : public SpellScript } }; +/*###### +## Quest 11532: Distraction at the Dead Scar / 11533: The Air Strikes Must Continue +######*/ + enum DeadScarBombingRun { SOUND_ID_BOMBING_RUN = 12318 @@ -164,6 +168,38 @@ class spell_eastern_kingdoms_dawnblade_attack : public SpellScript } }; +/*###### +## Quest 2203: Badlands Reagent Run II +######*/ + +enum BadlandsReagentRun +{ + SPELL_THAUMATURGY_CHANNEL = 21029 +}; + +// 9712 - Thaumaturgy Channel +class spell_eastern_kingdoms_thaumaturgy_channel : public AuraScript +{ + PrepareAuraScript(spell_eastern_kingdoms_thaumaturgy_channel); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_THAUMATURGY_CHANNEL }); + } + + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) + { + PreventDefaultAction(); + if (Unit* caster = GetCaster()) + caster->CastSpell(caster, SPELL_THAUMATURGY_CHANNEL, false); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_eastern_kingdoms_thaumaturgy_channel::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } +}; + void AddSC_eastern_kingdoms() { RegisterSpellScript(spell_eastern_kingdoms_duskwither_spire_up); @@ -172,4 +208,5 @@ void AddSC_eastern_kingdoms() RegisterSpellScript(spell_eastern_kingdoms_undercity_to_silvermoon); RegisterSpellScript(spell_eastern_kingdoms_dead_scar_bombing_run); RegisterSpellScript(spell_eastern_kingdoms_dawnblade_attack); + RegisterSpellScript(spell_eastern_kingdoms_thaumaturgy_channel); } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 1678b4867b5..caed83fb973 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1735,7 +1735,50 @@ class spell_borean_tundra_arcane_prisoner_rescue : public SpellScript enum WeaknessToLightning { - SPELL_POWER_OF_THE_STORM = 46424 + SPELL_POWER_OF_THE_STORM_ITEM = 46432, + SPELL_POWER_OF_THE_STORM = 46424 +}; + +// 46444 - Weakness to Lightning: Cast on Master Script Effect +class spell_borean_tundra_weakness_to_lightning_cast_on_master : public SpellScript +{ + PrepareSpellScript(spell_borean_tundra_weakness_to_lightning_cast_on_master); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_borean_tundra_weakness_to_lightning_cast_on_master::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 46446 - Weakness to Lightning: Cancel Power of the Storm Aura +class spell_borean_tundra_weakness_to_lightning_cancel_aura : public SpellScript +{ + PrepareSpellScript(spell_borean_tundra_weakness_to_lightning_cancel_aura); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_POWER_OF_THE_STORM_ITEM }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetCaster()->RemoveAurasDueToSpell(SPELL_POWER_OF_THE_STORM_ITEM); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_borean_tundra_weakness_to_lightning_cancel_aura::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; // 46550 - Weakness to Lightning: On Quest Complete @@ -1790,6 +1833,77 @@ class spell_borean_tundra_signal_alliance : public SpellScript } }; +/*###### +## Quest 11730: Master and Servant +######*/ + +enum MasterAndServant +{ + SPELL_SUMMON_SCAVENGEBOT_004A8 = 46063, + SPELL_SUMMON_SENTRYBOT_57K = 46068, + SPELL_SUMMON_DEFENDOTANK_66D = 46058, + SPELL_SUMMON_SCAVENGEBOT_005B6 = 46066, + SPELL_SUMMON_55D_COLLECTATRON = 46034, + SPELL_ROBOT_KILL_CREDIT = 46027, + NPC_SCAVENGEBOT_004A8 = 25752, + NPC_SENTRYBOT_57K = 25753, + NPC_DEFENDOTANK_66D = 25758, + NPC_SCAVENGEBOT_005B6 = 25792, + NPC_55D_COLLECTATRON = 25793 +}; + +// 46023 - The Ultrasonic Screwdriver +class spell_borean_tundra_ultrasonic_screwdriver : public SpellScript +{ + PrepareSpellScript(spell_borean_tundra_ultrasonic_screwdriver); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem(); + } + + bool Validate(SpellInfo const* /*spellEntry*/) override + { + return ValidateSpellInfo( + { + SPELL_SUMMON_SCAVENGEBOT_004A8, + SPELL_SUMMON_SENTRYBOT_57K, + SPELL_SUMMON_DEFENDOTANK_66D, + SPELL_SUMMON_SCAVENGEBOT_005B6, + SPELL_SUMMON_55D_COLLECTATRON, + SPELL_ROBOT_KILL_CREDIT + }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Item* castItem = GetCastItem(); + Unit* caster = GetCaster(); + if (Creature* target = GetHitCreature()) + { + uint32 spellId = 0; + switch (target->GetEntry()) + { + case NPC_SCAVENGEBOT_004A8: spellId = SPELL_SUMMON_SCAVENGEBOT_004A8; break; + case NPC_SENTRYBOT_57K: spellId = SPELL_SUMMON_SENTRYBOT_57K; break; + case NPC_DEFENDOTANK_66D: spellId = SPELL_SUMMON_DEFENDOTANK_66D; break; + case NPC_SCAVENGEBOT_005B6: spellId = SPELL_SUMMON_SCAVENGEBOT_005B6; break; + case NPC_55D_COLLECTATRON: spellId = SPELL_SUMMON_55D_COLLECTATRON; break; + default: + return; + } + caster->CastSpell(caster, spellId, castItem); + caster->CastSpell(caster, SPELL_ROBOT_KILL_CREDIT, true); + target->DespawnOrUnsummon(); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_borean_tundra_ultrasonic_screwdriver::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_borean_tundra() { RegisterCreatureAI(npc_beryl_sorcerer); @@ -1817,6 +1931,9 @@ void AddSC_borean_tundra() RegisterSpellScript(spell_borean_tundra_neural_needle); RegisterSpellScript(spell_borean_tundra_prototype_neural_needle); RegisterSpellScript(spell_borean_tundra_arcane_prisoner_rescue); + RegisterSpellScript(spell_borean_tundra_weakness_to_lightning_cast_on_master); + RegisterSpellScript(spell_borean_tundra_weakness_to_lightning_cancel_aura); RegisterSpellScript(spell_borean_tundra_weakness_to_lightning_on_quest_complete); RegisterSpellScript(spell_borean_tundra_signal_alliance); + RegisterSpellScript(spell_borean_tundra_ultrasonic_screwdriver); } diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 537d80d6bb7..05636c95c37 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -429,7 +429,7 @@ class spell_q12096_q12092_bark : public SpellScript ## Quest: Defending Wyrmrest Temple ID: 12372 ######*/ -enum WyrmDefenderEnum +enum DefendingWyrmrestTemple { // Quest data QUEST_DEFENDING_WYRMREST_TEMPLE = 12372, @@ -442,9 +442,13 @@ enum WyrmDefenderEnum SPELL_RENEW = 49263, // cast to heal drakes SPELL_WYRMREST_DEFENDER_MOUNT = 49256, + SPELL_SUMMON_WYRMREST_DEFENDER = 49207, + // Texts data - WHISPER_MOUNTED = 0, - BOSS_EMOTE_ON_LOW_HEALTH = 2 + WHISPER_MOUNTED = 0, + BOSS_EMOTE_ON_LOW_HEALTH = 2, + + NPC_WYRMREST_TEMPLE_CREDIT = 27698 }; struct npc_wyrmrest_defender : public VehicleAI @@ -536,6 +540,48 @@ struct npc_wyrmrest_defender : public VehicleAI } }; +// 49213 - Defending Wyrmrest Temple: Character Script Cast From Gossip +class spell_dragonblight_defending_wyrmrest_temple_cast_from_gossip : public SpellScript +{ + PrepareSpellScript(spell_dragonblight_defending_wyrmrest_temple_cast_from_gossip); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_WYRMREST_DEFENDER }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_WYRMREST_DEFENDER, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dragonblight_defending_wyrmrest_temple_cast_from_gossip::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect +class spell_dragonblight_defending_wyrmrest_temple_dummy : public SpellScript +{ + PrepareSpellScript(spell_dragonblight_defending_wyrmrest_temple_dummy); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (GetHitCreature()) + if (Unit* caster = GetOriginalCaster()) + if (Vehicle* vehicle = caster->GetVehicleKit()) + if (Unit* passenger = vehicle->GetPassenger(0)) + if (Player* player = passenger->ToPlayer()) + player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dragonblight_defending_wyrmrest_temple_dummy::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + /*###### ## Quest 12053: The Might of the Horde ######*/ @@ -1070,6 +1116,8 @@ void AddSC_dragonblight() RegisterSpellScript(spell_q12096_q12092_dummy); RegisterSpellScript(spell_q12096_q12092_bark); RegisterCreatureAI(npc_wyrmrest_defender); + RegisterSpellScript(spell_dragonblight_defending_wyrmrest_temple_cast_from_gossip); + RegisterSpellScript(spell_dragonblight_defending_wyrmrest_temple_dummy); RegisterSpellScript(spell_dragonblight_warsong_battle_standard); RegisterSpellScript(spell_dragonblight_moti_mirror_image_script_effect); RegisterSpellScript(spell_dragonblight_moti_hourglass_cast_see_invis_on_master); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 29153f0ef0a..1ec851a1f8c 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -992,6 +992,80 @@ public: explicit spell_grizzly_hills_script_cast_summon_image_of_drakuru(uint32 triggeredSpellId) : _triggeredSpellId(triggeredSpellId) { } }; +/*###### +## Quest 12308: Escape from Silverbrook +######*/ + +enum EscapeFromSilverbrook +{ + SPELL_SUMMON_WORGEN = 48681 +}; + +// 48682 - Escape from Silverbrook - Periodic Dummy +class spell_grizzly_hills_escape_from_silverbrook : public SpellScript +{ + PrepareSpellScript(spell_grizzly_hills_escape_from_silverbrook); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_WORGEN }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WORGEN, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_grizzly_hills_escape_from_silverbrook::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 48681 - Summon Silverbrook Worgen +class spell_grizzly_hills_escape_from_silverbrook_summon_worgen : public SpellScript +{ + PrepareSpellScript(spell_grizzly_hills_escape_from_silverbrook_summon_worgen); + + void ModDest(SpellDestination& dest) + { + float dist = GetEffectInfo(EFFECT_0).CalcRadius(GetCaster()); + float angle = frand(0.75f, 1.25f) * float(M_PI); + + Position pos = GetCaster()->GetNearPosition(dist, angle); + dest.Relocate(pos); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_grizzly_hills_escape_from_silverbrook_summon_worgen::ModDest, EFFECT_0, TARGET_DEST_CASTER_SUMMON); + } +}; + +/*###### +## Quest 12414: Mounting Up +######*/ + +// 49285 - Hand Over Reins +class spell_grizzly_hills_hand_over_reins : public SpellScript +{ + PrepareSpellScript(spell_grizzly_hills_hand_over_reins); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Creature* caster = GetCaster()->ToCreature(); + GetHitUnit()->ExitVehicle(); + + if (caster) + caster->DespawnOrUnsummon(); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_grizzly_hills_hand_over_reins::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_grizzly_hills() { RegisterCreatureAI(npc_emily); @@ -1014,4 +1088,7 @@ void AddSC_grizzly_hills() RegisterSpellScriptWithArgs(spell_grizzly_hills_script_cast_summon_image_of_drakuru, "spell_grizzly_hills_script_cast_summon_image_of_drakuru_03", SPELL_ENVISION_DRAKURU_03); RegisterSpellScriptWithArgs(spell_grizzly_hills_script_cast_summon_image_of_drakuru, "spell_grizzly_hills_script_cast_summon_image_of_drakuru_04", SPELL_ENVISION_DRAKURU_04); RegisterSpellScriptWithArgs(spell_grizzly_hills_script_cast_summon_image_of_drakuru, "spell_grizzly_hills_script_cast_summon_image_of_drakuru_05", SPELL_ENVISION_DRAKURU_05); + RegisterSpellScript(spell_grizzly_hills_escape_from_silverbrook); + RegisterSpellScript(spell_grizzly_hills_escape_from_silverbrook_summon_worgen); + RegisterSpellScript(spell_grizzly_hills_hand_over_reins); } diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 1450d58956e..5809bbce402 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -560,6 +560,145 @@ class spell_fjord_the_way_to_his_heart_quest_complete : public SpellScript } }; +/*###### +## Quest 11396, 11399: Bring Down Those Shields +######*/ + +enum BringDownThoseShields +{ + SPELL_SCOURGING_CRYSTAL_CONTROLLER = 43878, + SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3 = 43874 +}; + +// 50133 - Scourging Crystal Controller +class spell_fjord_scourging_crystal_controller : public SpellScript +{ + PrepareSpellScript(spell_fjord_scourging_crystal_controller); + + bool Validate(SpellInfo const* /*spellEntry*/) override + { + return ValidateSpellInfo({ SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3, SPELL_SCOURGING_CRYSTAL_CONTROLLER }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + if (target->HasAura(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3)) + // Make sure nobody else is channeling the same target. Is it necessary? + if (!target->HasAura(SPELL_SCOURGING_CRYSTAL_CONTROLLER)) + GetCaster()->CastSpell(GetCaster(), SPELL_SCOURGING_CRYSTAL_CONTROLLER, GetCastItem()); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_fjord_scourging_crystal_controller::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +/*###### +## Quest 11306: Apply Heat and Stir +######*/ + +enum ApplyHeatAndStir +{ + SPELL_SPURTS_AND_SMOKE = 38594, + SPELL_FAILED_MIX_1 = 43376, + SPELL_FAILED_MIX_2 = 43378, + SPELL_FAILED_MIX_3 = 43970, + SPELL_SUCCESSFUL_MIX = 43377, + + NPC_GENERIC_TRIGGER_LAB = 24042, + + SAY_CONCOCTION_1 = 0, + SAY_CONCOCTION_2 = 1 +}; + +// 43972 - Mixing Blood +class spell_fjord_mixing_blood : public SpellScript +{ + PrepareSpellScript(spell_fjord_mixing_blood); + + void HandleEffect(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + if (Creature* trigger = caster->FindNearestCreature(NPC_GENERIC_TRIGGER_LAB, 100.0f)) + trigger->AI()->DoCastSelf(SPELL_SPURTS_AND_SMOKE); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_fjord_mixing_blood::HandleEffect, EFFECT_1, SPELL_EFFECT_SEND_EVENT); + } +}; + +// 43375 - Mixing Vrykul Blood +class spell_fjord_mixing_vrykul_blood : public SpellScript +{ + PrepareSpellScript(spell_fjord_mixing_vrykul_blood); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + { + uint8 chance = urand(0, 99); + uint32 spellId = 0; + + // 90% chance of getting one out of three failure effects + if (chance < 30) + spellId = SPELL_FAILED_MIX_1; + else if (chance < 60) + spellId = SPELL_FAILED_MIX_2; + else if (chance < 90) + spellId = SPELL_FAILED_MIX_3; + else // 10% chance of successful cast + spellId = SPELL_SUCCESSFUL_MIX; + + caster->CastSpell(caster, spellId, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_fjord_mixing_vrykul_blood::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + } +}; + +// 43376 - Failed Mix +class spell_fjord_failed_mix_concoction_1 : public SpellScript +{ + PrepareSpellScript(spell_fjord_failed_mix_concoction_1); + + void HandleEffect(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + if (Creature* trigger = caster->FindNearestCreature(NPC_GENERIC_TRIGGER_LAB, 100.0f)) + trigger->AI()->Talk(SAY_CONCOCTION_1, caster); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_fjord_failed_mix_concoction_1::HandleEffect, EFFECT_1, SPELL_EFFECT_SEND_EVENT); + } +}; + +// 43378 - Failed Mix +class spell_fjord_failed_mix_concoction_2 : public SpellScript +{ + PrepareSpellScript(spell_fjord_failed_mix_concoction_2); + + void HandleEffect(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + if (Creature* trigger = caster->FindNearestCreature(NPC_GENERIC_TRIGGER_LAB, 100.0f)) + trigger->AI()->Talk(SAY_CONCOCTION_2, caster); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_fjord_failed_mix_concoction_2::HandleEffect, EFFECT_2, SPELL_EFFECT_SEND_EVENT); + } +}; + void AddSC_howling_fjord() { RegisterCreatureAI(npc_daegarn); @@ -574,4 +713,9 @@ void AddSC_howling_fjord() RegisterSpellScript(spell_fjord_the_way_to_his_heart_anuniaq_net); RegisterSpellScript(spell_fjord_the_way_to_his_heart_reverse_cast); RegisterSpellScript(spell_fjord_the_way_to_his_heart_quest_complete); + RegisterSpellScript(spell_fjord_scourging_crystal_controller); + RegisterSpellScript(spell_fjord_mixing_blood); + RegisterSpellScript(spell_fjord_mixing_vrykul_blood); + RegisterSpellScript(spell_fjord_failed_mix_concoction_1); + RegisterSpellScript(spell_fjord_failed_mix_concoction_2); } diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 1e0d24e7717..006d9e31a7e 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -28,6 +28,7 @@ #include "SpellAuras.h" #include "SpellScript.h" #include "TemporarySummon.h" +#include "Vehicle.h" /*###### ## npc_argent_valiant @@ -1015,6 +1016,485 @@ class spell_icecrown_ebon_blade_banner : public SpellScript } }; +/*###### +## Quest 13400: The Hunter and the Prince +######*/ + +enum TheHunterAndThePrince +{ + SPELL_ILLIDAN_KILL_CREDIT = 61748 +}; + +// 61752 - Illidan Kill Credit Master +class spell_icecrown_illidan_kill_credit_master : public SpellScript +{ + PrepareSpellScript(spell_icecrown_illidan_kill_credit_master); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ILLIDAN_KILL_CREDIT }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (caster->IsVehicle()) + if (Unit* passenger = caster->GetVehicleKit()->GetPassenger(0)) + passenger->CastSpell(passenger, SPELL_ILLIDAN_KILL_CREDIT, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_illidan_kill_credit_master::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +/*###### +## Quest 13280, 13283: King of the Mountain +######*/ + +enum KingOfTheMountain +{ + NPC_KING_OF_THE_MOUNTAINT_KC = 31766, + SPELL_PLANT_HORDE_BATTLE_STANDARD = 59643, + SPELL_HORDE_BATTLE_STANDARD_STATE = 59642, + SPELL_ALLIANCE_BATTLE_STANDARD_STATE = 4339, + SPELL_JUMP_ROCKET_BLAST = 4340 +}; + +// 4338 - Plant Alliance Battle Standard +// 59643 - Plant Horde Battle Standard +class spell_icecrown_plant_battle_standard : public SpellScript +{ + PrepareSpellScript(spell_icecrown_plant_battle_standard); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + Unit* target = GetHitUnit(); + uint32 triggeredSpellID = SPELL_ALLIANCE_BATTLE_STANDARD_STATE; + + caster->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); + if (caster->IsVehicle()) + if (Unit* player = caster->GetVehicleKit()->GetPassenger(0)) + player->ToPlayer()->KilledMonsterCredit(NPC_KING_OF_THE_MOUNTAINT_KC); + + if (GetSpellInfo()->Id == SPELL_PLANT_HORDE_BATTLE_STANDARD) + triggeredSpellID = SPELL_HORDE_BATTLE_STANDARD_STATE; + + target->RemoveAllAuras(); + target->CastSpell(target, triggeredSpellID, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_plant_battle_standard::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 4336 - Jump Jets +class spell_icecrown_jump_jets : public SpellScript +{ + PrepareSpellScript(spell_icecrown_jump_jets); + + void HandleCast() + { + Unit* caster = GetCaster(); + if (caster->IsVehicle()) + if (Unit* rocketBunny = caster->GetVehicleKit()->GetPassenger(1)) + rocketBunny->CastSpell(rocketBunny, SPELL_JUMP_ROCKET_BLAST, true); + } + + void Register() override + { + OnCast += SpellCastFn(spell_icecrown_jump_jets::HandleCast); + } +}; + +/*###### +## Quest 13291: Borrowed Technology / 13292: The Solution Solution (Daily) / 13239: Volatility / 13261: Volatiliy (Daily) +######*/ + +enum BorrowedTechnology +{ + SPELL_RIDE_FROST_WYRM = 59319 +}; + +// 59318 - Grab Fake Soldier +class spell_icecrown_grab_fake_soldier : public SpellScript +{ + PrepareSpellScript(spell_icecrown_grab_fake_soldier); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_RIDE_FROST_WYRM }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (!GetHitCreature()) + return; + // TO DO: Being triggered is hack, but in checkcast it doesn't pass aurastate requirements. + // Beside that the decoy won't keep it's freeze animation state when enter. + GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE_FROST_WYRM, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_grab_fake_soldier::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 59303 - Summon Frost Wyrm +class spell_icecrown_summon_frost_wyrm : public SpellScript +{ + PrepareSpellScript(spell_icecrown_summon_frost_wyrm); + + void SetDest(SpellDestination& dest) + { + // Adjust effect summon position + Position const offset = { 0.0f, 0.0f, 20.0f, 0.0f }; + dest.RelocateOffset(offset); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_icecrown_summon_frost_wyrm::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); + } +}; + +/*###### +## Quest 12847: Second Chances +######*/ + +// 12601 - Second Chances: Summon Landgren's Soul Moveto Target Bunny +class spell_icecrown_summon_soul_moveto_bunny : public SpellScript +{ + PrepareSpellScript(spell_icecrown_summon_soul_moveto_bunny); + + void SetDest(SpellDestination& dest) + { + // Adjust effect summon position + Position const offset = { 0.0f, 0.0f, 2.5f, 0.0f }; + dest.RelocateOffset(offset); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_icecrown_summon_soul_moveto_bunny::SetDest, EFFECT_0, TARGET_DEST_CASTER); + } +}; + +/*###### +## Quest 13086: The Last Line Of Defense +######*/ + +// 57385 - Argent Cannon +// 57412 - Reckoning Bomb +class spell_icecrown_cannons_target : public SpellScript +{ + PrepareSpellScript(spell_icecrown_cannons_target); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ static_cast<uint32>(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (WorldLocation const* pos = GetExplTargetDest()) + GetCaster()->CastSpell(pos->GetPosition(), GetEffectValue(), true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_icecrown_cannons_target::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +/*###### +## Quest 13790, 13793, 13811, 13814: Among the Champions / 13665, 13745, 13750, 13756, 13761, 13767, 13772, 13777, 13782, 13787: The Grand Melee +######*/ + +class spell_icecrown_bested_trigger : public SpellScript +{ + PrepareSpellScript(spell_icecrown_bested_trigger); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* target = GetHitUnit()->GetCharmerOrOwnerOrSelf(); + target->CastSpell(target, uint32(GetEffectValue()), true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_bested_trigger::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +/*###### +## Quest 13264, 13276, 13288, 13289: That's Abominable! +######*/ + +enum ThatsAbominable +{ + AREA_THE_BROKEN_FRONT = 4507, + AREA_MORD_RETHAR_THE_DEATH_GATE = 4508, + + NPC_DRAKKARI_CHIEFTAINK = 29099, + NPC_ICY_GHOUL = 31142, + NPC_VICIOUS_GEIST = 31147, + NPC_RISEN_ALLIANCE_SOLDIERS = 31205, + NPC_RENIMATED_ABOMINATION = 31692, + + QUEST_FUEL_FOR_THE_FIRE = 12690, + + SPELL_BLOATED_ABOMINATION_FEIGN_DEATH = 52593, + SPELL_BURST_AT_THE_SEAMS_BONE = 52516, + SPELL_EXPLODE_ABOMINATION_MEAT = 52520, + SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT = 52523, + SPELL_TROLL_EXPLOSION = 52565, + SPELL_EXPLODE_TROLL_MEAT = 52578, + SPELL_EXPLODE_TROLL_BLOODY_MEAT = 52580, + + SPELL_BURST_AT_THE_SEAMS_59576 = 59576, //script/knockback, That's Abominable + SPELL_BURST_AT_THE_SEAMS_59579 = 59579, //dummy + SPELL_BURST_AT_THE_SEAMS_52510 = 52510, //script/knockback, Fuel for the Fire + SPELL_BURST_AT_THE_SEAMS_52508 = 52508, //damage 20000 + SPELL_BURST_AT_THE_SEAMS_59580 = 59580, //damage 50000 + + SPELL_ASSIGN_GHOUL_KILL_CREDIT_TO_MASTER = 59590, + SPELL_ASSIGN_GEIST_KILL_CREDIT_TO_MASTER = 60041, + SPELL_ASSIGN_SKELETON_KILL_CREDIT_TO_MASTER = 60039, + + SPELL_DRAKKARI_SKULLCRUSHER_CREDIT = 52590, + SPELL_SUMMON_DRAKKARI_CHIEFTAIN = 52616, + SPELL_DRAKKARI_CHIEFTAINK_KILL_CREDIT = 52620 +}; + +// 59576 - Burst at the Seams +class spell_icecrown_burst_at_the_seams_59576 : public SpellScript +{ + PrepareSpellScript(spell_icecrown_burst_at_the_seams_59576); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_BURST_AT_THE_SEAMS_59576, + SPELL_BLOATED_ABOMINATION_FEIGN_DEATH, + SPELL_BURST_AT_THE_SEAMS_59579, + SPELL_BURST_AT_THE_SEAMS_BONE, + SPELL_EXPLODE_ABOMINATION_MEAT, + SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT + }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Creature* creature = GetCaster()->ToCreature()) + { + creature->CastSpell(creature, SPELL_BLOATED_ABOMINATION_FEIGN_DEATH, true); + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_59579, true); + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); + creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_MEAT, true); + creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); + creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); + creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_burst_at_the_seams_59576::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 59579 - Burst at the Seams +class spell_icecrown_burst_at_the_seams_59579 : public AuraScript +{ + PrepareAuraScript(spell_icecrown_burst_at_the_seams_59579); + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_TROLL_EXPLOSION, true); + target->CastSpell(target, SPELL_EXPLODE_ABOMINATION_MEAT, true); + target->CastSpell(target, SPELL_EXPLODE_TROLL_MEAT, true); + target->CastSpell(target, SPELL_EXPLODE_TROLL_MEAT, true); + target->CastSpell(target, SPELL_EXPLODE_TROLL_BLOODY_MEAT, true); + target->CastSpell(target, SPELL_BURST_AT_THE_SEAMS_BONE, true); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (Unit* caster = GetCaster()) + { + switch (target->GetEntry()) + { + case NPC_ICY_GHOUL: + target->CastSpell(caster, SPELL_ASSIGN_GHOUL_KILL_CREDIT_TO_MASTER, true); + break; + case NPC_VICIOUS_GEIST: + target->CastSpell(caster, SPELL_ASSIGN_GEIST_KILL_CREDIT_TO_MASTER, true); + break; + case NPC_RISEN_ALLIANCE_SOLDIERS: + target->CastSpell(caster, SPELL_ASSIGN_SKELETON_KILL_CREDIT_TO_MASTER, true); + break; + } + } + target->CastSpell(target, SPELL_BURST_AT_THE_SEAMS_59580, true); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_icecrown_burst_at_the_seams_59579::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectApplyFn(spell_icecrown_burst_at_the_seams_59579::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 52593 - Bloated Abomination Feign Death +class spell_icecrown_bloated_abom_feign_death : public AuraScript +{ + PrepareAuraScript(spell_icecrown_bloated_abom_feign_death); + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->SetDynamicFlag(UNIT_DYNFLAG_DEAD); + target->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); + + if (Creature* creature = target->ToCreature()) + creature->SetReactState(REACT_PASSIVE); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (Creature* creature = target->ToCreature()) + creature->DespawnOrUnsummon(); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_icecrown_bloated_abom_feign_death::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectApplyFn(spell_icecrown_bloated_abom_feign_death::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 76245 - Area Restrict Abom +class spell_icecrown_area_restrict_abom : public SpellScript +{ + PrepareSpellScript(spell_icecrown_area_restrict_abom); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Creature* creature = GetHitCreature()) { + uint32 area = creature->GetAreaId(); + if (area != AREA_THE_BROKEN_FRONT && area != AREA_MORD_RETHAR_THE_DEATH_GATE) + creature->DespawnOrUnsummon(); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_area_restrict_abom::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 59590 - Assign Ghoul Kill Credit to Master +// 60039 - Assign Skeleton Kill Credit to Master +// 60041 - Assign Geist Kill Credit to Master +class spell_icecrown_assign_credit_to_master : public SpellScript +{ + PrepareSpellScript(spell_icecrown_assign_credit_to_master); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + { + if (Unit* owner = target->GetOwner()) + { + owner->CastSpell(owner, GetEffectValue(), true); + } + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_assign_credit_to_master::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 52510 - Burst at the Seams +class spell_icecrown_burst_at_the_seams_52510 : public SpellScript +{ + PrepareSpellScript(spell_icecrown_burst_at_the_seams_52510); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_BURST_AT_THE_SEAMS_52510, + SPELL_BURST_AT_THE_SEAMS_52508, + SPELL_BURST_AT_THE_SEAMS_59580, + SPELL_BURST_AT_THE_SEAMS_BONE, + SPELL_EXPLODE_ABOMINATION_MEAT, + SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT + }); + } + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void HandleKnockBack(SpellEffIndex /*effIndex*/) + { + if (Unit* creature = GetHitCreature()) + { + if (Unit* charmer = GetCaster()->GetCharmerOrOwner()) + { + if (Player* player = charmer->ToPlayer()) + { + if (player->GetQuestStatus(QUEST_FUEL_FOR_THE_FIRE) == QUEST_STATUS_INCOMPLETE) + { + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); + creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_MEAT, true); + creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_52508, true); + creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_59580, true); + + player->CastSpell(player, SPELL_DRAKKARI_SKULLCRUSHER_CREDIT, true); + uint16 count = player->GetReqKillOrCastCurrentCount(QUEST_FUEL_FOR_THE_FIRE, NPC_DRAKKARI_CHIEFTAINK); + if ((count % 20) == 0) + player->CastSpell(player, SPELL_SUMMON_DRAKKARI_CHIEFTAIN, true); + } + } + } + } + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + GetCaster()->ToCreature()->DespawnOrUnsummon(2s); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_icecrown_burst_at_the_seams_52510::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK); + OnEffectHitTarget += SpellEffectFn(spell_icecrown_burst_at_the_seams_52510::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_icecrown() { RegisterCreatureAI(npc_argent_valiant); @@ -1032,4 +1512,18 @@ void AddSC_icecrown() RegisterSpellScript(spell_icecrown_gift_of_the_lich_king); RegisterSpellScript(spell_icecrown_consume_minions); RegisterSpellScript(spell_icecrown_ebon_blade_banner); + RegisterSpellScript(spell_icecrown_illidan_kill_credit_master); + RegisterSpellScript(spell_icecrown_plant_battle_standard); + RegisterSpellScript(spell_icecrown_jump_jets); + RegisterSpellScript(spell_icecrown_grab_fake_soldier); + RegisterSpellScript(spell_icecrown_summon_frost_wyrm); + RegisterSpellScript(spell_icecrown_summon_soul_moveto_bunny); + RegisterSpellScript(spell_icecrown_cannons_target); + RegisterSpellScript(spell_icecrown_bested_trigger); + RegisterSpellScript(spell_icecrown_burst_at_the_seams_59576); + RegisterSpellScript(spell_icecrown_burst_at_the_seams_59579); + RegisterSpellScript(spell_icecrown_bloated_abom_feign_death); + RegisterSpellScript(spell_icecrown_area_restrict_abom); + RegisterSpellScript(spell_icecrown_assign_credit_to_master); + RegisterSpellScript(spell_icecrown_burst_at_the_seams_52510); } diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 44b483488f1..bba73b309e0 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -24,6 +24,7 @@ #include "Player.h" #include "ScriptedEscortAI.h" #include "SpellAuras.h" +#include "SpellInfo.h" #include "SpellScript.h" #include "Vehicle.h" #include "GameObject.h" @@ -796,6 +797,93 @@ class spell_sholazar_flight_to_sholazar : public SpellScript } }; +/*###### +## Quest 12634: Some Make Lemonade, Some Make Liquor +######*/ + +enum SomeMakeLemonadeSomeMakeLiquor +{ + SPELL_BANANAS_FALL_TO_GROUND = 51836, + SPELL_ORANGE_FALLS_TO_GROUND = 51837, + SPELL_PAPAYA_FALLS_TO_GROUND = 51839, + SPELL_TRIGGER_SPAWN_DWARF = 52078 +}; + +// This should be scripted in DB but our action lists aren't good enough to properly support chance +// 51840 - Despawn Fruit Tosser +class spell_sholazar_despawn_fruit_tosser : public SpellScript +{ + PrepareSpellScript(spell_sholazar_despawn_fruit_tosser); + + bool Validate(SpellInfo const* /*spellEntry*/) override + { + return ValidateSpellInfo( + { + SPELL_BANANAS_FALL_TO_GROUND, + SPELL_ORANGE_FALLS_TO_GROUND, + SPELL_PAPAYA_FALLS_TO_GROUND, + SPELL_TRIGGER_SPAWN_DWARF + }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + uint32 spellId = SPELL_BANANAS_FALL_TO_GROUND; + switch (urand(0, 3)) + { + case 1: spellId = SPELL_ORANGE_FALLS_TO_GROUND; break; + case 2: spellId = SPELL_PAPAYA_FALLS_TO_GROUND; break; + } + // sometimes, if you're lucky, you get a dwarf + if (roll_chance_i(5)) + spellId = SPELL_TRIGGER_SPAWN_DWARF; + + GetHitUnit()->CastSpell(GetCaster(), spellId); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sholazar_despawn_fruit_tosser::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +/*###### +## Quest 12805: Salvaging Life's Strength +######*/ + +enum SalvagingLifesStength +{ + NPC_SHARD_KILL_CREDIT = 29303 +}; + +// 54190 - Lifeblood Dummy +class spell_sholazar_lifeblood_dummy : public SpellScript +{ + PrepareSpellScript(spell_sholazar_lifeblood_dummy); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }) && + sObjectMgr->GetCreatureTemplate(NPC_SHARD_KILL_CREDIT); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (GetHitUnit()->HasAura(uint32(GetEffectValue()))) + { + if (Player* caster = GetCaster()->ToPlayer()) + caster->KilledMonsterCredit(NPC_SHARD_KILL_CREDIT); + + GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue())); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sholazar_lifeblood_dummy::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_sholazar_basin() { RegisterCreatureAI(npc_engineer_helice); @@ -811,4 +899,6 @@ void AddSC_sholazar_basin() RegisterSpellScript(spell_sholazar_song_of_cleansing); RegisterSpellScript(spell_sholazar_lightning_strike); RegisterSpellScript(spell_sholazar_flight_to_sholazar); + RegisterSpellScript(spell_sholazar_despawn_fruit_tosser); + RegisterSpellScript(spell_sholazar_lifeblood_dummy); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index ef09f518892..a76580a65e6 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -1268,6 +1268,59 @@ class spell_storm_peaks_call_of_earth : public SpellScript } }; +/*###### +## Quest 12851: Bearly Hanging On +######*/ + +enum BearlyHangingOn +{ + NPC_FROSTGIANT = 29351, + NPC_FROSTWORG = 29358, + SPELL_FROSTGIANT_CREDIT = 58184, + SPELL_FROSTWORG_CREDIT = 58183, + SPELL_IMMOLATION = 54690, + SPELL_ABLAZE = 54683 +}; + +// 54798 - FLAMING Arrow Triggered Effect +class spell_storm_peaks_flaming_arrow_triggered_effect : public AuraScript +{ + PrepareAuraScript(spell_storm_peaks_flaming_arrow_triggered_effect); + + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + { + Unit* target = GetTarget(); + // Already in fire + if (target->HasAura(SPELL_ABLAZE)) + return; + + if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + switch (target->GetEntry()) + { + case NPC_FROSTWORG: + target->CastSpell(player, SPELL_FROSTWORG_CREDIT, true); + target->CastSpell(target, SPELL_IMMOLATION, true); + target->CastSpell(target, SPELL_ABLAZE, true); + break; + case NPC_FROSTGIANT: + target->CastSpell(player, SPELL_FROSTGIANT_CREDIT, true); + target->CastSpell(target, SPELL_IMMOLATION, true); + target->CastSpell(target, SPELL_ABLAZE, true); + break; + } + } + } + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_storm_peaks_flaming_arrow_triggered_effect::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + } +}; + void AddSC_storm_peaks() { RegisterCreatureAI(npc_brunnhildar_prisoner); @@ -1296,4 +1349,5 @@ void AddSC_storm_peaks() RegisterSpellScript(spell_storm_peaks_mammoth_explosion_master); RegisterSpellScript(spell_storm_peaks_unstable_explosive_detonation); RegisterSpellScript(spell_storm_peaks_call_of_earth); + RegisterSpellScript(spell_storm_peaks_flaming_arrow_triggered_effect); } diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 04be09d4f51..a4b18fbd7a7 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1029,7 +1029,8 @@ class spell_zuldrak_summon_nass : public SpellScript enum ConvocationAtZolHeb { - SPELL_AKALIS_STUN = 52989 + SPELL_AKALIS_STUN = 52989, + SPELL_FLICKERING_FLAMES = 53504 }; // 53010 - Convocation at Zol'Heb: Removef Akali's Stun @@ -1053,6 +1054,148 @@ class spell_zuldrak_remove_akalis_stun : public SpellScript } }; +// 53350 - Quenching Mist +class spell_zuldrak_quenching_mist : public AuraScript +{ + PrepareAuraScript(spell_zuldrak_quenching_mist); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_FLICKERING_FLAMES }); + } + + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_FLICKERING_FLAMES); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_zuldrak_quenching_mist::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); + } +}; + +/*###### +## Quest 12661: Infiltrating Voltarus / 12669: So Far, So Bad / 12676: Sabotage / 12677: Hazardous Materials / 12713: Betrayal +######*/ + +// 55368 - Summon Stefan +class spell_zuldrak_summon_stefan : public SpellScript +{ + PrepareSpellScript(spell_zuldrak_summon_stefan); + + void SetDest(SpellDestination& dest) + { + // Adjust effect summon position (sniff) + Position const offset = { 0.0f, 0.0f, 30.0f, 0.0f }; + dest.RelocateOffset(offset); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_zuldrak_summon_stefan::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); + } +}; + +/*###### +## Quest 12527: Gluttonous Lurkers +######*/ + +enum GluttonousLurkers +{ + SPELL_SUMMON_GORGED_LURKING_BASILISK = 50928 +}; + +// 50894 - Zul'Drak Rat +class spell_zuldrak_zuldrak_rat : public SpellScript +{ + PrepareSpellScript(spell_zuldrak_zuldrak_rat); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_GORGED_LURKING_BASILISK }); + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + if (GetHitAura() && GetHitAura()->GetStackAmount() >= GetSpellInfo()->StackAmount) + { + GetHitUnit()->CastSpell((Unit*) nullptr, SPELL_SUMMON_GORGED_LURKING_BASILISK, true); + if (Creature* basilisk = GetHitUnit()->ToCreature()) + basilisk->DespawnOrUnsummon(); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_zuldrak_zuldrak_rat::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +/*###### +## Quest 12919: The Storm King's Vengeance +######*/ + +enum TheStormKingsVengeance +{ + SPELL_RIDE_GYMER = 43671, + SPELL_GRABBED = 55424, + SPELL_VARGUL_EXPLOSION = 55569 +}; + +// 55516 - Gymer's Grab +class spell_zuldrak_gymers_grab : public SpellScript +{ + PrepareSpellScript(spell_zuldrak_gymers_grab); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_RIDE_GYMER, SPELL_GRABBED }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (!GetHitCreature()) + return; + CastSpellExtraArgs args(TRIGGERED_FULL_MASK); + args.AddSpellBP0(2); + GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE_GYMER, args); + GetHitCreature()->CastSpell(GetHitCreature(), SPELL_GRABBED, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_zuldrak_gymers_grab::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 55421 - Gymer's Throw +class spell_zuldrak_gymers_throw : public SpellScript +{ + PrepareSpellScript(spell_zuldrak_gymers_throw); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_VARGUL_EXPLOSION }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (caster->IsVehicle()) + if (Unit* passenger = caster->GetVehicleKit()->GetPassenger(1)) + { + passenger->ExitVehicle(); + caster->CastSpell(passenger, SPELL_VARGUL_EXPLOSION, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_zuldrak_gymers_throw::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_zuldrak() { RegisterCreatureAI(npc_released_offspring_harkoa); @@ -1076,4 +1219,9 @@ void AddSC_zuldrak() RegisterSpellScript(spell_zuldrak_breaking_through_summon_zulaman_gods_master); RegisterSpellScript(spell_zuldrak_summon_nass); RegisterSpellScript(spell_zuldrak_remove_akalis_stun); + RegisterSpellScript(spell_zuldrak_quenching_mist); + RegisterSpellScript(spell_zuldrak_summon_stefan); + RegisterSpellScript(spell_zuldrak_zuldrak_rat); + RegisterSpellScript(spell_zuldrak_gymers_grab); + RegisterSpellScript(spell_zuldrak_gymers_throw); } diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index b4a8fae14ab..e3edce057eb 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -1195,6 +1195,119 @@ class spell_bem_q10720_poison_keg : public SpellScript } }; +/*###### +## Quest 11010: Bombing Run / 11102: Bombing Run / 11023: Bomb Them Again! +######*/ + +enum BombingRun +{ + SPELL_FLAK_CANNON_TRIGGER = 40110, + SPELL_CHOOSE_LOC = 40056, + SPELL_AGGRO_CHECK = 40112, + + NPC_FEL_CANNON2 = 23082 +}; + +// 40113 - Knockdown Fel Cannon: The Aggro Check Aura +class spell_bem_aggro_check_aura : public AuraScript +{ + PrepareAuraScript(spell_bem_aggro_check_aura); + + void HandleTriggerSpell(AuraEffect const* /*aurEff*/) + { + if (Unit* target = GetTarget()) + // On trigger proccing + target->CastSpell(target, SPELL_AGGRO_CHECK); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_bem_aggro_check_aura::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } +}; + +// 40112 - Knockdown Fel Cannon: The Aggro Check +class spell_bem_aggro_check : public SpellScript +{ + PrepareSpellScript(spell_bem_aggro_check); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Player* playerTarget = GetHitPlayer()) + // Check if found player target is on fly mount or using flying form + if (playerTarget->HasAuraType(SPELL_AURA_FLY) || playerTarget->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)) + playerTarget->CastSpell(playerTarget, SPELL_FLAK_CANNON_TRIGGER, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_bem_aggro_check::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 40119 - Knockdown Fel Cannon: The Aggro Burst +class spell_bem_aggro_burst : public AuraScript +{ + PrepareAuraScript(spell_bem_aggro_burst); + + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) + { + if (Unit* target = GetTarget()) + // On each tick cast Choose Loc to trigger summon + target->CastSpell(target, SPELL_CHOOSE_LOC); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_bem_aggro_burst::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } +}; + +// 40056 - Knockdown Fel Cannon: Choose Loc +class spell_bem_choose_loc : public SpellScript +{ + PrepareSpellScript(spell_bem_choose_loc); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + // Check for player that is in 65 y range + std::vector<Player*> playerList; + caster->GetPlayerListInGrid(playerList, 65.0f); + for (Player* player : playerList) + // Check if found player target is on fly mount or using flying form + if (player->HasAuraType(SPELL_AURA_FLY) || player->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)) + // Summom Fel Cannon (bunny version) at found player + caster->SummonCreature(NPC_FEL_CANNON2, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_bem_choose_loc::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 39844 - Skyguard Blasting Charge +// 40160 - Throw Bomb +class spell_bem_check_fly_mount : public SpellScript +{ + PrepareSpellScript(spell_bem_check_fly_mount); + + SpellCastResult CheckRequirement() + { + Unit* caster = GetCaster(); + // This spell will be cast only if caster has one of these auras + if (!(caster->HasAuraType(SPELL_AURA_FLY) || caster->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))) + return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; + return SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_bem_check_fly_mount::CheckRequirement); + } +}; + void AddSC_blades_edge_mountains() { new npc_nether_drake(); @@ -1211,4 +1324,9 @@ 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_aggro_check_aura); + RegisterSpellScript(spell_bem_aggro_check); + RegisterSpellScript(spell_bem_aggro_burst); + RegisterSpellScript(spell_bem_choose_loc); + RegisterSpellScript(spell_bem_check_fly_mount); } diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 31df4f40c06..458f431e696 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "Containers.h" +#include "CreatureAIImpl.h" #include "GameObject.h" #include "Group.h" #include "Map.h" @@ -354,6 +355,89 @@ public: explicit spell_terokkar_translocation_firewing_point(Translocation triggeredSpellId) : _triggeredSpellId(triggeredSpellId) { } }; +/*###### +## Quest 10929: Fumping / 10930: The Big Bone Worm +######*/ + +enum Fumping +{ + SPELL_SUMMON_SAND_GNOME = 39240, + SPELL_SUMMON_BONE_SLICER = 39241, + + SPELL_SUMMON_SAND_GNOME_1 = 39247, + SPELL_SUMMON_BONE_SLICER_1 = 39245, + SPELL_SUMMON_HAISHULUD = 39248, + SPELL_DESPAWN_CLEFTHOOF = 39250 +}; + +// 39238 - Fumping +class spell_terokkar_fumping : public SpellScript +{ + PrepareSpellScript(spell_terokkar_fumping); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_SAND_GNOME, SPELL_SUMMON_BONE_SLICER }); + } + + void SetDest(SpellDestination& dest) + { + Position const offset = { 0.5f, 0.5f, 5.0f, 0.0f }; + dest.RelocateOffset(offset); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), RAND(SPELL_SUMMON_SAND_GNOME, SPELL_SUMMON_BONE_SLICER), true); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_terokkar_fumping::SetDest, EFFECT_1, TARGET_DEST_CASTER); + OnEffectHit += SpellEffectFn(spell_terokkar_fumping::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + } +}; + +// 39246 - Fumping +class spell_terokkar_fumping_the_big_bone_worm : public SpellScript +{ + PrepareSpellScript(spell_terokkar_fumping_the_big_bone_worm); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo( + { + SPELL_SUMMON_SAND_GNOME_1, + SPELL_SUMMON_BONE_SLICER_1, + SPELL_SUMMON_HAISHULUD, + SPELL_DESPAWN_CLEFTHOOF + }); + } + + void SetDest(SpellDestination& dest) + { + Position const offset = { 0.5f, 0.5f, 5.0f, 0.0f }; + dest.RelocateOffset(offset); + } + + void HandleSummon(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), RAND(SPELL_SUMMON_SAND_GNOME_1, SPELL_SUMMON_BONE_SLICER_1, SPELL_SUMMON_HAISHULUD), true); + } + + void HandleDespawn(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), SPELL_DESPAWN_CLEFTHOOF, true); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_terokkar_fumping_the_big_bone_worm::SetDest, EFFECT_1, TARGET_DEST_CASTER); + OnEffectHit += SpellEffectFn(spell_terokkar_fumping_the_big_bone_worm::HandleSummon, EFFECT_1, SPELL_EFFECT_DUMMY); + OnEffectHit += SpellEffectFn(spell_terokkar_fumping_the_big_bone_worm::HandleDespawn, EFFECT_2, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_terokkar_forest() { new npc_unkor_the_ruthless(); @@ -367,4 +451,6 @@ void AddSC_terokkar_forest() RegisterSpellScriptWithArgs(spell_terokkar_translocation_firewing_point, "spell_terokkar_translocation_firewing_point_building_up", SPELL_TRANSLOCATION_FIREWING_POINT_BUILDING_UP); RegisterSpellScriptWithArgs(spell_terokkar_translocation_firewing_point, "spell_terokkar_translocation_firewing_point_tower_down", SPELL_TRANSLOCATION_FIREWING_POINT_TOWER_DOWN); RegisterSpellScriptWithArgs(spell_terokkar_translocation_firewing_point, "spell_terokkar_translocation_firewing_point_tower_up", SPELL_TRANSLOCATION_FIREWING_POINT_TOWER_UP); + RegisterSpellScript(spell_terokkar_fumping); + RegisterSpellScript(spell_terokkar_fumping_the_big_bone_worm); } diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index b1a1d35d781..d598f64b998 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -17,8 +17,8 @@ /* * Scripts for spells with SPELLFAMILY_GENERIC spells used for quests. - * Ordered alphabetically using questId and scriptname. - * Scriptnames of files in this file should be prefixed with "spell_q#questID_". + * This file is only for spells used in multiple zones. + * Scriptnames of files in this file should be prefixed with "spell_quest_". */ #include "ScriptMgr.h" @@ -33,1670 +33,6 @@ #include "SpellScript.h" #include "Vehicle.h" -class spell_generic_quest_update_entry_SpellScript : public SpellScript -{ - PrepareSpellScript(spell_generic_quest_update_entry_SpellScript); - private: - uint16 _spellEffect; - uint8 _effIndex; - uint32 _originalEntry; - uint32 _newEntry; - bool _shouldAttack; - Milliseconds _despawnTime; - - public: - spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, Milliseconds despawnTime = 0s) : - SpellScript(), _spellEffect(spellEffect), _effIndex(effIndex), _originalEntry(originalEntry), - _newEntry(newEntry), _shouldAttack(shouldAttack), _despawnTime(despawnTime) { } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Creature* creatureTarget = GetHitCreature()) - if (!creatureTarget->IsPet() && creatureTarget->GetEntry() == _originalEntry) - { - creatureTarget->UpdateEntry(_newEntry); - if (_shouldAttack) - creatureTarget->EngageWithTarget(GetCaster()); - - if (_despawnTime != 0s) - creatureTarget->DespawnOrUnsummon(_despawnTime); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_generic_quest_update_entry_SpellScript::HandleDummy, _effIndex, _spellEffect); - } -}; - -// http://www.wowhead.com/quest=55 Morbent Fel -enum Quest55Data -{ - NPC_MORBENT = 1200, - NPC_WEAKENED_MORBENT = 24782, -}; - -// 8913 - Sacred Cleansing -class spell_q55_sacred_cleansing : public SpellScriptLoader -{ - public: - spell_q55_sacred_cleansing() : SpellScriptLoader("spell_q55_sacred_cleansing") { } - - SpellScript* GetSpellScript() const override - { - return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_1, NPC_MORBENT, NPC_WEAKENED_MORBENT, true); - } -}; - -enum ThaumaturgyChannel -{ - SPELL_THAUMATURGY_CHANNEL = 21029 -}; - -// 9712 - Thaumaturgy Channel -class spell_q2203_thaumaturgy_channel : public AuraScript -{ - PrepareAuraScript(spell_q2203_thaumaturgy_channel); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_THAUMATURGY_CHANNEL }); - } - - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) - { - PreventDefaultAction(); - if (Unit* caster = GetCaster()) - caster->CastSpell(caster, SPELL_THAUMATURGY_CHANNEL, false); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_q2203_thaumaturgy_channel::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } -}; - -// http://www.wowhead.com/quest=6124 Curing the Sick (A) -// http://www.wowhead.com/quest=6129 Curing the Sick (H) -enum Quests6124_6129Data -{ - NPC_SICKLY_GAZELLE = 12296, - NPC_CURED_GAZELLE = 12297, - NPC_SICKLY_DEER = 12298, - NPC_CURED_DEER = 12299, -}; - -constexpr Milliseconds Quest6124_6129_DESPAWN_TIME = 30s; - -// 19512 - Apply Salve -class spell_q6124_6129_apply_salve : public SpellScript -{ - PrepareSpellScript(spell_q6124_6129_apply_salve); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Player* caster = GetCaster()->ToPlayer(); - if (GetCastItem()) - if (Creature* creatureTarget = GetHitCreature()) - { - uint32 newEntry = 0; - switch (caster->GetTeam()) - { - case HORDE: - if (creatureTarget->GetEntry() == NPC_SICKLY_GAZELLE) - newEntry = NPC_CURED_GAZELLE; - break; - case ALLIANCE: - if (creatureTarget->GetEntry() == NPC_SICKLY_DEER) - newEntry = NPC_CURED_DEER; - break; - } - if (newEntry) - { - creatureTarget->UpdateEntry(newEntry); - creatureTarget->DespawnOrUnsummon(Quest6124_6129_DESPAWN_TIME); - caster->KilledMonsterCredit(newEntry); - } - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q6124_6129_apply_salve::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// http://www.wowhead.com/quest=10255 Testing the Antidote -enum Quest10255Data -{ - NPC_HELBOAR = 16880, - NPC_DREADTUSK = 16992, -}; - -// 34665 - Administer Antidote -class spell_q10255_administer_antidote : public SpellScriptLoader -{ - public: - spell_q10255_administer_antidote() : SpellScriptLoader("spell_q10255_administer_antidote") { } - - SpellScript* GetSpellScript() const override - { - return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_0, NPC_HELBOAR, NPC_DREADTUSK, true); - } -}; - -// http://www.wowhead.com/quest=11396 Bring Down Those Shields (A) -// http://www.wowhead.com/quest=11399 Bring Down Those Shields (H) -enum Quest11396_11399Data -{ - SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3 = 43874, - SPELL_SCOURGING_CRYSTAL_CONTROLLER = 43878 -}; - -// 43874 - Scourge Mur'gul Camp: Force Shield Arcane Purple x3 -class spell_q11396_11399_force_shield_arcane_purple_x3 : public AuraScript -{ - PrepareAuraScript(spell_q11396_11399_force_shield_arcane_purple_x3); - - void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - target->SetImmuneToPC(true); - target->AddUnitState(UNIT_STATE_ROOT); - } - - void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->SetImmuneToPC(false); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_q11396_11399_force_shield_arcane_purple_x3::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_q11396_11399_force_shield_arcane_purple_x3::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } -}; - -// 50133 - Scourging Crystal Controller -class spell_q11396_11399_scourging_crystal_controller : public SpellScript -{ - PrepareSpellScript(spell_q11396_11399_scourging_crystal_controller); - - bool Validate(SpellInfo const* /*spellEntry*/) override - { - return ValidateSpellInfo({ SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3, SPELL_SCOURGING_CRYSTAL_CONTROLLER }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - if (target->GetTypeId() == TYPEID_UNIT && target->HasAura(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3)) - // Make sure nobody else is channeling the same target - if (!target->HasAura(SPELL_SCOURGING_CRYSTAL_CONTROLLER)) - GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, GetCastItem()); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11396_11399_scourging_crystal_controller::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// 43882 - Scourging Crystal Controller Dummy -class spell_q11396_11399_scourging_crystal_controller_dummy : public SpellScript -{ - PrepareSpellScript(spell_q11396_11399_scourging_crystal_controller_dummy); - - bool Validate(SpellInfo const* /*spellEntry*/) override - { - return ValidateSpellInfo({ SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3 }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - if (target->GetTypeId() == TYPEID_UNIT) - target->RemoveAurasDueToSpell(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11396_11399_scourging_crystal_controller_dummy::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// http://www.wowhead.com/quest=11515 Blood for Blood -enum Quest11515Data -{ - NPC_FELBLOOD_INITIATE = 24918, - NPC_EMACIATED_FELBLOOD = 24955 -}; - -// 44936 - Quest - Fel Siphon Dummy -class spell_q11515_fel_siphon_dummy : public SpellScriptLoader -{ - public: - spell_q11515_fel_siphon_dummy() : SpellScriptLoader("spell_q11515_fel_siphon_dummy") { } - - SpellScript* GetSpellScript() const override - { - return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_0, NPC_FELBLOOD_INITIATE, NPC_EMACIATED_FELBLOOD, true); - } -}; - -// http://www.wowhead.com/quest=11730 Master and Servant -enum Quest11730Data -{ - SPELL_SUMMON_SCAVENGEBOT_004A8 = 46063, - SPELL_SUMMON_SENTRYBOT_57K = 46068, - SPELL_SUMMON_DEFENDOTANK_66D = 46058, - SPELL_SUMMON_SCAVENGEBOT_005B6 = 46066, - SPELL_SUMMON_55D_COLLECTATRON = 46034, - SPELL_ROBOT_KILL_CREDIT = 46027, - NPC_SCAVENGEBOT_004A8 = 25752, - NPC_SENTRYBOT_57K = 25753, - NPC_DEFENDOTANK_66D = 25758, - NPC_SCAVENGEBOT_005B6 = 25792, - NPC_55D_COLLECTATRON = 25793 -}; - -// 46023 - The Ultrasonic Screwdriver -class spell_q11730_ultrasonic_screwdriver : public SpellScript -{ - PrepareSpellScript(spell_q11730_ultrasonic_screwdriver); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem(); - } - - bool Validate(SpellInfo const* /*spellEntry*/) override - { - return ValidateSpellInfo( - { - SPELL_SUMMON_SCAVENGEBOT_004A8, - SPELL_SUMMON_SENTRYBOT_57K, - SPELL_SUMMON_DEFENDOTANK_66D, - SPELL_SUMMON_SCAVENGEBOT_005B6, - SPELL_SUMMON_55D_COLLECTATRON, - SPELL_ROBOT_KILL_CREDIT - }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Item* castItem = GetCastItem(); - Unit* caster = GetCaster(); - if (Creature* target = GetHitCreature()) - { - uint32 spellId = 0; - switch (target->GetEntry()) - { - case NPC_SCAVENGEBOT_004A8: spellId = SPELL_SUMMON_SCAVENGEBOT_004A8; break; - case NPC_SENTRYBOT_57K: spellId = SPELL_SUMMON_SENTRYBOT_57K; break; - case NPC_DEFENDOTANK_66D: spellId = SPELL_SUMMON_DEFENDOTANK_66D; break; - case NPC_SCAVENGEBOT_005B6: spellId = SPELL_SUMMON_SCAVENGEBOT_005B6; break; - case NPC_55D_COLLECTATRON: spellId = SPELL_SUMMON_55D_COLLECTATRON; break; - default: - return; - } - caster->CastSpell(caster, spellId, castItem); - caster->CastSpell(caster, SPELL_ROBOT_KILL_CREDIT, true); - target->DespawnOrUnsummon(); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11730_ultrasonic_screwdriver::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// http://www.wowhead.com/quest=12459 That Which Creates Can Also Destroy -enum Quest12459Data -{ - NPC_REANIMATED_FROSTWYRM = 26841, - NPC_WEAK_REANIMATED_FROSTWYRM = 27821, - - NPC_TURGID = 27808, - NPC_WEAK_TURGID = 27809, - - NPC_DEATHGAZE = 27122, - NPC_WEAK_DEATHGAZE = 27807, -}; - -// 49587 - Seeds of Nature's Wrath -class spell_q12459_seeds_of_natures_wrath : public SpellScript -{ - PrepareSpellScript(spell_q12459_seeds_of_natures_wrath); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Creature* creatureTarget = GetHitCreature()) - { - uint32 uiNewEntry = 0; - switch (creatureTarget->GetEntry()) - { - case NPC_REANIMATED_FROSTWYRM: uiNewEntry = NPC_WEAK_REANIMATED_FROSTWYRM; break; - case NPC_TURGID: uiNewEntry = NPC_WEAK_TURGID; break; - case NPC_DEATHGAZE: uiNewEntry = NPC_WEAK_DEATHGAZE; break; - } - if (uiNewEntry) - creatureTarget->UpdateEntry(uiNewEntry); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12459_seeds_of_natures_wrath::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// http://www.wowhead.com/quest=12634 Some Make Lemonade, Some Make Liquor -enum Quest12634Data -{ - SPELL_BANANAS_FALL_TO_GROUND = 51836, - SPELL_ORANGE_FALLS_TO_GROUND = 51837, - SPELL_PAPAYA_FALLS_TO_GROUND = 51839, - SPELL_SUMMON_ADVENTUROUS_DWARF = 52070 -}; - -// 51840 - Despawn Fruit Tosser -class spell_q12634_despawn_fruit_tosser : public SpellScript -{ - PrepareSpellScript(spell_q12634_despawn_fruit_tosser); - - bool Validate(SpellInfo const* /*spellEntry*/) override - { - return ValidateSpellInfo( - { - SPELL_BANANAS_FALL_TO_GROUND, - SPELL_ORANGE_FALLS_TO_GROUND, - SPELL_PAPAYA_FALLS_TO_GROUND, - SPELL_SUMMON_ADVENTUROUS_DWARF - }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - uint32 spellId = SPELL_BANANAS_FALL_TO_GROUND; - switch (urand(0, 3)) - { - case 1: spellId = SPELL_ORANGE_FALLS_TO_GROUND; break; - case 2: spellId = SPELL_PAPAYA_FALLS_TO_GROUND; break; - } - // sometimes, if you're lucky, you get a dwarf - if (roll_chance_i(5)) - spellId = SPELL_SUMMON_ADVENTUROUS_DWARF; - GetCaster()->CastSpell(GetCaster(), spellId, true); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q12634_despawn_fruit_tosser::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// http://www.wowhead.com/quest=12851 Going Bearback -enum Quest12851Data -{ - NPC_FROSTGIANT = 29351, - NPC_FROSTWORG = 29358, - SPELL_FROSTGIANT_CREDIT = 58184, - SPELL_FROSTWORG_CREDIT = 58183, - SPELL_IMMOLATION = 54690, - SPELL_ABLAZE = 54683, -}; - -// 54798 - FLAMING Arrow Triggered Effect -class spell_q12851_going_bearback : public AuraScript -{ - PrepareAuraScript(spell_q12851_going_bearback); - - void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (Unit* caster = GetCaster()) - { - Unit* target = GetTarget(); - // Already in fire - if (target->HasAura(SPELL_ABLAZE)) - return; - - if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself()) - { - switch (target->GetEntry()) - { - case NPC_FROSTWORG: - target->CastSpell(player, SPELL_FROSTWORG_CREDIT, true); - target->CastSpell(target, SPELL_IMMOLATION, true); - target->CastSpell(target, SPELL_ABLAZE, true); - break; - case NPC_FROSTGIANT: - target->CastSpell(player, SPELL_FROSTGIANT_CREDIT, true); - target->CastSpell(target, SPELL_IMMOLATION, true); - target->CastSpell(target, SPELL_ABLAZE, true); - break; - } - } - } - } - - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_q12851_going_bearback::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); - } -}; - -// http://www.wowhead.com/quest=12659 Scalps! -enum Quest12659Data -{ - NPC_SCALPS_KC_BUNNY = 28622, -}; - -// 52090 - Ahunae's Knife -class spell_q12659_ahunaes_knife : public SpellScript -{ - PrepareSpellScript(spell_q12659_ahunaes_knife); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Player* caster = GetCaster()->ToPlayer(); - if (Creature* target = GetHitCreature()) - { - target->DespawnOrUnsummon(); - caster->KilledMonsterCredit(NPC_SCALPS_KC_BUNNY); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12659_ahunaes_knife::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -enum SalvagingLifesStength -{ - NPC_SHARD_KILL_CREDIT = 29303, -}; - -// 54190 - Lifeblood Dummy -class spell_q12805_lifeblood_dummy : public SpellScript -{ - PrepareSpellScript(spell_q12805_lifeblood_dummy); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - Player* caster = GetCaster()->ToPlayer(); - if (Creature* target = GetHitCreature()) - { - caster->KilledMonsterCredit(NPC_SHARD_KILL_CREDIT); - target->CastSpell(target, uint32(GetEffectValue()), true); - target->DespawnOrUnsummon(2s); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12805_lifeblood_dummy::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -/* - http://www.wowhead.com/quest=13283 King of the Mountain - http://www.wowhead.com/quest=13280 King of the Mountain - */ -enum BattleStandard -{ - NPC_KING_OF_THE_MOUNTAINT_KC = 31766, - SPELL_PLANT_HORDE_BATTLE_STANDARD = 59643, - SPELL_HORDE_BATTLE_STANDARD_STATE = 59642, - SPELL_ALLIANCE_BATTLE_STANDARD_STATE = 4339, - SPELL_JUMP_ROCKET_BLAST = 4340 -}; - -// 4338 - Plant Alliance Battle Standard -// 59643 - Plant Horde Battle Standard -class spell_q13280_13283_plant_battle_standard : public SpellScript -{ - PrepareSpellScript(spell_q13280_13283_plant_battle_standard); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - Unit* target = GetHitUnit(); - uint32 triggeredSpellID = SPELL_ALLIANCE_BATTLE_STANDARD_STATE; - - caster->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); - if (caster->IsVehicle()) - if (Unit* player = caster->GetVehicleKit()->GetPassenger(0)) - player->ToPlayer()->KilledMonsterCredit(NPC_KING_OF_THE_MOUNTAINT_KC); - - if (GetSpellInfo()->Id == SPELL_PLANT_HORDE_BATTLE_STANDARD) - triggeredSpellID = SPELL_HORDE_BATTLE_STANDARD_STATE; - - target->RemoveAllAuras(); - target->CastSpell(target, triggeredSpellID, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13280_13283_plant_battle_standard::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// 4336 - Jump Jets -class spell_q13280_13283_jump_jets : public SpellScript -{ - PrepareSpellScript(spell_q13280_13283_jump_jets); - - void HandleCast() - { - Unit* caster = GetCaster(); - if (caster->IsVehicle()) - if (Unit* rocketBunny = caster->GetVehicleKit()->GetPassenger(1)) - rocketBunny->CastSpell(rocketBunny, SPELL_JUMP_ROCKET_BLAST, true); - } - - void Register() override - { - OnCast += SpellCastFn(spell_q13280_13283_jump_jets::HandleCast); - } -}; - -enum FocusOnTheBeach -{ - SPELL_BUNNY_CREDIT_BEAM = 47390, -}; - -// 50546 - The Focus on the Beach: Ley Line Focus Control Ring Effect -class spell_q12066_bunny_kill_credit : public SpellScript -{ - PrepareSpellScript(spell_q12066_bunny_kill_credit); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Creature* target = GetHitCreature()) - target->CastSpell(GetCaster(), SPELL_BUNNY_CREDIT_BEAM, false); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12066_bunny_kill_credit::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -enum DefendingWyrmrestTemple -{ - SPELL_SUMMON_WYRMREST_DEFENDER = 49207 -}; - -// 49213 - Defending Wyrmrest Temple: Character Script Cast From Gossip -class spell_q12372_cast_from_gossip_trigger : public SpellScript -{ - PrepareSpellScript(spell_q12372_cast_from_gossip_trigger); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WYRMREST_DEFENDER, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12372_cast_from_gossip_trigger::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// http://www.wowhead.com/quest=12372 Defending Wyrmrest Temple -enum Quest12372Data -{ - // NPCs - NPC_WYRMREST_TEMPLE_CREDIT = 27698 -}; - -// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect -class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScript -{ - PrepareSpellScript(spell_q12372_destabilize_azure_dragonshrine_dummy); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (GetHitCreature()) - if (Unit* caster = GetOriginalCaster()) - if (Vehicle* vehicle = caster->GetVehicleKit()) - if (Unit* passenger = vehicle->GetPassenger(0)) - if (Player* player = passenger->ToPlayer()) - player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12372_destabilize_azure_dragonshrine_dummy::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// "Bombing Run" and "Bomb Them Again!" -enum Quest11010_11102_11023Data -{ - // Spell - SPELL_FLAK_CANNON_TRIGGER = 40110, - SPELL_CHOOSE_LOC = 40056, - SPELL_AGGRO_CHECK = 40112, - // NPCs - NPC_FEL_CANNON2 = 23082 -}; - -// 40113 - Knockdown Fel Cannon: The Aggro Check Aura -class spell_q11010_q11102_q11023_aggro_check_aura : public AuraScript -{ - PrepareAuraScript(spell_q11010_q11102_q11023_aggro_check_aura); - - void HandleTriggerSpell(AuraEffect const* /*aurEff*/) - { - if (Unit* target = GetTarget()) - // On trigger proccing - target->CastSpell(target, SPELL_AGGRO_CHECK); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_check_aura::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } -}; - -// 40112 - Knockdown Fel Cannon: The Aggro Check -class spell_q11010_q11102_q11023_aggro_check : public SpellScript -{ - PrepareSpellScript(spell_q11010_q11102_q11023_aggro_check); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Player* playerTarget = GetHitPlayer()) - // Check if found player target is on fly mount or using flying form - if (playerTarget->HasAuraType(SPELL_AURA_FLY) || playerTarget->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)) - playerTarget->CastSpell(playerTarget, SPELL_FLAK_CANNON_TRIGGER, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11010_q11102_q11023_aggro_check::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// 40119 - Knockdown Fel Cannon: The Aggro Burst -class spell_q11010_q11102_q11023_aggro_burst : public AuraScript -{ - PrepareAuraScript(spell_q11010_q11102_q11023_aggro_burst); - - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) - { - if (Unit* target = GetTarget()) - // On each tick cast Choose Loc to trigger summon - target->CastSpell(target, SPELL_CHOOSE_LOC); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_burst::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - } -}; - -// 40056 - Knockdown Fel Cannon: Choose Loc -class spell_q11010_q11102_q11023_choose_loc : public SpellScript -{ - PrepareSpellScript(spell_q11010_q11102_q11023_choose_loc); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - // Check for player that is in 65 y range - std::list<Player*> playerList; - Trinity::AnyPlayerInObjectRangeCheck checker(caster, 65.0f); - Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(caster, playerList, checker); - Cell::VisitWorldObjects(caster, searcher, 65.0f); - for (std::list<Player*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) - // Check if found player target is on fly mount or using flying form - if ((*itr)->HasAuraType(SPELL_AURA_FLY) || (*itr)->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)) - // Summom Fel Cannon (bunny version) at found player - caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ()); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q11010_q11102_q11023_choose_loc::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// 39844 - Skyguard Blasting Charge -// 40160 - Throw Bomb -class spell_q11010_q11102_q11023_q11008_check_fly_mount : public SpellScript -{ - PrepareSpellScript(spell_q11010_q11102_q11023_q11008_check_fly_mount); - - SpellCastResult CheckRequirement() - { - Unit* caster = GetCaster(); - // This spell will be cast only if caster has one of these auras - if (!(caster->HasAuraType(SPELL_AURA_FLY) || caster->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))) - return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; - return SPELL_CAST_OK; - } - - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_q11010_q11102_q11023_q11008_check_fly_mount::CheckRequirement); - } -}; - -enum SpellZuldrakRat -{ - SPELL_SUMMON_GORGED_LURKING_BASILISK = 50928 -}; - -// 50894 - Zul'Drak Rat -class spell_q12527_zuldrak_rat : public SpellScript -{ - PrepareSpellScript(spell_q12527_zuldrak_rat); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_SUMMON_GORGED_LURKING_BASILISK }); - } - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - if (GetHitAura() && GetHitAura()->GetStackAmount() >= GetSpellInfo()->StackAmount) - { - GetHitUnit()->CastSpell((Unit*) nullptr, SPELL_SUMMON_GORGED_LURKING_BASILISK, true); - if (Creature* basilisk = GetHitUnit()->ToCreature()) - basilisk->DespawnOrUnsummon(); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12527_zuldrak_rat::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// 55368 - Summon Stefan -class spell_q12661_q12669_q12676_q12677_q12713_summon_stefan : public SpellScript -{ - PrepareSpellScript(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan); - - void SetDest(SpellDestination& dest) - { - // Adjust effect summon position - Position const offset = { 0.0f, 0.0f, 20.0f, 0.0f }; - dest.RelocateOffset(offset); - } - - void Register() override - { - OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); - } -}; - -enum QuenchingMist -{ - SPELL_FLICKERING_FLAMES = 53504 -}; - -// 53350 - Quenching Mist -class spell_q12730_quenching_mist : public AuraScript -{ - PrepareAuraScript(spell_q12730_quenching_mist); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_FLICKERING_FLAMES }); - } - - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_FLICKERING_FLAMES); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_q12730_quenching_mist::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); - } -}; - -// 13291 - Borrowed Technology/13292 - The Solution Solution /Daily//13239 - Volatility/13261 - Volatiliy /Daily// -enum Quest13291_13292_13239_13261Data -{ - // NPCs - NPC_SKYTALON = 31583, - NPC_DECOY = 31578, - // Spells - SPELL_RIDE = 59319 -}; - -// 59318 - Grab Fake Soldier -class spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy : public SpellScript -{ - PrepareSpellScript(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_RIDE }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (!GetHitCreature()) - return; - // TO DO: Being triggered is hack, but in checkcast it doesn't pass aurastate requirements. - // Beside that the decoy won't keep it's freeze animation state when enter. - GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// 59303 - Summon Frost Wyrm -class spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon : public SpellScript -{ - PrepareSpellScript(spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon); - - void SetDest(SpellDestination& dest) - { - // Adjust effect summon position - Position const offset = { 0.0f, 0.0f, 20.0f, 0.0f }; - dest.RelocateOffset(offset); - } - - void Register() override - { - OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); - } -}; - -// 12601 - Second Chances: Summon Landgren's Soul Moveto Target Bunny -class spell_q12847_summon_soul_moveto_bunny : public SpellScript -{ - PrepareSpellScript(spell_q12847_summon_soul_moveto_bunny); - - void SetDest(SpellDestination& dest) - { - // Adjust effect summon position - Position const offset = { 0.0f, 0.0f, 2.5f, 0.0f }; - dest.RelocateOffset(offset); - } - - void Register() override - { - OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12847_summon_soul_moveto_bunny::SetDest, EFFECT_0, TARGET_DEST_CASTER); - } -}; - -// 57385 - Argent Cannon -// 57412 - Reckoning Bomb -class spell_q13086_cannons_target : public SpellScript -{ - PrepareSpellScript(spell_q13086_cannons_target); - - bool Validate(SpellInfo const* spellInfo) override - { - return ValidateSpellInfo({ static_cast<uint32>(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); - } - - void HandleEffectDummy(SpellEffIndex /*effIndex*/) - { - if (WorldLocation const* pos = GetExplTargetDest()) - GetCaster()->CastSpell(pos->GetPosition(), GetEffectValue(), true); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q13086_cannons_target::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -enum BurstAtTheSeams -{ - AREA_THE_BROKEN_FRONT = 4507, - AREA_MORD_RETHAR_THE_DEATH_GATE = 4508, - - NPC_DRAKKARI_CHIEFTAINK = 29099, - NPC_ICY_GHOUL = 31142, - NPC_VICIOUS_GEIST = 31147, - NPC_RISEN_ALLIANCE_SOLDIERS = 31205, - NPC_RENIMATED_ABOMINATION = 31692, - - QUEST_FUEL_FOR_THE_FIRE = 12690, - - SPELL_BLOATED_ABOMINATION_FEIGN_DEATH = 52593, - SPELL_BURST_AT_THE_SEAMS_BONE = 52516, - SPELL_EXPLODE_ABOMINATION_MEAT = 52520, - SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT = 52523, - SPELL_TROLL_EXPLOSION = 52565, - SPELL_EXPLODE_TROLL_MEAT = 52578, - SPELL_EXPLODE_TROLL_BLOODY_MEAT = 52580, - - SPELL_BURST_AT_THE_SEAMS_59576 = 59576, //script/knockback, That's Abominable - SPELL_BURST_AT_THE_SEAMS_59579 = 59579, //dummy - SPELL_BURST_AT_THE_SEAMS_52510 = 52510, //script/knockback, Fuel for the Fire - SPELL_BURST_AT_THE_SEAMS_52508 = 52508, //damage 20000 - SPELL_BURST_AT_THE_SEAMS_59580 = 59580, //damage 50000 - - SPELL_ASSIGN_GHOUL_KILL_CREDIT_TO_MASTER = 59590, - SPELL_ASSIGN_GEIST_KILL_CREDIT_TO_MASTER = 60041, - SPELL_ASSIGN_SKELETON_KILL_CREDIT_TO_MASTER = 60039, - - SPELL_DRAKKARI_SKULLCRUSHER_CREDIT = 52590, - SPELL_SUMMON_DRAKKARI_CHIEFTAIN = 52616, - SPELL_DRAKKARI_CHIEFTAINK_KILL_CREDIT = 52620 -}; - -// 59576 - Burst at the Seams -class spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576 : public SpellScript -{ - PrepareSpellScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_BURST_AT_THE_SEAMS_59576, - SPELL_BLOATED_ABOMINATION_FEIGN_DEATH, - SPELL_BURST_AT_THE_SEAMS_59579, - SPELL_BURST_AT_THE_SEAMS_BONE, - SPELL_EXPLODE_ABOMINATION_MEAT, - SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT - }); - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (Creature* creature = GetCaster()->ToCreature()) - { - creature->CastSpell(creature, SPELL_BLOATED_ABOMINATION_FEIGN_DEATH, true); - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_59579, true); - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); - creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_MEAT, true); - creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); - creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); - creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// 59579 - Burst at the Seams -class spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579 : public AuraScript -{ - PrepareAuraScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579); - - void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_TROLL_EXPLOSION, true); - target->CastSpell(target, SPELL_EXPLODE_ABOMINATION_MEAT, true); - target->CastSpell(target, SPELL_EXPLODE_TROLL_MEAT, true); - target->CastSpell(target, SPELL_EXPLODE_TROLL_MEAT, true); - target->CastSpell(target, SPELL_EXPLODE_TROLL_BLOODY_MEAT, true); - target->CastSpell(target, SPELL_BURST_AT_THE_SEAMS_BONE, true); - } - - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - if (Unit* caster = GetCaster()) - { - switch (target->GetEntry()) - { - case NPC_ICY_GHOUL: - target->CastSpell(caster, SPELL_ASSIGN_GHOUL_KILL_CREDIT_TO_MASTER, true); - break; - case NPC_VICIOUS_GEIST: - target->CastSpell(caster, SPELL_ASSIGN_GEIST_KILL_CREDIT_TO_MASTER, true); - break; - case NPC_RISEN_ALLIANCE_SOLDIERS: - target->CastSpell(caster, SPELL_ASSIGN_SKELETON_KILL_CREDIT_TO_MASTER, true); - break; - } - } - target->CastSpell(target, SPELL_BURST_AT_THE_SEAMS_59580, true); - } - - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } -}; - -// 52593 - Bloated Abomination Feign Death -class spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death : public AuraScript -{ - PrepareAuraScript(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death); - - void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - target->SetDynamicFlag(UNIT_DYNFLAG_DEAD); - target->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); - - if (Creature* creature = target->ToCreature()) - creature->SetReactState(REACT_PASSIVE); - } - - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - if (Creature* creature = target->ToCreature()) - creature->DespawnOrUnsummon(); - } - - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } -}; - -// 76245 - Area Restrict Abom -class spell_q13264_q13276_q13288_q13289_area_restrict_abom : public SpellScript -{ - PrepareSpellScript(spell_q13264_q13276_q13288_q13289_area_restrict_abom); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (Creature* creature = GetHitCreature()) { - uint32 area = creature->GetAreaId(); - if (area != AREA_THE_BROKEN_FRONT && area != AREA_MORD_RETHAR_THE_DEATH_GATE) - creature->DespawnOrUnsummon(); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13264_q13276_q13288_q13289_area_restrict_abom::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// 59590 - Assign Ghoul Kill Credit to Master -// 60039 - Assign Skeleton Kill Credit to Master -// 60041 - Assign Geist Kill Credit to Master -class spell_q13264_q13276_q13288_q13289_assign_credit_to_master : public SpellScript -{ - PrepareSpellScript(spell_q13264_q13276_q13288_q13289_assign_credit_to_master); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - { - if (Unit* owner = target->GetOwner()) - { - owner->CastSpell(owner, GetEffectValue(), true); - } - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13264_q13276_q13288_q13289_assign_credit_to_master::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// 52510 - Burst at the Seams -class spell_q12690_burst_at_the_seams_52510 : public SpellScript -{ - PrepareSpellScript(spell_q12690_burst_at_the_seams_52510); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_BURST_AT_THE_SEAMS_52510, - SPELL_BURST_AT_THE_SEAMS_52508, - SPELL_BURST_AT_THE_SEAMS_59580, - SPELL_BURST_AT_THE_SEAMS_BONE, - SPELL_EXPLODE_ABOMINATION_MEAT, - SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT - }); - } - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_UNIT; - } - - void HandleKnockBack(SpellEffIndex /*effIndex*/) - { - if (Unit* creature = GetHitCreature()) - { - if (Unit* charmer = GetCaster()->GetCharmerOrOwner()) - { - if (Player* player = charmer->ToPlayer()) - { - if (player->GetQuestStatus(QUEST_FUEL_FOR_THE_FIRE) == QUEST_STATUS_INCOMPLETE) - { - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true); - creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_MEAT, true); - creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true); - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_52508, true); - creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_59580, true); - - player->CastSpell(player, SPELL_DRAKKARI_SKULLCRUSHER_CREDIT, true); - uint16 count = player->GetReqKillOrCastCurrentCount(QUEST_FUEL_FOR_THE_FIRE, NPC_DRAKKARI_CHIEFTAINK); - if ((count % 20) == 0) - player->CastSpell(player, SPELL_SUMMON_DRAKKARI_CHIEFTAIN, true); - } - } - } - } - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - GetCaster()->ToCreature()->DespawnOrUnsummon(2s); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_52510::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK); - OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_52510::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -enum EscapeFromSilverbrook -{ - SPELL_SUMMON_WORGEN = 48681 -}; - -// 48682 - Escape from Silverbrook - Periodic Dummy -class spell_q12308_escape_from_silverbrook : public SpellScript -{ - PrepareSpellScript(spell_q12308_escape_from_silverbrook); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_SUMMON_WORGEN }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WORGEN, true); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q12308_escape_from_silverbrook::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -// 48681 - Summon Silverbrook Worgen -class spell_q12308_escape_from_silverbrook_summon_worgen : public SpellScript -{ - PrepareSpellScript(spell_q12308_escape_from_silverbrook_summon_worgen); - - void ModDest(SpellDestination& dest) - { - float dist = GetEffectInfo(EFFECT_0).CalcRadius(GetCaster()); - float angle = frand(0.75f, 1.25f) * float(M_PI); - - Position pos = GetCaster()->GetNearPosition(dist, angle); - dest.Relocate(pos); - } - - void Register() override - { - OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12308_escape_from_silverbrook_summon_worgen::ModDest, EFFECT_0, TARGET_DEST_CASTER_SUMMON); - } -}; - -enum DeathComesFromOnHigh -{ - SPELL_FORGE_CREDIT = 51974, - SPELL_TOWN_HALL_CREDIT = 51977, - SPELL_SCARLET_HOLD_CREDIT = 51980, - SPELL_CHAPEL_CREDIT = 51982, - - NPC_NEW_AVALON_FORGE = 28525, - NPC_NEW_AVALON_TOWN_HALL = 28543, - NPC_SCARLET_HOLD = 28542, - NPC_CHAPEL_OF_THE_CRIMSON_FLAME = 28544 -}; - -// 51858 - Siphon of Acherus -class spell_q12641_death_comes_from_on_high : public SpellScript -{ - PrepareSpellScript(spell_q12641_death_comes_from_on_high); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_FORGE_CREDIT, - SPELL_TOWN_HALL_CREDIT, - SPELL_SCARLET_HOLD_CREDIT, - SPELL_CHAPEL_CREDIT - }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - uint32 spellId = 0; - - switch (GetHitCreature()->GetEntry()) - { - case NPC_NEW_AVALON_FORGE: - spellId = SPELL_FORGE_CREDIT; - break; - case NPC_NEW_AVALON_TOWN_HALL: - spellId = SPELL_TOWN_HALL_CREDIT; - break; - case NPC_SCARLET_HOLD: - spellId = SPELL_SCARLET_HOLD_CREDIT; - break; - case NPC_CHAPEL_OF_THE_CRIMSON_FLAME: - spellId = SPELL_CHAPEL_CREDIT; - break; - default: - return; - } - - GetCaster()->CastSpell(nullptr, spellId, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12641_death_comes_from_on_high::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -enum Recall_Eye_of_Acherus -{ - THE_EYE_OF_ACHERUS = 51852 -}; - -// 52694 - Recall Eye of Acherus -class spell_q12641_recall_eye_of_acherus : public SpellScript -{ - PrepareSpellScript(spell_q12641_recall_eye_of_acherus); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Player* player = GetCaster()->GetCharmerOrOwner()->ToPlayer()) - { - player->StopCastingCharm(); - player->StopCastingBindSight(); - player->RemoveAura(THE_EYE_OF_ACHERUS); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12641_recall_eye_of_acherus::HandleDummy, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// 51769 - Emblazon Runeblade -class spell_q12619_emblazon_runeblade : public AuraScript -{ - PrepareAuraScript(spell_q12619_emblazon_runeblade); - - void HandleEffectPeriodic(AuraEffect const* aurEff) - { - PreventDefaultAction(); - if (Unit* caster = GetCaster()) - caster->CastSpell(caster, aurEff->GetSpellEffectInfo().TriggerSpell, aurEff); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_q12619_emblazon_runeblade::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } -}; - -// 51770 - Emblazon Runeblade -class spell_q12619_emblazon_runeblade_effect : public SpellScript -{ - PrepareSpellScript(spell_q12619_emblazon_runeblade_effect); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), false); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q12619_emblazon_runeblade_effect::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -enum Quest_The_Storm_King -{ - SPELL_RIDE_GYMER = 43671, - SPELL_GRABBED = 55424 -}; - -// 55516 - Gymer's Grab -class spell_q12919_gymers_grab : public SpellScript -{ - PrepareSpellScript(spell_q12919_gymers_grab); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_RIDE_GYMER }); - } - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (!GetHitCreature()) - return; - CastSpellExtraArgs args(TRIGGERED_FULL_MASK); - args.AddSpellBP0(2); - GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE_GYMER, args); - GetHitCreature()->CastSpell(GetHitCreature(), SPELL_GRABBED, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12919_gymers_grab::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -enum Quest_The_Storm_King_Throw -{ - SPELL_VARGUL_EXPLOSION = 55569 -}; - -// 55421 - Gymer's Throw -class spell_q12919_gymers_throw : public SpellScript -{ - PrepareSpellScript(spell_q12919_gymers_throw); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (caster->IsVehicle()) - if (Unit* passenger = caster->GetVehicleKit()->GetPassenger(1)) - { - passenger->ExitVehicle(); - caster->CastSpell(passenger, SPELL_VARGUL_EXPLOSION, true); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12919_gymers_throw::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -enum Quest_The_Hunter_And_The_Prince -{ - SPELL_ILLIDAN_KILL_CREDIT = 61748 -}; - -// 61752 - Illidan Kill Credit Master -class spell_q13400_illidan_kill_master : public SpellScript -{ - PrepareSpellScript(spell_q13400_illidan_kill_master); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_ILLIDAN_KILL_CREDIT }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (caster->IsVehicle()) - if (Unit* passenger = caster->GetVehicleKit()->GetPassenger(0)) - passenger->CastSpell(passenger, SPELL_ILLIDAN_KILL_CREDIT, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13400_illidan_kill_master::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - -enum RelicOfTheEarthenRing -{ - SPELL_TOTEM_OF_THE_EARTHEN_RING = 66747 -}; - -// 66744 - Make Player Destroy Totems -class spell_q14100_q14111_make_player_destroy_totems : public SpellScript -{ - PrepareSpellScript(spell_q14100_q14111_make_player_destroy_totems); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_TOTEM_OF_THE_EARTHEN_RING }); - } - - void HandleScriptEffect(SpellEffIndex /*effIndex*/) - { - if (Player* player = GetHitPlayer()) - player->CastSpell(player, SPELL_TOTEM_OF_THE_EARTHEN_RING, TRIGGERED_FULL_MASK); // ignore reagent cost, consumed by quest - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q14100_q14111_make_player_destroy_totems::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -enum Fumping -{ - SPELL_SUMMON_SAND_GNOME = 39240, - SPELL_SUMMON_BONE_SLICER = 39241 -}; - -// 39238 - Fumping -class spell_q10929_fumping : public AuraScript -{ - PrepareAuraScript(spell_q10929_fumping); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_SUMMON_SAND_GNOME, SPELL_SUMMON_BONE_SLICER }); - } - - void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) - return; - - if (Unit* caster = GetCaster()) - caster->CastSpell(caster, urand(SPELL_SUMMON_SAND_GNOME, SPELL_SUMMON_BONE_SLICER), true); - } - - void Register() override - { - OnEffectRemove += AuraEffectRemoveFn(spell_q10929_fumping::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } -}; - -// 49285 - Hand Over Reins -class spell_q12414_hand_over_reins : public SpellScript -{ - PrepareSpellScript(spell_q12414_hand_over_reins); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - Creature* caster = GetCaster()->ToCreature(); - GetHitUnit()->ExitVehicle(); - - if (caster) - caster->DespawnOrUnsummon(); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q12414_hand_over_reins::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -// 13790 13793 13811 13814 - Among the Champions -// 13665 13745 13750 13756 13761 13767 13772 13777 13782 13787 - The Grand Melee -class spell_q13665_q13790_bested_trigger : public SpellScript -{ - PrepareSpellScript(spell_q13665_q13790_bested_trigger); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - Unit* target = GetHitUnit()->GetCharmerOrOwnerOrSelf(); - target->CastSpell(target, uint32(GetEffectValue()), true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q13665_q13790_bested_trigger::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - -enum ApplyHeatAndStir -{ - SPELL_SPURTS_AND_SMOKE = 38594, - SPELL_FAILED_MIX_1 = 43376, - SPELL_FAILED_MIX_2 = 43378, - SPELL_FAILED_MIX_3 = 43970, - SPELL_SUCCESSFUL_MIX = 43377, - - CREATURE_GENERIC_TRIGGER_LAB = 24042, - - TALK_0 = 0, - TALK_1 = 1 -}; - -// 43972 - Mixing Blood -class spell_q11306_mixing_blood : public SpellScript -{ - PrepareSpellScript(spell_q11306_mixing_blood); - - void HandleEffect(SpellEffIndex /*effIndex*/) - { - if (Unit* caster = GetCaster()) - if (Creature* trigger = caster->FindNearestCreature(CREATURE_GENERIC_TRIGGER_LAB, 100.0f)) - trigger->AI()->DoCastSelf(SPELL_SPURTS_AND_SMOKE); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q11306_mixing_blood::HandleEffect, EFFECT_1, SPELL_EFFECT_SEND_EVENT); - } -}; - -// 43375 - Mixing Vrykul Blood -class spell_q11306_mixing_vrykul_blood : public SpellScript -{ - PrepareSpellScript(spell_q11306_mixing_vrykul_blood); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Unit* caster = GetCaster()) - { - uint8 chance = urand(0, 99); - uint32 spellId = 0; - - // 90% chance of getting one out of three failure effects - if (chance < 30) - spellId = SPELL_FAILED_MIX_1; - else if (chance < 60) - spellId = SPELL_FAILED_MIX_2; - else if (chance < 90) - spellId = SPELL_FAILED_MIX_3; - else // 10% chance of successful cast - spellId = SPELL_SUCCESSFUL_MIX; - - caster->CastSpell(caster, spellId, true); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11306_mixing_vrykul_blood::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); - } -}; - -// 43376 - Failed Mix -class spell_q11306_failed_mix_43376 : public SpellScript -{ - PrepareSpellScript(spell_q11306_failed_mix_43376); - - void HandleEffect(SpellEffIndex /*effIndex*/) - { - if (Unit* caster = GetCaster()) - if (Creature* trigger = caster->FindNearestCreature(CREATURE_GENERIC_TRIGGER_LAB, 100.0f)) - trigger->AI()->Talk(TALK_0, caster); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q11306_failed_mix_43376::HandleEffect, EFFECT_1, SPELL_EFFECT_SEND_EVENT); - } -}; - -// 43378 - Failed Mix -class spell_q11306_failed_mix_43378 : public SpellScript -{ - PrepareSpellScript(spell_q11306_failed_mix_43378); - - void HandleEffect(SpellEffIndex /*effIndex*/) - { - if (Unit* caster = GetCaster()) - if (Creature* trigger = caster->FindNearestCreature(CREATURE_GENERIC_TRIGGER_LAB, 100.0f)) - trigger->AI()->Talk(TALK_1, caster); - } - - void Register() override - { - OnEffectHit += SpellEffectFn(spell_q11306_failed_mix_43378::HandleEffect, EFFECT_2, SPELL_EFFECT_SEND_EVENT); - } -}; - -// 46444 - Weakness to Lightning: Cast on Master Script Effect -class spell_q11896_weakness_to_lightning_46444 : public SpellScript -{ - PrepareSpellScript(spell_q11896_weakness_to_lightning_46444); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - { - if (Unit* owner = target->GetOwner()) - { - target->CastSpell(owner, GetEffectValue(), true); - } - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11896_weakness_to_lightning_46444::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - enum TamingTheBeast { SPELL_TAME_ICE_CLAW_BEAR = 19548, @@ -1902,64 +238,37 @@ class spell_quest_uther_grom_tribute : public SpellScript } }; +enum RelicOfTheEarthenRing +{ + SPELL_TOTEM_OF_THE_EARTHEN_RING = 66747 +}; + +// 66744 - Make Player Destroy Totems +class spell_quest_make_player_destroy_totems : public SpellScript +{ + PrepareSpellScript(spell_quest_make_player_destroy_totems); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_TOTEM_OF_THE_EARTHEN_RING }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + // Ignore reagent cost, consumed by quest + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_TOTEM_OF_THE_EARTHEN_RING, TRIGGERED_IGNORE_POWER_AND_REAGENT_COST); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_quest_make_player_destroy_totems::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_quest_spell_scripts() { - new spell_q55_sacred_cleansing(); - RegisterSpellScript(spell_q2203_thaumaturgy_channel); - RegisterSpellScript(spell_q6124_6129_apply_salve); - new spell_q10255_administer_antidote(); - RegisterSpellScript(spell_q11396_11399_force_shield_arcane_purple_x3); - RegisterSpellScript(spell_q11396_11399_scourging_crystal_controller); - RegisterSpellScript(spell_q11396_11399_scourging_crystal_controller_dummy); - new spell_q11515_fel_siphon_dummy(); - RegisterSpellScript(spell_q11730_ultrasonic_screwdriver); - RegisterSpellScript(spell_q12459_seeds_of_natures_wrath); - RegisterSpellScript(spell_q12634_despawn_fruit_tosser); - RegisterSpellScript(spell_q12851_going_bearback); - RegisterSpellScript(spell_q12659_ahunaes_knife); - RegisterSpellScript(spell_q12805_lifeblood_dummy); - RegisterSpellScript(spell_q13280_13283_plant_battle_standard); - RegisterSpellScript(spell_q13280_13283_jump_jets); - RegisterSpellScript(spell_q12066_bunny_kill_credit); - RegisterSpellScript(spell_q12372_cast_from_gossip_trigger); - RegisterSpellScript(spell_q12372_destabilize_azure_dragonshrine_dummy); - RegisterSpellScript(spell_q11010_q11102_q11023_aggro_check_aura); - RegisterSpellScript(spell_q11010_q11102_q11023_aggro_check); - RegisterSpellScript(spell_q11010_q11102_q11023_aggro_burst); - RegisterSpellScript(spell_q11010_q11102_q11023_choose_loc); - RegisterSpellScript(spell_q11010_q11102_q11023_q11008_check_fly_mount); - RegisterSpellScript(spell_q12527_zuldrak_rat); - RegisterSpellScript(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan); - RegisterSpellScript(spell_q12730_quenching_mist); - RegisterSpellScript(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy); - RegisterSpellScript(spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon); - RegisterSpellScript(spell_q12847_summon_soul_moveto_bunny); - RegisterSpellScript(spell_q13086_cannons_target); - RegisterSpellScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576); - RegisterSpellScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579); - RegisterSpellScript(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death); - RegisterSpellScript(spell_q13264_q13276_q13288_q13289_area_restrict_abom); - RegisterSpellScript(spell_q13264_q13276_q13288_q13289_assign_credit_to_master); - RegisterSpellScript(spell_q12690_burst_at_the_seams_52510); - RegisterSpellScript(spell_q11896_weakness_to_lightning_46444); - RegisterSpellScript(spell_q12308_escape_from_silverbrook_summon_worgen); - RegisterSpellScript(spell_q12308_escape_from_silverbrook); - RegisterSpellScript(spell_q12641_death_comes_from_on_high); - RegisterSpellScript(spell_q12641_recall_eye_of_acherus); - RegisterSpellScript(spell_q12619_emblazon_runeblade); - RegisterSpellScript(spell_q12619_emblazon_runeblade_effect); - RegisterSpellScript(spell_q12919_gymers_grab); - RegisterSpellScript(spell_q12919_gymers_throw); - RegisterSpellScript(spell_q13400_illidan_kill_master); - RegisterSpellScript(spell_q14100_q14111_make_player_destroy_totems); - RegisterSpellScript(spell_q10929_fumping); - RegisterSpellScript(spell_q12414_hand_over_reins); - RegisterSpellScript(spell_q13665_q13790_bested_trigger); - RegisterSpellScript(spell_q11306_mixing_blood); - RegisterSpellScript(spell_q11306_mixing_vrykul_blood); - RegisterSpellScript(spell_q11306_failed_mix_43376); - RegisterSpellScript(spell_q11306_failed_mix_43378); RegisterSpellScript(spell_quest_taming_the_beast); RegisterSpellScript(spell_quest_portal_with_condition); RegisterSpellScript(spell_quest_uther_grom_tribute); + RegisterSpellScript(spell_quest_make_player_destroy_totems); } |