aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/old/3.3.5a/2012_09_16_00_world_version.sql (renamed from sql/updates/world/2012_09_16_00_world_version.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_16_01_world_conditions.sql (renamed from sql/updates/world/2012_09_16_01_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_16_01_world_creature_loot_template.sql (renamed from sql/updates/world/2012_09_16_01_world_creature_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_16_01_world_creature_template_addon.sql (renamed from sql/updates/world/2012_09_16_01_world_creature_template_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_16_02_world_fires_over_skettis.sql (renamed from sql/updates/world/2012_09_16_02_world_fires_over_skettis.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_16_03_world_spell_script_names.sql (renamed from sql/updates/world/2012_09_16_03_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_17_00_world_spell_bonus_data.sql (renamed from sql/updates/world/2012_09_17_00_world_spell_bonus_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_17_01_world_spell_bonus_data.sql (renamed from sql/updates/world/2012_09_17_01_world_spell_bonus_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_17_01_world_spell_script_names.sql (renamed from sql/updates/world/2012_09_17_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_17_02_world_misc.sql (renamed from sql/updates/world/2012_09_17_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_18_00_world_creature_template.sql (renamed from sql/updates/world/2012_09_18_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_18_01_world_creature_template.sql (renamed from sql/updates/world/2012_09_18_01_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_19_00_world_dwarfageddon.sql (renamed from sql/updates/world/2012_09_19_00_world_dwarfageddon.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_19_00_world_reference_loot_template.sql (renamed from sql/updates/world/2012_09_19_00_world_reference_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_20_00_world_creature_loot_template.sql (renamed from sql/updates/world/2012_09_20_00_world_creature_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_22_01_world_i_was_a_lot_of_things.sql (renamed from sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_22_03_world_game_event.sql (renamed from sql/updates/world/2012_09_22_03_world_game_event.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_24_00_world_spell_script_names.sql (renamed from sql/updates/world/2012_09_24_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_24_01_world_spell_script_names.sql (renamed from sql/updates/world/2012_09_24_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_24_02_world_misc.sql (renamed from sql/updates/world/2012_09_24_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_24_03_world_misc.sql (renamed from sql/updates/world/2012_09_24_03_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_26_00_world_misc.sql (renamed from sql/updates/world/2012_09_26_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_26_01_world_spell_bonus_data.sql (renamed from sql/updates/world/2012_09_26_01_world_spell_bonus_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_27_01_world_custodian_of_time.sql (renamed from sql/updates/world/2012_09_27_01_world_custodian_of_time.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_28_00_world_creature_model_info.sql (renamed from sql/updates/world/2012_09_28_00_world_creature_model_info.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_29_00_world_creature_model_info.sql (renamed from sql/updates/world/2012_09_29_00_world_creature_model_info.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_29_01_world_creature_text.sql (renamed from sql/updates/world/2012_09_29_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_30_00_world_creature_text.sql (renamed from sql/updates/world/2012_09_30_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_30_01_world_player_factionchange_titles.sql (renamed from sql/updates/world/2012_09_30_01_world_player_factionchange_titles.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_30_02_world_creature_text.sql (renamed from sql/updates/world/2012_09_30_02_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_09_30_03_world_creature_text.sql (renamed from sql/updates/world/2012_09_30_03_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_02_00_world_oculus.sql (renamed from sql/updates/world/2012_10_02_00_world_oculus.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_04_00_world_spelldifficulty_dbc.sql (renamed from sql/updates/world/2012_10_04_00_world_spelldifficulty_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_04_01_world_script_texts.sql (renamed from sql/updates/world/2012_10_04_01_world_script_texts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_05_00_world_misc.sql (renamed from sql/updates/world/2012_10_05_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_05_01_world_spell_script_names.sql (renamed from sql/updates/world/2012_10_05_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_00_world_spell_difficulty.sql (renamed from sql/updates/world/2012_10_06_00_world_spell_difficulty.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_00_world_spell_script_names.sql (renamed from sql/updates/world/2012_10_06_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_01_world_spell_dbc.sql (renamed from sql/updates/world/2012_10_06_01_world_spell_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_02_world_misc_templates.sql (renamed from sql/updates/world/2012_10_06_02_world_misc_templates.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_03_world_creature_text.sql (renamed from sql/updates/world/2012_10_06_03_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_04_world_misc_spawns.sql (renamed from sql/updates/world/2012_10_06_04_world_misc_spawns.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_06_05_world_spell_script_names.sql (renamed from sql/updates/world/2012_10_06_05_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_07_00_world_creature_loot_template.sql (renamed from sql/updates/world/2012_10_07_00_world_creature_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_07_01_world_spell_proc_event.sql (renamed from sql/updates/world/2012_10_07_01_world_spell_proc_event.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_09_00_character_glyphs.sql (renamed from sql/updates/characters/2012_10_09_00_character_glyphs.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_09_00_world_spell_groups.sql (renamed from sql/updates/world/2012_10_09_00_world_spell_groups.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_09_01_world_spell_groups.sql (renamed from sql/updates/world/2012_10_09_01_world_spell_groups.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_09_02_world_spell_groups.sql (renamed from sql/updates/world/2012_10_09_02_world_spell_groups.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_10_00_world_battleground_template.sql (renamed from sql/updates/world/2012_10_10_00_world_battleground_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_11_00_world_gameobject.sql (renamed from sql/updates/world/2012_10_11_00_world_gameobject.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_13_00_world_creature_template.sql (renamed from sql/updates/world/2012_10_13_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_14_00_world_creature.sql (renamed from sql/updates/world/2012_10_14_00_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_16_00_world_spell_area.sql (renamed from sql/updates/world/2012_10_16_00_world_spell_area.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_17_00_character_gm_tickets.sql (renamed from sql/updates/characters/2012_10_17_00_character_gm_tickets.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_20_00_world_transports.sql (renamed from sql/updates/world/2012_10_20_00_world_transports.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_20_01_world_spell_script_names.sql (renamed from sql/updates/world/2012_10_20_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_20_02_world_creature_text.sql (renamed from sql/updates/world/2012_10_20_02_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_21_00_world_conditions.sql (renamed from sql/updates/world/2012_10_21_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_21_01_world_misc.sql (renamed from sql/updates/world/2012_10_21_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_23_00_world_trinity_string.sql (renamed from sql/updates/world/2012_10_23_00_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_23_01_world_command.sql (renamed from sql/updates/world/2012_10_23_01_world_command.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_25_00_world_childrens_week.sql (renamed from sql/updates/world/2012_10_25_00_world_childrens_week.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_26_00_world_sai.sql (renamed from sql/updates/world/2012_10_26_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_27_00_world_creature.sql (renamed from sql/updates/world/2012_10_27_00_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_27_01_world_creature_loot_template.sql (renamed from sql/updates/world/2012_10_27_01_world_creature_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_10_29_00_world_conditions.sql (renamed from sql/updates/world/2012_10_29_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_02_00_character_misc.sql (renamed from sql/updates/characters/2012_11_02_00_character_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_03_00_world_creature_loot_template.sql (renamed from sql/updates/world/2012_11_03_00_world_creature_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_07_00_world_misc.sql (renamed from sql/updates/world/2012_11_07_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_11_00_world_sai.sql (renamed from sql/updates/world/2012_11_11_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_11_01_world_quest_template.sql (renamed from sql/updates/world/2012_11_11_01_world_quest_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_11_02_world_gossip_menu.sql (renamed from sql/updates/world/2012_11_11_02_world_gossip_menu.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_11_03_world_gossip_menu.sql (renamed from sql/updates/world/2012_11_11_03_world_gossip_menu.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_12_00_world_quest_template.sql (renamed from sql/updates/world/2012_11_12_00_world_quest_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_12_01_world_misc.sql (renamed from sql/updates/world/2012_11_12_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_12_02_world_quest_template.sql (renamed from sql/updates/world/2012_11_12_02_world_quest_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_12_03_world_misc.sql (renamed from sql/updates/world/2012_11_12_03_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_00_world_waypoints.sql (renamed from sql/updates/world/2012_11_13_00_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_01_world_misc.sql (renamed from sql/updates/world/2012_11_13_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_02_world_creature.sql (renamed from sql/updates/world/2012_11_13_02_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_03_world_gameevent.sql (renamed from sql/updates/world/2012_11_13_03_world_gameevent.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_04_world_gameeventquest.sql (renamed from sql/updates/world/2012_11_13_04_world_gameeventquest.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_05_world_player_factionchange_items.sql (renamed from sql/updates/world/2012_11_13_05_world_player_factionchange_items.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_13_06_world_trinity_string.sql (renamed from sql/updates/world/2012_11_13_06_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_14_00_world_sai.sql (renamed from sql/updates/world/2012_11_14_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_14_00_world_various_fixes.sql (renamed from sql/updates/world/2012_11_14_00_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_14_02_world_battleground_template.sql (renamed from sql/updates/world/2012_11_14_02_world_battleground_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_16_00_world_utgarde.sql (renamed from sql/updates/world/2012_11_16_00_world_utgarde.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_16_01_world_utgarde.sql (renamed from sql/updates/world/2012_11_16_01_world_utgarde.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_16_02_world_creature_ai_summons.sql (renamed from sql/updates/world/2012_11_16_02_world_creature_ai_summons.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_17_00_world_various_fixes.sql (renamed from sql/updates/world/2012_11_17_00_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_18_00_character_calendar.sql (renamed from sql/updates/characters/2012_11_18_00_character_calendar.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_18_00_world_ormorok.sql (renamed from sql/updates/world/2012_11_18_00_world_ormorok.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_18_01_world_creature_text.sql (renamed from sql/updates/world/2012_11_18_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_18_01_world_gameobject.sql (renamed from sql/updates/world/2012_11_18_01_world_gameobject.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_18_02_world_toc.sql (renamed from sql/updates/world/2012_11_18_02_world_toc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_19_00_world_various_fixes.sql (renamed from sql/updates/world/2012_11_19_00_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_19_01_world_pilgrims_bounty.sql (renamed from sql/updates/world/2012_11_19_01_world_pilgrims_bounty.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_19_02_world_misc.sql (renamed from sql/updates/world/2012_11_19_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_19_03_world_ysera.sql (renamed from sql/updates/world/2012_11_19_03_world_ysera.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_20_00_world_creature_text.sql (renamed from sql/updates/world/2012_11_20_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_21_00_world_sai.sql (renamed from sql/updates/world/2012_11_21_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_00_world_conditions.sql (renamed from sql/updates/world/2012_11_24_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_00_world_creature_text.sql (renamed from sql/updates/world/2012_11_24_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_01_world_quest_start_scripts.sql (renamed from sql/updates/world/2012_11_24_01_world_quest_start_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_02_world_creature_text.sql (renamed from sql/updates/world/2012_11_24_02_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_02_world_gossip_menu_option.sql (renamed from sql/updates/world/2012_11_24_02_world_gossip_menu_option.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_03_world_various_fixes.sql (renamed from sql/updates/world/2012_11_24_03_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_24_04_world_sai.sql (renamed from sql/updates/world/2012_11_24_04_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_25_00_world_various_fixes.sql (renamed from sql/updates/world/2012_11_25_00_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_25_01_world_various_fixes.sql (renamed from sql/updates/world/2012_11_25_01_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_26_02_world_conditions.sql (renamed from sql/updates/world/2012_11_26_02_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_26_03_world_misc.sql (renamed from sql/updates/world/2012_11_26_03_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_27_00_world_misc.sql (renamed from sql/updates/world/2012_11_27_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_27_01_world_achievement_criteria_data.sql (renamed from sql/updates/world/2012_11_27_01_world_achievement_criteria_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_11_30_00_world_spell_script_names.sql (renamed from sql/updates/world/2012_11_30_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_01_00_world_assembly_of_iron.sql (renamed from sql/updates/world/2012_12_01_00_world_assembly_of_iron.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_01_01_world_misc.sql (renamed from sql/updates/world/2012_12_01_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_01_02_world_creature_text.sql (renamed from sql/updates/world/2012_12_01_02_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_01_03_world_ulduar_creature_text.sql (renamed from sql/updates/world/2012_12_01_03_world_ulduar_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_01_04_world_spelldifficulty_dbc.sql (renamed from sql/updates/world/2012_12_01_04_world_spelldifficulty_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_01_05_world_creature_template.sql (renamed from sql/updates/world/2012_12_01_05_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_02_00_world_game_object.sql (renamed from sql/updates/world/2012_12_02_00_world_game_object.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_02_01_world_creature_text.sql (renamed from sql/updates/world/2012_12_02_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_02_02_world_waypoint_data.sql (renamed from sql/updates/world/2012_12_02_02_world_waypoint_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_03_00_character_character_queststatus_monthly.sql (renamed from sql/updates/characters/2012_12_03_00_character_character_queststatus_monthly.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_04_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_01_world_quest_start_scripts.sql (renamed from sql/updates/world/2012_12_04_01_world_quest_start_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_02_world_reputation_reward_rate.sql (renamed from sql/updates/world/2012_12_04_02_world_reputation_reward_rate.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_03_world_reputation_reward_rate.sql (renamed from sql/updates/world/2012_12_04_03_world_reputation_reward_rate.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_04_world_creature_text.sql (renamed from sql/updates/world/2012_12_04_04_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_05_world_spell_script_names.sql (renamed from sql/updates/world/2012_12_04_05_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_04_06_world_spell_creature_text.sql (renamed from sql/updates/world/2012_12_04_06_world_spell_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_05_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_05_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_06_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_06_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_07_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_00_world_script_texts.sql (renamed from sql/updates/world/2012_12_07_00_world_script_texts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_01_world_misc.sql (renamed from sql/updates/world/2012_12_07_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_02_world_tracker_pitcrawler.sql (renamed from sql/updates/world/2012_12_07_02_world_tracker_pitcrawler.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_03_world_tracker_trista.sql (renamed from sql/updates/world/2012_12_07_03_world_tracker_trista.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_04_world_misc.sql (renamed from sql/updates/world/2012_12_07_04_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_05_world_creature_text.sql (renamed from sql/updates/world/2012_12_07_05_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_06_world_sai.sql (renamed from sql/updates/world/2012_12_07_06_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_07_world_sai.sql (renamed from sql/updates/world/2012_12_07_07_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_08_world_misc.sql (renamed from sql/updates/world/2012_12_07_08_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_07_09_world_db_script_string.sql (renamed from sql/updates/world/2012_12_07_09_world_db_script_string.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_08_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_08_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_08_01_world_sai.sql (renamed from sql/updates/world/2012_12_08_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_09_00_world_conditions.sql (renamed from sql/updates/world/2012_12_09_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_09_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_09_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_09_01_world_misc.sql (renamed from sql/updates/world/2012_12_09_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_09_02_world_quest_template.sql (renamed from sql/updates/world/2012_12_09_02_world_quest_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_10_00_world_smart_scripts.sql (renamed from sql/updates/world/2012_12_10_00_world_smart_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_10_01_world_spell_script_names.sql (renamed from sql/updates/world/2012_12_10_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_10_02_world_spawns_waypoints.sql (renamed from sql/updates/world/2012_12_10_02_world_spawns_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_13_00_world.sql (renamed from sql/updates/world/2012_12_13_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_14_00_world_conditions.sql (renamed from sql/updates/world/2012_12_14_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_14_01_world_waypoint_data.sql (renamed from sql/updates/world/2012_12_14_01_world_waypoint_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_14_02_world_misc.sql (renamed from sql/updates/world/2012_12_14_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_14_03_world_npc_spellclick_spells.sql (renamed from sql/updates/world/2012_12_14_03_world_npc_spellclick_spells.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_14_04_world_misc.sql (renamed from sql/updates/world/2012_12_14_04_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_14_05_world_spell_script_names.sql (renamed from sql/updates/world/2012_12_14_05_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_15_00_world_waypoint_data.sql (renamed from sql/updates/world/2012_12_15_00_world_waypoint_data.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_15_01_world_sai.sql (renamed from sql/updates/world/2012_12_15_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_15_02_world_sai.sql (renamed from sql/updates/world/2012_12_15_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_15_03_world_quest_end_scripts.sql (renamed from sql/updates/world/2012_12_15_03_world_quest_end_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_16_00_world_creature_addon.sql (renamed from sql/updates/world/2012_12_16_00_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_16_01_world_npc_vendor.sql (renamed from sql/updates/world/2012_12_16_01_world_npc_vendor.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_16_02_world_creature_text.sql (renamed from sql/updates/world/2012_12_16_02_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_16_03_world_sai.sql (renamed from sql/updates/world/2012_12_16_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_17_00_world_creature_template.sql (renamed from sql/updates/world/2012_12_17_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_17_00_world_song_of_wind_and_water.sql (renamed from sql/updates/world/2012_12_17_00_world_song_of_wind_and_water.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_17_00_world_spell_linked_spell.sql (renamed from sql/updates/world/2012_12_17_00_world_spell_linked_spell.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_18_00_character_worldstates.sql (renamed from sql/updates/characters/2012_12_18_00_character_worldstates.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_18_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_18_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_18_00_world_waking_the_sleeper.sql (renamed from sql/updates/world/2012_12_18_00_world_waking_the_sleeper.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_18_01_world_creature_text.sql (renamed from sql/updates/world/2012_12_18_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_18_02_world_misc.sql (renamed from sql/updates/world/2012_12_18_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_18_02_world_sai.sql (renamed from sql/updates/world/2012_12_18_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_19_00_world_sai.sql (renamed from sql/updates/world/2012_12_19_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_19_01_world_viscidus.sql (renamed from sql/updates/world/2012_12_19_01_world_viscidus.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_19_02_world_sai.sql (renamed from sql/updates/world/2012_12_19_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_20_00_characters_create_item_loot.sql (renamed from sql/updates/characters/2012_12_20_00_characters_create_item_loot.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_20_00_world_conditions.sql (renamed from sql/updates/world/2012_12_20_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_20_01_world_conditions.sql (renamed from sql/updates/world/2012_12_20_01_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_20_02_world_misc.sql (renamed from sql/updates/world/2012_12_20_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_20_03_world_conditions.sql (renamed from sql/updates/world/2012_12_20_03_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_21_00_world_conditions.sql (renamed from sql/updates/world/2012_12_21_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_21_01_world_conditions.sql (renamed from sql/updates/world/2012_12_21_01_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_22_01_world_sai.sql (renamed from sql/updates/world/2012_12_22_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_22_02_world_the_crusaders_pinnacle.sql (renamed from sql/updates/world/2012_12_22_02_world_the_crusaders_pinnacle.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_23_00_world_creature_text.sql (renamed from sql/updates/world/2012_12_23_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_23_01_world_creature_text.sql (renamed from sql/updates/world/2012_12_23_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_23_02_world_trinity_string.sql (renamed from sql/updates/world/2012_12_23_02_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_23_03_world_misc.sql (renamed from sql/updates/world/2012_12_23_03_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_00_world_defending_wyrmrest_temple.sql (renamed from sql/updates/world/2012_12_24_00_world_defending_wyrmrest_temple.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_01_world_sai.sql (renamed from sql/updates/world/2012_12_24_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_02_world_sai.sql (renamed from sql/updates/world/2012_12_24_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_03_world_sai.sql (renamed from sql/updates/world/2012_12_24_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_04_world_creature.sql (renamed from sql/updates/world/2012_12_24_04_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_05_world_object.sql (renamed from sql/updates/world/2012_12_24_05_world_object.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_06_world_reputation.sql (renamed from sql/updates/world/2012_12_24_06_world_reputation.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_07_world_sai.sql (renamed from sql/updates/world/2012_12_24_07_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_08_world_conditions.sql (renamed from sql/updates/world/2012_12_24_08_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_24_09_world_sai.sql (renamed from sql/updates/world/2012_12_24_09_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_25_00_world_sai.sql (renamed from sql/updates/world/2012_12_25_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_25_01_world_sai.sql (renamed from sql/updates/world/2012_12_25_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_25_02_world_sai.sql (renamed from sql/updates/world/2012_12_25_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_25_03_world_sai.sql (renamed from sql/updates/world/2012_12_25_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_25_04_world_sai.sql (renamed from sql/updates/world/2012_12_25_04_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_01_world_creature_text.sql (renamed from sql/updates/world/2012_12_26_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_02_world_sai.sql (renamed from sql/updates/world/2012_12_26_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_03_world_sai.sql (renamed from sql/updates/world/2012_12_26_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_04_world_sai.sql (renamed from sql/updates/world/2012_12_26_04_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_05_world_sai.sql (renamed from sql/updates/world/2012_12_26_05_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_06_world_sai.sql (renamed from sql/updates/world/2012_12_26_06_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_07_world_game_event.sql (renamed from sql/updates/world/2012_12_26_07_world_game_event.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_08_world_sai.sql (renamed from sql/updates/world/2012_12_26_08_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_09_world_sai.sql (renamed from sql/updates/world/2012_12_26_09_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_10_world_sai.sql (renamed from sql/updates/world/2012_12_26_10_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_11_world_sai.sql (renamed from sql/updates/world/2012_12_26_11_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_12_world_quest_end_scripts.sql (renamed from sql/updates/world/2012_12_26_12_world_quest_end_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_13_world_sai.sql (renamed from sql/updates/world/2012_12_26_13_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_14_world_sai.sql (renamed from sql/updates/world/2012_12_26_14_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_15_world_sai.sql (renamed from sql/updates/world/2012_12_26_15_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_16_world_sai.sql (renamed from sql/updates/world/2012_12_26_16_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_17_world_sai.sql (renamed from sql/updates/world/2012_12_26_17_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_18_world_sai.sql (renamed from sql/updates/world/2012_12_26_18_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_19_world_sai.sql (renamed from sql/updates/world/2012_12_26_19_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_26_20_world_sai.sql (renamed from sql/updates/world/2012_12_26_20_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_27_00_world_orgrims_hammer.sql (renamed from sql/updates/world/2012_12_27_00_world_orgrims_hammer.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_27_01_world_locales_quest.sql (renamed from sql/updates/world/2012_12_27_01_world_locales_quest.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_27_02_world_locales.sql (renamed from sql/updates/world/2012_12_27_02_world_locales.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_27_03_world_sai.sql (renamed from sql/updates/world/2012_12_27_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_27_04_world_the_shadows_vault.sql (renamed from sql/updates/world/2012_12_27_04_world_the_shadows_vault.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_28_00_world_command.sql (renamed from sql/updates/world/2012_12_28_00_world_command.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_28_01_world_misc.sql (renamed from sql/updates/world/2012_12_28_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_28_02_world_sai.sql (renamed from sql/updates/world/2012_12_28_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_28_03_world_disables.sql (renamed from sql/updates/world/2012_12_28_03_world_disables.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_28_04_world_citadel_footsteps.sql (renamed from sql/updates/world/2012_12_28_04_world_citadel_footsteps.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_30_01_world_trinity_string.sql (renamed from sql/updates/world/2012_12_30_01_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_31_00_world_sai.sql (renamed from sql/updates/world/2012_12_31_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2012_12_31_01_world_sai.sql (renamed from sql/updates/world/2012_12_31_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_01_00_item_template_restore.sql (renamed from sql/updates/world/2013_01_01_00_item_template_restore.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_01_01_world_creature_text.sql (renamed from sql/updates/world/2013_01_01_01_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_00_world_misc.sql (renamed from sql/updates/world/2013_01_02_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_01_world_spell_script.sql (renamed from sql/updates/world/2013_01_02_01_world_spell_script.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_02_world_instance_template.sql (renamed from sql/updates/world/2013_01_02_02_world_instance_template.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_03_world_sai.sql (renamed from sql/updates/world/2013_01_02_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_04_world_creature.sql (renamed from sql/updates/world/2013_01_02_04_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_05_eye_of_eternity.sql (renamed from sql/updates/world/2013_01_02_05_eye_of_eternity.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_06_world_sai.sql (renamed from sql/updates/world/2013_01_02_06_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_06_world_waypoints.sql (renamed from sql/updates/world/2013_01_02_06_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_07_world_waypoints.sql (renamed from sql/updates/world/2013_01_02_07_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_08_world_sai.sql (renamed from sql/updates/world/2013_01_02_08_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_09_world_waypoints.sql (renamed from sql/updates/world/2013_01_02_09_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_10_world_sai.sql (renamed from sql/updates/world/2013_01_02_10_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_11_world_sai.sql (renamed from sql/updates/world/2013_01_02_11_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_12_world_go_script.sql (renamed from sql/updates/world/2013_01_02_12_world_go_script.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_02_12_world_waypoints.sql (renamed from sql/updates/world/2013_01_02_12_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_00_world_gameobject_scripts.sql (renamed from sql/updates/world/2013_01_03_00_world_gameobject_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_01_world_sai.sql (renamed from sql/updates/world/2013_01_03_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_02_world_sai.sql (renamed from sql/updates/world/2013_01_03_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_03_world_spelldifficulty_dbc.sql (renamed from sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_04_world_sai.sql (renamed from sql/updates/world/2013_01_03_04_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_05_world_sai.sql (renamed from sql/updates/world/2013_01_03_05_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_06_world_sai.sql (renamed from sql/updates/world/2013_01_03_06_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_07_world_sai.sql (renamed from sql/updates/world/2013_01_03_07_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_08_world_misc.sql (renamed from sql/updates/world/2013_01_03_08_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_09_world_sai.sql (renamed from sql/updates/world/2013_01_03_09_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_10_world_gameobject.sql (renamed from sql/updates/world/2013_01_03_10_world_gameobject.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_11_world_item_template.sql (renamed from sql/updates/world/2013_01_03_11_world_item_template.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_12_world_gameobject_scripts.sql (renamed from sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_12_world_misc.sql (renamed from sql/updates/world/2013_01_03_12_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_13_world_quest_template.sql (renamed from sql/updates/world/2013_01_03_13_world_quest_template.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_14_world_spell_area.sql (renamed from sql/updates/world/2013_01_03_14_world_spell_area.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_15_world_various_fixes.sql (renamed from sql/updates/world/2013_01_03_15_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_03_16_world_various_fixes.sql (renamed from sql/updates/world/2013_01_03_16_world_various_fixes.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_04_00_world_creature_text.sql (renamed from sql/updates/world/2013_01_04_00_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_04_01_world_sai.sql (renamed from sql/updates/world/2013_01_04_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_04_02_world_misc.sql (renamed from sql/updates/world/2013_01_04_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_04_02_world_novos_the_summoner.sql (renamed from sql/updates/world/2013_01_04_02_world_novos_the_summoner.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_05_00_world_waypoints.sql (renamed from sql/updates/world/2013_01_05_00_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_06_00_world_creature_addon.sql (renamed from sql/updates/world/2013_01_06_00_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_06_00_world_creature_template.sql (renamed from sql/updates/world/2013_01_06_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_06_01_world_waypoints.sql (renamed from sql/updates/world/2013_01_06_01_world_waypoints.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_06_02_world_misc.sql (renamed from sql/updates/world/2013_01_06_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_06_03_world_sai.sql (renamed from sql/updates/world/2013_01_06_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_06_04_world_misc.sql (renamed from sql/updates/world/2013_01_06_04_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_00_world_sai.sql (renamed from sql/updates/world/2013_01_07_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_01_world_creature_addon.sql (renamed from sql/updates/world/2013_01_07_01_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_02_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_02_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_03_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_03_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_04_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_04_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_05_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_05_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_06_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_06_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_07_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_07_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_08_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_08_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_09_world_buru.sql (renamed from sql/updates/world/2013_01_07_09_world_buru.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_10_world_skeram.sql (renamed from sql/updates/world/2013_01_07_10_world_skeram.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_11_world_sai.sql (renamed from sql/updates/world/2013_01_07_11_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_12_world_sai.sql (renamed from sql/updates/world/2013_01_07_12_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_13_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_13_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_14_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_14_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_15_world_creature_addon.sql (renamed from sql/updates/world/2013_01_07_15_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_16_world_creature_addon.sql (renamed from sql/updates/world/2013_01_07_16_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_17_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_17_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_07_18_world_creature_text.sql (renamed from sql/updates/world/2013_01_07_18_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_08_01_world_raise_the_barricades.sql (renamed from sql/updates/world/2013_01_08_01_world_raise_the_barricades.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_09_00_world_misc.sql (renamed from sql/updates/world/2013_01_09_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_09_01_world_lfg_dungeon_rewards.sql (renamed from sql/updates/world/2013_01_09_01_world_lfg_dungeon_rewards.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_09_02_world_sai.sql (renamed from sql/updates/world/2013_01_09_02_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_09_03_world_spell_script_names.sql (renamed from sql/updates/world/2013_01_09_03_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_10_00_world_trinity_string.sql (renamed from sql/updates/world/2013_01_10_00_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_10_01_world_sai.sql (renamed from sql/updates/world/2013_01_10_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_10_02_world_creature_addon.sql (renamed from sql/updates/world/2013_01_10_02_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_10_03_world_creature_addon.sql (renamed from sql/updates/world/2013_01_10_03_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_10_04_world_creature_addon.sql (renamed from sql/updates/world/2013_01_10_04_world_creature_addon.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_10_05_world_sai.sql (renamed from sql/updates/world/2013_01_10_05_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2013_01_11_00_world_ayamiss.sql4
-rw-r--r--sql/old/3.3.5a/2013_01_11_01_world_conditions.sql5
-rw-r--r--sql/old/3.3.5a/2013_01_11_02_world_sai.sql109
-rw-r--r--sql/old/3.3.5a/2013_01_11_03_world_sai.sql2
-rw-r--r--sql/old/3.3.5a/2013_01_11_04_world_sai.sql3
-rw-r--r--sql/old/3.3.5a/2013_01_11_05_world_creature_text.sql13
-rw-r--r--sql/old/3.3.5a/2013_01_12_00_world_smart_scripts.sql7
-rw-r--r--sql/old/3.3.5a/2013_01_12_01_world_string.sql3
-rw-r--r--sql/old/3.3.5a/2013_01_12_02_world_creature_template.sql1
-rw-r--r--sql/old/3.3.5a/2013_01_12_03_world_gameobject.sql7
-rw-r--r--sql/old/3.3.5a/2013_01_12_03_world_waypoints.sql53
-rw-r--r--sql/old/3.3.5a/2013_01_12_04_world_misc.sql28
-rw-r--r--sql/old/3.3.5a/2013_01_12_05_world_waypoint_script.sql1
-rw-r--r--sql/old/3.3.5a/2013_01_13_00_world_gameobject_template.sql1
-rw-r--r--sql/old/3.3.5a/2013_01_13_01_world_sai.sql41
-rw-r--r--sql/old/3.3.5a/2013_01_13_02_world_gluttonous_lurkers.sql36
-rw-r--r--sql/old/3.3.5a/2013_01_13_03_world_spell_script_names.sql4
-rw-r--r--sql/old/3.3.5a/2013_01_13_04_world_conditions.sql9
-rw-r--r--sql/updates/world/2013_01_14_00_world_version.sql1
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp4
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp10
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp38
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.h2
-rw-r--r--src/server/game/Battlegrounds/BattlegroundQueue.cpp8
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp8
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp21
-rw-r--r--src/server/game/Conditions/ConditionMgr.h2
-rw-r--r--src/server/game/DataStores/DBCfmt.h2
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp13
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h1
-rw-r--r--src/server/game/DungeonFinding/LFGQueue.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp15
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp31
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp18
-rw-r--r--src/server/game/Handlers/ReferAFriendHandler.cpp2
-rw-r--r--src/server/game/Miscellaneous/Language.h1
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp4
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp9
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp9
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp9
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp311
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h12
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp177
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp56
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp287
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp86
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp81
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp292
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp102
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp46
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp215
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp70
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp301
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp331
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp58
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp66
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp173
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h39
-rw-r--r--src/server/scripts/EasternKingdoms/boss_kruul.cpp17
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp260
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp30
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp10
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h11
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp10
-rw-r--r--src/server/scripts/Kalimdor/zone_feralas.cpp3
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp36
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp7
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp117
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp146
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp130
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp151
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp200
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp117
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h21
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp2
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp76
-rw-r--r--src/server/scripts/Spells/spell_holiday.cpp8
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp6
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp276
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp539
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp2
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp45
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp33
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp549
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp714
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp502
422 files changed, 4029 insertions, 3347 deletions
diff --git a/sql/updates/world/2012_09_16_00_world_version.sql b/sql/old/3.3.5a/2012_09_16_00_world_version.sql
index 74a1cf67499..74a1cf67499 100644
--- a/sql/updates/world/2012_09_16_00_world_version.sql
+++ b/sql/old/3.3.5a/2012_09_16_00_world_version.sql
diff --git a/sql/updates/world/2012_09_16_01_world_conditions.sql b/sql/old/3.3.5a/2012_09_16_01_world_conditions.sql
index 64f87262d0e..64f87262d0e 100644
--- a/sql/updates/world/2012_09_16_01_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_09_16_01_world_conditions.sql
diff --git a/sql/updates/world/2012_09_16_01_world_creature_loot_template.sql b/sql/old/3.3.5a/2012_09_16_01_world_creature_loot_template.sql
index 2d87ad3aa16..2d87ad3aa16 100644
--- a/sql/updates/world/2012_09_16_01_world_creature_loot_template.sql
+++ b/sql/old/3.3.5a/2012_09_16_01_world_creature_loot_template.sql
diff --git a/sql/updates/world/2012_09_16_01_world_creature_template_addon.sql b/sql/old/3.3.5a/2012_09_16_01_world_creature_template_addon.sql
index c23a38cd058..c23a38cd058 100644
--- a/sql/updates/world/2012_09_16_01_world_creature_template_addon.sql
+++ b/sql/old/3.3.5a/2012_09_16_01_world_creature_template_addon.sql
diff --git a/sql/updates/world/2012_09_16_02_world_fires_over_skettis.sql b/sql/old/3.3.5a/2012_09_16_02_world_fires_over_skettis.sql
index d50f45bb020..d50f45bb020 100644
--- a/sql/updates/world/2012_09_16_02_world_fires_over_skettis.sql
+++ b/sql/old/3.3.5a/2012_09_16_02_world_fires_over_skettis.sql
diff --git a/sql/updates/world/2012_09_16_03_world_spell_script_names.sql b/sql/old/3.3.5a/2012_09_16_03_world_spell_script_names.sql
index 8b7e6aa92ba..8b7e6aa92ba 100644
--- a/sql/updates/world/2012_09_16_03_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_09_16_03_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_09_17_00_world_spell_bonus_data.sql b/sql/old/3.3.5a/2012_09_17_00_world_spell_bonus_data.sql
index 0d16742393e..0d16742393e 100644
--- a/sql/updates/world/2012_09_17_00_world_spell_bonus_data.sql
+++ b/sql/old/3.3.5a/2012_09_17_00_world_spell_bonus_data.sql
diff --git a/sql/updates/world/2012_09_17_01_world_spell_bonus_data.sql b/sql/old/3.3.5a/2012_09_17_01_world_spell_bonus_data.sql
index f9283233c8e..f9283233c8e 100644
--- a/sql/updates/world/2012_09_17_01_world_spell_bonus_data.sql
+++ b/sql/old/3.3.5a/2012_09_17_01_world_spell_bonus_data.sql
diff --git a/sql/updates/world/2012_09_17_01_world_spell_script_names.sql b/sql/old/3.3.5a/2012_09_17_01_world_spell_script_names.sql
index 255c76e6b70..255c76e6b70 100644
--- a/sql/updates/world/2012_09_17_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_09_17_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_09_17_02_world_misc.sql b/sql/old/3.3.5a/2012_09_17_02_world_misc.sql
index 378833dfc52..378833dfc52 100644
--- a/sql/updates/world/2012_09_17_02_world_misc.sql
+++ b/sql/old/3.3.5a/2012_09_17_02_world_misc.sql
diff --git a/sql/updates/world/2012_09_18_00_world_creature_template.sql b/sql/old/3.3.5a/2012_09_18_00_world_creature_template.sql
index 5ead9430d60..5ead9430d60 100644
--- a/sql/updates/world/2012_09_18_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2012_09_18_00_world_creature_template.sql
diff --git a/sql/updates/world/2012_09_18_01_world_creature_template.sql b/sql/old/3.3.5a/2012_09_18_01_world_creature_template.sql
index 4e31e7f6f68..4e31e7f6f68 100644
--- a/sql/updates/world/2012_09_18_01_world_creature_template.sql
+++ b/sql/old/3.3.5a/2012_09_18_01_world_creature_template.sql
diff --git a/sql/updates/world/2012_09_19_00_world_dwarfageddon.sql b/sql/old/3.3.5a/2012_09_19_00_world_dwarfageddon.sql
index 1eda383b67d..1eda383b67d 100644
--- a/sql/updates/world/2012_09_19_00_world_dwarfageddon.sql
+++ b/sql/old/3.3.5a/2012_09_19_00_world_dwarfageddon.sql
diff --git a/sql/updates/world/2012_09_19_00_world_reference_loot_template.sql b/sql/old/3.3.5a/2012_09_19_00_world_reference_loot_template.sql
index 7db30ede52b..7db30ede52b 100644
--- a/sql/updates/world/2012_09_19_00_world_reference_loot_template.sql
+++ b/sql/old/3.3.5a/2012_09_19_00_world_reference_loot_template.sql
diff --git a/sql/updates/world/2012_09_20_00_world_creature_loot_template.sql b/sql/old/3.3.5a/2012_09_20_00_world_creature_loot_template.sql
index 8463b064bf9..8463b064bf9 100644
--- a/sql/updates/world/2012_09_20_00_world_creature_loot_template.sql
+++ b/sql/old/3.3.5a/2012_09_20_00_world_creature_loot_template.sql
diff --git a/sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql b/sql/old/3.3.5a/2012_09_22_01_world_i_was_a_lot_of_things.sql
index 95fc92daa76..95fc92daa76 100644
--- a/sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql
+++ b/sql/old/3.3.5a/2012_09_22_01_world_i_was_a_lot_of_things.sql
diff --git a/sql/updates/world/2012_09_22_03_world_game_event.sql b/sql/old/3.3.5a/2012_09_22_03_world_game_event.sql
index 5e05ba03898..5e05ba03898 100644
--- a/sql/updates/world/2012_09_22_03_world_game_event.sql
+++ b/sql/old/3.3.5a/2012_09_22_03_world_game_event.sql
diff --git a/sql/updates/world/2012_09_24_00_world_spell_script_names.sql b/sql/old/3.3.5a/2012_09_24_00_world_spell_script_names.sql
index 611325d4b11..611325d4b11 100644
--- a/sql/updates/world/2012_09_24_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_09_24_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_09_24_01_world_spell_script_names.sql b/sql/old/3.3.5a/2012_09_24_01_world_spell_script_names.sql
index e14b6833a09..e14b6833a09 100644
--- a/sql/updates/world/2012_09_24_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_09_24_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_09_24_02_world_misc.sql b/sql/old/3.3.5a/2012_09_24_02_world_misc.sql
index b4cf7fda0a5..b4cf7fda0a5 100644
--- a/sql/updates/world/2012_09_24_02_world_misc.sql
+++ b/sql/old/3.3.5a/2012_09_24_02_world_misc.sql
diff --git a/sql/updates/world/2012_09_24_03_world_misc.sql b/sql/old/3.3.5a/2012_09_24_03_world_misc.sql
index 3bcb40f79c0..3bcb40f79c0 100644
--- a/sql/updates/world/2012_09_24_03_world_misc.sql
+++ b/sql/old/3.3.5a/2012_09_24_03_world_misc.sql
diff --git a/sql/updates/world/2012_09_26_00_world_misc.sql b/sql/old/3.3.5a/2012_09_26_00_world_misc.sql
index d9ac468f4a6..d9ac468f4a6 100644
--- a/sql/updates/world/2012_09_26_00_world_misc.sql
+++ b/sql/old/3.3.5a/2012_09_26_00_world_misc.sql
diff --git a/sql/updates/world/2012_09_26_01_world_spell_bonus_data.sql b/sql/old/3.3.5a/2012_09_26_01_world_spell_bonus_data.sql
index 3aeeb7c6525..3aeeb7c6525 100644
--- a/sql/updates/world/2012_09_26_01_world_spell_bonus_data.sql
+++ b/sql/old/3.3.5a/2012_09_26_01_world_spell_bonus_data.sql
diff --git a/sql/updates/world/2012_09_27_01_world_custodian_of_time.sql b/sql/old/3.3.5a/2012_09_27_01_world_custodian_of_time.sql
index 521c55d507e..521c55d507e 100644
--- a/sql/updates/world/2012_09_27_01_world_custodian_of_time.sql
+++ b/sql/old/3.3.5a/2012_09_27_01_world_custodian_of_time.sql
diff --git a/sql/updates/world/2012_09_28_00_world_creature_model_info.sql b/sql/old/3.3.5a/2012_09_28_00_world_creature_model_info.sql
index 48134d7bbed..48134d7bbed 100644
--- a/sql/updates/world/2012_09_28_00_world_creature_model_info.sql
+++ b/sql/old/3.3.5a/2012_09_28_00_world_creature_model_info.sql
diff --git a/sql/updates/world/2012_09_29_00_world_creature_model_info.sql b/sql/old/3.3.5a/2012_09_29_00_world_creature_model_info.sql
index 0c63a0b2f73..0c63a0b2f73 100644
--- a/sql/updates/world/2012_09_29_00_world_creature_model_info.sql
+++ b/sql/old/3.3.5a/2012_09_29_00_world_creature_model_info.sql
diff --git a/sql/updates/world/2012_09_29_01_world_creature_text.sql b/sql/old/3.3.5a/2012_09_29_01_world_creature_text.sql
index 8fde66d2e6e..8fde66d2e6e 100644
--- a/sql/updates/world/2012_09_29_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_09_29_01_world_creature_text.sql
diff --git a/sql/updates/world/2012_09_30_00_world_creature_text.sql b/sql/old/3.3.5a/2012_09_30_00_world_creature_text.sql
index e0f9f210d7b..e0f9f210d7b 100644
--- a/sql/updates/world/2012_09_30_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_09_30_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_09_30_01_world_player_factionchange_titles.sql b/sql/old/3.3.5a/2012_09_30_01_world_player_factionchange_titles.sql
index 99d7fc871d8..99d7fc871d8 100644
--- a/sql/updates/world/2012_09_30_01_world_player_factionchange_titles.sql
+++ b/sql/old/3.3.5a/2012_09_30_01_world_player_factionchange_titles.sql
diff --git a/sql/updates/world/2012_09_30_02_world_creature_text.sql b/sql/old/3.3.5a/2012_09_30_02_world_creature_text.sql
index 81e77bcd682..81e77bcd682 100644
--- a/sql/updates/world/2012_09_30_02_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_09_30_02_world_creature_text.sql
diff --git a/sql/updates/world/2012_09_30_03_world_creature_text.sql b/sql/old/3.3.5a/2012_09_30_03_world_creature_text.sql
index a591f8cfb7c..a591f8cfb7c 100644
--- a/sql/updates/world/2012_09_30_03_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_09_30_03_world_creature_text.sql
diff --git a/sql/updates/world/2012_10_02_00_world_oculus.sql b/sql/old/3.3.5a/2012_10_02_00_world_oculus.sql
index 8c9ea1bcb60..8c9ea1bcb60 100644
--- a/sql/updates/world/2012_10_02_00_world_oculus.sql
+++ b/sql/old/3.3.5a/2012_10_02_00_world_oculus.sql
diff --git a/sql/updates/world/2012_10_04_00_world_spelldifficulty_dbc.sql b/sql/old/3.3.5a/2012_10_04_00_world_spelldifficulty_dbc.sql
index 6587e35bf9b..6587e35bf9b 100644
--- a/sql/updates/world/2012_10_04_00_world_spelldifficulty_dbc.sql
+++ b/sql/old/3.3.5a/2012_10_04_00_world_spelldifficulty_dbc.sql
diff --git a/sql/updates/world/2012_10_04_01_world_script_texts.sql b/sql/old/3.3.5a/2012_10_04_01_world_script_texts.sql
index 8281d16794e..8281d16794e 100644
--- a/sql/updates/world/2012_10_04_01_world_script_texts.sql
+++ b/sql/old/3.3.5a/2012_10_04_01_world_script_texts.sql
diff --git a/sql/updates/world/2012_10_05_00_world_misc.sql b/sql/old/3.3.5a/2012_10_05_00_world_misc.sql
index f715b9491ef..f715b9491ef 100644
--- a/sql/updates/world/2012_10_05_00_world_misc.sql
+++ b/sql/old/3.3.5a/2012_10_05_00_world_misc.sql
diff --git a/sql/updates/world/2012_10_05_01_world_spell_script_names.sql b/sql/old/3.3.5a/2012_10_05_01_world_spell_script_names.sql
index c7269b981ec..c7269b981ec 100644
--- a/sql/updates/world/2012_10_05_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_10_05_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_10_06_00_world_spell_difficulty.sql b/sql/old/3.3.5a/2012_10_06_00_world_spell_difficulty.sql
index 1dd1a468990..1dd1a468990 100644
--- a/sql/updates/world/2012_10_06_00_world_spell_difficulty.sql
+++ b/sql/old/3.3.5a/2012_10_06_00_world_spell_difficulty.sql
diff --git a/sql/updates/world/2012_10_06_00_world_spell_script_names.sql b/sql/old/3.3.5a/2012_10_06_00_world_spell_script_names.sql
index 4fa3b922d62..4fa3b922d62 100644
--- a/sql/updates/world/2012_10_06_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_10_06_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_10_06_01_world_spell_dbc.sql b/sql/old/3.3.5a/2012_10_06_01_world_spell_dbc.sql
index 071d83582ac..071d83582ac 100644
--- a/sql/updates/world/2012_10_06_01_world_spell_dbc.sql
+++ b/sql/old/3.3.5a/2012_10_06_01_world_spell_dbc.sql
diff --git a/sql/updates/world/2012_10_06_02_world_misc_templates.sql b/sql/old/3.3.5a/2012_10_06_02_world_misc_templates.sql
index 5ec006c310d..5ec006c310d 100644
--- a/sql/updates/world/2012_10_06_02_world_misc_templates.sql
+++ b/sql/old/3.3.5a/2012_10_06_02_world_misc_templates.sql
diff --git a/sql/updates/world/2012_10_06_03_world_creature_text.sql b/sql/old/3.3.5a/2012_10_06_03_world_creature_text.sql
index 6716b12cea9..6716b12cea9 100644
--- a/sql/updates/world/2012_10_06_03_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_10_06_03_world_creature_text.sql
diff --git a/sql/updates/world/2012_10_06_04_world_misc_spawns.sql b/sql/old/3.3.5a/2012_10_06_04_world_misc_spawns.sql
index e53302d2c2f..e53302d2c2f 100644
--- a/sql/updates/world/2012_10_06_04_world_misc_spawns.sql
+++ b/sql/old/3.3.5a/2012_10_06_04_world_misc_spawns.sql
diff --git a/sql/updates/world/2012_10_06_05_world_spell_script_names.sql b/sql/old/3.3.5a/2012_10_06_05_world_spell_script_names.sql
index 354a359e45b..354a359e45b 100644
--- a/sql/updates/world/2012_10_06_05_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_10_06_05_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_10_07_00_world_creature_loot_template.sql b/sql/old/3.3.5a/2012_10_07_00_world_creature_loot_template.sql
index 2829725c76c..2829725c76c 100644
--- a/sql/updates/world/2012_10_07_00_world_creature_loot_template.sql
+++ b/sql/old/3.3.5a/2012_10_07_00_world_creature_loot_template.sql
diff --git a/sql/updates/world/2012_10_07_01_world_spell_proc_event.sql b/sql/old/3.3.5a/2012_10_07_01_world_spell_proc_event.sql
index 810cd90290c..810cd90290c 100644
--- a/sql/updates/world/2012_10_07_01_world_spell_proc_event.sql
+++ b/sql/old/3.3.5a/2012_10_07_01_world_spell_proc_event.sql
diff --git a/sql/updates/characters/2012_10_09_00_character_glyphs.sql b/sql/old/3.3.5a/2012_10_09_00_character_glyphs.sql
index b90fa7d7682..b90fa7d7682 100644
--- a/sql/updates/characters/2012_10_09_00_character_glyphs.sql
+++ b/sql/old/3.3.5a/2012_10_09_00_character_glyphs.sql
diff --git a/sql/updates/world/2012_10_09_00_world_spell_groups.sql b/sql/old/3.3.5a/2012_10_09_00_world_spell_groups.sql
index 71f58c6322e..71f58c6322e 100644
--- a/sql/updates/world/2012_10_09_00_world_spell_groups.sql
+++ b/sql/old/3.3.5a/2012_10_09_00_world_spell_groups.sql
diff --git a/sql/updates/world/2012_10_09_01_world_spell_groups.sql b/sql/old/3.3.5a/2012_10_09_01_world_spell_groups.sql
index 75c57d0f77f..75c57d0f77f 100644
--- a/sql/updates/world/2012_10_09_01_world_spell_groups.sql
+++ b/sql/old/3.3.5a/2012_10_09_01_world_spell_groups.sql
diff --git a/sql/updates/world/2012_10_09_02_world_spell_groups.sql b/sql/old/3.3.5a/2012_10_09_02_world_spell_groups.sql
index 8e4864bc039..8e4864bc039 100644
--- a/sql/updates/world/2012_10_09_02_world_spell_groups.sql
+++ b/sql/old/3.3.5a/2012_10_09_02_world_spell_groups.sql
diff --git a/sql/updates/world/2012_10_10_00_world_battleground_template.sql b/sql/old/3.3.5a/2012_10_10_00_world_battleground_template.sql
index 2dcafc51161..2dcafc51161 100644
--- a/sql/updates/world/2012_10_10_00_world_battleground_template.sql
+++ b/sql/old/3.3.5a/2012_10_10_00_world_battleground_template.sql
diff --git a/sql/updates/world/2012_10_11_00_world_gameobject.sql b/sql/old/3.3.5a/2012_10_11_00_world_gameobject.sql
index e58d60590cb..e58d60590cb 100644
--- a/sql/updates/world/2012_10_11_00_world_gameobject.sql
+++ b/sql/old/3.3.5a/2012_10_11_00_world_gameobject.sql
diff --git a/sql/updates/world/2012_10_13_00_world_creature_template.sql b/sql/old/3.3.5a/2012_10_13_00_world_creature_template.sql
index 7dc7a463f3f..7dc7a463f3f 100644
--- a/sql/updates/world/2012_10_13_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2012_10_13_00_world_creature_template.sql
diff --git a/sql/updates/world/2012_10_14_00_world_creature.sql b/sql/old/3.3.5a/2012_10_14_00_world_creature.sql
index dd650f37aef..dd650f37aef 100644
--- a/sql/updates/world/2012_10_14_00_world_creature.sql
+++ b/sql/old/3.3.5a/2012_10_14_00_world_creature.sql
diff --git a/sql/updates/world/2012_10_16_00_world_spell_area.sql b/sql/old/3.3.5a/2012_10_16_00_world_spell_area.sql
index 3dbc29d077f..3dbc29d077f 100644
--- a/sql/updates/world/2012_10_16_00_world_spell_area.sql
+++ b/sql/old/3.3.5a/2012_10_16_00_world_spell_area.sql
diff --git a/sql/updates/characters/2012_10_17_00_character_gm_tickets.sql b/sql/old/3.3.5a/2012_10_17_00_character_gm_tickets.sql
index affb23f836c..affb23f836c 100644
--- a/sql/updates/characters/2012_10_17_00_character_gm_tickets.sql
+++ b/sql/old/3.3.5a/2012_10_17_00_character_gm_tickets.sql
diff --git a/sql/updates/world/2012_10_20_00_world_transports.sql b/sql/old/3.3.5a/2012_10_20_00_world_transports.sql
index 8cc2bae4b47..8cc2bae4b47 100644
--- a/sql/updates/world/2012_10_20_00_world_transports.sql
+++ b/sql/old/3.3.5a/2012_10_20_00_world_transports.sql
diff --git a/sql/updates/world/2012_10_20_01_world_spell_script_names.sql b/sql/old/3.3.5a/2012_10_20_01_world_spell_script_names.sql
index 814f1b40e65..814f1b40e65 100644
--- a/sql/updates/world/2012_10_20_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_10_20_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_10_20_02_world_creature_text.sql b/sql/old/3.3.5a/2012_10_20_02_world_creature_text.sql
index bb153c6b2f6..bb153c6b2f6 100644
--- a/sql/updates/world/2012_10_20_02_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_10_20_02_world_creature_text.sql
diff --git a/sql/updates/world/2012_10_21_00_world_conditions.sql b/sql/old/3.3.5a/2012_10_21_00_world_conditions.sql
index 62161a932f9..62161a932f9 100644
--- a/sql/updates/world/2012_10_21_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_10_21_00_world_conditions.sql
diff --git a/sql/updates/world/2012_10_21_01_world_misc.sql b/sql/old/3.3.5a/2012_10_21_01_world_misc.sql
index fe74f8a7a80..fe74f8a7a80 100644
--- a/sql/updates/world/2012_10_21_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_10_21_01_world_misc.sql
diff --git a/sql/updates/world/2012_10_23_00_world_trinity_string.sql b/sql/old/3.3.5a/2012_10_23_00_world_trinity_string.sql
index 60318667fbc..60318667fbc 100644
--- a/sql/updates/world/2012_10_23_00_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2012_10_23_00_world_trinity_string.sql
diff --git a/sql/updates/world/2012_10_23_01_world_command.sql b/sql/old/3.3.5a/2012_10_23_01_world_command.sql
index b46882c5949..b46882c5949 100644
--- a/sql/updates/world/2012_10_23_01_world_command.sql
+++ b/sql/old/3.3.5a/2012_10_23_01_world_command.sql
diff --git a/sql/updates/world/2012_10_25_00_world_childrens_week.sql b/sql/old/3.3.5a/2012_10_25_00_world_childrens_week.sql
index f10cf92b409..f10cf92b409 100644
--- a/sql/updates/world/2012_10_25_00_world_childrens_week.sql
+++ b/sql/old/3.3.5a/2012_10_25_00_world_childrens_week.sql
diff --git a/sql/updates/world/2012_10_26_00_world_sai.sql b/sql/old/3.3.5a/2012_10_26_00_world_sai.sql
index 8e4c2fa0922..8e4c2fa0922 100644
--- a/sql/updates/world/2012_10_26_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_10_26_00_world_sai.sql
diff --git a/sql/updates/world/2012_10_27_00_world_creature.sql b/sql/old/3.3.5a/2012_10_27_00_world_creature.sql
index c00c450aeca..c00c450aeca 100644
--- a/sql/updates/world/2012_10_27_00_world_creature.sql
+++ b/sql/old/3.3.5a/2012_10_27_00_world_creature.sql
diff --git a/sql/updates/world/2012_10_27_01_world_creature_loot_template.sql b/sql/old/3.3.5a/2012_10_27_01_world_creature_loot_template.sql
index 3367dbf0fa8..3367dbf0fa8 100644
--- a/sql/updates/world/2012_10_27_01_world_creature_loot_template.sql
+++ b/sql/old/3.3.5a/2012_10_27_01_world_creature_loot_template.sql
diff --git a/sql/updates/world/2012_10_29_00_world_conditions.sql b/sql/old/3.3.5a/2012_10_29_00_world_conditions.sql
index d1fac5361fb..d1fac5361fb 100644
--- a/sql/updates/world/2012_10_29_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_10_29_00_world_conditions.sql
diff --git a/sql/updates/characters/2012_11_02_00_character_misc.sql b/sql/old/3.3.5a/2012_11_02_00_character_misc.sql
index 9cbbd423bb8..9cbbd423bb8 100644
--- a/sql/updates/characters/2012_11_02_00_character_misc.sql
+++ b/sql/old/3.3.5a/2012_11_02_00_character_misc.sql
diff --git a/sql/updates/world/2012_11_03_00_world_creature_loot_template.sql b/sql/old/3.3.5a/2012_11_03_00_world_creature_loot_template.sql
index 0e5c39b796d..0e5c39b796d 100644
--- a/sql/updates/world/2012_11_03_00_world_creature_loot_template.sql
+++ b/sql/old/3.3.5a/2012_11_03_00_world_creature_loot_template.sql
diff --git a/sql/updates/world/2012_11_07_00_world_misc.sql b/sql/old/3.3.5a/2012_11_07_00_world_misc.sql
index db7c8f66fb1..db7c8f66fb1 100644
--- a/sql/updates/world/2012_11_07_00_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_07_00_world_misc.sql
diff --git a/sql/updates/world/2012_11_11_00_world_sai.sql b/sql/old/3.3.5a/2012_11_11_00_world_sai.sql
index b5eedd86898..b5eedd86898 100644
--- a/sql/updates/world/2012_11_11_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_11_11_00_world_sai.sql
diff --git a/sql/updates/world/2012_11_11_01_world_quest_template.sql b/sql/old/3.3.5a/2012_11_11_01_world_quest_template.sql
index 9abf2ea3cd1..9abf2ea3cd1 100644
--- a/sql/updates/world/2012_11_11_01_world_quest_template.sql
+++ b/sql/old/3.3.5a/2012_11_11_01_world_quest_template.sql
diff --git a/sql/updates/world/2012_11_11_02_world_gossip_menu.sql b/sql/old/3.3.5a/2012_11_11_02_world_gossip_menu.sql
index 59d1a10b337..59d1a10b337 100644
--- a/sql/updates/world/2012_11_11_02_world_gossip_menu.sql
+++ b/sql/old/3.3.5a/2012_11_11_02_world_gossip_menu.sql
diff --git a/sql/updates/world/2012_11_11_03_world_gossip_menu.sql b/sql/old/3.3.5a/2012_11_11_03_world_gossip_menu.sql
index 4f250597388..4f250597388 100644
--- a/sql/updates/world/2012_11_11_03_world_gossip_menu.sql
+++ b/sql/old/3.3.5a/2012_11_11_03_world_gossip_menu.sql
diff --git a/sql/updates/world/2012_11_12_00_world_quest_template.sql b/sql/old/3.3.5a/2012_11_12_00_world_quest_template.sql
index ee2206146b3..ee2206146b3 100644
--- a/sql/updates/world/2012_11_12_00_world_quest_template.sql
+++ b/sql/old/3.3.5a/2012_11_12_00_world_quest_template.sql
diff --git a/sql/updates/world/2012_11_12_01_world_misc.sql b/sql/old/3.3.5a/2012_11_12_01_world_misc.sql
index 7a5e81c4b1a..7a5e81c4b1a 100644
--- a/sql/updates/world/2012_11_12_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_12_01_world_misc.sql
diff --git a/sql/updates/world/2012_11_12_02_world_quest_template.sql b/sql/old/3.3.5a/2012_11_12_02_world_quest_template.sql
index 8f988bfa4ab..8f988bfa4ab 100644
--- a/sql/updates/world/2012_11_12_02_world_quest_template.sql
+++ b/sql/old/3.3.5a/2012_11_12_02_world_quest_template.sql
diff --git a/sql/updates/world/2012_11_12_03_world_misc.sql b/sql/old/3.3.5a/2012_11_12_03_world_misc.sql
index 20c91974bbb..20c91974bbb 100644
--- a/sql/updates/world/2012_11_12_03_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_12_03_world_misc.sql
diff --git a/sql/updates/world/2012_11_13_00_world_waypoints.sql b/sql/old/3.3.5a/2012_11_13_00_world_waypoints.sql
index 64e16cb2d0e..64e16cb2d0e 100644
--- a/sql/updates/world/2012_11_13_00_world_waypoints.sql
+++ b/sql/old/3.3.5a/2012_11_13_00_world_waypoints.sql
diff --git a/sql/updates/world/2012_11_13_01_world_misc.sql b/sql/old/3.3.5a/2012_11_13_01_world_misc.sql
index 97e3cd8b499..97e3cd8b499 100644
--- a/sql/updates/world/2012_11_13_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_13_01_world_misc.sql
diff --git a/sql/updates/world/2012_11_13_02_world_creature.sql b/sql/old/3.3.5a/2012_11_13_02_world_creature.sql
index 19f278ca5c6..19f278ca5c6 100644
--- a/sql/updates/world/2012_11_13_02_world_creature.sql
+++ b/sql/old/3.3.5a/2012_11_13_02_world_creature.sql
diff --git a/sql/updates/world/2012_11_13_03_world_gameevent.sql b/sql/old/3.3.5a/2012_11_13_03_world_gameevent.sql
index fbb24b863f2..fbb24b863f2 100644
--- a/sql/updates/world/2012_11_13_03_world_gameevent.sql
+++ b/sql/old/3.3.5a/2012_11_13_03_world_gameevent.sql
diff --git a/sql/updates/world/2012_11_13_04_world_gameeventquest.sql b/sql/old/3.3.5a/2012_11_13_04_world_gameeventquest.sql
index cce654859e0..cce654859e0 100644
--- a/sql/updates/world/2012_11_13_04_world_gameeventquest.sql
+++ b/sql/old/3.3.5a/2012_11_13_04_world_gameeventquest.sql
diff --git a/sql/updates/world/2012_11_13_05_world_player_factionchange_items.sql b/sql/old/3.3.5a/2012_11_13_05_world_player_factionchange_items.sql
index 17b9616624a..17b9616624a 100644
--- a/sql/updates/world/2012_11_13_05_world_player_factionchange_items.sql
+++ b/sql/old/3.3.5a/2012_11_13_05_world_player_factionchange_items.sql
diff --git a/sql/updates/world/2012_11_13_06_world_trinity_string.sql b/sql/old/3.3.5a/2012_11_13_06_world_trinity_string.sql
index 2834a8f900b..2834a8f900b 100644
--- a/sql/updates/world/2012_11_13_06_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2012_11_13_06_world_trinity_string.sql
diff --git a/sql/updates/world/2012_11_14_00_world_sai.sql b/sql/old/3.3.5a/2012_11_14_00_world_sai.sql
index 98467fe4f3a..98467fe4f3a 100644
--- a/sql/updates/world/2012_11_14_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_11_14_00_world_sai.sql
diff --git a/sql/updates/world/2012_11_14_00_world_various_fixes.sql b/sql/old/3.3.5a/2012_11_14_00_world_various_fixes.sql
index 01655b674b1..01655b674b1 100644
--- a/sql/updates/world/2012_11_14_00_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2012_11_14_00_world_various_fixes.sql
diff --git a/sql/updates/world/2012_11_14_02_world_battleground_template.sql b/sql/old/3.3.5a/2012_11_14_02_world_battleground_template.sql
index b69216ea380..b69216ea380 100644
--- a/sql/updates/world/2012_11_14_02_world_battleground_template.sql
+++ b/sql/old/3.3.5a/2012_11_14_02_world_battleground_template.sql
diff --git a/sql/updates/world/2012_11_16_00_world_utgarde.sql b/sql/old/3.3.5a/2012_11_16_00_world_utgarde.sql
index 1948796a77b..1948796a77b 100644
--- a/sql/updates/world/2012_11_16_00_world_utgarde.sql
+++ b/sql/old/3.3.5a/2012_11_16_00_world_utgarde.sql
diff --git a/sql/updates/world/2012_11_16_01_world_utgarde.sql b/sql/old/3.3.5a/2012_11_16_01_world_utgarde.sql
index 30a64b02e3a..30a64b02e3a 100644
--- a/sql/updates/world/2012_11_16_01_world_utgarde.sql
+++ b/sql/old/3.3.5a/2012_11_16_01_world_utgarde.sql
diff --git a/sql/updates/world/2012_11_16_02_world_creature_ai_summons.sql b/sql/old/3.3.5a/2012_11_16_02_world_creature_ai_summons.sql
index 7d2caf76e33..7d2caf76e33 100644
--- a/sql/updates/world/2012_11_16_02_world_creature_ai_summons.sql
+++ b/sql/old/3.3.5a/2012_11_16_02_world_creature_ai_summons.sql
diff --git a/sql/updates/world/2012_11_17_00_world_various_fixes.sql b/sql/old/3.3.5a/2012_11_17_00_world_various_fixes.sql
index 981d378217f..981d378217f 100644
--- a/sql/updates/world/2012_11_17_00_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2012_11_17_00_world_various_fixes.sql
diff --git a/sql/updates/characters/2012_11_18_00_character_calendar.sql b/sql/old/3.3.5a/2012_11_18_00_character_calendar.sql
index a3e7c352788..a3e7c352788 100644
--- a/sql/updates/characters/2012_11_18_00_character_calendar.sql
+++ b/sql/old/3.3.5a/2012_11_18_00_character_calendar.sql
diff --git a/sql/updates/world/2012_11_18_00_world_ormorok.sql b/sql/old/3.3.5a/2012_11_18_00_world_ormorok.sql
index 0ec8d13fd64..0ec8d13fd64 100644
--- a/sql/updates/world/2012_11_18_00_world_ormorok.sql
+++ b/sql/old/3.3.5a/2012_11_18_00_world_ormorok.sql
diff --git a/sql/updates/world/2012_11_18_01_world_creature_text.sql b/sql/old/3.3.5a/2012_11_18_01_world_creature_text.sql
index 5d8da97f1f0..5d8da97f1f0 100644
--- a/sql/updates/world/2012_11_18_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_11_18_01_world_creature_text.sql
diff --git a/sql/updates/world/2012_11_18_01_world_gameobject.sql b/sql/old/3.3.5a/2012_11_18_01_world_gameobject.sql
index d82f9a07e7e..d82f9a07e7e 100644
--- a/sql/updates/world/2012_11_18_01_world_gameobject.sql
+++ b/sql/old/3.3.5a/2012_11_18_01_world_gameobject.sql
diff --git a/sql/updates/world/2012_11_18_02_world_toc.sql b/sql/old/3.3.5a/2012_11_18_02_world_toc.sql
index 9262aceed7a..9262aceed7a 100644
--- a/sql/updates/world/2012_11_18_02_world_toc.sql
+++ b/sql/old/3.3.5a/2012_11_18_02_world_toc.sql
diff --git a/sql/updates/world/2012_11_19_00_world_various_fixes.sql b/sql/old/3.3.5a/2012_11_19_00_world_various_fixes.sql
index ca78611fc0b..ca78611fc0b 100644
--- a/sql/updates/world/2012_11_19_00_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2012_11_19_00_world_various_fixes.sql
diff --git a/sql/updates/world/2012_11_19_01_world_pilgrims_bounty.sql b/sql/old/3.3.5a/2012_11_19_01_world_pilgrims_bounty.sql
index 56cda092be6..56cda092be6 100644
--- a/sql/updates/world/2012_11_19_01_world_pilgrims_bounty.sql
+++ b/sql/old/3.3.5a/2012_11_19_01_world_pilgrims_bounty.sql
diff --git a/sql/updates/world/2012_11_19_02_world_misc.sql b/sql/old/3.3.5a/2012_11_19_02_world_misc.sql
index 1f792b8da41..1f792b8da41 100644
--- a/sql/updates/world/2012_11_19_02_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_19_02_world_misc.sql
diff --git a/sql/updates/world/2012_11_19_03_world_ysera.sql b/sql/old/3.3.5a/2012_11_19_03_world_ysera.sql
index 24a729f96dd..24a729f96dd 100644
--- a/sql/updates/world/2012_11_19_03_world_ysera.sql
+++ b/sql/old/3.3.5a/2012_11_19_03_world_ysera.sql
diff --git a/sql/updates/world/2012_11_20_00_world_creature_text.sql b/sql/old/3.3.5a/2012_11_20_00_world_creature_text.sql
index 5b89db507d8..5b89db507d8 100644
--- a/sql/updates/world/2012_11_20_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_11_20_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_11_21_00_world_sai.sql b/sql/old/3.3.5a/2012_11_21_00_world_sai.sql
index 9cdd314bb8f..9cdd314bb8f 100644
--- a/sql/updates/world/2012_11_21_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_11_21_00_world_sai.sql
diff --git a/sql/updates/world/2012_11_24_00_world_conditions.sql b/sql/old/3.3.5a/2012_11_24_00_world_conditions.sql
index 1a5e5963c8e..1a5e5963c8e 100644
--- a/sql/updates/world/2012_11_24_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_11_24_00_world_conditions.sql
diff --git a/sql/updates/world/2012_11_24_00_world_creature_text.sql b/sql/old/3.3.5a/2012_11_24_00_world_creature_text.sql
index 60e0f9c3aa1..60e0f9c3aa1 100644
--- a/sql/updates/world/2012_11_24_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_11_24_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_11_24_01_world_quest_start_scripts.sql b/sql/old/3.3.5a/2012_11_24_01_world_quest_start_scripts.sql
index 0f0506206a2..0f0506206a2 100644
--- a/sql/updates/world/2012_11_24_01_world_quest_start_scripts.sql
+++ b/sql/old/3.3.5a/2012_11_24_01_world_quest_start_scripts.sql
diff --git a/sql/updates/world/2012_11_24_02_world_creature_text.sql b/sql/old/3.3.5a/2012_11_24_02_world_creature_text.sql
index 8797039d967..8797039d967 100644
--- a/sql/updates/world/2012_11_24_02_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_11_24_02_world_creature_text.sql
diff --git a/sql/updates/world/2012_11_24_02_world_gossip_menu_option.sql b/sql/old/3.3.5a/2012_11_24_02_world_gossip_menu_option.sql
index e6f9ab551d3..e6f9ab551d3 100644
--- a/sql/updates/world/2012_11_24_02_world_gossip_menu_option.sql
+++ b/sql/old/3.3.5a/2012_11_24_02_world_gossip_menu_option.sql
diff --git a/sql/updates/world/2012_11_24_03_world_various_fixes.sql b/sql/old/3.3.5a/2012_11_24_03_world_various_fixes.sql
index dfa2d277564..dfa2d277564 100644
--- a/sql/updates/world/2012_11_24_03_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2012_11_24_03_world_various_fixes.sql
diff --git a/sql/updates/world/2012_11_24_04_world_sai.sql b/sql/old/3.3.5a/2012_11_24_04_world_sai.sql
index 76cf4c18963..76cf4c18963 100644
--- a/sql/updates/world/2012_11_24_04_world_sai.sql
+++ b/sql/old/3.3.5a/2012_11_24_04_world_sai.sql
diff --git a/sql/updates/world/2012_11_25_00_world_various_fixes.sql b/sql/old/3.3.5a/2012_11_25_00_world_various_fixes.sql
index 3aabc755dde..3aabc755dde 100644
--- a/sql/updates/world/2012_11_25_00_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2012_11_25_00_world_various_fixes.sql
diff --git a/sql/updates/world/2012_11_25_01_world_various_fixes.sql b/sql/old/3.3.5a/2012_11_25_01_world_various_fixes.sql
index 6114451174a..6114451174a 100644
--- a/sql/updates/world/2012_11_25_01_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2012_11_25_01_world_various_fixes.sql
diff --git a/sql/updates/world/2012_11_26_02_world_conditions.sql b/sql/old/3.3.5a/2012_11_26_02_world_conditions.sql
index 861e999236d..861e999236d 100644
--- a/sql/updates/world/2012_11_26_02_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_11_26_02_world_conditions.sql
diff --git a/sql/updates/world/2012_11_26_03_world_misc.sql b/sql/old/3.3.5a/2012_11_26_03_world_misc.sql
index 5a6140e6bf3..5a6140e6bf3 100644
--- a/sql/updates/world/2012_11_26_03_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_26_03_world_misc.sql
diff --git a/sql/updates/world/2012_11_27_00_world_misc.sql b/sql/old/3.3.5a/2012_11_27_00_world_misc.sql
index 8c815a856fd..8c815a856fd 100644
--- a/sql/updates/world/2012_11_27_00_world_misc.sql
+++ b/sql/old/3.3.5a/2012_11_27_00_world_misc.sql
diff --git a/sql/updates/world/2012_11_27_01_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2012_11_27_01_world_achievement_criteria_data.sql
index 65cfced17f3..65cfced17f3 100644
--- a/sql/updates/world/2012_11_27_01_world_achievement_criteria_data.sql
+++ b/sql/old/3.3.5a/2012_11_27_01_world_achievement_criteria_data.sql
diff --git a/sql/updates/world/2012_11_30_00_world_spell_script_names.sql b/sql/old/3.3.5a/2012_11_30_00_world_spell_script_names.sql
index cedee2fe51d..cedee2fe51d 100644
--- a/sql/updates/world/2012_11_30_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_11_30_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_12_01_00_world_assembly_of_iron.sql b/sql/old/3.3.5a/2012_12_01_00_world_assembly_of_iron.sql
index 090780d2bd4..090780d2bd4 100644
--- a/sql/updates/world/2012_12_01_00_world_assembly_of_iron.sql
+++ b/sql/old/3.3.5a/2012_12_01_00_world_assembly_of_iron.sql
diff --git a/sql/updates/world/2012_12_01_01_world_misc.sql b/sql/old/3.3.5a/2012_12_01_01_world_misc.sql
index 7523484d179..7523484d179 100644
--- a/sql/updates/world/2012_12_01_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_01_01_world_misc.sql
diff --git a/sql/updates/world/2012_12_01_02_world_creature_text.sql b/sql/old/3.3.5a/2012_12_01_02_world_creature_text.sql
index 6d4b50b9e88..6d4b50b9e88 100644
--- a/sql/updates/world/2012_12_01_02_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_01_02_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_01_03_world_ulduar_creature_text.sql b/sql/old/3.3.5a/2012_12_01_03_world_ulduar_creature_text.sql
index 82d93d7b7ae..82d93d7b7ae 100644
--- a/sql/updates/world/2012_12_01_03_world_ulduar_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_01_03_world_ulduar_creature_text.sql
diff --git a/sql/updates/world/2012_12_01_04_world_spelldifficulty_dbc.sql b/sql/old/3.3.5a/2012_12_01_04_world_spelldifficulty_dbc.sql
index fe5df812c71..fe5df812c71 100644
--- a/sql/updates/world/2012_12_01_04_world_spelldifficulty_dbc.sql
+++ b/sql/old/3.3.5a/2012_12_01_04_world_spelldifficulty_dbc.sql
diff --git a/sql/updates/world/2012_12_01_05_world_creature_template.sql b/sql/old/3.3.5a/2012_12_01_05_world_creature_template.sql
index aa2c6ebb898..aa2c6ebb898 100644
--- a/sql/updates/world/2012_12_01_05_world_creature_template.sql
+++ b/sql/old/3.3.5a/2012_12_01_05_world_creature_template.sql
diff --git a/sql/updates/world/2012_12_02_00_world_game_object.sql b/sql/old/3.3.5a/2012_12_02_00_world_game_object.sql
index 3205159a703..3205159a703 100644
--- a/sql/updates/world/2012_12_02_00_world_game_object.sql
+++ b/sql/old/3.3.5a/2012_12_02_00_world_game_object.sql
diff --git a/sql/updates/world/2012_12_02_01_world_creature_text.sql b/sql/old/3.3.5a/2012_12_02_01_world_creature_text.sql
index bd98fc8527c..bd98fc8527c 100644
--- a/sql/updates/world/2012_12_02_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_02_01_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_02_02_world_waypoint_data.sql b/sql/old/3.3.5a/2012_12_02_02_world_waypoint_data.sql
index 6413ad00b62..6413ad00b62 100644
--- a/sql/updates/world/2012_12_02_02_world_waypoint_data.sql
+++ b/sql/old/3.3.5a/2012_12_02_02_world_waypoint_data.sql
diff --git a/sql/updates/characters/2012_12_03_00_character_character_queststatus_monthly.sql b/sql/old/3.3.5a/2012_12_03_00_character_character_queststatus_monthly.sql
index 256bb1f7ad6..256bb1f7ad6 100644
--- a/sql/updates/characters/2012_12_03_00_character_character_queststatus_monthly.sql
+++ b/sql/old/3.3.5a/2012_12_03_00_character_character_queststatus_monthly.sql
diff --git a/sql/updates/world/2012_12_04_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_04_00_world_creature_text.sql
index 654ed11de4f..654ed11de4f 100644
--- a/sql/updates/world/2012_12_04_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_04_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_04_01_world_quest_start_scripts.sql b/sql/old/3.3.5a/2012_12_04_01_world_quest_start_scripts.sql
index f2ac40c7880..f2ac40c7880 100644
--- a/sql/updates/world/2012_12_04_01_world_quest_start_scripts.sql
+++ b/sql/old/3.3.5a/2012_12_04_01_world_quest_start_scripts.sql
diff --git a/sql/updates/world/2012_12_04_02_world_reputation_reward_rate.sql b/sql/old/3.3.5a/2012_12_04_02_world_reputation_reward_rate.sql
index a6b58583532..a6b58583532 100644
--- a/sql/updates/world/2012_12_04_02_world_reputation_reward_rate.sql
+++ b/sql/old/3.3.5a/2012_12_04_02_world_reputation_reward_rate.sql
diff --git a/sql/updates/world/2012_12_04_03_world_reputation_reward_rate.sql b/sql/old/3.3.5a/2012_12_04_03_world_reputation_reward_rate.sql
index 9f8341ea464..9f8341ea464 100644
--- a/sql/updates/world/2012_12_04_03_world_reputation_reward_rate.sql
+++ b/sql/old/3.3.5a/2012_12_04_03_world_reputation_reward_rate.sql
diff --git a/sql/updates/world/2012_12_04_04_world_creature_text.sql b/sql/old/3.3.5a/2012_12_04_04_world_creature_text.sql
index 1cf52a1417f..1cf52a1417f 100644
--- a/sql/updates/world/2012_12_04_04_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_04_04_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_04_05_world_spell_script_names.sql b/sql/old/3.3.5a/2012_12_04_05_world_spell_script_names.sql
index f325ac731d4..f325ac731d4 100644
--- a/sql/updates/world/2012_12_04_05_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_12_04_05_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_12_04_06_world_spell_creature_text.sql b/sql/old/3.3.5a/2012_12_04_06_world_spell_creature_text.sql
index 04f10fa494f..04f10fa494f 100644
--- a/sql/updates/world/2012_12_04_06_world_spell_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_04_06_world_spell_creature_text.sql
diff --git a/sql/updates/world/2012_12_05_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_05_00_world_creature_text.sql
index b3b382e46e2..b3b382e46e2 100644
--- a/sql/updates/world/2012_12_05_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_05_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_06_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_06_00_world_creature_text.sql
index c0fec8e041e..c0fec8e041e 100644
--- a/sql/updates/world/2012_12_06_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_06_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_07_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_07_00_world_creature_text.sql
index 6763834d668..6763834d668 100644
--- a/sql/updates/world/2012_12_07_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_07_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_07_00_world_script_texts.sql b/sql/old/3.3.5a/2012_12_07_00_world_script_texts.sql
index b1362aac796..b1362aac796 100644
--- a/sql/updates/world/2012_12_07_00_world_script_texts.sql
+++ b/sql/old/3.3.5a/2012_12_07_00_world_script_texts.sql
diff --git a/sql/updates/world/2012_12_07_01_world_misc.sql b/sql/old/3.3.5a/2012_12_07_01_world_misc.sql
index aaee366bfce..aaee366bfce 100644
--- a/sql/updates/world/2012_12_07_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_07_01_world_misc.sql
diff --git a/sql/updates/world/2012_12_07_02_world_tracker_pitcrawler.sql b/sql/old/3.3.5a/2012_12_07_02_world_tracker_pitcrawler.sql
index 345a61cb7f5..345a61cb7f5 100644
--- a/sql/updates/world/2012_12_07_02_world_tracker_pitcrawler.sql
+++ b/sql/old/3.3.5a/2012_12_07_02_world_tracker_pitcrawler.sql
diff --git a/sql/updates/world/2012_12_07_03_world_tracker_trista.sql b/sql/old/3.3.5a/2012_12_07_03_world_tracker_trista.sql
index b717f4e53e8..b717f4e53e8 100644
--- a/sql/updates/world/2012_12_07_03_world_tracker_trista.sql
+++ b/sql/old/3.3.5a/2012_12_07_03_world_tracker_trista.sql
diff --git a/sql/updates/world/2012_12_07_04_world_misc.sql b/sql/old/3.3.5a/2012_12_07_04_world_misc.sql
index fb4c466d91c..fb4c466d91c 100644
--- a/sql/updates/world/2012_12_07_04_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_07_04_world_misc.sql
diff --git a/sql/updates/world/2012_12_07_05_world_creature_text.sql b/sql/old/3.3.5a/2012_12_07_05_world_creature_text.sql
index 8e3e2cd737f..8e3e2cd737f 100644
--- a/sql/updates/world/2012_12_07_05_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_07_05_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_07_06_world_sai.sql b/sql/old/3.3.5a/2012_12_07_06_world_sai.sql
index d0d1be35766..d0d1be35766 100644
--- a/sql/updates/world/2012_12_07_06_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_07_06_world_sai.sql
diff --git a/sql/updates/world/2012_12_07_07_world_sai.sql b/sql/old/3.3.5a/2012_12_07_07_world_sai.sql
index d9acb9c310c..d9acb9c310c 100644
--- a/sql/updates/world/2012_12_07_07_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_07_07_world_sai.sql
diff --git a/sql/updates/world/2012_12_07_08_world_misc.sql b/sql/old/3.3.5a/2012_12_07_08_world_misc.sql
index a696ba401cc..a696ba401cc 100644
--- a/sql/updates/world/2012_12_07_08_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_07_08_world_misc.sql
diff --git a/sql/updates/world/2012_12_07_09_world_db_script_string.sql b/sql/old/3.3.5a/2012_12_07_09_world_db_script_string.sql
index 4880b84dff0..4880b84dff0 100644
--- a/sql/updates/world/2012_12_07_09_world_db_script_string.sql
+++ b/sql/old/3.3.5a/2012_12_07_09_world_db_script_string.sql
diff --git a/sql/updates/world/2012_12_08_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_08_00_world_creature_text.sql
index 5a5cd579e2b..5a5cd579e2b 100644
--- a/sql/updates/world/2012_12_08_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_08_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_08_01_world_sai.sql b/sql/old/3.3.5a/2012_12_08_01_world_sai.sql
index 2880b01d07a..2880b01d07a 100644
--- a/sql/updates/world/2012_12_08_01_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_08_01_world_sai.sql
diff --git a/sql/updates/world/2012_12_09_00_world_conditions.sql b/sql/old/3.3.5a/2012_12_09_00_world_conditions.sql
index dbb3dac7fc3..dbb3dac7fc3 100644
--- a/sql/updates/world/2012_12_09_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_09_00_world_conditions.sql
diff --git a/sql/updates/world/2012_12_09_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_09_00_world_creature_text.sql
index 6d850191938..6d850191938 100644
--- a/sql/updates/world/2012_12_09_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_09_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_09_01_world_misc.sql b/sql/old/3.3.5a/2012_12_09_01_world_misc.sql
index 7c8bdfbb1c5..7c8bdfbb1c5 100644
--- a/sql/updates/world/2012_12_09_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_09_01_world_misc.sql
diff --git a/sql/updates/world/2012_12_09_02_world_quest_template.sql b/sql/old/3.3.5a/2012_12_09_02_world_quest_template.sql
index 52d0202d2a1..52d0202d2a1 100644
--- a/sql/updates/world/2012_12_09_02_world_quest_template.sql
+++ b/sql/old/3.3.5a/2012_12_09_02_world_quest_template.sql
diff --git a/sql/updates/world/2012_12_10_00_world_smart_scripts.sql b/sql/old/3.3.5a/2012_12_10_00_world_smart_scripts.sql
index ed0ee9bf764..ed0ee9bf764 100644
--- a/sql/updates/world/2012_12_10_00_world_smart_scripts.sql
+++ b/sql/old/3.3.5a/2012_12_10_00_world_smart_scripts.sql
diff --git a/sql/updates/world/2012_12_10_01_world_spell_script_names.sql b/sql/old/3.3.5a/2012_12_10_01_world_spell_script_names.sql
index bc3684011e8..bc3684011e8 100644
--- a/sql/updates/world/2012_12_10_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_12_10_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_12_10_02_world_spawns_waypoints.sql b/sql/old/3.3.5a/2012_12_10_02_world_spawns_waypoints.sql
index 68613f3aaa9..68613f3aaa9 100644
--- a/sql/updates/world/2012_12_10_02_world_spawns_waypoints.sql
+++ b/sql/old/3.3.5a/2012_12_10_02_world_spawns_waypoints.sql
diff --git a/sql/updates/world/2012_12_13_00_world.sql b/sql/old/3.3.5a/2012_12_13_00_world.sql
index ab27796f933..ab27796f933 100644
--- a/sql/updates/world/2012_12_13_00_world.sql
+++ b/sql/old/3.3.5a/2012_12_13_00_world.sql
diff --git a/sql/updates/world/2012_12_14_00_world_conditions.sql b/sql/old/3.3.5a/2012_12_14_00_world_conditions.sql
index 6b6fbfd02c0..6b6fbfd02c0 100644
--- a/sql/updates/world/2012_12_14_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_14_00_world_conditions.sql
diff --git a/sql/updates/world/2012_12_14_01_world_waypoint_data.sql b/sql/old/3.3.5a/2012_12_14_01_world_waypoint_data.sql
index e3589c53340..e3589c53340 100644
--- a/sql/updates/world/2012_12_14_01_world_waypoint_data.sql
+++ b/sql/old/3.3.5a/2012_12_14_01_world_waypoint_data.sql
diff --git a/sql/updates/world/2012_12_14_02_world_misc.sql b/sql/old/3.3.5a/2012_12_14_02_world_misc.sql
index 29aa47909e1..29aa47909e1 100644
--- a/sql/updates/world/2012_12_14_02_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_14_02_world_misc.sql
diff --git a/sql/updates/world/2012_12_14_03_world_npc_spellclick_spells.sql b/sql/old/3.3.5a/2012_12_14_03_world_npc_spellclick_spells.sql
index 2669abbc562..2669abbc562 100644
--- a/sql/updates/world/2012_12_14_03_world_npc_spellclick_spells.sql
+++ b/sql/old/3.3.5a/2012_12_14_03_world_npc_spellclick_spells.sql
diff --git a/sql/updates/world/2012_12_14_04_world_misc.sql b/sql/old/3.3.5a/2012_12_14_04_world_misc.sql
index 2cd99cfb12a..2cd99cfb12a 100644
--- a/sql/updates/world/2012_12_14_04_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_14_04_world_misc.sql
diff --git a/sql/updates/world/2012_12_14_05_world_spell_script_names.sql b/sql/old/3.3.5a/2012_12_14_05_world_spell_script_names.sql
index 6d6ab651365..6d6ab651365 100644
--- a/sql/updates/world/2012_12_14_05_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2012_12_14_05_world_spell_script_names.sql
diff --git a/sql/updates/world/2012_12_15_00_world_waypoint_data.sql b/sql/old/3.3.5a/2012_12_15_00_world_waypoint_data.sql
index c63180ebe5e..c63180ebe5e 100644
--- a/sql/updates/world/2012_12_15_00_world_waypoint_data.sql
+++ b/sql/old/3.3.5a/2012_12_15_00_world_waypoint_data.sql
diff --git a/sql/updates/world/2012_12_15_01_world_sai.sql b/sql/old/3.3.5a/2012_12_15_01_world_sai.sql
index 6d43bedc446..6d43bedc446 100644
--- a/sql/updates/world/2012_12_15_01_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_15_01_world_sai.sql
diff --git a/sql/updates/world/2012_12_15_02_world_sai.sql b/sql/old/3.3.5a/2012_12_15_02_world_sai.sql
index bf092bfb88d..bf092bfb88d 100644
--- a/sql/updates/world/2012_12_15_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_15_02_world_sai.sql
diff --git a/sql/updates/world/2012_12_15_03_world_quest_end_scripts.sql b/sql/old/3.3.5a/2012_12_15_03_world_quest_end_scripts.sql
index 91838bda93d..91838bda93d 100644
--- a/sql/updates/world/2012_12_15_03_world_quest_end_scripts.sql
+++ b/sql/old/3.3.5a/2012_12_15_03_world_quest_end_scripts.sql
diff --git a/sql/updates/world/2012_12_16_00_world_creature_addon.sql b/sql/old/3.3.5a/2012_12_16_00_world_creature_addon.sql
index a79bb407321..a79bb407321 100644
--- a/sql/updates/world/2012_12_16_00_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2012_12_16_00_world_creature_addon.sql
diff --git a/sql/updates/world/2012_12_16_01_world_npc_vendor.sql b/sql/old/3.3.5a/2012_12_16_01_world_npc_vendor.sql
index 0e5ed38c88d..0e5ed38c88d 100644
--- a/sql/updates/world/2012_12_16_01_world_npc_vendor.sql
+++ b/sql/old/3.3.5a/2012_12_16_01_world_npc_vendor.sql
diff --git a/sql/updates/world/2012_12_16_02_world_creature_text.sql b/sql/old/3.3.5a/2012_12_16_02_world_creature_text.sql
index f2d605469f8..f2d605469f8 100644
--- a/sql/updates/world/2012_12_16_02_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_16_02_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_16_03_world_sai.sql b/sql/old/3.3.5a/2012_12_16_03_world_sai.sql
index 40b1e32dbeb..40b1e32dbeb 100644
--- a/sql/updates/world/2012_12_16_03_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_16_03_world_sai.sql
diff --git a/sql/updates/world/2012_12_17_00_world_creature_template.sql b/sql/old/3.3.5a/2012_12_17_00_world_creature_template.sql
index dfe9132e7a6..dfe9132e7a6 100644
--- a/sql/updates/world/2012_12_17_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2012_12_17_00_world_creature_template.sql
diff --git a/sql/updates/world/2012_12_17_00_world_song_of_wind_and_water.sql b/sql/old/3.3.5a/2012_12_17_00_world_song_of_wind_and_water.sql
index 52c80334c0c..52c80334c0c 100644
--- a/sql/updates/world/2012_12_17_00_world_song_of_wind_and_water.sql
+++ b/sql/old/3.3.5a/2012_12_17_00_world_song_of_wind_and_water.sql
diff --git a/sql/updates/world/2012_12_17_00_world_spell_linked_spell.sql b/sql/old/3.3.5a/2012_12_17_00_world_spell_linked_spell.sql
index a2cfc7073d0..a2cfc7073d0 100644
--- a/sql/updates/world/2012_12_17_00_world_spell_linked_spell.sql
+++ b/sql/old/3.3.5a/2012_12_17_00_world_spell_linked_spell.sql
diff --git a/sql/updates/characters/2012_12_18_00_character_worldstates.sql b/sql/old/3.3.5a/2012_12_18_00_character_worldstates.sql
index 98fabde6776..98fabde6776 100644
--- a/sql/updates/characters/2012_12_18_00_character_worldstates.sql
+++ b/sql/old/3.3.5a/2012_12_18_00_character_worldstates.sql
diff --git a/sql/updates/world/2012_12_18_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_18_00_world_creature_text.sql
index 1cf9211343f..1cf9211343f 100644
--- a/sql/updates/world/2012_12_18_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_18_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_18_00_world_waking_the_sleeper.sql b/sql/old/3.3.5a/2012_12_18_00_world_waking_the_sleeper.sql
index 4f8a203100d..4f8a203100d 100644
--- a/sql/updates/world/2012_12_18_00_world_waking_the_sleeper.sql
+++ b/sql/old/3.3.5a/2012_12_18_00_world_waking_the_sleeper.sql
diff --git a/sql/updates/world/2012_12_18_01_world_creature_text.sql b/sql/old/3.3.5a/2012_12_18_01_world_creature_text.sql
index 24779f67fc7..24779f67fc7 100644
--- a/sql/updates/world/2012_12_18_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_18_01_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_18_02_world_misc.sql b/sql/old/3.3.5a/2012_12_18_02_world_misc.sql
index 5df6ef8eb95..5df6ef8eb95 100644
--- a/sql/updates/world/2012_12_18_02_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_18_02_world_misc.sql
diff --git a/sql/updates/world/2012_12_18_02_world_sai.sql b/sql/old/3.3.5a/2012_12_18_02_world_sai.sql
index 0843285550f..0843285550f 100644
--- a/sql/updates/world/2012_12_18_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_18_02_world_sai.sql
diff --git a/sql/updates/world/2012_12_19_00_world_sai.sql b/sql/old/3.3.5a/2012_12_19_00_world_sai.sql
index e11891cdfbd..e11891cdfbd 100644
--- a/sql/updates/world/2012_12_19_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_19_00_world_sai.sql
diff --git a/sql/updates/world/2012_12_19_01_world_viscidus.sql b/sql/old/3.3.5a/2012_12_19_01_world_viscidus.sql
index 16d33b80b8f..16d33b80b8f 100644
--- a/sql/updates/world/2012_12_19_01_world_viscidus.sql
+++ b/sql/old/3.3.5a/2012_12_19_01_world_viscidus.sql
diff --git a/sql/updates/world/2012_12_19_02_world_sai.sql b/sql/old/3.3.5a/2012_12_19_02_world_sai.sql
index c6367e1a8ca..c6367e1a8ca 100644
--- a/sql/updates/world/2012_12_19_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_19_02_world_sai.sql
diff --git a/sql/updates/characters/2012_12_20_00_characters_create_item_loot.sql b/sql/old/3.3.5a/2012_12_20_00_characters_create_item_loot.sql
index 3c1529e8bdf..3c1529e8bdf 100644
--- a/sql/updates/characters/2012_12_20_00_characters_create_item_loot.sql
+++ b/sql/old/3.3.5a/2012_12_20_00_characters_create_item_loot.sql
diff --git a/sql/updates/world/2012_12_20_00_world_conditions.sql b/sql/old/3.3.5a/2012_12_20_00_world_conditions.sql
index 53fc5733e53..53fc5733e53 100644
--- a/sql/updates/world/2012_12_20_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_20_00_world_conditions.sql
diff --git a/sql/updates/world/2012_12_20_01_world_conditions.sql b/sql/old/3.3.5a/2012_12_20_01_world_conditions.sql
index 9d1851305a3..9d1851305a3 100644
--- a/sql/updates/world/2012_12_20_01_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_20_01_world_conditions.sql
diff --git a/sql/updates/world/2012_12_20_02_world_misc.sql b/sql/old/3.3.5a/2012_12_20_02_world_misc.sql
index c04965d8258..c04965d8258 100644
--- a/sql/updates/world/2012_12_20_02_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_20_02_world_misc.sql
diff --git a/sql/updates/world/2012_12_20_03_world_conditions.sql b/sql/old/3.3.5a/2012_12_20_03_world_conditions.sql
index f07b18ed2e4..f07b18ed2e4 100644
--- a/sql/updates/world/2012_12_20_03_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_20_03_world_conditions.sql
diff --git a/sql/updates/world/2012_12_21_00_world_conditions.sql b/sql/old/3.3.5a/2012_12_21_00_world_conditions.sql
index eddf541eaf3..eddf541eaf3 100644
--- a/sql/updates/world/2012_12_21_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_21_00_world_conditions.sql
diff --git a/sql/updates/world/2012_12_21_01_world_conditions.sql b/sql/old/3.3.5a/2012_12_21_01_world_conditions.sql
index fdc5becd963..fdc5becd963 100644
--- a/sql/updates/world/2012_12_21_01_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_21_01_world_conditions.sql
diff --git a/sql/updates/world/2012_12_22_01_world_sai.sql b/sql/old/3.3.5a/2012_12_22_01_world_sai.sql
index e2a61426679..e2a61426679 100644
--- a/sql/updates/world/2012_12_22_01_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_22_01_world_sai.sql
diff --git a/sql/updates/world/2012_12_22_02_world_the_crusaders_pinnacle.sql b/sql/old/3.3.5a/2012_12_22_02_world_the_crusaders_pinnacle.sql
index 5debd41a160..5debd41a160 100644
--- a/sql/updates/world/2012_12_22_02_world_the_crusaders_pinnacle.sql
+++ b/sql/old/3.3.5a/2012_12_22_02_world_the_crusaders_pinnacle.sql
diff --git a/sql/updates/world/2012_12_23_00_world_creature_text.sql b/sql/old/3.3.5a/2012_12_23_00_world_creature_text.sql
index 37b4d66b3fe..37b4d66b3fe 100644
--- a/sql/updates/world/2012_12_23_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_23_00_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_23_01_world_creature_text.sql b/sql/old/3.3.5a/2012_12_23_01_world_creature_text.sql
index b663c5269e9..b663c5269e9 100644
--- a/sql/updates/world/2012_12_23_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_23_01_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_23_02_world_trinity_string.sql b/sql/old/3.3.5a/2012_12_23_02_world_trinity_string.sql
index ac99945d5a5..ac99945d5a5 100644
--- a/sql/updates/world/2012_12_23_02_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2012_12_23_02_world_trinity_string.sql
diff --git a/sql/updates/world/2012_12_23_03_world_misc.sql b/sql/old/3.3.5a/2012_12_23_03_world_misc.sql
index c9a42df10dd..c9a42df10dd 100644
--- a/sql/updates/world/2012_12_23_03_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_23_03_world_misc.sql
diff --git a/sql/updates/world/2012_12_24_00_world_defending_wyrmrest_temple.sql b/sql/old/3.3.5a/2012_12_24_00_world_defending_wyrmrest_temple.sql
index edf1f887d1c..edf1f887d1c 100644
--- a/sql/updates/world/2012_12_24_00_world_defending_wyrmrest_temple.sql
+++ b/sql/old/3.3.5a/2012_12_24_00_world_defending_wyrmrest_temple.sql
diff --git a/sql/updates/world/2012_12_24_01_world_sai.sql b/sql/old/3.3.5a/2012_12_24_01_world_sai.sql
index d151ee4aa2c..d151ee4aa2c 100644
--- a/sql/updates/world/2012_12_24_01_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_24_01_world_sai.sql
diff --git a/sql/updates/world/2012_12_24_02_world_sai.sql b/sql/old/3.3.5a/2012_12_24_02_world_sai.sql
index 03d0a9ef5c6..03d0a9ef5c6 100644
--- a/sql/updates/world/2012_12_24_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_24_02_world_sai.sql
diff --git a/sql/updates/world/2012_12_24_03_world_sai.sql b/sql/old/3.3.5a/2012_12_24_03_world_sai.sql
index f89f3c968aa..f89f3c968aa 100644
--- a/sql/updates/world/2012_12_24_03_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_24_03_world_sai.sql
diff --git a/sql/updates/world/2012_12_24_04_world_creature.sql b/sql/old/3.3.5a/2012_12_24_04_world_creature.sql
index 42f69d97a9e..42f69d97a9e 100644
--- a/sql/updates/world/2012_12_24_04_world_creature.sql
+++ b/sql/old/3.3.5a/2012_12_24_04_world_creature.sql
diff --git a/sql/updates/world/2012_12_24_05_world_object.sql b/sql/old/3.3.5a/2012_12_24_05_world_object.sql
index 2b9947a6bd5..2b9947a6bd5 100644
--- a/sql/updates/world/2012_12_24_05_world_object.sql
+++ b/sql/old/3.3.5a/2012_12_24_05_world_object.sql
diff --git a/sql/updates/world/2012_12_24_06_world_reputation.sql b/sql/old/3.3.5a/2012_12_24_06_world_reputation.sql
index 9320d76365d..9320d76365d 100644
--- a/sql/updates/world/2012_12_24_06_world_reputation.sql
+++ b/sql/old/3.3.5a/2012_12_24_06_world_reputation.sql
diff --git a/sql/updates/world/2012_12_24_07_world_sai.sql b/sql/old/3.3.5a/2012_12_24_07_world_sai.sql
index 3cce37295fd..3cce37295fd 100644
--- a/sql/updates/world/2012_12_24_07_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_24_07_world_sai.sql
diff --git a/sql/updates/world/2012_12_24_08_world_conditions.sql b/sql/old/3.3.5a/2012_12_24_08_world_conditions.sql
index ad641203453..ad641203453 100644
--- a/sql/updates/world/2012_12_24_08_world_conditions.sql
+++ b/sql/old/3.3.5a/2012_12_24_08_world_conditions.sql
diff --git a/sql/updates/world/2012_12_24_09_world_sai.sql b/sql/old/3.3.5a/2012_12_24_09_world_sai.sql
index d75dd937598..d75dd937598 100644
--- a/sql/updates/world/2012_12_24_09_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_24_09_world_sai.sql
diff --git a/sql/updates/world/2012_12_25_00_world_sai.sql b/sql/old/3.3.5a/2012_12_25_00_world_sai.sql
index 33363d33573..33363d33573 100644
--- a/sql/updates/world/2012_12_25_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_25_00_world_sai.sql
diff --git a/sql/updates/world/2012_12_25_01_world_sai.sql b/sql/old/3.3.5a/2012_12_25_01_world_sai.sql
index cad0ce2aec3..cad0ce2aec3 100644
--- a/sql/updates/world/2012_12_25_01_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_25_01_world_sai.sql
diff --git a/sql/updates/world/2012_12_25_02_world_sai.sql b/sql/old/3.3.5a/2012_12_25_02_world_sai.sql
index 35ac4ebb97b..35ac4ebb97b 100644
--- a/sql/updates/world/2012_12_25_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_25_02_world_sai.sql
diff --git a/sql/updates/world/2012_12_25_03_world_sai.sql b/sql/old/3.3.5a/2012_12_25_03_world_sai.sql
index 2a7553aabb3..2a7553aabb3 100644
--- a/sql/updates/world/2012_12_25_03_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_25_03_world_sai.sql
diff --git a/sql/updates/world/2012_12_25_04_world_sai.sql b/sql/old/3.3.5a/2012_12_25_04_world_sai.sql
index 46b2c4c2fd1..46b2c4c2fd1 100644
--- a/sql/updates/world/2012_12_25_04_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_25_04_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_01_world_creature_text.sql b/sql/old/3.3.5a/2012_12_26_01_world_creature_text.sql
index ae4170ae5a8..ae4170ae5a8 100644
--- a/sql/updates/world/2012_12_26_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2012_12_26_01_world_creature_text.sql
diff --git a/sql/updates/world/2012_12_26_02_world_sai.sql b/sql/old/3.3.5a/2012_12_26_02_world_sai.sql
index b88b4044edb..b88b4044edb 100644
--- a/sql/updates/world/2012_12_26_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_02_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_03_world_sai.sql b/sql/old/3.3.5a/2012_12_26_03_world_sai.sql
index 2e9ed5090e0..2e9ed5090e0 100644
--- a/sql/updates/world/2012_12_26_03_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_03_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_04_world_sai.sql b/sql/old/3.3.5a/2012_12_26_04_world_sai.sql
index a29c8a22fdc..a29c8a22fdc 100644
--- a/sql/updates/world/2012_12_26_04_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_04_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_05_world_sai.sql b/sql/old/3.3.5a/2012_12_26_05_world_sai.sql
index 143f1e9bdb0..143f1e9bdb0 100644
--- a/sql/updates/world/2012_12_26_05_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_05_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_06_world_sai.sql b/sql/old/3.3.5a/2012_12_26_06_world_sai.sql
index 184282fe907..184282fe907 100644
--- a/sql/updates/world/2012_12_26_06_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_06_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_07_world_game_event.sql b/sql/old/3.3.5a/2012_12_26_07_world_game_event.sql
index 21dcf12e1c4..21dcf12e1c4 100644
--- a/sql/updates/world/2012_12_26_07_world_game_event.sql
+++ b/sql/old/3.3.5a/2012_12_26_07_world_game_event.sql
diff --git a/sql/updates/world/2012_12_26_08_world_sai.sql b/sql/old/3.3.5a/2012_12_26_08_world_sai.sql
index 8fde794613e..8fde794613e 100644
--- a/sql/updates/world/2012_12_26_08_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_08_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_09_world_sai.sql b/sql/old/3.3.5a/2012_12_26_09_world_sai.sql
index fe81c15fb3a..fe81c15fb3a 100644
--- a/sql/updates/world/2012_12_26_09_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_09_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_10_world_sai.sql b/sql/old/3.3.5a/2012_12_26_10_world_sai.sql
index b6b925d8255..b6b925d8255 100644
--- a/sql/updates/world/2012_12_26_10_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_10_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_11_world_sai.sql b/sql/old/3.3.5a/2012_12_26_11_world_sai.sql
index abbdfb88c24..abbdfb88c24 100644
--- a/sql/updates/world/2012_12_26_11_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_11_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_12_world_quest_end_scripts.sql b/sql/old/3.3.5a/2012_12_26_12_world_quest_end_scripts.sql
index 501bb796557..501bb796557 100644
--- a/sql/updates/world/2012_12_26_12_world_quest_end_scripts.sql
+++ b/sql/old/3.3.5a/2012_12_26_12_world_quest_end_scripts.sql
diff --git a/sql/updates/world/2012_12_26_13_world_sai.sql b/sql/old/3.3.5a/2012_12_26_13_world_sai.sql
index d36affe8eb3..d36affe8eb3 100644
--- a/sql/updates/world/2012_12_26_13_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_13_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_14_world_sai.sql b/sql/old/3.3.5a/2012_12_26_14_world_sai.sql
index 2929d590637..2929d590637 100644
--- a/sql/updates/world/2012_12_26_14_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_14_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_15_world_sai.sql b/sql/old/3.3.5a/2012_12_26_15_world_sai.sql
index a40f73bffc8..a40f73bffc8 100644
--- a/sql/updates/world/2012_12_26_15_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_15_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_16_world_sai.sql b/sql/old/3.3.5a/2012_12_26_16_world_sai.sql
index 39a246c9ccd..39a246c9ccd 100644
--- a/sql/updates/world/2012_12_26_16_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_16_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_17_world_sai.sql b/sql/old/3.3.5a/2012_12_26_17_world_sai.sql
index 6f35bcc230b..6f35bcc230b 100644
--- a/sql/updates/world/2012_12_26_17_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_17_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_18_world_sai.sql b/sql/old/3.3.5a/2012_12_26_18_world_sai.sql
index cd4989de5e0..cd4989de5e0 100644
--- a/sql/updates/world/2012_12_26_18_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_18_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_19_world_sai.sql b/sql/old/3.3.5a/2012_12_26_19_world_sai.sql
index 5cfd2a29c62..5cfd2a29c62 100644
--- a/sql/updates/world/2012_12_26_19_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_19_world_sai.sql
diff --git a/sql/updates/world/2012_12_26_20_world_sai.sql b/sql/old/3.3.5a/2012_12_26_20_world_sai.sql
index 3574835ce32..3574835ce32 100644
--- a/sql/updates/world/2012_12_26_20_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_26_20_world_sai.sql
diff --git a/sql/updates/world/2012_12_27_00_world_orgrims_hammer.sql b/sql/old/3.3.5a/2012_12_27_00_world_orgrims_hammer.sql
index a7c8af76fa0..a7c8af76fa0 100644
--- a/sql/updates/world/2012_12_27_00_world_orgrims_hammer.sql
+++ b/sql/old/3.3.5a/2012_12_27_00_world_orgrims_hammer.sql
diff --git a/sql/updates/world/2012_12_27_01_world_locales_quest.sql b/sql/old/3.3.5a/2012_12_27_01_world_locales_quest.sql
index 047f8bb499f..047f8bb499f 100644
--- a/sql/updates/world/2012_12_27_01_world_locales_quest.sql
+++ b/sql/old/3.3.5a/2012_12_27_01_world_locales_quest.sql
diff --git a/sql/updates/world/2012_12_27_02_world_locales.sql b/sql/old/3.3.5a/2012_12_27_02_world_locales.sql
index 5caeb009447..5caeb009447 100644
--- a/sql/updates/world/2012_12_27_02_world_locales.sql
+++ b/sql/old/3.3.5a/2012_12_27_02_world_locales.sql
diff --git a/sql/updates/world/2012_12_27_03_world_sai.sql b/sql/old/3.3.5a/2012_12_27_03_world_sai.sql
index acd5c931c50..acd5c931c50 100644
--- a/sql/updates/world/2012_12_27_03_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_27_03_world_sai.sql
diff --git a/sql/updates/world/2012_12_27_04_world_the_shadows_vault.sql b/sql/old/3.3.5a/2012_12_27_04_world_the_shadows_vault.sql
index 96d176d6d1b..96d176d6d1b 100644
--- a/sql/updates/world/2012_12_27_04_world_the_shadows_vault.sql
+++ b/sql/old/3.3.5a/2012_12_27_04_world_the_shadows_vault.sql
diff --git a/sql/updates/world/2012_12_28_00_world_command.sql b/sql/old/3.3.5a/2012_12_28_00_world_command.sql
index 6de970d3b81..6de970d3b81 100644
--- a/sql/updates/world/2012_12_28_00_world_command.sql
+++ b/sql/old/3.3.5a/2012_12_28_00_world_command.sql
diff --git a/sql/updates/world/2012_12_28_01_world_misc.sql b/sql/old/3.3.5a/2012_12_28_01_world_misc.sql
index 44501390d9e..44501390d9e 100644
--- a/sql/updates/world/2012_12_28_01_world_misc.sql
+++ b/sql/old/3.3.5a/2012_12_28_01_world_misc.sql
diff --git a/sql/updates/world/2012_12_28_02_world_sai.sql b/sql/old/3.3.5a/2012_12_28_02_world_sai.sql
index 7a518449fde..7a518449fde 100644
--- a/sql/updates/world/2012_12_28_02_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_28_02_world_sai.sql
diff --git a/sql/updates/world/2012_12_28_03_world_disables.sql b/sql/old/3.3.5a/2012_12_28_03_world_disables.sql
index 017e3aea8c1..017e3aea8c1 100644
--- a/sql/updates/world/2012_12_28_03_world_disables.sql
+++ b/sql/old/3.3.5a/2012_12_28_03_world_disables.sql
diff --git a/sql/updates/world/2012_12_28_04_world_citadel_footsteps.sql b/sql/old/3.3.5a/2012_12_28_04_world_citadel_footsteps.sql
index 3d0ad779dc2..3d0ad779dc2 100644
--- a/sql/updates/world/2012_12_28_04_world_citadel_footsteps.sql
+++ b/sql/old/3.3.5a/2012_12_28_04_world_citadel_footsteps.sql
diff --git a/sql/updates/world/2012_12_30_01_world_trinity_string.sql b/sql/old/3.3.5a/2012_12_30_01_world_trinity_string.sql
index ce0578168f4..ce0578168f4 100644
--- a/sql/updates/world/2012_12_30_01_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2012_12_30_01_world_trinity_string.sql
diff --git a/sql/updates/world/2012_12_31_00_world_sai.sql b/sql/old/3.3.5a/2012_12_31_00_world_sai.sql
index 9e30c29f784..9e30c29f784 100644
--- a/sql/updates/world/2012_12_31_00_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_31_00_world_sai.sql
diff --git a/sql/updates/world/2012_12_31_01_world_sai.sql b/sql/old/3.3.5a/2012_12_31_01_world_sai.sql
index 96cf4d1e724..96cf4d1e724 100644
--- a/sql/updates/world/2012_12_31_01_world_sai.sql
+++ b/sql/old/3.3.5a/2012_12_31_01_world_sai.sql
diff --git a/sql/updates/world/2013_01_01_00_item_template_restore.sql b/sql/old/3.3.5a/2013_01_01_00_item_template_restore.sql
index dc18ff71fe8..dc18ff71fe8 100644
--- a/sql/updates/world/2013_01_01_00_item_template_restore.sql
+++ b/sql/old/3.3.5a/2013_01_01_00_item_template_restore.sql
diff --git a/sql/updates/world/2013_01_01_01_world_creature_text.sql b/sql/old/3.3.5a/2013_01_01_01_world_creature_text.sql
index c0055f8e1d0..c0055f8e1d0 100644
--- a/sql/updates/world/2013_01_01_01_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_01_01_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_02_00_world_misc.sql b/sql/old/3.3.5a/2013_01_02_00_world_misc.sql
index 8527b8ab145..8527b8ab145 100644
--- a/sql/updates/world/2013_01_02_00_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_02_00_world_misc.sql
diff --git a/sql/updates/world/2013_01_02_01_world_spell_script.sql b/sql/old/3.3.5a/2013_01_02_01_world_spell_script.sql
index a839ca6dc7b..a839ca6dc7b 100644
--- a/sql/updates/world/2013_01_02_01_world_spell_script.sql
+++ b/sql/old/3.3.5a/2013_01_02_01_world_spell_script.sql
diff --git a/sql/updates/world/2013_01_02_02_world_instance_template.sql b/sql/old/3.3.5a/2013_01_02_02_world_instance_template.sql
index f63a2c3ba2e..f63a2c3ba2e 100644
--- a/sql/updates/world/2013_01_02_02_world_instance_template.sql
+++ b/sql/old/3.3.5a/2013_01_02_02_world_instance_template.sql
diff --git a/sql/updates/world/2013_01_02_03_world_sai.sql b/sql/old/3.3.5a/2013_01_02_03_world_sai.sql
index 6f6318b55bd..6f6318b55bd 100644
--- a/sql/updates/world/2013_01_02_03_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_02_03_world_sai.sql
diff --git a/sql/updates/world/2013_01_02_04_world_creature.sql b/sql/old/3.3.5a/2013_01_02_04_world_creature.sql
index 686909ce57e..686909ce57e 100644
--- a/sql/updates/world/2013_01_02_04_world_creature.sql
+++ b/sql/old/3.3.5a/2013_01_02_04_world_creature.sql
diff --git a/sql/updates/world/2013_01_02_05_eye_of_eternity.sql b/sql/old/3.3.5a/2013_01_02_05_eye_of_eternity.sql
index 89cc8f08cce..89cc8f08cce 100644
--- a/sql/updates/world/2013_01_02_05_eye_of_eternity.sql
+++ b/sql/old/3.3.5a/2013_01_02_05_eye_of_eternity.sql
diff --git a/sql/updates/world/2013_01_02_06_world_sai.sql b/sql/old/3.3.5a/2013_01_02_06_world_sai.sql
index 2ce089188d6..2ce089188d6 100644
--- a/sql/updates/world/2013_01_02_06_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_02_06_world_sai.sql
diff --git a/sql/updates/world/2013_01_02_06_world_waypoints.sql b/sql/old/3.3.5a/2013_01_02_06_world_waypoints.sql
index c7302a457a2..c7302a457a2 100644
--- a/sql/updates/world/2013_01_02_06_world_waypoints.sql
+++ b/sql/old/3.3.5a/2013_01_02_06_world_waypoints.sql
diff --git a/sql/updates/world/2013_01_02_07_world_waypoints.sql b/sql/old/3.3.5a/2013_01_02_07_world_waypoints.sql
index b49fd0b28a6..b49fd0b28a6 100644
--- a/sql/updates/world/2013_01_02_07_world_waypoints.sql
+++ b/sql/old/3.3.5a/2013_01_02_07_world_waypoints.sql
diff --git a/sql/updates/world/2013_01_02_08_world_sai.sql b/sql/old/3.3.5a/2013_01_02_08_world_sai.sql
index a3f0dde4658..a3f0dde4658 100644
--- a/sql/updates/world/2013_01_02_08_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_02_08_world_sai.sql
diff --git a/sql/updates/world/2013_01_02_09_world_waypoints.sql b/sql/old/3.3.5a/2013_01_02_09_world_waypoints.sql
index 1c2492fcce8..1c2492fcce8 100644
--- a/sql/updates/world/2013_01_02_09_world_waypoints.sql
+++ b/sql/old/3.3.5a/2013_01_02_09_world_waypoints.sql
diff --git a/sql/updates/world/2013_01_02_10_world_sai.sql b/sql/old/3.3.5a/2013_01_02_10_world_sai.sql
index 0be2c5c2d6b..0be2c5c2d6b 100644
--- a/sql/updates/world/2013_01_02_10_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_02_10_world_sai.sql
diff --git a/sql/updates/world/2013_01_02_11_world_sai.sql b/sql/old/3.3.5a/2013_01_02_11_world_sai.sql
index 7496a765470..7496a765470 100644
--- a/sql/updates/world/2013_01_02_11_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_02_11_world_sai.sql
diff --git a/sql/updates/world/2013_01_02_12_world_go_script.sql b/sql/old/3.3.5a/2013_01_02_12_world_go_script.sql
index aea0a67c47e..aea0a67c47e 100644
--- a/sql/updates/world/2013_01_02_12_world_go_script.sql
+++ b/sql/old/3.3.5a/2013_01_02_12_world_go_script.sql
diff --git a/sql/updates/world/2013_01_02_12_world_waypoints.sql b/sql/old/3.3.5a/2013_01_02_12_world_waypoints.sql
index 6ec7875d8ef..6ec7875d8ef 100644
--- a/sql/updates/world/2013_01_02_12_world_waypoints.sql
+++ b/sql/old/3.3.5a/2013_01_02_12_world_waypoints.sql
diff --git a/sql/updates/world/2013_01_03_00_world_gameobject_scripts.sql b/sql/old/3.3.5a/2013_01_03_00_world_gameobject_scripts.sql
index 32faf4b03a0..32faf4b03a0 100644
--- a/sql/updates/world/2013_01_03_00_world_gameobject_scripts.sql
+++ b/sql/old/3.3.5a/2013_01_03_00_world_gameobject_scripts.sql
diff --git a/sql/updates/world/2013_01_03_01_world_sai.sql b/sql/old/3.3.5a/2013_01_03_01_world_sai.sql
index 9e0e56eb645..9e0e56eb645 100644
--- a/sql/updates/world/2013_01_03_01_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_01_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_02_world_sai.sql b/sql/old/3.3.5a/2013_01_03_02_world_sai.sql
index ecd84c96800..ecd84c96800 100644
--- a/sql/updates/world/2013_01_03_02_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_02_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql b/sql/old/3.3.5a/2013_01_03_03_world_spelldifficulty_dbc.sql
index 6a41f705491..6a41f705491 100644
--- a/sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql
+++ b/sql/old/3.3.5a/2013_01_03_03_world_spelldifficulty_dbc.sql
diff --git a/sql/updates/world/2013_01_03_04_world_sai.sql b/sql/old/3.3.5a/2013_01_03_04_world_sai.sql
index ccac9266af2..ccac9266af2 100644
--- a/sql/updates/world/2013_01_03_04_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_04_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_05_world_sai.sql b/sql/old/3.3.5a/2013_01_03_05_world_sai.sql
index 9e5537835ff..9e5537835ff 100644
--- a/sql/updates/world/2013_01_03_05_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_05_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_06_world_sai.sql b/sql/old/3.3.5a/2013_01_03_06_world_sai.sql
index e77122e908e..e77122e908e 100644
--- a/sql/updates/world/2013_01_03_06_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_06_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_07_world_sai.sql b/sql/old/3.3.5a/2013_01_03_07_world_sai.sql
index 35a03b9078c..35a03b9078c 100644
--- a/sql/updates/world/2013_01_03_07_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_07_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_08_world_misc.sql b/sql/old/3.3.5a/2013_01_03_08_world_misc.sql
index 816b4b4dcf6..816b4b4dcf6 100644
--- a/sql/updates/world/2013_01_03_08_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_03_08_world_misc.sql
diff --git a/sql/updates/world/2013_01_03_09_world_sai.sql b/sql/old/3.3.5a/2013_01_03_09_world_sai.sql
index c15eeb88843..c15eeb88843 100644
--- a/sql/updates/world/2013_01_03_09_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_03_09_world_sai.sql
diff --git a/sql/updates/world/2013_01_03_10_world_gameobject.sql b/sql/old/3.3.5a/2013_01_03_10_world_gameobject.sql
index 11700da1dc9..11700da1dc9 100644
--- a/sql/updates/world/2013_01_03_10_world_gameobject.sql
+++ b/sql/old/3.3.5a/2013_01_03_10_world_gameobject.sql
diff --git a/sql/updates/world/2013_01_03_11_world_item_template.sql b/sql/old/3.3.5a/2013_01_03_11_world_item_template.sql
index df0bd5cd1e7..df0bd5cd1e7 100644
--- a/sql/updates/world/2013_01_03_11_world_item_template.sql
+++ b/sql/old/3.3.5a/2013_01_03_11_world_item_template.sql
diff --git a/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql b/sql/old/3.3.5a/2013_01_03_12_world_gameobject_scripts.sql
index aede83aa0c8..aede83aa0c8 100644
--- a/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql
+++ b/sql/old/3.3.5a/2013_01_03_12_world_gameobject_scripts.sql
diff --git a/sql/updates/world/2013_01_03_12_world_misc.sql b/sql/old/3.3.5a/2013_01_03_12_world_misc.sql
index 79d2e2daea9..79d2e2daea9 100644
--- a/sql/updates/world/2013_01_03_12_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_03_12_world_misc.sql
diff --git a/sql/updates/world/2013_01_03_13_world_quest_template.sql b/sql/old/3.3.5a/2013_01_03_13_world_quest_template.sql
index 12adb1e94ba..12adb1e94ba 100644
--- a/sql/updates/world/2013_01_03_13_world_quest_template.sql
+++ b/sql/old/3.3.5a/2013_01_03_13_world_quest_template.sql
diff --git a/sql/updates/world/2013_01_03_14_world_spell_area.sql b/sql/old/3.3.5a/2013_01_03_14_world_spell_area.sql
index 352fe0e9d85..352fe0e9d85 100644
--- a/sql/updates/world/2013_01_03_14_world_spell_area.sql
+++ b/sql/old/3.3.5a/2013_01_03_14_world_spell_area.sql
diff --git a/sql/updates/world/2013_01_03_15_world_various_fixes.sql b/sql/old/3.3.5a/2013_01_03_15_world_various_fixes.sql
index d3db9afa6e5..d3db9afa6e5 100644
--- a/sql/updates/world/2013_01_03_15_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2013_01_03_15_world_various_fixes.sql
diff --git a/sql/updates/world/2013_01_03_16_world_various_fixes.sql b/sql/old/3.3.5a/2013_01_03_16_world_various_fixes.sql
index bc5f4f4b6ec..bc5f4f4b6ec 100644
--- a/sql/updates/world/2013_01_03_16_world_various_fixes.sql
+++ b/sql/old/3.3.5a/2013_01_03_16_world_various_fixes.sql
diff --git a/sql/updates/world/2013_01_04_00_world_creature_text.sql b/sql/old/3.3.5a/2013_01_04_00_world_creature_text.sql
index ae38180e1ac..ae38180e1ac 100644
--- a/sql/updates/world/2013_01_04_00_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_04_00_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_04_01_world_sai.sql b/sql/old/3.3.5a/2013_01_04_01_world_sai.sql
index 8e7127e5728..8e7127e5728 100644
--- a/sql/updates/world/2013_01_04_01_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_04_01_world_sai.sql
diff --git a/sql/updates/world/2013_01_04_02_world_misc.sql b/sql/old/3.3.5a/2013_01_04_02_world_misc.sql
index 6833a22ff23..6833a22ff23 100644
--- a/sql/updates/world/2013_01_04_02_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_04_02_world_misc.sql
diff --git a/sql/updates/world/2013_01_04_02_world_novos_the_summoner.sql b/sql/old/3.3.5a/2013_01_04_02_world_novos_the_summoner.sql
index 49f8b21e3a7..49f8b21e3a7 100644
--- a/sql/updates/world/2013_01_04_02_world_novos_the_summoner.sql
+++ b/sql/old/3.3.5a/2013_01_04_02_world_novos_the_summoner.sql
diff --git a/sql/updates/world/2013_01_05_00_world_waypoints.sql b/sql/old/3.3.5a/2013_01_05_00_world_waypoints.sql
index 4a2d273c552..4a2d273c552 100644
--- a/sql/updates/world/2013_01_05_00_world_waypoints.sql
+++ b/sql/old/3.3.5a/2013_01_05_00_world_waypoints.sql
diff --git a/sql/updates/world/2013_01_06_00_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_06_00_world_creature_addon.sql
index e4412241dce..e4412241dce 100644
--- a/sql/updates/world/2013_01_06_00_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_06_00_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_06_00_world_creature_template.sql b/sql/old/3.3.5a/2013_01_06_00_world_creature_template.sql
index 023dc88c870..023dc88c870 100644
--- a/sql/updates/world/2013_01_06_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2013_01_06_00_world_creature_template.sql
diff --git a/sql/updates/world/2013_01_06_01_world_waypoints.sql b/sql/old/3.3.5a/2013_01_06_01_world_waypoints.sql
index a460d33b086..a460d33b086 100644
--- a/sql/updates/world/2013_01_06_01_world_waypoints.sql
+++ b/sql/old/3.3.5a/2013_01_06_01_world_waypoints.sql
diff --git a/sql/updates/world/2013_01_06_02_world_misc.sql b/sql/old/3.3.5a/2013_01_06_02_world_misc.sql
index 8c24975754a..8c24975754a 100644
--- a/sql/updates/world/2013_01_06_02_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_06_02_world_misc.sql
diff --git a/sql/updates/world/2013_01_06_03_world_sai.sql b/sql/old/3.3.5a/2013_01_06_03_world_sai.sql
index 1cc0962781b..1cc0962781b 100644
--- a/sql/updates/world/2013_01_06_03_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_06_03_world_sai.sql
diff --git a/sql/updates/world/2013_01_06_04_world_misc.sql b/sql/old/3.3.5a/2013_01_06_04_world_misc.sql
index fb1e256fa1b..fb1e256fa1b 100644
--- a/sql/updates/world/2013_01_06_04_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_06_04_world_misc.sql
diff --git a/sql/updates/world/2013_01_07_00_world_sai.sql b/sql/old/3.3.5a/2013_01_07_00_world_sai.sql
index e289130ddef..e289130ddef 100644
--- a/sql/updates/world/2013_01_07_00_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_07_00_world_sai.sql
diff --git a/sql/updates/world/2013_01_07_01_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_07_01_world_creature_addon.sql
index a83bd028343..a83bd028343 100644
--- a/sql/updates/world/2013_01_07_01_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_07_01_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_07_02_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_02_world_creature_text.sql
index 3e916464615..3e916464615 100644
--- a/sql/updates/world/2013_01_07_02_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_02_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_03_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_03_world_creature_text.sql
index c006dc5ef99..c006dc5ef99 100644
--- a/sql/updates/world/2013_01_07_03_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_03_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_04_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_04_world_creature_text.sql
index 6fd1d3b95a7..6fd1d3b95a7 100644
--- a/sql/updates/world/2013_01_07_04_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_04_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_05_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_05_world_creature_text.sql
index d9d91e784ba..d9d91e784ba 100644
--- a/sql/updates/world/2013_01_07_05_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_05_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_06_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_06_world_creature_text.sql
index 5c7d09f9887..5c7d09f9887 100644
--- a/sql/updates/world/2013_01_07_06_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_06_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_07_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_07_world_creature_text.sql
index 6f6a0b75713..6f6a0b75713 100644
--- a/sql/updates/world/2013_01_07_07_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_07_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_08_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_08_world_creature_text.sql
index 94ab4d925ee..94ab4d925ee 100644
--- a/sql/updates/world/2013_01_07_08_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_08_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_09_world_buru.sql b/sql/old/3.3.5a/2013_01_07_09_world_buru.sql
index a7e1d5a0ef1..a7e1d5a0ef1 100644
--- a/sql/updates/world/2013_01_07_09_world_buru.sql
+++ b/sql/old/3.3.5a/2013_01_07_09_world_buru.sql
diff --git a/sql/updates/world/2013_01_07_10_world_skeram.sql b/sql/old/3.3.5a/2013_01_07_10_world_skeram.sql
index fb62da5e994..fb62da5e994 100644
--- a/sql/updates/world/2013_01_07_10_world_skeram.sql
+++ b/sql/old/3.3.5a/2013_01_07_10_world_skeram.sql
diff --git a/sql/updates/world/2013_01_07_11_world_sai.sql b/sql/old/3.3.5a/2013_01_07_11_world_sai.sql
index bf4a1ed3c78..bf4a1ed3c78 100644
--- a/sql/updates/world/2013_01_07_11_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_07_11_world_sai.sql
diff --git a/sql/updates/world/2013_01_07_12_world_sai.sql b/sql/old/3.3.5a/2013_01_07_12_world_sai.sql
index bfa06980983..bfa06980983 100644
--- a/sql/updates/world/2013_01_07_12_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_07_12_world_sai.sql
diff --git a/sql/updates/world/2013_01_07_13_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_13_world_creature_text.sql
index 60d69e3c32a..60d69e3c32a 100644
--- a/sql/updates/world/2013_01_07_13_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_13_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_14_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_14_world_creature_text.sql
index d68eb93ff4e..d68eb93ff4e 100644
--- a/sql/updates/world/2013_01_07_14_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_14_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_15_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_07_15_world_creature_addon.sql
index 2b5ec6c2413..2b5ec6c2413 100644
--- a/sql/updates/world/2013_01_07_15_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_07_15_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_07_16_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_07_16_world_creature_addon.sql
index bd5c17c6f67..bd5c17c6f67 100644
--- a/sql/updates/world/2013_01_07_16_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_07_16_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_07_17_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_17_world_creature_text.sql
index 137308da214..137308da214 100644
--- a/sql/updates/world/2013_01_07_17_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_17_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_07_18_world_creature_text.sql b/sql/old/3.3.5a/2013_01_07_18_world_creature_text.sql
index b9c6ef8d0c1..b9c6ef8d0c1 100644
--- a/sql/updates/world/2013_01_07_18_world_creature_text.sql
+++ b/sql/old/3.3.5a/2013_01_07_18_world_creature_text.sql
diff --git a/sql/updates/world/2013_01_08_01_world_raise_the_barricades.sql b/sql/old/3.3.5a/2013_01_08_01_world_raise_the_barricades.sql
index 636beb404de..636beb404de 100644
--- a/sql/updates/world/2013_01_08_01_world_raise_the_barricades.sql
+++ b/sql/old/3.3.5a/2013_01_08_01_world_raise_the_barricades.sql
diff --git a/sql/updates/world/2013_01_09_00_world_misc.sql b/sql/old/3.3.5a/2013_01_09_00_world_misc.sql
index a5402c60534..a5402c60534 100644
--- a/sql/updates/world/2013_01_09_00_world_misc.sql
+++ b/sql/old/3.3.5a/2013_01_09_00_world_misc.sql
diff --git a/sql/updates/world/2013_01_09_01_world_lfg_dungeon_rewards.sql b/sql/old/3.3.5a/2013_01_09_01_world_lfg_dungeon_rewards.sql
index dfc5f7cf075..dfc5f7cf075 100644
--- a/sql/updates/world/2013_01_09_01_world_lfg_dungeon_rewards.sql
+++ b/sql/old/3.3.5a/2013_01_09_01_world_lfg_dungeon_rewards.sql
diff --git a/sql/updates/world/2013_01_09_02_world_sai.sql b/sql/old/3.3.5a/2013_01_09_02_world_sai.sql
index bd164ff4b5e..bd164ff4b5e 100644
--- a/sql/updates/world/2013_01_09_02_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_09_02_world_sai.sql
diff --git a/sql/updates/world/2013_01_09_03_world_spell_script_names.sql b/sql/old/3.3.5a/2013_01_09_03_world_spell_script_names.sql
index 14d0eb8bfd9..14d0eb8bfd9 100644
--- a/sql/updates/world/2013_01_09_03_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2013_01_09_03_world_spell_script_names.sql
diff --git a/sql/updates/world/2013_01_10_00_world_trinity_string.sql b/sql/old/3.3.5a/2013_01_10_00_world_trinity_string.sql
index 35d0c1eba99..35d0c1eba99 100644
--- a/sql/updates/world/2013_01_10_00_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2013_01_10_00_world_trinity_string.sql
diff --git a/sql/updates/world/2013_01_10_01_world_sai.sql b/sql/old/3.3.5a/2013_01_10_01_world_sai.sql
index da6c5f994f2..da6c5f994f2 100644
--- a/sql/updates/world/2013_01_10_01_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_10_01_world_sai.sql
diff --git a/sql/updates/world/2013_01_10_02_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_10_02_world_creature_addon.sql
index 4ad14575d36..4ad14575d36 100644
--- a/sql/updates/world/2013_01_10_02_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_10_02_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_10_03_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_10_03_world_creature_addon.sql
index ef633331937..ef633331937 100644
--- a/sql/updates/world/2013_01_10_03_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_10_03_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_10_04_world_creature_addon.sql b/sql/old/3.3.5a/2013_01_10_04_world_creature_addon.sql
index 74f2356e7a7..74f2356e7a7 100644
--- a/sql/updates/world/2013_01_10_04_world_creature_addon.sql
+++ b/sql/old/3.3.5a/2013_01_10_04_world_creature_addon.sql
diff --git a/sql/updates/world/2013_01_10_05_world_sai.sql b/sql/old/3.3.5a/2013_01_10_05_world_sai.sql
index 82f2a16a113..82f2a16a113 100644
--- a/sql/updates/world/2013_01_10_05_world_sai.sql
+++ b/sql/old/3.3.5a/2013_01_10_05_world_sai.sql
diff --git a/sql/old/3.3.5a/2013_01_11_00_world_ayamiss.sql b/sql/old/3.3.5a/2013_01_11_00_world_ayamiss.sql
new file mode 100644
index 00000000000..cbdb7a2ed16
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_11_00_world_ayamiss.sql
@@ -0,0 +1,4 @@
+DELETE FROM `creature_text` WHERE `entry`=15369;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(15369,0,0,'%s goes into a frenzy!',16,0,100,0,0,0,'Ayamiss frenzy');
+UPDATE `creature_template` SET ScriptName='npc_hive_zara_larva' WHERE entry=15555;
diff --git a/sql/old/3.3.5a/2013_01_11_01_world_conditions.sql b/sql/old/3.3.5a/2013_01_11_01_world_conditions.sql
new file mode 100644
index 00000000000..352efb792b4
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_11_01_world_conditions.sql
@@ -0,0 +1,5 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=36554;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=36554;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(17, 0, 36554, 0, 0, 21, 0, 1024, 0, 0, 1, 103, 0, '', 'Shadowstep - not using Shadowstep while rooted');
diff --git a/sql/old/3.3.5a/2013_01_11_02_world_sai.sql b/sql/old/3.3.5a/2013_01_11_02_world_sai.sql
new file mode 100644
index 00000000000..09466db2e94
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_11_02_world_sai.sql
@@ -0,0 +1,109 @@
+-- Colonel Zerran SAI
+SET @ENTRY := 15385;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Colonel Zerran - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,8000,9000,11,25462,0,0,0,0,0,6,0,0,0,0,0,0,0, 'Colonel Zerran - In Combat - Cast Enlarge'),
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Colonel Zerran - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Colonel Zerran - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Colonel Zerran - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Colonel Zerran - In Combat - Decrement phase (Phase 1)');
+
+-- Major Yeggeth SAI
+SET @ENTRY := 15386;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Yeggeth - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,8000,9000,11,25282,0,0,0,0,0,6,0,0,0,0,0,0,0, 'Major Yeggeth - In Combat - Cast Shield of Rajaxx'),
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Yeggeth - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Yeggeth - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Yeggeth - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Yeggeth - In Combat - Decrement phase (Phase 1)');
+
+-- Qiraji Warrior SAI
+SET @ENTRY := 15387;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,2,0,100,3,0,25,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Qiraji Warrior - @25%HP - Cast Enrage'),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Qiraji Warrior - @20%HP - Say 0');
+
+-- Add aura for Qiraji Warrior
+DELETE FROM `creature_template_addon` WHERE `entry`=15387;
+INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES
+(15387,1, '18950');
+
+-- NPC talk text for Qiraji Warrior
+DELETE FROM `creature_text` WHERE `entry` IN (15387);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(15387,0,0, '%s goes into a frenzy!',16,0,100,0,0,0, 'Qiraji Warrior');
+
+-- Major Pakkon SAI
+SET @ENTRY := 15388;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Pakkon - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,14000,15000,11,25322,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Major Pakkon - In Combat - Cast Sweeping Slam'),
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Pakkon - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Pakkon - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Pakkon - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Major Pakkon - In Combat - Decrement phase (Phase 1)');
+
+-- Captain Drenn SAI
+SET @ENTRY := 15389;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Drenn - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,14000,15000,11,26550,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Captain Drenn - In Combat - Cast Lightning Cloud'),
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Drenn - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Drenn - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Drenn - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Drenn - In Combat - Decrement phase (Phase 1)');
+
+-- Captain Xurrem SAI
+SET @ENTRY := 15390;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Xurrem - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,14000,15000,11,25425,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Captain Xurrem - In Combat - Cast Shockwave'),
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Xurrem - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Xurrem - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Xurrem - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Xurrem - In Combat - Decrement phase (Phase 1)');
+
+-- Captain Qeez SAI
+SET @ENTRY := 15391;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Qeez - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,14000,15000,11,19134,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Captain Qeez - In Combat - Cast Frightening Shout'),
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Qeez - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Qeez - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Qeez - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Qeez - In Combat - Decrement phase (Phase 1)');
+
+-- Captain Tuubid SAI
+SET @ENTRY := 15392;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,2,10000,11000,8000,9000,11,24317,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Tuubid - In Combat - Cast Sunder Armor'),
+(@ENTRY,0,1,0,0,0,100,2,12000,13000,14000,15000,11,25471,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Captain Tuubid - In Combat - Cast Attack Order'), -- Needs scripting
+(@ENTRY,0,2,0,0,0,100,2,13000,17000,14000,18000,23,1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Tuubid - In Combat - Increment phase'),
+(@ENTRY,0,3,0,0,1,100,2,1000,1000,1000,1000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Tuubid - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,4,0,0,1,100,2,2000,2000,2000,2000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Tuubid - In Combat - Cast Cleave (Phase 1)'),
+(@ENTRY,0,5,0,0,1,100,2,3000,3000,3000,3000,23,0,1,0,0,0,0,2,0,0,0,0,0,0,0, 'Captain Tuubid - In Combat - Decrement phase (Phase 1)');
diff --git a/sql/old/3.3.5a/2013_01_11_03_world_sai.sql b/sql/old/3.3.5a/2013_01_11_03_world_sai.sql
new file mode 100644
index 00000000000..e08252a4894
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_11_03_world_sai.sql
@@ -0,0 +1,2 @@
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=24683 AND `id`=13;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=24696 AND `id`=12;
diff --git a/sql/old/3.3.5a/2013_01_11_04_world_sai.sql b/sql/old/3.3.5a/2013_01_11_04_world_sai.sql
new file mode 100644
index 00000000000..3c885d85cc1
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_11_04_world_sai.sql
@@ -0,0 +1,3 @@
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=23689 AND `id`=5;
+UPDATE `smart_scripts` SET `link`=0, `action_param2`=1 WHERE `entryorguid`=16357 AND `id`=3;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16357 AND `id`=4;
diff --git a/sql/old/3.3.5a/2013_01_11_05_world_creature_text.sql b/sql/old/3.3.5a/2013_01_11_05_world_creature_text.sql
new file mode 100644
index 00000000000..1283fd86106
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_11_05_world_creature_text.sql
@@ -0,0 +1,13 @@
+-- NPC talk text for Gatewatcher Gyro-Kill
+DELETE FROM `creature_text` WHERE `entry`=19218;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(19218,0,0, 'I predict a painful death.',14,0,100,0,0,11101, 'Gatewatcher Gyro-Kill - Aggro'),
+(19218,1,0, 'Your strategy was flawed.',14,0,100,0,0,11102, 'Gatewatcher Gyro-Kill - On Kill'),
+(19218,1,1, 'Yes, the only logical outcome.',12,0,100,0,0,11103, 'Gatewatcher Gyro-Kill - On Kill'),
+(19218,2,0, 'Measure twice; cut once.',14,0,100,0,0,11104, 'Gatewatcher Gyro-Kill - Sawblades'),
+(19218,2,1, 'If my division is correct you should be quite dead.',14,0,100,0,0,11105, 'Gatewatcher Gyro-Kill - Sawblades'),
+(19218,3,0, 'An unforeseen... contingency.',14,0,100,0,0,11106, 'Gatewatcher Gyro-Kill - On Death');
+
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=19218;
+DELETE FROM `creature_ai_texts` WHERE `entry` BETWEEN -86 AND -81;
+UPDATE `creature_template` SET `AIName`='', `ScriptName`= 'Boss_Gatewatcher_Gyrokill' WHERE `entry`=19218;
diff --git a/sql/old/3.3.5a/2013_01_12_00_world_smart_scripts.sql b/sql/old/3.3.5a/2013_01_12_00_world_smart_scripts.sql
new file mode 100644
index 00000000000..06562cbd122
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_00_world_smart_scripts.sql
@@ -0,0 +1,7 @@
+-- Hulking Abomination
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=31140;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=31140 AND `source_type`=0;
+INSERT INTO `smart_scripts`(`entryorguid`,`id`,`event_type`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`target_type`,`comment`) VALUES
+(31140,0,6,0,0,0,0,0,11,58995,2,1,'Hulking Abomination - Just died - Cast Exploding Corpse'),
+(31140,1,9,1,8,40,0,0,11,50335,0,7,'Hulking Abomination - Invoker in range of 8 to 40 yards - Cast Scourge Hook'),
+(31140,2,0,0,3000,3000,7000,7000,11,40504,0,2,'Hulking Abomination - In combat - Cast Cleave');
diff --git a/sql/old/3.3.5a/2013_01_12_01_world_string.sql b/sql/old/3.3.5a/2013_01_12_01_world_string.sql
new file mode 100644
index 00000000000..8766e97231d
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_01_world_string.sql
@@ -0,0 +1,3 @@
+DELETE FROM `trinity_string` WHERE `entry`=2029;
+INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`) VALUES
+(2029,'|cff00ff00Ticket Response|r: [%s]|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql/old/3.3.5a/2013_01_12_02_world_creature_template.sql b/sql/old/3.3.5a/2013_01_12_02_world_creature_template.sql
new file mode 100644
index 00000000000..608af749f15
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_02_world_creature_template.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `ScriptName`= 'boss_gatewatcher_gyrokill' WHERE `entry`=19218;
diff --git a/sql/old/3.3.5a/2013_01_12_03_world_gameobject.sql b/sql/old/3.3.5a/2013_01_12_03_world_gameobject.sql
new file mode 100644
index 00000000000..a7a914fceec
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_03_world_gameobject.sql
@@ -0,0 +1,7 @@
+-- Add missing doors to mechanar
+SET @GUID := 6032;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @GUID AND @GUID+2;
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@GUID,184632,554,3,1,236.4597,52.36356,1.653544,3.141593,0,0,-1,0,120,0,1),
+(@GUID+1,184322,554,3,1,242.874,52.314810,1.596334,3.141593,0,0,-1,0,120,0,1),
+(@GUID+2,184449,554,3,1,267.9281,52.31481,27.04254,3.141593,0,0,-1,0,120,0,1);
diff --git a/sql/old/3.3.5a/2013_01_12_03_world_waypoints.sql b/sql/old/3.3.5a/2013_01_12_03_world_waypoints.sql
new file mode 100644
index 00000000000..3903e383ae8
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_03_world_waypoints.sql
@@ -0,0 +1,53 @@
+-- Pathing for Mechano-Lord Capacitus Entry: 19219
+SET @NPC := 83160;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=207.2308,`position_y`=-14.30226,`position_z`=-2.192125 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,207.2308,-14.30226,-2.192125,0,7000,0,0,100,0),
+(@PATH,2,204.4302,-15.78992,-2.192125,0,1000,0,0,100,0),
+(@PATH,3,207.7613,-18.93377,-2.192125,0,0,0,0,100,0),
+(@PATH,4,208.2819,-16.48228,-2.192125,0,1000,0,0,100,0),
+(@PATH,5,228.1113,-0.829701,-0.8854336,0,0,0,0,100,0),
+(@PATH,6,226.6032,19.45208,-1.726556,0,14000,0,0,100,0),
+(@PATH,7,209.7744,-12.69758,-2.192125,0,1000,0,0,100,0),
+(@PATH,8,209.7744,-12.69758,-2.192125,3.141593,1000,0,0,100,0),
+(@PATH,9,228.1113,-0.829701,-0.8854336,0,0,0,0,100,0),
+(@PATH,10,226.6032,19.45208,-1.726556,0,0,0,0,100,0),
+(@PATH,11,204.9646,26.38312,-0.005853632,0,13000,0,0,100,0),
+(@PATH,12,209.7744,-12.69758,-2.192125,0,1000,0,0,100,0),
+(@PATH,13,209.7744,-12.69758,-2.192125,3.141593,1000,0,0,100,0),
+(@PATH,14,224.3664,-23.35326,-2.192125,0,0,0,0,100,0),
+(@PATH,15,231.1084,-38.22675,8.909556E-07,0,15000,0,0,100,0),
+(@PATH,16,209.7744,-12.69758,-2.192125,0,0,0,0,100,0),
+(@PATH,17,209.7744,-12.69758,-2.192125,3.141593,1000,0,0,100,0),
+(@PATH,18,189.2316,-17.36449,-2.192126,0,0,0,0,100,0),
+(@PATH,19,185.7177,-4.297129,-1.142366,0,0,0,0,100,0),
+(@PATH,20,191.9589,6.435908,-0.7838742,0,0,0,0,100,0),
+(@PATH,21,196.1359,21.01234,-1.426585,0,0,0,0,100,0),
+(@PATH,22,207.8954,18.24695,-2.192125,0,0,0,0,100,0),
+(@PATH,23,213.9077,10.01895,-2.192125,0,11000,0,0,100,0),
+(@PATH,24,209.7744,-12.69758,-2.192125,0,0,0,0,100,0),
+(@PATH,25,209.7744,-12.69758,-2.192125,3.141593,2000,0,0,100,0),
+(@PATH,26,203.706,-11.63055,-2.192125,0,10000,0,0,100,0),
+(@PATH,27,206.4484,-14.27736,-2.192125,0,0,0,0,100,0),
+(@PATH,28,208.3172,-13.38252,-2.192125,0,0,0,0,100,0),
+(@PATH,29,209.3133,-12.82924,-2.192125,0,7000,0,0,100,0),
+(@PATH,30,204.3208,-10.91346,-2.192125,0,0,0,0,100,0),
+(@PATH,31,207.38,-13.36442,-2.192125,0,0,0,0,100,0),
+(@PATH,32,207.7303,-11.56095,-2.192125,0,7000,0,0,100,0),
+(@PATH,33,195.6332,-15.0944,-2.192125,0,0,0,0,100,0),
+(@PATH,34,195.4723,-29.45176,-2.192125,0,0,0,0,100,0),
+(@PATH,35,202.765,-41.79265,-2.192125,0,7000,0,0,100,0),
+(@PATH,36,209.7744,-12.69758,-2.192125,0,1000,0,0,100,0),
+(@PATH,37,209.7744,-12.69758,-2.192125,3.141593,1000,0,0,100,0),
+(@PATH,38,189.2316,-17.36449,-2.192126,0,0,0,0,100,0),
+(@PATH,39,185.7177,-4.297129,-1.142366,0,0,0,0,100,0),
+(@PATH,40,191.9589,6.435908,-0.7838742,0,0,0,0,100,0),
+(@PATH,41,196.1359,21.01234,-1.426585,0,0,0,0,100,0),
+(@PATH,42,207.8954,18.24695,-2.192125,0,0,0,0,100,0),
+(@PATH,43,213.9077,10.01895,-2.192125,0,6000,0,0,100,0),
+(@PATH,44,209.7744,-12.69758,-2.192125,0,20000,0,0,100,0),
+(@PATH,45,210.4122,-9.19214,-2.192125,0,0,0,0,100,0);
diff --git a/sql/old/3.3.5a/2013_01_12_04_world_misc.sql b/sql/old/3.3.5a/2013_01_12_04_world_misc.sql
new file mode 100644
index 00000000000..5ba81aa39f1
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_04_world_misc.sql
@@ -0,0 +1,28 @@
+UPDATE `creature_template` SET `AIName` = '',`ScriptName` = 'boss_mechano_lord_capacitus' WHERE `entry` =19219;
+UPDATE `creature_template` SET `unit_flags`=`unit_flags` |2 |33554432 WHERE `entry` IN (20405,21534); -- Nether Charge
+
+DELETE FROM `creature_ai_scripts` WHERE `creature_id` IN (19219,20405);
+DELETE FROM `creature_ai_texts` WHERE `entry` BETWEEN -92 AND -87;
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (20405,21534);
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(20405,0,0,0,0,0,'37670 35150'), -- Nether Charge
+(21534,0,0,0,0,0,'37670 35150'); -- Nether Charge (1)
+
+SET @ENTRY := 20405; -- Nether Charge
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+UPDATE creature_template SET AIName="SmartAI" WHERE entry=@ENTRY LIMIT 1;
+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`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,14000,14000,1000,1000,11,35151,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,"Nether Bomb - Nether Charge Pulse"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,"Nether Charge - No Melee"),
+(@ENTRY,0,2,0,0,0,100,0,0,0,14000,14000,21,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,"Nether Charge - Prevent Combat Movement When Start...");
+
+DELETE FROM `creature_text` WHERE `entry` = 19219;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(19219, 0, 0, 'You should split while you can.', 14, 0, 100, 0, 0, 11162, 'Mechano-Lord Capacitus - Aggro'),
+(19219, 1, 0, 'Go ahead, gimme your best shot. I can take it!', 14, 0, 100, 0, 0, 11166, 'Mechano-Lord Capacitus - Yells'), -- Reflective Damage Shield
+(19219, 2, 0, 'Think you can hurt me, huh? Think I''m afraid a'' you?', 14, 0, 100, 0, 0, 11165, 'Mechano-Lord Capacitus - Yells'), -- Reflective Magic Shield
+(19219, 3, 0, 'Can''t say I didn''t warn you!', 14, 0, 100, 0, 0, 11163, 'Mechano-Lord Capacitus - Killing a player'),
+(19219, 3, 1, 'Damn, I''m good!', 14, 0, 100, 0, 0, 11164, 'Mechano-Lord Capacitus - Killing a player'),
+(19219, 4, 0, 'Bully!', 14, 0, 100, 0, 0, 11167, 'Mechano-Lord Capacitus - Death');
diff --git a/sql/old/3.3.5a/2013_01_12_05_world_waypoint_script.sql b/sql/old/3.3.5a/2013_01_12_05_world_waypoint_script.sql
new file mode 100644
index 00000000000..639b27b911e
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_12_05_world_waypoint_script.sql
@@ -0,0 +1 @@
+DELETE FROM `waypoint_scripts` WHERE `id` = 8316001;
diff --git a/sql/old/3.3.5a/2013_01_13_00_world_gameobject_template.sql b/sql/old/3.3.5a/2013_01_13_00_world_gameobject_template.sql
new file mode 100644
index 00000000000..056dfea0bc9
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_13_00_world_gameobject_template.sql
@@ -0,0 +1 @@
+UPDATE `gameobject_template` SET `ScriptName`='' WHERE `entry`=130511;
diff --git a/sql/old/3.3.5a/2013_01_13_01_world_sai.sql b/sql/old/3.3.5a/2013_01_13_01_world_sai.sql
new file mode 100644
index 00000000000..a8513d88ab0
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_13_01_world_sai.sql
@@ -0,0 +1,41 @@
+SET @CONTROL_WATCHER := 58524;
+SET @ETHREAL := 58548;
+SET @GOSSIP := 10028;
+SET @EYE := 193058;
+SET @WATCHER := 31110;
+SET @MIRROR_NPC := 31005;
+SET @FIGMENT_SPELL := 57530;
+SET @PLAYER_MIRROR := 58122;
+SET @CONTROL_START := 58120;
+SET @MIRROR_SPELL := 57528;
+SET @WEAPON_COPY := 41055;
+SET @COPY_OFF_HAND := 45205;
+
+UPDATE `creature_template` SET `spell1` = 58541, `spell2` = 58544, `spell3` = 58543, `spell4` = 58562, `spell5` = 58563, `spell6` = 58658 WHERE `entry` = @WATCHER;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@MIRROR_NPC;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`= @EYE;
+UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = @WATCHER;
+DELETE FROM `smart_scripts` WHERE `entryorguid`= @EYE;
+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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@EYE,1,0,1,62,0,100,0,@GOSSIP,0,0,0,85,@CONTROL_WATCHER,2,0,0,0,0,7,0,0,0,0,0,0,0, 'On Gossip Option Select - Cast Control Eidolon Watcher - Action Invoker'),
+(@EYE,1,1,2,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Eye of Dominion - On link - Close Gossip Option'),
+(@EYE,1,2,3,61,0,100,0,0,0,0,0,85,@PLAYER_MIRROR,2,0,0,0,0,7,0,0,0,0,0,0,0, 'Eye of Dominion - On link - Summon Player Mirror'),
+(@EYE,1,3,0,61,0,100,0,0,0,0,0,15,13168,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Eye of Dominion - On link - Complete quest');
+DELETE FROM `smart_scripts` WHERE `entryorguid`= @MIRROR_NPC;
+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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@MIRROR_NPC,0,0,1,54,0,100,1,0,0,0,0,85,@MIRROR_SPELL,2,0,0,0,0,1,0,0,0,0,0,0,0, 'On spawn - Cast Mirror Spell - Action Invoker'),
+(@MIRROR_NPC,0,1,2,61,0,100,1,0,0,0,0,85,@WEAPON_COPY,2,0,0,0,0,1,0,0,0,0,0,0,0,'On Link - Copy Main Hand - Action Invoker'),
+(@MIRROR_NPC,0,2,3,61,0,100,1,0,0,0,0,85,@COPY_OFF_HAND,2,0,0,0,0,1,0,0,0,0,0,0,0,'On Link - Copy Offhand - Action Invoker'),
+(@MIRROR_NPC,0,3,0,61,0,100,1,0,0,0,0,11,@CONTROL_START,2,0,0,0,0,1,0,0,0,0,0,0,0,'On Spawn - Cast Start Control - Action Invoker');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@WATCHER;
+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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@WATCHER,0,0,0,54,0,100,1,0,0,0,0,11,@ETHREAL,2,0,0,0,0,1,0,0,0,0,0,0,0, 'On spawn - Cast Ethreal Aura - On self');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @EYE;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22,4,@EYE,1,0,9,0,13168,0,0,0,0,'','Execute SAI line only if player has quest active');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@MIRROR_SPELL;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,7,@MIRROR_SPELL,0,0,31,0,3,@MIRROR_NPC,0,0,0,'','Spell target Mirror npc');
diff --git a/sql/old/3.3.5a/2013_01_13_02_world_gluttonous_lurkers.sql b/sql/old/3.3.5a/2013_01_13_02_world_gluttonous_lurkers.sql
new file mode 100644
index 00000000000..71f8efbe0c3
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_13_02_world_gluttonous_lurkers.sql
@@ -0,0 +1,36 @@
+-- Quest: Gluttonous Lurkers (12527)
+-- Zul'drak Rat: Spellclick spells
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=28202;
+INSERT INTO `npc_spellclick_spells`(`npc_entry`,`spell_id`,`cast_flags`) VALUE
+(28202,50926,1),
+(28202,50927,2);
+
+-- Zul'drak Rat: SAI
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=28202;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=28202 AND `source_type`=0;
+INSERT INTO `smart_scripts`(`entryorguid`,`event_type`,`event_param1`,`action_type`,`target_type`,`comment`) VALUES
+(28202,8,50926,41,1,'Zuldrak Rat - On spell hit of Gluttonous Lurkers: Create ZulDrak Rat Cover - Despawn');
+
+-- Zul'drak Rat spell: Script assignment
+DELETE FROM `spell_script_names` WHERE `spell_id`=50894;
+INSERT INTO `spell_script_names`(`spell_id`,`ScriptName`) VALUE
+(50894,'spell_zuldrak_rat');
+
+-- Zul'drak Rat spell: Conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=50894;
+INSERT INTO `conditions`(`SourceTypeOrReferenceId`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ErrorType`,`Comment`) VALUE
+(17,50894,31,1,3,28145,12,'Zuldrak Rat - Target has to be Lurking Basilisk');
+
+-- Lurking Basilisk: SAI
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=28145;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=28145;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=28145 AND `source_type`=0;
+INSERT INTO `smart_scripts`(`entryorguid`,`event_type`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`target_type`,`comment`) VALUE
+(28145,0,5000,5000,17000,27000,11,54470,2,'Lurking Basilisk - In Combat - Cast Venemous Bite');
+
+-- Gorged Lurking Basilisk: SAI
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=28203;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=28203;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=28203 AND `source_type`=0;
+INSERT INTO `smart_scripts`(`entryorguid`,`event_type`,`event_param1`,`action_type`,`target_type`,`comment`) VALUES
+(28203,8,50918,41,1,'Gorged Lurking Basilisk - On Spell Hit of Create Basilisk Crystals Cover - Despawn');
diff --git a/sql/old/3.3.5a/2013_01_13_03_world_spell_script_names.sql b/sql/old/3.3.5a/2013_01_13_03_world_spell_script_names.sql
new file mode 100644
index 00000000000..a776ea4a765
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_13_03_world_spell_script_names.sql
@@ -0,0 +1,4 @@
+-- Zul'drak Rat spell: Script assignment
+DELETE FROM `spell_script_names` WHERE `spell_id`=50894;
+INSERT INTO `spell_script_names`(`spell_id`,`ScriptName`) VALUE
+(50894,'spell_q12527_zuldrak_rat');
diff --git a/sql/old/3.3.5a/2013_01_13_04_world_conditions.sql b/sql/old/3.3.5a/2013_01_13_04_world_conditions.sql
new file mode 100644
index 00000000000..eaf45d5d696
--- /dev/null
+++ b/sql/old/3.3.5a/2013_01_13_04_world_conditions.sql
@@ -0,0 +1,9 @@
+SET @EYE := 193058;
+SET @MIRROR_SPELL := 57528;
+SET @MIRROR_NPC := 31005;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @EYE;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (13,17) AND `SourceEntry`=@MIRROR_SPELL;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22,1,@EYE,1,0,9,0,13168,0,0,0,0,'','Execute SAI line only if player has quest active'),
+(17,0,@MIRROR_SPELL,0,0,31,0,3,@MIRROR_NPC,0,0,0,'','Spell target Mirror npc');
diff --git a/sql/updates/world/2013_01_14_00_world_version.sql b/sql/updates/world/2013_01_14_00_world_version.sql
new file mode 100644
index 00000000000..0bc0a89a8a4
--- /dev/null
+++ b/sql/updates/world/2013_01_14_00_world_version.sql
@@ -0,0 +1 @@
+UPDATE `version` SET `db_version`='TDB 335.50', `cache_id`=50 LIMIT 1;
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index a3cb57b3332..09ba2cc19b1 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -172,7 +172,9 @@ void UnitAI::DoCast(Unit* victim, uint32 spellId, bool triggered)
void UnitAI::DoCastVictim(uint32 spellId, bool triggered)
{
- // Why don't we check for casting unit_state and existing target as we do in DoCast(.. ?
+ if (!me->getVictim() || (me->HasUnitState(UNIT_STATE_CASTING) && !triggered))
+ return;
+
me->CastSpell(me->getVictim(), spellId, triggered);
}
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 52183b9509d..e0a3943d70f 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -523,7 +523,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
WorldPacket status;
BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType());
uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType());
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), GetPlayerTeam(itr->first));
player->GetSession()->SendPacket(&status);
player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
@@ -919,7 +919,7 @@ void Battleground::EndBattleground(uint32 winner)
player->GetSession()->SendPacket(&pvpLogData);
WorldPacket data;
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType());
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), GetPlayerTeam(player->GetGUID()));
player->GetSession()->SendPacket(&data);
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1);
}
@@ -1022,7 +1022,7 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
if (SendPacket)
{
WorldPacket data;
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_NONE, 0, 0, 0);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_NONE, 0, 0, 0, 0);
player->GetSession()->SendPacket(&data);
}
@@ -1151,7 +1151,7 @@ void Battleground::AddPlayer(Player* player)
WorldPacket status;
BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType());
uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), isArena() ? 0 : 1);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), team);
player->GetSession()->SendPacket(&status);
player->RemoveAurasByType(SPELL_AURA_MOUNTED);
@@ -1846,7 +1846,7 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player)
sBattlegroundMgr->BuildPvpLogDataPacket(&data, this);
player->GetSession()->SendPacket(&data);
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType());
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), GetPlayerTeam(player->GetGUID()));
player->GetSession()->SendPacket(&data);
}
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 71ac8cf8180..24e69a151b5 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -162,7 +162,7 @@ void BattlegroundMgr::Update(uint32 diff)
}
}
-void BattlegroundMgr::BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 QueueSlot, uint8 StatusID, uint32 Time1, uint32 Time2, uint8 arenatype, uint8 uiFrame)
+void BattlegroundMgr::BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 QueueSlot, uint8 StatusID, uint32 Time1, uint32 Time2, uint8 arenatype, uint32 arenaFaction)
{
// we can be in 2 queues in same time...
@@ -179,35 +179,35 @@ void BattlegroundMgr::BuildBattlegroundStatusPacket(WorldPacket* data, Battlegro
// The following segment is read as uint64 in client but can be appended as their original type.
*data << uint8(arenatype);
sLog->outDebug(LOG_FILTER_NETWORKIO, "BattlegroundMgr::BuildBattlegroundStatusPacket: arenatype = %u for bg instanceID %u, TypeID %u.", arenatype, bg->GetClientInstanceID(), bg->GetTypeID());
- *data << uint8(bg->isArena() ? 0xC : 0x2);
+ *data << uint8(bg->isArena() ? 0xE : 0x0);
*data << uint32(bg->GetTypeID());
*data << uint16(0x1F90);
// End of uint64 segment, decomposed this way for simplicity
- *data << uint8(0); // 3.3.0, some level, only saw 80...
- *data << uint8(0); // 3.3.0, some level, only saw 80...
+ *data << uint8(bg->GetMinLevel());
+ *data << uint8(bg->GetMaxLevel());
*data << uint32(bg->GetClientInstanceID());
// alliance/horde for BG and skirmish/rated for Arenas
// following displays the minimap-icon 0 = faction icon 1 = arenaicon
- *data << uint8(bg->isRated()); // 1 for rated match, 0 for bg or non rated match
+ *data << uint8(bg->isRated()); // 1 for rated match, 0 for bg or non rated match
- *data << uint32(StatusID); // status
+ *data << uint32(StatusID); // status
switch (StatusID)
{
- case STATUS_WAIT_QUEUE: // status_in_queue
- *data << uint32(Time1); // average wait time, milliseconds
- *data << uint32(Time2); // time in queue, updated every minute!, milliseconds
+ case STATUS_WAIT_QUEUE: // status_in_queue
+ *data << uint32(Time1); // average wait time, milliseconds
+ *data << uint32(Time2); // time in queue, updated every minute!, milliseconds
break;
- case STATUS_WAIT_JOIN: // status_invite
- *data << uint32(bg->GetMapId()); // map id
- *data << uint64(0); // 3.3.5, unknown
- *data << uint32(Time1); // time to remove from queue, milliseconds
+ case STATUS_WAIT_JOIN: // status_invite
+ *data << uint32(bg->GetMapId()); // map id
+ *data << uint64(0); // 3.3.5, unknown
+ *data << uint32(Time1); // time to remove from queue, milliseconds
break;
- case STATUS_IN_PROGRESS: // status_in_progress
- *data << uint32(bg->GetMapId()); // map id
- *data << uint64(0); // 3.3.5, unknown
- *data << uint32(Time1); // time to bg auto leave, 0 at bg start, 120000 after bg end, milliseconds
- *data << uint32(Time2); // time from bg start, milliseconds
- *data << uint8(uiFrame);
+ case STATUS_IN_PROGRESS: // status_in_progress
+ *data << uint32(bg->GetMapId()); // map id
+ *data << uint64(0); // 3.3.5, unknown
+ *data << uint32(Time1); // time to bg auto leave, 0 at bg start, 120000 after bg end, milliseconds
+ *data << uint32(Time2); // time from bg start, milliseconds
+ *data << uint8(arenaFaction == ALLIANCE ? 1 : 0); // arenafaction (0 for horde, 1 for alliance)
break;
default:
sLog->outError(LOG_FILTER_BATTLEGROUND, "Unknown BG status!");
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index 236494792d4..c66d9d64ab8 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -80,7 +80,7 @@ class BattlegroundMgr
void BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result);
void BuildUpdateWorldStatePacket(WorldPacket* data, uint32 field, uint32 value);
void BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg);
- void BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 queueSlot, uint8 statusId, uint32 time1, uint32 time2, uint8 arenaType, uint8 uiFrame = 1);
+ void BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 queueSlot, uint8 statusId, uint32 time1, uint32 time2, uint8 arenaType, uint32 arenaFaction);
void BuildPlaySoundPacket(WorldPacket* data, uint32 soundId);
void SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, uint64 guid);
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index 150cec08e3c..6d5f3d07bae 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -396,7 +396,7 @@ void BattlegroundQueue::RemovePlayer(uint64 guid, bool decreaseInvitedCount)
plr2->RemoveBattlegroundQueueId(bgQueueTypeId); // must be called this way, because if you move this call to
// queue->removeplayer, it causes bugs
WorldPacket data;
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0, 0);
plr2->GetSession()->SendPacket(&data);
}
// then actually delete, this may delete the group as well!
@@ -481,7 +481,7 @@ bool BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg,
player->GetName().c_str(), player->GetGUIDLow(), bg->GetInstanceID(), queueSlot, bg->GetTypeID());
// send status packet
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, 0);
player->GetSession()->SendPacket(&data);
}
return true;
@@ -1003,7 +1003,7 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
WorldPacket data;
//we must send remaining time in queue
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, 0, m_ArenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, 0, m_ArenaType, 0);
player->GetSession()->SendPacket(&data);
}
}
@@ -1051,7 +1051,7 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
sBattlegroundMgr->ScheduleQueueUpdate(0, 0, m_BgQueueTypeId, m_BgTypeId, bg->GetBracketId());
WorldPacket data;
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0, 0);
player->GetSession()->SendPacket(&data);
}
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index 4ddf7a8b052..b6452e76b5d 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -247,7 +247,7 @@ void BattlegroundEY::UpdatePointStatuses()
if (player)
{
this->UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[point], player);
- //if point owner changed we must evoke event!
+ //if point owner changed we must evoke event!
if (pointOwnerTeamId != m_PointOwnedByTeam[point])
{
//point was uncontrolled and player is from team which captured point
@@ -258,6 +258,12 @@ void BattlegroundEY::UpdatePointStatuses()
if (m_PointState[point] == EY_POINT_UNDER_CONTROL && player->GetTeam() != m_PointOwnedByTeam[point])
this->EventTeamLostPoint(player, point);
}
+
+ /// @workaround The original AreaTrigger is covered by a bigger one and not triggered on client side.
+ if (point == FEL_REAVER && m_PointOwnedByTeam[point] == player->GetTeam())
+ if (m_FlagState && GetFlagPickerGUID() == player->GetGUID())
+ if (player->GetDistance(2044.0f, 1729.729f, 1190.03f) < 3.0f)
+ EventPlayerCapturedFlag(player, BG_EY_OBJECT_FLAG_FEL_REAVER);
}
}
}
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 0526c9276f9..d476113edc4 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -311,6 +311,12 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
condMeets = ((1 << object->GetMap()->GetSpawnMode()) & ConditionValue1);
break;
}
+ case CONDITION_UNIT_STATE:
+ {
+ if (Unit* unit = object->ToUnit())
+ condMeets = unit->HasUnitState(ConditionValue1);
+ break;
+ }
default:
condMeets = false;
break;
@@ -468,6 +474,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_GENDER:
mask |= GRID_MAP_TYPE_MASK_PLAYER;
break;
+ case CONDITION_UNIT_STATE:
+ mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER;
+ break;
default:
ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
break;
@@ -1957,9 +1966,15 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
}
break;
}
- case CONDITION_UNUSED_21:
- sLog->outError(LOG_FILTER_SQL, "Found ConditionTypeOrReference = CONDITION_UNUSED_21 in `conditions` table - ignoring");
- return false;
+ case CONDITION_UNIT_STATE:
+ {
+ if (cond->ConditionValue1 > uint32(UNIT_STATE_ALL_STATE))
+ {
+ sLog->outError(LOG_FILTER_SQL, "UnitState condition has non existing UnitState in value1 (%u), skipped", cond->ConditionValue1);
+ return false;
+ }
+ break;
+ }
case CONDITION_UNUSED_24:
sLog->outError(LOG_FILTER_SQL, "Found ConditionTypeOrReference = CONDITION_UNUSED_24 in `conditions` table - ignoring");
return false;
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index fec5cd6fc95..b49626747a6 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -54,7 +54,7 @@ enum ConditionTypes
CONDITION_TITLE = 18, // title id 0 0 true if player has title
CONDITION_SPAWNMASK = 19, // spawnMask 0 0 true if in spawnMask
CONDITION_GENDER = 20, // gender 0 0 true if player's gender is equal to gender
- CONDITION_UNUSED_21 = 21, //
+ CONDITION_UNIT_STATE = 21, // unitState 0 0 true if unit has unitState
CONDITION_MAPID = 22, // map_id 0 0 true if in map_id
CONDITION_AREAID = 23, // area_id 0 0 true if in area_id
CONDITION_UNUSED_24 = 24, //
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 1395440fb6d..d0784f05c4d 100644
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -31,7 +31,7 @@ char const AuctionHouseEntryfmt[]="niiixxxxxxxxxxxxxxxxx";
char const BankBagSlotPricesEntryfmt[]="ni";
char const BarberShopStyleEntryfmt[]="nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii";
char const BattlemasterListEntryfmt[]="niiiiiiiiixssssssssssssssssxiixx";
-char const CharStartOutfitEntryfmt[]="diiiiiiiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
+char const CharStartOutfitEntryfmt[]="xniiiiiiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
char const CharTitlesEntryfmt[]="nxssssssssssssssssxxxxxxxxxxxxxxxxxxi";
char const ChatChannelsEntryfmt[]="nixssssssssssssssssxxxxxxxxxxxxxxxxxx";
// ChatChannelsEntryfmt, index not used (more compact store)
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 9d5d8e40b54..09be64813af 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -1563,7 +1563,6 @@ void LFGMgr::FinishDungeon(uint64 gguid, const uint32 dungeonId)
LfgPlayerRewardData data = LfgPlayerRewardData(dungeon->Entry(), GetDungeon(gguid, false), done, quest);
player->GetSession()->SendLfgPlayerReward(data);
}
- SetDungeon(gguid, 0);
}
// --------------------------------------------------------------------------//
@@ -1632,6 +1631,18 @@ LfgState LFGMgr::GetState(uint64 guid)
return state;
}
+LfgState LFGMgr::GetOldState(uint64 guid)
+{
+ LfgState state;
+ if (IS_GROUP_GUID(guid))
+ state = GroupsStore[guid].GetOldState();
+ else
+ state = PlayersStore[guid].GetOldState();
+
+ sLog->outTrace(LOG_FILTER_LFG, "LFGMgr::GetOldState: [" UI64FMTD "] = %u", guid, state);
+ return state;
+}
+
uint32 LFGMgr::GetDungeon(uint64 guid, bool asId /*= true */)
{
uint32 dungeon = GroupsStore[guid].GetDungeon(asId);
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 0a1b90ee04d..33626467486 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -347,6 +347,7 @@ class LFGMgr
uint32 GetDungeon(uint64 guid, bool asId = true);
uint32 GetDungeonMapId(uint64 guid);
LfgState GetState(uint64 guid);
+ LfgState GetOldState(uint64 guid);
uint8 GetKicksLeft(uint64 gguid);
uint64 GetLeader(uint64 guid);
bool IsLfgGroup(uint64 guid);
diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp
index e75a1bdc4b3..f1d2dbb313d 100644
--- a/src/server/game/DungeonFinding/LFGQueue.cpp
+++ b/src/server/game/DungeonFinding/LFGQueue.cpp
@@ -483,7 +483,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(LfgGuidList check)
uint64 gguid = *check.begin();
proposal.queues = check;
- proposal.isNew = numLfgGroups != 1 || !sLFGMgr->GetDungeon(gguid);
+ proposal.isNew = numLfgGroups != 1 || sLFGMgr->GetOldState(gguid) != LFG_STATE_DUNGEON;
if (!sLFGMgr->AllQueued(check))
{
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index e501471b688..14878b078bd 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1120,20 +1120,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
addActionButton(action_itr->button, action_itr->action, action_itr->type);
// original items
- CharStartOutfitEntry const* oEntry = NULL;
- for (uint32 i = 1; i < sCharStartOutfitStore.GetNumRows(); ++i)
- {
- if (CharStartOutfitEntry const* entry = sCharStartOutfitStore.LookupEntry(i))
- {
- if (entry->RaceClassGender == RaceClassGender)
- {
- oEntry = entry;
- break;
- }
- }
- }
-
- if (oEntry)
+ if (CharStartOutfitEntry const* oEntry = sCharStartOutfitStore.LookupEntry(RaceClassGender))
{
for (int j = 0; j < MAX_OUTFIT_ITEMS; ++j)
{
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index b41b61904e6..2ba456b5b3c 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2957,32 +2957,23 @@ void ObjectMgr::PlayerCreateInfoAddItemHelper(uint32 race_, uint32 class_, uint3
sLog->outError(LOG_FILTER_SQL, "Invalid count %i specified on item %u be removed from original player create info (use -1)!", count, itemId);
uint32 RaceClass = (race_) | (class_ << 8);
- bool doneOne = false;
- for (uint32 i = 1; i < sCharStartOutfitStore.GetNumRows(); ++i)
+ for (uint32 gender = 0; gender < GENDER_NONE; ++gender)
{
- if (CharStartOutfitEntry const* entry = sCharStartOutfitStore.LookupEntry(i))
+ if (CharStartOutfitEntry const* entry = sCharStartOutfitStore.LookupEntry(RaceClass | (gender << 16)))
{
- if (entry->RaceClassGender == RaceClass || entry->RaceClassGender == (RaceClass | (1 << 16)))
+ bool found = false;
+ for (uint8 x = 0; x < MAX_OUTFIT_ITEMS; ++x)
{
- bool found = false;
- for (uint8 x = 0; x < MAX_OUTFIT_ITEMS; ++x)
+ if (entry->ItemId[x] > 0 && uint32(entry->ItemId[x]) == itemId)
{
- if (entry->ItemId[x] > 0 && uint32(entry->ItemId[x]) == itemId)
- {
- found = true;
- const_cast<CharStartOutfitEntry*>(entry)->ItemId[x] = 0;
- break;
- }
- }
-
- if (!found)
- sLog->outError(LOG_FILTER_SQL, "Item %u specified to be removed from original create info not found in dbc!", itemId);
-
- if (!doneOne)
- doneOne = true;
- else
+ found = true;
+ const_cast<CharStartOutfitEntry*>(entry)->ItemId[x] = 0;
break;
+ }
}
+
+ if (!found)
+ sLog->outError(LOG_FILTER_SQL, "Item %u specified to be removed from original create info not found in dbc!", itemId);
}
}
}
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index a7df171b1c5..99056960893 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -187,7 +187,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
WorldPacket data;
// send status packet (in queue)
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, ginfo->ArenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, ginfo->ArenaType, 0);
SendPacket(&data);
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Battleground: player joined queue for bg queue type %u bg type %u: GUID %u, NAME %s",
bgQueueTypeId, bgTypeId, _player->GetGUIDLow(), _player->GetName().c_str());
@@ -233,7 +233,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
uint32 queueSlot = member->AddBattlegroundQueueId(bgQueueTypeId);
// send status packet (in queue)
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, ginfo->ArenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, ginfo->ArenaType, 0);
member->GetSession()->SendPacket(&data);
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
member->GetSession()->SendPacket(&data);
@@ -453,7 +453,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
_player->CleanupAfterTaxiFlight();
}
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType());
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), bg->GetPlayerTeam(_player->GetGUID()));
_player->GetSession()->SendPacket(&data);
// remove battleground queue status from BGmgr
bgQueue.RemovePlayer(_player->GetGUID(), false);
@@ -489,7 +489,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData)
}
}
_player->RemoveBattlegroundQueueId(bgQueueTypeId); // must be called this way, because if you move this call to queue->removeplayer, it causes bugs
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0, 0);
bgQueue.RemovePlayer(_player->GetGUID(), true);
// player left queue, we should update it - do not update Arena Queue
if (!ginfo.ArenaType)
@@ -541,7 +541,7 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket & /*recvData*/)
{
// this line is checked, i only don't know if GetStartTime is changing itself after bg end!
// send status in Battleground
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_IN_PROGRESS, bg->GetEndTime(), bg->GetStartTime(), arenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_IN_PROGRESS, bg->GetEndTime(), bg->GetStartTime(), arenaType, bg->GetPlayerTeam(_player->GetGUID()));
SendPacket(&data);
continue;
}
@@ -559,7 +559,7 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket & /*recvData*/)
continue;
uint32 remainingTime = getMSTimeDiff(getMSTime(), ginfo.RemoveInviteTime);
// send status invited to Battleground
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_WAIT_JOIN, remainingTime, 0, arenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_WAIT_JOIN, remainingTime, 0, arenaType, 0);
SendPacket(&data);
}
else
@@ -575,7 +575,7 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket & /*recvData*/)
uint32 avgTime = bgQueue.GetAverageQueueWaitTime(&ginfo, bracketEntry->GetBracketId());
// send status in Battleground Queue
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_WAIT_QUEUE, avgTime, getMSTimeDiff(ginfo.JoinTime, getMSTime()), arenaType);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_WAIT_QUEUE, avgTime, getMSTimeDiff(ginfo.JoinTime, getMSTime()), arenaType, 0);
SendPacket(&data);
}
}
@@ -727,7 +727,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
uint32 queueSlot = member->AddBattlegroundQueueId(bgQueueTypeId);
// send status packet (in queue)
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, arenatype);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, arenatype, 0);
member->GetSession()->SendPacket(&data);
sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err);
member->GetSession()->SendPacket(&data);
@@ -742,7 +742,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData)
WorldPacket data;
// send status packet (in queue)
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, arenatype);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, arenatype, 0);
SendPacket(&data);
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Battleground: player joined queue for arena, skirmish, bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, _player->GetGUIDLow(), _player->GetName().c_str());
}
diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp
index a40e763b030..8a1793af557 100644
--- a/src/server/game/Handlers/ReferAFriendHandler.cpp
+++ b/src/server/game/Handlers/ReferAFriendHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index f116d695e17..292833c3955 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -928,6 +928,7 @@ enum TrinityStrings
LANG_COMMAND_TICKETSHOWESCALATEDLIST = 2026,
LANG_COMMAND_TICKETPENDING = 2027,
LANG_COMMAND_TICKETRESET = 2028,
+ LANG_COMMAND_TICKETLISTRESPONSE = 2029,
// Trinity strings 5000-9999
LANG_COMMAND_FREEZE = 5000,
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 479979f177f..3e30e95639f 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -590,6 +590,7 @@ void AddSC_boss_high_astromancer_solarian();
void AddSC_instance_the_eye();
void AddSC_the_eye();
void AddSC_boss_gatewatcher_iron_hand(); //TK The Mechanar
+void AddSC_boss_gatewatcher_gyrokill();
void AddSC_boss_nethermancer_sepethrea();
void AddSC_boss_pathaleon_the_calculator();
void AddSC_boss_mechano_lord_capacitus();
@@ -1073,6 +1074,7 @@ void AddOutlandScripts()
AddSC_instance_the_eye();
AddSC_the_eye();
AddSC_boss_gatewatcher_iron_hand(); //TK The Mechanar
+ AddSC_boss_gatewatcher_gyrokill();
AddSC_boss_nethermancer_sepethrea();
AddSC_boss_pathaleon_the_calculator();
AddSC_boss_mechano_lord_capacitus();
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 8913cf2ac20..4e4698eb01b 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -6162,7 +6162,7 @@ void Spell::EffectPlaySound(SpellEffIndex effIndex)
if (!sSoundEntriesStore.LookupEntry(soundId))
{
- sLog->outError(LOG_FILTER_SPELLS_AURAS, "EffectPlayerSound: Sound (Id: %u) not exist in spell %u.", soundId, m_spellInfo->Id);
+ sLog->outError(LOG_FILTER_SPELLS_AURAS, "EffectPlaySound: Sound (Id: %u) not exist in spell %u.", soundId, m_spellInfo->Id);
return;
}
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index 1b7ecd34051..fe10b81b09d 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -182,6 +182,8 @@ std::string GmTicket::FormatMessageString(ChatHandler& handler, bool detailed) c
ss << handler.PGetParseString(LANG_COMMAND_TICKETLISTMESSAGE, _message.c_str());
if (!_comment.empty())
ss << handler.PGetParseString(LANG_COMMAND_TICKETLISTCOMMENT, _comment.c_str());
+ if (!_response.empty())
+ ss << handler.PGetParseString(LANG_COMMAND_TICKETLISTRESPONSE, _response.c_str());
}
return ss.str();
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 59315e1a813..54fe41a8a4d 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1534,7 +1534,7 @@ public:
return false;
Field* fields = result->Fetch();
- totalPlayerTime = fields[0].GetUInt32();
+ totalPlayerTime = fields[0].GetUInt32();
level = fields[1].GetUInt8();
money = fields[2].GetUInt32();
accId = fields[3].GetUInt32();
@@ -1617,7 +1617,7 @@ public:
if (result2)
{
Field* fields = result2->Fetch();
- banTime = int64(fields[1].GetBool() ? 0 : fields[0].GetUInt32());
+ banTime = int64(fields[1].GetUInt64() ? 0 : fields[0].GetUInt32());
bannedby = fields[2].GetString();
banreason = fields[3].GetString();
}
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 3215b533bce..aee01f47581 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -386,12 +386,13 @@ public:
return true;
}
+ std::string assignedTo = ticket->GetAssignedToName(); // copy assignedto name because we need it after the ticket has been unnassigned
SQLTransaction trans = SQLTransaction(NULL);
ticket->SetUnassigned();
ticket->SaveToDB(trans);
sTicketMgr->UpdateLastChange();
- std::string msg = ticket->FormatMessageString(*handler, NULL, ticket->GetAssignedToName().c_str(),
+ std::string msg = ticket->FormatMessageString(*handler, NULL, assignedTo.c_str(),
handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName().c_str() : "Console", NULL);
handler->SendGlobalGMSysMessage(msg.c_str());
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
index 047ad3f7096..da38fe9f54b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -66,7 +66,6 @@ public:
{
if (instance->GetBossState(DATA_PYROGAURD_EMBERSEER) == IN_PROGRESS)
OpenDoors(false);
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER,NOT_STARTED);
// respawn any dead Blackhand Incarcerators
DoCast(me, SPELL_ENCAGED_EMBERSEER);
//DoCast(me, SPELL_FIRE_SHIELD_TRIGGER);
@@ -83,7 +82,6 @@ public:
void JustDied(Unit* /*killer*/)
{
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER,DONE);
OpenDoors(true);
_JustDied();
}
@@ -102,7 +100,6 @@ public:
void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
-
return;
events.Update(diff);
@@ -115,11 +112,11 @@ public:
switch (eventId)
{
case EVENT_FIRENOVA:
- DoCast(me->getVictim(), SPELL_FIRENOVA);
+ DoCastVictim(SPELL_FIRENOVA);
events.ScheduleEvent(EVENT_FIRENOVA, 6 * IN_MILLISECONDS);
break;
case EVENT_FLAMEBUFFET:
- DoCast(me->getVictim(), SPELL_FLAMEBUFFET);
+ DoCastVictim(SPELL_FLAMEBUFFET);
events.ScheduleEvent(EVENT_FLAMEBUFFET, 14 * IN_MILLISECONDS);
break;
case EVENT_PYROBLAST:
@@ -129,6 +126,7 @@ public:
break;
}
}
+
DoMeleeAttackIfReady();
}
};
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
index 72a5712181e..06ba0036ef3 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
@@ -215,7 +215,8 @@ public:
switch (eventId)
{
case EVENT_PYROGUARD_EMBERSEER:
- SetBossState(DATA_PYROGAURD_EMBERSEER,IN_PROGRESS);
+ if (GetBossState(DATA_PYROGAURD_EMBERSEER) == NOT_STARTED)
+ SetBossState(DATA_PYROGAURD_EMBERSEER, IN_PROGRESS);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 97fe57c5434..96293c635d6 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -146,7 +146,7 @@ public:
me->CastSpell(me, SPELL_DK_INITIATE_VISUAL, true);
if (Player* starter = Unit::GetPlayer(*me, playerGUID))
- Talk(SAY_EVENT_ATTACK);
+ sCreatureTextMgr->SendChat(me, SAY_EVENT_ATTACK, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, starter);
phase = PHASE_TO_ATTACK;
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 4e2a1b6fa19..b596ad3f609 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -58,20 +58,21 @@ class boss_darkmaster_gandling : public CreatureScript
void Reset()
{
+ _Reset();
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING)))
gate->SetGoState(GO_STATE_ACTIVE);
}
void JustDied(Unit* /*killer*/)
{
- if (instance)
- instance->SetData(DATA_DARKMASTERGANDLING, DONE);
+ _JustDied();
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING)))
gate->SetGoState(GO_STATE_ACTIVE);
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_ARCANEMISSILES, 4500);
events.ScheduleEvent(EVENT_SHADOWSHIELD, 12000);
events.ScheduleEvent(EVENT_CURSE, 2000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
index fc54b90ab45..b2a91f4efe4 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
@@ -53,16 +53,9 @@ class boss_doctor_theolen_krastinov : public CreatureScript
{
boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTORTHEOLENKRASTINOV) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_DOCTORTHEOLENKRASTINOV, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_REND, 8000);
events.ScheduleEvent(EVENT_BACKHAND, 9000);
events.ScheduleEvent(EVENT_FRENZY, 1000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
index 64d827e41f1..d09a5ae96c9 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
@@ -50,16 +50,9 @@ class boss_illucia_barov : public CreatureScript
{
boss_illuciabarovAI(Creature* creature) : BossAI(creature,DATA_LADYILLUCIABAROV) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_LADYILLUCIABAROV, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_CURSEOFAGONY, 18000);
events.ScheduleEvent(EVENT_SHADOWSHOCK, 9000);
events.ScheduleEvent(EVENT_SILENCE, 5000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index 1f55666acc3..5036158cae2 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -57,18 +57,14 @@ class boss_instructor_malicia : public CreatureScript
void Reset()
{
+ _Reset();
FlashCounter = 0;
TouchCounter = 0;
}
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_INSTRUCTORMALICIA, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_CALLOFGRAVES, 4000);
events.ScheduleEvent(EVENT_CORRUPTION, 8000);
events.ScheduleEvent(EVENT_RENEW, 32000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 9d8f448964c..32c16a1c70c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -103,8 +103,7 @@ class boss_kirtonos_the_herald : public CreatureScript
brazier->ResetDoorOrButton();
brazier->SetGoState(GO_STATE_READY);
}
- if (instance)
- instance->SetData(DATA_KIRTONOS, DONE);
+ _JustDied();
}
void EnterEvadeMode()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
index c246e781bd8..e8fb4324d00 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
@@ -48,17 +48,13 @@ class boss_lord_alexei_barov : public CreatureScript
void Reset()
{
+ _Reset();
me->LoadCreaturesAddon();
}
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_LORDALEXEIBAROV, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_IMMOLATE, 7000);
events.ScheduleEvent(EVENT_VEILOFSHADOW, 15000);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
index 2239194a5e3..d06189d5054 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
@@ -50,16 +50,9 @@ class boss_lorekeeper_polkelt : public CreatureScript
{
boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPERPOLKELT) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_LOREKEEPERPOLKELT, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_VOLATILEINFECTION, 38000);
events.ScheduleEvent(EVENT_DARKPLAGUE, 8000);
events.ScheduleEvent(EVENT_CORROSIVEACID, 45000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
index e2e04ae7b81..99b9fba958c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
@@ -42,7 +42,6 @@ enum Events
EVENT_KNOCKAWAY = 4
};
-
class boss_the_ravenian : public CreatureScript
{
public: boss_the_ravenian() : CreatureScript("boss_the_ravenian") { }
@@ -51,16 +50,9 @@ class boss_the_ravenian : public CreatureScript
{
boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THERAVENIAN) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_THERAVENIAN, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_TRAMPLE, 24000);
events.ScheduleEvent(EVENT_CLEAVE, 15000);
events.ScheduleEvent(EVENT_SUNDERINCLEAVE, 40000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index d97372d4379..0da31fbe428 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -15,160 +15,215 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-Name: Instance_Scholomance
-%Complete: 100
-Comment:
-Category: Scholomance
-EndScriptData */
-
#include "ScriptMgr.h"
#include "InstanceScript.h"
-#include "scholomance.h"
#include "Player.h"
+#include "scholomance.h"
-enum CreatureId
-{
- NPC_DARKMASTER_GANDLING = 1853
-};
-
-Position const GandlingLoc = {180.7712f, -5.428603f, 75.57024f, 1.291544f};
+Position const GandlingLoc = { 180.7712f, -5.428603f, 75.57024f, 1.291544f };
class instance_scholomance : public InstanceMapScript
{
-public:
- instance_scholomance() : InstanceMapScript("instance_scholomance", 289) { }
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const
- {
- return new instance_scholomance_InstanceMapScript(map);
- }
-
- struct instance_scholomance_InstanceMapScript : public InstanceScript
- {
- instance_scholomance_InstanceMapScript(Map* map) : InstanceScript(map) {}
-
- //Lord Alexei Barov, Doctor Theolen Krastinov, The Ravenian, Lorekeeper Polkelt, Instructor Malicia and the Lady Illucia Barov.
- uint32 m_auiEncounter[MAX_ENCOUNTER];
- uint64 GateKirtonosGUID;
- uint64 GateGandlingGUID;
- uint64 GateMiliciaGUID;
- uint64 GateTheolenGUID;
- uint64 GatePolkeltGUID;
- uint64 GateRavenianGUID;
- uint64 GateBarovGUID;
- uint64 GateIlluciaGUID;
- uint64 BrazierOfTheHeraldGUID;
-
- void Initialize()
+ public:
+ instance_scholomance() : InstanceMapScript("instance_scholomance", 289) { }
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const
{
- GateKirtonosGUID = 0;
- GateGandlingGUID = 0;
- GateMiliciaGUID = 0;
- GateTheolenGUID = 0;
- GatePolkeltGUID = 0;
- GateRavenianGUID = 0;
- GateBarovGUID = 0;
- GateIlluciaGUID = 0;
- BrazierOfTheHeraldGUID = 0;
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- m_auiEncounter[i] = NOT_STARTED;
+ return new instance_scholomance_InstanceMapScript(map);
}
- void OnGameObjectCreate(GameObject* go)
+ struct instance_scholomance_InstanceMapScript : public InstanceScript
{
- switch (go->GetEntry())
+ instance_scholomance_InstanceMapScript(Map* map) : InstanceScript(map)
{
- case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
- case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
- case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
- case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
- case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
- case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
- case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
- case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
- case GO_BRAZIER_OF_THE_HERALD: BrazierOfTheHeraldGUID = go->GetGUID(); break;
+ SetBossNumber(EncounterCount);
+ GateKirtonosGUID = 0;
+ GateGandlingGUID = 0;
+ GateMiliciaGUID = 0;
+ GateTheolenGUID = 0;
+ GatePolkeltGUID = 0;
+ GateRavenianGUID = 0;
+ GateBarovGUID = 0;
+ GateIlluciaGUID = 0;
+ BrazierOfTheHeraldGUID = 0;
}
- }
- void SetData(uint32 type, uint32 data)
- {
- switch (type)
+ void OnGameObjectCreate(GameObject* go)
{
- case DATA_LORDALEXEIBAROV:
- m_auiEncounter[DATA_LORDALEXEIBAROV] = data;
- CheckToSpawnGandling();
- break;
- case DATA_DOCTORTHEOLENKRASTINOV:
- m_auiEncounter[DATA_DOCTORTHEOLENKRASTINOV] = data;
- CheckToSpawnGandling();
- break;
- case DATA_THERAVENIAN:
- m_auiEncounter[DATA_THERAVENIAN] = data;
- CheckToSpawnGandling();
- break;
- case DATA_LOREKEEPERPOLKELT:
- m_auiEncounter[DATA_LOREKEEPERPOLKELT] = data;
- CheckToSpawnGandling();
- break;
- case DATA_INSTRUCTORMALICIA:
- m_auiEncounter[DATA_INSTRUCTORMALICIA] = data;
- CheckToSpawnGandling();
- break;
- case DATA_LADYILLUCIABAROV:
- m_auiEncounter[DATA_LADYILLUCIABAROV] = data;
- CheckToSpawnGandling();
- break;
- case DATA_DARKMASTERGANDLING:
- m_auiEncounter[DATA_DARKMASTERGANDLING] = data;
- break;
- case DATA_KIRTONOS:
- m_auiEncounter[DATA_KIRTONOS] = data;
- break;
+ switch (go->GetEntry())
+ {
+ case GO_GATE_KIRTONOS:
+ GateKirtonosGUID = go->GetGUID();
+ break;
+ case GO_GATE_GANDLING:
+ GateGandlingGUID = go->GetGUID();
+ break;
+ case GO_GATE_MALICIA:
+ GateMiliciaGUID = go->GetGUID();
+ break;
+ case GO_GATE_THEOLEN:
+ GateTheolenGUID = go->GetGUID();
+ break;
+ case GO_GATE_POLKELT:
+ GatePolkeltGUID = go->GetGUID();
+ break;
+ case GO_GATE_RAVENIAN:
+ GateRavenianGUID = go->GetGUID();
+ break;
+ case GO_GATE_BAROV:
+ GateBarovGUID = go->GetGUID();
+ break;
+ case GO_GATE_ILLUCIA:
+ GateIlluciaGUID = go->GetGUID();
+ break;
+ case GO_BRAZIER_OF_THE_HERALD:
+ BrazierOfTheHeraldGUID = go->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- uint32 GetData(uint32 type) const
- {
- return type == (m_auiEncounter[DATA_LORDALEXEIBAROV] == DONE) && (m_auiEncounter[DATA_DOCTORTHEOLENKRASTINOV] == DONE) &&
- (m_auiEncounter[DATA_THERAVENIAN] == DONE) && (m_auiEncounter[DATA_LOREKEEPERPOLKELT] == DONE) &&
- (m_auiEncounter[DATA_INSTRUCTORMALICIA] == DONE) && (m_auiEncounter[DATA_LADYILLUCIABAROV] == DONE)
- ? IN_PROGRESS : 0;
- }
+ bool SetBossState(uint32 type, EncounterState state)
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_LORDALEXEIBAROV:
+ case DATA_DOCTORTHEOLENKRASTINOV:
+ case DATA_THERAVENIAN:
+ case DATA_LOREKEEPERPOLKELT:
+ case DATA_INSTRUCTORMALICIA:
+ case DATA_LADYILLUCIABAROV:
+ CheckToSpawnGandling();
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
- uint64 GetData64(uint32 type) const
- {
- switch (type)
+ uint64 GetData64(uint32 type) const
{
- case GO_GATE_KIRTONOS: return GateKirtonosGUID; break;
- case GO_GATE_GANDLING: return GateGandlingGUID; break;
- case GO_GATE_MALICIA: return GateMiliciaGUID; break;
- case GO_GATE_THEOLEN: return GateTheolenGUID; break;
- case GO_GATE_POLKELT: return GatePolkeltGUID; break;
- case GO_GATE_RAVENIAN: return GateRavenianGUID; break;
- case GO_GATE_BAROV: return GateBarovGUID; break;
- case GO_GATE_ILLUCIA: return GateIlluciaGUID; break;
- case GO_BRAZIER_OF_THE_HERALD: return BrazierOfTheHeraldGUID; break;
+ switch (type)
+ {
+ case GO_GATE_KIRTONOS:
+ return GateKirtonosGUID;
+ case GO_GATE_GANDLING:
+ return GateGandlingGUID;
+ case GO_GATE_MALICIA:
+ return GateMiliciaGUID;
+ case GO_GATE_THEOLEN:
+ return GateTheolenGUID;
+ case GO_GATE_POLKELT:
+ return GatePolkeltGUID;
+ case GO_GATE_RAVENIAN:
+ return GateRavenianGUID;
+ case GO_GATE_BAROV:
+ return GateBarovGUID;
+ case GO_GATE_ILLUCIA:
+ return GateIlluciaGUID;
+ case GO_BRAZIER_OF_THE_HERALD:
+ return BrazierOfTheHeraldGUID;
+ default:
+ break;
+ }
+
+ return 0;
}
- return 0;
- }
+ bool CheckPreBosses(uint32 bossId) const
+ {
+ switch (bossId)
+ {
+ case DATA_DARKMASTERGANDLING:
+ if (GetBossState(DATA_LORDALEXEIBAROV) != DONE)
+ return false;
+ if (GetBossState(DATA_DOCTORTHEOLENKRASTINOV) != DONE)
+ return false;
+ if (GetBossState(DATA_THERAVENIAN) != DONE)
+ return false;
+ if (GetBossState(DATA_LOREKEEPERPOLKELT) != DONE)
+ return false;
+ if (GetBossState(DATA_INSTRUCTORMALICIA) != DONE)
+ return false;
+ if (GetBossState(DATA_LADYILLUCIABAROV) != DONE)
+ return false;
+ if (GetBossState(DATA_DARKMASTERGANDLING) == DONE)
+ return false;
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
- void CheckToSpawnGandling()
- {
- if (GetData(DATA_DARKMASTERGANDLING) == IN_PROGRESS)
+ void CheckToSpawnGandling()
+ {
+ if (CheckPreBosses(DATA_DARKMASTERGANDLING))
+ instance->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc);
+ }
+
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "S O " << GetBossSaveData();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
+
+ void Load(const char* str)
{
- Map::PlayerList const &PlayerList = instance->GetPlayers();
- if (PlayerList.isEmpty())
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
return;
+ }
+
+ OUT_LOAD_INST_DATA(str);
+
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
- Map::PlayerList::const_iterator i = PlayerList.begin();
- if (Player* i_pl = i->getSource())
- i_pl->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc);
+ if (dataHead1 == 'S' && dataHead2 == 'O')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
+
+ CheckToSpawnGandling();
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- }
- };
+
+ protected:
+ uint64 GateKirtonosGUID;
+ uint64 GateGandlingGUID;
+ uint64 GateMiliciaGUID;
+ uint64 GateTheolenGUID;
+ uint64 GatePolkeltGUID;
+ uint64 GateRavenianGUID;
+ uint64 GateBarovGUID;
+ uint64 GateIlluciaGUID;
+ uint64 BrazierOfTheHeraldGUID;
+ };
};
void AddSC_instance_scholomance()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index 2d9c8c7bbe7..5c38cc39e3d 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -18,6 +18,8 @@
#ifndef DEF_SCHOLOMANCE_H
#define DEF_SCHOLOMANCE_H
+uint32 const EncounterCount = 8;
+
enum DataTypes
{
DATA_DOCTORTHEOLENKRASTINOV = 0,
@@ -30,6 +32,11 @@ enum DataTypes
DATA_KIRTONOS = 7
};
+enum CreatureIds
+{
+ NPC_DARKMASTER_GANDLING = 1853
+};
+
enum GameobjectIds
{
GO_GATE_KIRTONOS = 175570,
@@ -43,9 +50,4 @@ enum GameobjectIds
GO_BRAZIER_OF_THE_HERALD = 175564
};
-enum Misc
-{
- MAX_ENCOUNTER = 8
-};
-
#endif
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
index 87301f43745..22c4da74d44 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
@@ -399,35 +399,6 @@ class go_altar_of_archaedas : public GameObjectScript
}
};
-/* ScriptData
-SDName: go_altar_of_the_keepers
-SD%Complete: 100
-SDComment: Need 1 person to activate to open the altar. One by one the StoneKeepers will activate. After all four are dead than the door will open.
-SDCategory: Uldaman
-EndScriptData */
-
-class go_altar_of_the_keepers : public GameObjectScript
-{
- public:
-
- go_altar_of_the_keepers()
- : GameObjectScript("go_altar_of_the_keepers")
- {
- }
-
- bool OnGossipHello(Player* player, GameObject* /*go*/)
- {
- InstanceScript* instance = player->GetInstanceScript();
- if (!instance)
- return false;
-
- player->CastSpell (player, SPELL_BOSS_OBJECT_VISUAL, false);
-
- instance->SetData(DATA_STONE_KEEPERS, IN_PROGRESS); // activate the Stone Keepers
- return false;
- }
-};
-
//This is the actual function called only once durring InitScripts()
//It must define all handled functions that are to be run in this script
void AddSC_boss_archaedas()
@@ -436,6 +407,5 @@ void AddSC_boss_archaedas()
new mob_archaedas_minions();
new mob_stonekeepers();
new go_altar_of_archaedas();
- new go_altar_of_the_keepers();
}
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
index 138243a9ce2..ac26056c6e6 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
@@ -33,38 +33,38 @@ enum eSpells
SPELL_AWAKEN_VAULT_WALKER = 10258,
};
+enum Events
+{
+ EVENT_SUB_BOSS_AGGRO = 2228
+};
+
class instance_uldaman : public InstanceMapScript
{
public:
- instance_uldaman()
- : InstanceMapScript("instance_uldaman", 70)
- {
- }
+ instance_uldaman() : InstanceMapScript("instance_uldaman", 70) {}
struct instance_uldaman_InstanceMapScript : public InstanceScript
{
- instance_uldaman_InstanceMapScript(Map* map) : InstanceScript(map)
- {
- }
+ instance_uldaman_InstanceMapScript(Map* map) : InstanceScript(map) {}
void Initialize()
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
- uiArchaedasGUID = 0;
- uiIronayaGUID = 0;
- uiWhoWokeuiArchaedasGUID = 0;
+ archaedasGUID = 0;
+ ironayaGUID = 0;
+ whoWokeuiArchaedasGUID = 0;
- uiAltarOfTheKeeperTempleDoor = 0;
- uiArchaedasTempleDoor = 0;
- uiAncientVaultDoor = 0;
+ altarOfTheKeeperTempleDoor = 0;
+ archaedasTempleDoor = 0;
+ ancientVaultDoor = 0;
- uiIronayaSealDoor = 0;
+ ironayaSealDoor = 0;
- uiKeystoneGUID = 0;
+ keystoneGUID = 0;
- uiIronayaSealDoorTimer = 27000; //animation time
- bKeystoneCheck = false;
+ ironayaSealDoorTimer = 27000; //animation time
+ keystoneCheck = false;
}
bool IsEncounterInProgress() const
@@ -76,25 +76,25 @@ class instance_uldaman : public InstanceMapScript
return false;
}
- uint64 uiArchaedasGUID;
- uint64 uiIronayaGUID;
- uint64 uiWhoWokeuiArchaedasGUID;
+ uint64 archaedasGUID;
+ uint64 ironayaGUID;
+ uint64 whoWokeuiArchaedasGUID;
- uint64 uiAltarOfTheKeeperTempleDoor;
- uint64 uiArchaedasTempleDoor;
- uint64 uiAncientVaultDoor;
- uint64 uiIronayaSealDoor;
+ uint64 altarOfTheKeeperTempleDoor;
+ uint64 archaedasTempleDoor;
+ uint64 ancientVaultDoor;
+ uint64 ironayaSealDoor;
- uint64 uiKeystoneGUID;
+ uint64 keystoneGUID;
- uint32 uiIronayaSealDoorTimer;
- bool bKeystoneCheck;
+ uint32 ironayaSealDoorTimer;
+ bool keystoneCheck;
- std::vector<uint64> vStoneKeeper;
- std::vector<uint64> vAltarOfTheKeeperCount;
- std::vector<uint64> vVaultWalker;
- std::vector<uint64> vEarthenGuardian;
- std::vector<uint64> vArchaedasWallMinions; // minions lined up around the wall
+ std::vector<uint64> stoneKeepers;
+ std::vector<uint64> altarOfTheKeeperCounts;
+ std::vector<uint64> vaultWalkers;
+ std::vector<uint64> earthenGuardians;
+ std::vector<uint64> archaedasWallMinions; // minions lined up around the wall
uint32 m_auiEncounter[MAX_ENCOUNTER];
std::string str_data;
@@ -104,14 +104,14 @@ class instance_uldaman : public InstanceMapScript
switch (go->GetEntry())
{
case GO_ALTAR_OF_THE_KEEPER_TEMPLE_DOOR: // lock the door
- uiAltarOfTheKeeperTempleDoor = go->GetGUID();
+ altarOfTheKeeperTempleDoor = go->GetGUID();
if (m_auiEncounter[0] == DONE)
HandleGameObject(0, true, go);
break;
case GO_ARCHAEDAS_TEMPLE_DOOR:
- uiArchaedasTempleDoor = go->GetGUID();
+ archaedasTempleDoor = go->GetGUID();
if (m_auiEncounter[0] == DONE)
HandleGameObject(0, true, go);
@@ -120,21 +120,21 @@ class instance_uldaman : public InstanceMapScript
case GO_ANCIENT_VAULT_DOOR:
go->SetGoState(GO_STATE_READY);
go->SetUInt32Value(GAMEOBJECT_FLAGS, 33);
- uiAncientVaultDoor = go->GetGUID();
+ ancientVaultDoor = go->GetGUID();
if (m_auiEncounter[1] == DONE)
HandleGameObject(0, true, go);
break;
case GO_IRONAYA_SEAL_DOOR:
- uiIronayaSealDoor = go->GetGUID();
+ ironayaSealDoor = go->GetGUID();
if (m_auiEncounter[2] == DONE)
HandleGameObject(0, true, go);
break;
case GO_KEYSTONE:
- uiKeystoneGUID = go->GetGUID();
+ keystoneGUID = go->GetGUID();
if (m_auiEncounter[2] == DONE)
{
@@ -174,28 +174,31 @@ class instance_uldaman : public InstanceMapScript
void ActivateStoneKeepers()
{
- for (std::vector<uint64>::const_iterator i = vStoneKeeper.begin(); i != vStoneKeeper.end(); ++i)
+ if (GetData(DATA_ALTAR_DOORS) != DONE)
{
- Creature* target = instance->GetCreature(*i);
- if (!target || !target->isAlive() || target->getFaction() == 14)
- continue;
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
- target->setFaction(14);
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- return; // only want the first one we find
+ for (std::vector<uint64>::const_iterator i = stoneKeepers.begin(); i != stoneKeepers.end(); ++i)
+ {
+ Creature* target = instance->GetCreature(*i);
+ if (!target || !target->isAlive())
+ continue;
+ target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
+ target->setFaction(14);
+ target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ return; // only want the first one we find
+ }
+ // if we get this far than all four are dead so open the door
+ SetData(DATA_ALTAR_DOORS, DONE);
+ SetDoor(archaedasTempleDoor, true); //open next the door too
}
- // if we get this far than all four are dead so open the door
- SetData(DATA_ALTAR_DOORS, DONE);
- SetDoor(uiArchaedasTempleDoor, true); //open next the door too
}
void ActivateWallMinions()
{
- Creature* archaedas = instance->GetCreature(uiArchaedasGUID);
+ Creature* archaedas = instance->GetCreature(archaedasGUID);
if (!archaedas)
return;
- for (std::vector<uint64>::const_iterator i = vArchaedasWallMinions.begin(); i != vArchaedasWallMinions.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = archaedasWallMinions.begin(); i != archaedasWallMinions.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (!target || !target->isAlive() || target->getFaction() == 14)
@@ -213,7 +216,7 @@ class instance_uldaman : public InstanceMapScript
void DeActivateMinions()
{
// first despawn any aggroed wall minions
- for (std::vector<uint64>::const_iterator i = vArchaedasWallMinions.begin(); i != vArchaedasWallMinions.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = archaedasWallMinions.begin(); i != archaedasWallMinions.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (!target || target->isDead() || target->getFaction() != 14)
@@ -223,7 +226,7 @@ class instance_uldaman : public InstanceMapScript
}
// Vault Walkers
- for (std::vector<uint64>::const_iterator i = vVaultWalker.begin(); i != vVaultWalker.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = vaultWalkers.begin(); i != vaultWalkers.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (!target || target->isDead() || target->getFaction() != 14)
@@ -233,7 +236,7 @@ class instance_uldaman : public InstanceMapScript
}
// Earthen Guardians
- for (std::vector<uint64>::const_iterator i = vEarthenGuardian.begin(); i != vEarthenGuardian.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = earthenGuardians.begin(); i != earthenGuardians.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (!target || target->isDead() || target->getFaction() != 14)
@@ -245,20 +248,20 @@ class instance_uldaman : public InstanceMapScript
void ActivateArchaedas(uint64 target)
{
- Creature* archaedas = instance->GetCreature(uiArchaedasGUID);
+ Creature* archaedas = instance->GetCreature(archaedasGUID);
if (!archaedas)
return;
if (Unit::GetUnit(*archaedas, target))
{
archaedas->CastSpell(archaedas, SPELL_ARCHAEDAS_AWAKEN, false);
- uiWhoWokeuiArchaedasGUID = target;
+ whoWokeuiArchaedasGUID = target;
}
}
void ActivateIronaya()
{
- Creature* ironaya = instance->GetCreature(uiIronayaGUID);
+ Creature* ironaya = instance->GetCreature(ironayaGUID);
if (!ironaya)
return;
@@ -270,7 +273,7 @@ class instance_uldaman : public InstanceMapScript
void RespawnMinions()
{
// first respawn any aggroed wall minions
- for (std::vector<uint64>::const_iterator i = vArchaedasWallMinions.begin(); i != vArchaedasWallMinions.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = archaedasWallMinions.begin(); i != archaedasWallMinions.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (target && target->isDead())
@@ -282,7 +285,7 @@ class instance_uldaman : public InstanceMapScript
}
// Vault Walkers
- for (std::vector<uint64>::const_iterator i = vVaultWalker.begin(); i != vVaultWalker.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = vaultWalkers.begin(); i != vaultWalkers.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (target && target->isDead())
@@ -294,7 +297,7 @@ class instance_uldaman : public InstanceMapScript
}
// Earthen Guardians
- for (std::vector<uint64>::const_iterator i = vEarthenGuardian.begin(); i != vEarthenGuardian.end(); ++i)
+ for (std::vector<uint64>::const_iterator i = earthenGuardians.begin(); i != earthenGuardians.end(); ++i)
{
Creature* target = instance->GetCreature(*i);
if (target && target->isDead())
@@ -307,21 +310,21 @@ class instance_uldaman : public InstanceMapScript
}
void Update(uint32 diff)
{
- if (!bKeystoneCheck)
+ if (!keystoneCheck)
return;
- if (uiIronayaSealDoorTimer <= diff)
+ if (ironayaSealDoorTimer <= diff)
{
ActivateIronaya();
- SetDoor(uiIronayaSealDoor, true);
- BlockGO(uiKeystoneGUID);
+ SetDoor(ironayaSealDoor, true);
+ BlockGO(keystoneGUID);
SetData(DATA_IRONAYA_DOOR, DONE); //save state
- bKeystoneCheck = false;
+ keystoneCheck = false;
}
else
- uiIronayaSealDoorTimer -= diff;
+ ironayaSealDoorTimer -= diff;
}
void SetData(uint32 type, uint32 data)
@@ -331,15 +334,15 @@ class instance_uldaman : public InstanceMapScript
case DATA_ALTAR_DOORS:
m_auiEncounter[0] = data;
if (data == DONE)
- SetDoor(uiAltarOfTheKeeperTempleDoor, true);
+ SetDoor(altarOfTheKeeperTempleDoor, true);
break;
case DATA_ANCIENT_DOOR:
m_auiEncounter[1] = data;
if (data == DONE) //archeadas defeat
{
- SetDoor(uiArchaedasTempleDoor, true); //re open enter door
- SetDoor(uiAncientVaultDoor, true);
+ SetDoor(archaedasTempleDoor, true); //re open enter door
+ SetDoor(ancientVaultDoor, true);
}
break;
@@ -356,7 +359,7 @@ class instance_uldaman : public InstanceMapScript
{
case NOT_STARTED:
if (m_auiEncounter[0] == DONE) //if players opened the doors
- SetDoor(uiArchaedasTempleDoor, true);
+ SetDoor(archaedasTempleDoor, true);
RespawnMinions();
break;
@@ -372,7 +375,7 @@ class instance_uldaman : public InstanceMapScript
break;
case DATA_IRONAYA_SEAL:
- bKeystoneCheck = true;
+ keystoneCheck = true;
break;
}
@@ -396,7 +399,7 @@ class instance_uldaman : public InstanceMapScript
if (type == 0)
{
ActivateArchaedas (data);
- SetDoor(uiArchaedasTempleDoor, false); //close when event is started
+ SetDoor(archaedasTempleDoor, false); //close when event is started
}
}
@@ -433,34 +436,34 @@ class instance_uldaman : public InstanceMapScript
{
case 4857: // Stone Keeper
SetFrozenState (creature);
- vStoneKeeper.push_back(creature->GetGUID());
+ stoneKeepers.push_back(creature->GetGUID());
break;
case 7309: // Earthen Custodian
- vArchaedasWallMinions.push_back(creature->GetGUID());
+ archaedasWallMinions.push_back(creature->GetGUID());
break;
case 7077: // Earthen Hallshaper
- vArchaedasWallMinions.push_back(creature->GetGUID());
+ archaedasWallMinions.push_back(creature->GetGUID());
break;
case 7076: // Earthen Guardian
- vEarthenGuardian.push_back(creature->GetGUID());
+ earthenGuardians.push_back(creature->GetGUID());
break;
case 7228: // Ironaya
- uiIronayaGUID = creature->GetGUID();
+ ironayaGUID = creature->GetGUID();
if (m_auiEncounter[2] != DONE)
SetFrozenState (creature);
break;
case 10120: // Vault Walker
- vVaultWalker.push_back(creature->GetGUID());
+ vaultWalkers.push_back(creature->GetGUID());
break;
case 2748: // Archaedas
- uiArchaedasGUID = creature->GetGUID();
+ archaedasGUID = creature->GetGUID();
break;
}
@@ -471,25 +474,37 @@ class instance_uldaman : public InstanceMapScript
switch (identifier)
{
case 0:
- return uiWhoWokeuiArchaedasGUID;
+ return whoWokeuiArchaedasGUID;
case 1:
case 2:
case 3:
case 4:
- return vVaultWalker.at(identifier - 1);
+ return vaultWalkers.at(identifier - 1);
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
- return vEarthenGuardian.at(identifier - 5);
+ return earthenGuardians.at(identifier - 5);
default:
break;
}
return 0;
} // end GetData64
+
+ void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId)
+ {
+ switch (eventId)
+ {
+ case EVENT_SUB_BOSS_AGGRO:
+ SetData(DATA_STONE_KEEPERS, IN_PROGRESS); // activate the Stone Keepers
+ break;
+ default:
+ break;
+ }
+ }
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
index 935e54eae0c..577423adb39 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
@@ -45,32 +45,37 @@ EndScriptData */
#define YELL_BERSERK "Whatch you be doing? Pissin' yourselves..."
#define SOUND_BERSERK 12025
-#define SPELL_DUAL_WIELD 29651
-#define SPELL_SABER_LASH 43267
-#define SPELL_FRENZY 43139
-#define SPELL_FLAMESHOCK 43303
-#define SPELL_EARTHSHOCK 43305
-#define SPELL_TRANSFORM_SPLIT 43142
-#define SPELL_TRANSFORM_SPLIT2 43573
-#define SPELL_TRANSFORM_MERGE 43271
-#define SPELL_SUMMON_LYNX 43143
-#define SPELL_SUMMON_TOTEM 43302
-#define SPELL_BERSERK 45078
-
-#define MOB_SPIRIT_LYNX 24143
-#define SPELL_LYNX_FRENZY 43290
-#define SPELL_SHRED_ARMOR 43243
-
-#define MOB_TOTEM 24224
+enum Spells
+{
+ SPELL_DUAL_WIELD = 29651,
+ SPELL_SABER_LASH = 43267,
+ SPELL_FRENZY = 43139,
+ SPELL_FLAMESHOCK = 43303,
+ SPELL_EARTHSHOCK = 43305,
+ SPELL_TRANSFORM_SPLIT = 43142,
+ SPELL_TRANSFORM_SPLIT2 = 43573,
+ SPELL_TRANSFORM_MERGE = 43271,
+ SPELL_SUMMON_LYNX = 43143,
+ SPELL_SUMMON_TOTEM = 43302,
+ SPELL_BERSERK = 45078,
+ SPELL_LYNX_FRENZY = 43290, // Used by Spirit Lynx
+ SPELL_SHRED_ARMOR = 43243 // Used by Spirit Lynx
+};
+
+enum Hal_CreatureIds
+{
+ NPC_SPIRIT_LYNX = 24143,
+ NPC_TOTEM = 24224
+};
enum PhaseHalazzi
{
- PHASE_NONE = 0,
- PHASE_LYNX = 1,
- PHASE_SPLIT = 2,
- PHASE_HUMAN = 3,
- PHASE_MERGE = 4,
- PHASE_ENRAGE = 5
+ PHASE_NONE = 0,
+ PHASE_LYNX = 1,
+ PHASE_SPLIT = 2,
+ PHASE_HUMAN = 3,
+ PHASE_MERGE = 4,
+ PHASE_ENRAGE = 5
};
class boss_halazzi : public CreatureScript
@@ -134,7 +139,7 @@ class boss_halazzi : public CreatureScript
void JustSummoned(Creature* summon)
{
summon->AI()->AttackStart(me->getVictim());
- if (summon->GetEntry() == MOB_SPIRIT_LYNX)
+ if (summon->GetEntry() == NPC_SPIRIT_LYNX)
LynxGUID = summon->GetGUID();
}
@@ -183,7 +188,7 @@ class boss_halazzi : public CreatureScript
break;
case PHASE_HUMAN:
//DoCast(me, SPELL_SUMMON_LYNX, true);
- DoSpawnCreature(MOB_SPIRIT_LYNX, 5, 5, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
+ DoSpawnCreature(NPC_SPIRIT_LYNX, 5, 5, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
me->SetMaxHealth(400000);
me->SetHealth(400000);
ShockTimer = 10000;
@@ -413,3 +418,4 @@ void AddSC_boss_halazzi()
new mob_halazzi_lynx();
}
+
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
index 54a5f5c706c..1334d587464 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
@@ -27,85 +27,87 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum eYells
+enum Says
{
SAY_AGGRO = 0,
SAY_FEAST_PANTHER = 1,
- SAY_DEATH = 2,
+ SAY_DEATH = 2
};
-enum eSpells
+enum Spells
{
- SPELL_SHADOWWORDPAIN = 23952,
+ SPELL_SHADOW_WORD_PAIN = 23952,
SPELL_GOUGE = 24698,
SPELL_MARK = 24210,
- SPELL_CLEAVE = 26350, //Perhaps not right. Not a red aura...
- SPELL_PANTHER_TRANSFORM = 24190,
+ SPELL_CLEAVE = 26350, // Perhaps not right. Not a red aura...
+ SPELL_PANTHER_TRANSFORM = 24190
+};
+
+enum Events
+{
+ EVENT_SHADOW_WORD_PAIN = 0,
+ EVENT_GOUGE = 1,
+ EVENT_MARK = 2,
+ EVENT_CLEAVE = 3,
+ EVENT_VANISH = 4,
+ EVENT_VISIBLE = 5,
+ EVENT_SUMMON = 6
+};
+
+enum Phases
+{
+ PHASE_ONE = 1,
+ PHASE_TWO = 2
+};
+enum ModelIds
+{
MODEL_ID_NORMAL = 15218,
MODEL_ID_PANTHER = 15215,
- MODEL_ID_BLANK = 11686,
+ MODEL_ID_BLANK = 11686
+};
- NPC_ZULIAN_PROWLER = 15101
+Position const PosSummonProwlers[2] =
+{
+ { -11532.7998f, -1649.6734f, 41.4800f, 0.0f },
+ { -11532.9970f, -1606.4840f, 41.2979f, 0.0f }
};
class boss_arlokk : public CreatureScript
{
- public:
+ public: boss_arlokk() : CreatureScript("boss_arlokk") {}
- boss_arlokk()
- : CreatureScript("boss_arlokk")
+ struct boss_arlokkAI : public BossAI
{
- }
-
- struct boss_arlokkAI : public ScriptedAI
- {
- boss_arlokkAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- InstanceScript* instance;
-
- uint32 m_uiShadowWordPain_Timer;
- uint32 m_uiGouge_Timer;
- uint32 m_uiMark_Timer;
- uint32 m_uiCleave_Timer;
- uint32 m_uiVanish_Timer;
- uint32 m_uiVisible_Timer;
-
- uint32 m_uiSummon_Timer;
- uint32 m_uiSummonCount;
-
- Unit* m_pMarkedTarget;
- uint64 MarkedTargetGUID;
+ boss_arlokkAI(Creature* creature) : BossAI(creature, DATA_ARLOKK) {}
- bool m_bIsPhaseTwo;
- bool m_bIsVanished;
+ uint32 summonCount;
+ // Unit* markedTarget;
+ uint64 markedTargetGUID;
void Reset()
{
- m_uiShadowWordPain_Timer = 8000;
- m_uiGouge_Timer = 14000;
- m_uiMark_Timer = 35000;
- m_uiCleave_Timer = 4000;
- m_uiVanish_Timer = 60000;
- m_uiVisible_Timer = 6000;
-
- m_uiSummon_Timer = 5000;
- m_uiSummonCount = 0;
-
- m_bIsPhaseTwo = false;
- m_bIsVanished = false;
-
- MarkedTargetGUID = 0;
+ summonCount = 0;
+ markedTargetGUID = 0;
+ me->SetDisplayId(MODEL_ID_NORMAL);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ }
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
me->SetDisplayId(MODEL_ID_NORMAL);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000, 0, PHASE_ONE);
+ events.ScheduleEvent(EVENT_MARK, 35000, 0, PHASE_ONE);
+ events.ScheduleEvent(EVENT_SUMMON, 5000);
+ events.ScheduleEvent(EVENT_VANISH, 60000);
Talk(SAY_AGGRO);
}
@@ -113,147 +115,88 @@ class boss_arlokk : public CreatureScript
{
if (instance)
instance->SetData(DATA_ARLOKK, NOT_STARTED);
-
- //we should be summoned, so despawn
me->DespawnOrUnsummon();
}
- void JustDied(Unit* /*killer*/)
- {
- Talk(SAY_DEATH);
-
- me->SetDisplayId(MODEL_ID_NORMAL);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
-
- if (instance)
- instance->SetData(DATA_ARLOKK, DONE);
- }
-
void DoSummonPhanters()
{
- if (MarkedTargetGUID)
- Talk(SAY_FEAST_PANTHER, MarkedTargetGUID);
-
- me->SummonCreature(NPC_ZULIAN_PROWLER, -11532.7998f, -1649.6734f, 41.4800f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- me->SummonCreature(NPC_ZULIAN_PROWLER, -11532.9970f, -1606.4840f, 41.2979f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (markedTargetGUID)
+ Talk(SAY_FEAST_PANTHER, markedTargetGUID);
+ me->SummonCreature(NPC_ZULIAN_PROWLER, PosSummonProwlers[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ me->SummonCreature(NPC_ZULIAN_PROWLER, PosSummonProwlers[1], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
}
void JustSummoned(Creature* summoned)
{
- if (Unit* pMarkedTarget = Unit::GetUnit(*me, MarkedTargetGUID))
- summoned->AI()->AttackStart(pMarkedTarget);
-
- ++m_uiSummonCount;
+ if (Unit* markedTarget = Unit::GetUnit(*me, markedTargetGUID))
+ summoned->AI()->AttackStart(markedTarget);
+ ++summonCount;
}
- void UpdateAI(const uint32 uiDiff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- if (!m_bIsPhaseTwo)
- {
- if (m_uiShadowWordPain_Timer <= uiDiff)
- {
- DoCast(me->getVictim(), SPELL_SHADOWWORDPAIN);
- m_uiShadowWordPain_Timer = 15000;
- }
- else
- m_uiShadowWordPain_Timer -= uiDiff;
-
- if (m_uiMark_Timer <= uiDiff)
- {
- Unit* pMarkedTarget = SelectTarget(SELECT_TARGET_RANDOM, 0);
+ events.Update(diff);
- if (pMarkedTarget)
- {
- DoCast(pMarkedTarget, SPELL_MARK);
- MarkedTargetGUID = pMarkedTarget->GetGUID();
- }
- else
- sLog->outError(LOG_FILTER_TSCR, "boss_arlokk could not accuire pMarkedTarget.");
-
- m_uiMark_Timer = 15000;
- }
- else
- m_uiMark_Timer -= uiDiff;
- }
- else
- {
- //Cleave_Timer
- if (m_uiCleave_Timer <= uiDiff)
- {
- DoCast(me->getVictim(), SPELL_CLEAVE);
- m_uiCleave_Timer = 16000;
- }
- else
- m_uiCleave_Timer -= uiDiff;
-
- //Gouge_Timer
- if (m_uiGouge_Timer <= uiDiff)
- {
- DoCast(me->getVictim(), SPELL_GOUGE);
-
- DoModifyThreatPercent(me->getVictim(), -80);
-
- m_uiGouge_Timer = 17000+rand()%10000;
- }
- else
- m_uiGouge_Timer -= uiDiff;
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (m_uiSummonCount <= 30)
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (m_uiSummon_Timer <= uiDiff)
+ switch (eventId)
{
- DoSummonPhanters();
- m_uiSummon_Timer = 5000;
+ case EVENT_SHADOW_WORD_PAIN:
+ DoCastVictim(SPELL_SHADOW_WORD_PAIN, true);
+ events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 15000, 0, PHASE_ONE);
+ break;
+ case EVENT_MARK:
+ DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_MARK);
+ events.ScheduleEvent(EVENT_MARK, 15000, 0, PHASE_ONE);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_SHADOW_WORD_PAIN, true);
+ events.ScheduleEvent(EVENT_CLEAVE, 16000, 0, PHASE_TWO);
+ break;
+ case EVENT_GOUGE:
+ DoCastVictim(SPELL_SHADOW_WORD_PAIN, true);
+ events.ScheduleEvent(EVENT_GOUGE, urand(17000, 27000), 0, PHASE_TWO);
+ break;
+ case EVENT_SUMMON:
+ if (summonCount <= 30)
+ DoSummonPhanters();
+ events.ScheduleEvent(EVENT_SUMMON, 5000);
+ break;
+ case EVENT_VANISH:
+ me->SetDisplayId(MODEL_ID_BLANK);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->AttackStop();
+ DoResetThreat();
+ events.ScheduleEvent(EVENT_VISIBLE, 6000);
+ break;
+ case EVENT_VISIBLE:
+ {
+ me->SetDisplayId(MODEL_ID_PANTHER);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ const CreatureTemplate* cinfo = me->GetCreatureTemplate();
+ me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
+ me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
+ me->UpdateDamagePhysical(BASE_ATTACK);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ AttackStart(target);
+ events.ScheduleEvent(EVENT_VANISH, 39000);
+ events.ScheduleEvent(EVENT_CLEAVE, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_GOUGE, 14000, 0, PHASE_TWO);
+ events.SetPhase(PHASE_TWO);
+ break;
+ }
+ default:
+ break;
}
- else
- m_uiSummon_Timer -= uiDiff;
}
- if (m_uiVanish_Timer <= uiDiff)
- {
- //Invisble Model
- me->SetDisplayId(MODEL_ID_BLANK);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
-
- me->AttackStop();
- DoResetThreat();
-
- m_bIsVanished = true;
-
- m_uiVanish_Timer = 45000;
- m_uiVisible_Timer = 6000;
- }
- else
- m_uiVanish_Timer -= uiDiff;
-
- if (m_bIsVanished)
- {
- if (m_uiVisible_Timer <= uiDiff)
- {
- //The Panther Model
- me->SetDisplayId(MODEL_ID_PANTHER);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
-
- const CreatureTemplate* cinfo = me->GetCreatureTemplate();
- me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
- me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
- me->UpdateDamagePhysical(BASE_ATTACK);
-
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- AttackStart(target);
-
- m_bIsPhaseTwo = true;
- m_bIsVanished = false;
- }
- else
- m_uiVisible_Timer -= uiDiff;
- }
- else
- DoMeleeAttackIfReady();
+ DoMeleeAttackIfReady();
}
};
@@ -265,10 +208,7 @@ class boss_arlokk : public CreatureScript
class go_gong_of_bethekk : public GameObjectScript
{
- public:
- go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk")
- {
- }
+ public: go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk") {}
bool OnGossipHello(Player* /*player*/, GameObject* go)
{
@@ -276,7 +216,6 @@ class go_gong_of_bethekk : public GameObjectScript
{
if (instance->GetData(DATA_ARLOKK) == DONE || instance->GetData(DATA_ARLOKK) == IN_PROGRESS)
return true;
-
instance->SetData(DATA_ARLOKK, IN_PROGRESS);
return true;
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
index e7d54aecb31..70399b6934c 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
@@ -25,62 +25,78 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "zulgurub.h"
-#define SPELL_FROSTBREATH 16099
-#define SPELL_MASSIVEGEYSER 22421 //Not working. Cause its a summon...
-#define SPELL_SLAM 24326
+enum Spells
+{
+ SPELL_FROSTBREATH = 16099,
+ SPELL_MASSIVEGEYSER = 22421, // Not working. (summon)
+ SPELL_SLAM = 24326
+};
+
+enum Events
+{
+ EVENT_FROSTBREATH = 0,
+ EVENT_MASSIVEGEYSER = 1,
+ EVENT_SLAM = 2
+};
-class boss_gahzranka : public CreatureScript
+class boss_gahzranka : public CreatureScript // gahzranka
{
- public:
- boss_gahzranka() : CreatureScript("boss_gahzranka") { }
+ public: boss_gahzranka() : CreatureScript("boss_gahzranka") {}
- struct boss_gahzrankaAI : public ScriptedAI
+ struct boss_gahzrankaAI : public BossAI
{
- boss_gahzrankaAI(Creature* creature) : ScriptedAI(creature) { }
- uint32 Frostbreath_Timer;
- uint32 MassiveGeyser_Timer;
- uint32 Slam_Timer;
+ boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) {}
void Reset()
{
- Frostbreath_Timer = 8000;
- MassiveGeyser_Timer = 25000;
- Slam_Timer = 17000;
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_FROSTBREATH, 8000);
+ events.ScheduleEvent(EVENT_MASSIVEGEYSER, 25000);
+ events.ScheduleEvent(EVENT_SLAM, 17000);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
- //Return since we have no target
if (!UpdateVictim())
return;
- //Frostbreath_Timer
- if (Frostbreath_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_FROSTBREATH);
- Frostbreath_Timer = urand(7000, 11000);
- } else Frostbreath_Timer -= diff;
-
- //MassiveGeyser_Timer
- if (MassiveGeyser_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_MASSIVEGEYSER);
- DoResetThreat();
+ events.Update(diff);
- MassiveGeyser_Timer = urand(22000, 32000);
- } else MassiveGeyser_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Slam_Timer
- if (Slam_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCast(me->getVictim(), SPELL_SLAM);
- Slam_Timer = urand(12000, 20000);
- } else Slam_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_FROSTBREATH:
+ DoCastVictim(SPELL_FROSTBREATH, true);
+ events.ScheduleEvent(EVENT_FROSTBREATH, urand(7000, 11000));
+ break;
+ case EVENT_MASSIVEGEYSER:
+ DoCastVictim(SPELL_MASSIVEGEYSER, true);
+ events.ScheduleEvent(EVENT_MASSIVEGEYSER, urand(22000, 32000));
+ break;
+ case EVENT_SLAM:
+ DoCastVictim(SPELL_SLAM, true);
+ events.ScheduleEvent(EVENT_SLAM, urand(12000, 20000));
+ break;
+ default:
+ break;
+ }
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
index 4ccdbceb466..f06500694a5 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
@@ -27,60 +27,73 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-#define SPELL_AVARTAR 24646 //The Enrage Spell
-#define SPELL_GROUNDTREMOR 6524
+enum Spells
+{
+ SPELL_AVATAR = 24646, // Enrage Spell
+ SPELL_GROUND_TREMOR = 6524
+};
-class boss_grilek : public CreatureScript
+enum Events
{
- public:
- boss_grilek() : CreatureScript("boss_grilek") { }
+ EVENT_AVATAR = 0,
+ EVENT_GROUND_TREMOR = 1
+};
- struct boss_grilekAI : public ScriptedAI
- {
- boss_grilekAI(Creature* creature) : ScriptedAI(creature) { }
+class boss_grilek : public CreatureScript // grilek
+{
+ public: boss_grilek() : CreatureScript("boss_grilek") {}
- uint32 Avartar_Timer;
- uint32 GroundTremor_Timer;
+ struct boss_grilekAI : public BossAI
+ {
+ boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {}
void Reset()
{
- Avartar_Timer = urand(15000, 25000);
- GroundTremor_Timer = urand(8000, 16000);
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_AVATAR, urand(15000, 25000));
+ events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(15000, 25000));
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
- //Return since we have no target
if (!UpdateVictim())
return;
- //Avartar_Timer
- if (Avartar_Timer <= diff)
- {
-
- DoCast(me, SPELL_AVARTAR);
- Unit* target = NULL;
+ events.Update(diff);
- target = SelectTarget(SELECT_TARGET_RANDOM, 1);
-
- if (DoGetThreat(me->getVictim()))
- DoModifyThreatPercent(me->getVictim(), -50);
- if (target)
- AttackStart(target);
-
- Avartar_Timer = urand(25000, 35000);
- } else Avartar_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //GroundTremor_Timer
- if (GroundTremor_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCast(me->getVictim(), SPELL_GROUNDTREMOR);
- GroundTremor_Timer = urand(12000, 16000);
- } else GroundTremor_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_AVATAR:
+ DoCast(me, SPELL_AVATAR);
+ if (DoGetThreat(me->getVictim()))
+ DoModifyThreatPercent(me->getVictim(), -50);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
+ AttackStart(target);
+ events.ScheduleEvent(EVENT_AVATAR, urand(25000, 35000));
+ break;
+ case EVENT_GROUND_TREMOR:
+ DoCastVictim(SPELL_GROUND_TREMOR, true);
+ events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(12000, 16000));
+ break;
+ default:
+ break;
+ }
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
index 781b68bfcb0..8003f4a1ed7 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,31 +15,33 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Hakkar
-SD%Complete: 95
-SDComment: Blood siphon spell buggy cause of Core Issue.
-SDCategory: Zul'Gurub
-EndScriptData */
+/*
+Name: Boss_Hakkar
+%Complete: 95
+Comment: Blood siphon spell buggy cause of Core Issue.
+Category: Zul'Gurub
+*/
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum Hakkar
+enum Says
{
SAY_AGGRO = 0,
SAY_FLEEING = 1,
- SAY_MINION_DESTROY = 2, //where does it belong?
- SAY_PROTECT_ALTAR = 3, //where does it belong?
+ SAY_MINION_DESTROY = 2, // Where does it belong?
+ SAY_PROTECT_ALTAR = 3 // Where does it belong?
+};
- SPELL_BLOODSIPHON = 24322,
- SPELL_CORRUPTEDBLOOD = 24328,
- SPELL_CAUSEINSANITY = 24327, //Not working disabled.
- SPELL_WILLOFHAKKAR = 24178,
+enum Spells
+{
+ SPELL_BLOOD_SIPHON = 24322, // Buggy ?
+ SPELL_CORRUPTED_BLOOD = 24328,
+ SPELL_CAUSE_INSANITY = 24327, // Spell needs scripting.
+ SPELL_WILL_OF_HAKKAR = 24178,
SPELL_ENRAGE = 24318,
-
-// The Aspects of all High Priests
+ // The Aspects of all High Priests spells
SPELL_ASPECT_OF_JEKLIK = 24687,
SPELL_ASPECT_OF_VENOXIS = 24688,
SPELL_ASPECT_OF_MARLI = 24686,
@@ -48,202 +49,119 @@ enum Hakkar
SPELL_ASPECT_OF_ARLOKK = 24690
};
+enum Events
+{
+ EVENT_BLOOD_SIPHON = 0,
+ EVENT_CORRUPTED_BLOOD = 1,
+ EVENT_CAUSE_INSANITY = 2, // Spell needs scripting. Event disabled
+ EVENT_WILL_OF_HAKKAR = 3,
+ EVENT_ENRAGE = 4,
+ // The Aspects of all High Priests events
+ EVENT_ASPECT_OF_JEKLIK = 5,
+ EVENT_ASPECT_OF_VENOXIS = 6,
+ EVENT_ASPECT_OF_MARLI = 7,
+ EVENT_ASPECT_OF_THEKAL = 8,
+ EVENT_ASPECT_OF_ARLOKK = 9
+};
+
class boss_hakkar : public CreatureScript
{
- public:
+ public: boss_hakkar() : CreatureScript("boss_hakkar") {}
- boss_hakkar()
- : CreatureScript("boss_hakkar")
+ struct boss_hakkarAI : public BossAI
{
- }
+ boss_hakkarAI(Creature* creature) : BossAI(creature, DATA_HAKKAR) {}
- struct boss_hakkarAI : public ScriptedAI
- {
- boss_hakkarAI(Creature* creature) : ScriptedAI(creature)
+ void Reset()
{
- instance = creature->GetInstanceScript();
+ _Reset();
}
- InstanceScript* instance;
-
- uint32 BloodSiphon_Timer;
- uint32 CorruptedBlood_Timer;
- uint32 CauseInsanity_Timer;
- uint32 WillOfHakkar_Timer;
- uint32 Enrage_Timer;
-
- uint32 CheckJeklik_Timer;
- uint32 CheckVenoxis_Timer;
- uint32 CheckMarli_Timer;
- uint32 CheckThekal_Timer;
- uint32 CheckArlokk_Timer;
-
- uint32 AspectOfJeklik_Timer;
- uint32 AspectOfVenoxis_Timer;
- uint32 AspectOfMarli_Timer;
- uint32 AspectOfThekal_Timer;
- uint32 AspectOfArlokk_Timer;
-
- bool Enraged;
-
- void Reset()
+ void JustDied(Unit* /*killer*/)
{
- BloodSiphon_Timer = 90000;
- CorruptedBlood_Timer = 25000;
- CauseInsanity_Timer = 17000;
- WillOfHakkar_Timer = 17000;
- Enrage_Timer = 600000;
-
- CheckJeklik_Timer = 1000;
- CheckVenoxis_Timer = 2000;
- CheckMarli_Timer = 3000;
- CheckThekal_Timer = 4000;
- CheckArlokk_Timer = 5000;
-
- AspectOfJeklik_Timer = 4000;
- AspectOfVenoxis_Timer = 7000;
- AspectOfMarli_Timer = 12000;
- AspectOfThekal_Timer = 8000;
- AspectOfArlokk_Timer = 18000;
-
- Enraged = false;
+ _JustDied();
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90000);
+ events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, 25000);
+ events.ScheduleEvent(EVENT_CAUSE_INSANITY, 17000);
+ events.ScheduleEvent(EVENT_WILL_OF_HAKKAR, 17000);
+ events.ScheduleEvent(EVENT_ENRAGE, 600000);
+ if (instance->GetData(DATA_JEKLIK) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 4000);
+ if (instance->GetData(DATA_VENOXIS) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 7000);
+ if (instance->GetData(DATA_MARLI) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000);
+ if (instance->GetData(DATA_THEKAL) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 8000);
+ if (instance->GetData(DATA_ARLOKK) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 18000);
Talk(SAY_AGGRO);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- //BloodSiphon_Timer
- if (BloodSiphon_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_BLOODSIPHON);
- BloodSiphon_Timer = 90000;
- } else BloodSiphon_Timer -= diff;
-
- //CorruptedBlood_Timer
- if (CorruptedBlood_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_CORRUPTEDBLOOD);
- CorruptedBlood_Timer = urand(30000, 45000);
- } else CorruptedBlood_Timer -= diff;
-
- //CauseInsanity_Timer
- /*if (CauseInsanity_Timer <= diff)
- {
- if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_CAUSEINSANITY);
-
- CauseInsanity_Timer = urand(35000, 43000);
- } else CauseInsanity_Timer -= diff;*/
-
- //WillOfHakkar_Timer
- if (WillOfHakkar_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_WILLOFHAKKAR);
-
- WillOfHakkar_Timer = urand(25000, 35000);
- } else WillOfHakkar_Timer -= diff;
-
- if (!Enraged && Enrage_Timer <= diff)
- {
- DoCast(me, SPELL_ENRAGE);
- Enraged = true;
- } else Enrage_Timer -= diff;
-
- //Checking if Jeklik is dead. If not we cast her Aspect
- if (CheckJeklik_Timer <= diff)
- {
- if (instance)
- {
- if (instance->GetData(DATA_JEKLIK) != DONE)
- {
- if (AspectOfJeklik_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ASPECT_OF_JEKLIK);
- AspectOfJeklik_Timer = urand(10000, 14000);
- } else AspectOfJeklik_Timer -= diff;
- }
- }
- CheckJeklik_Timer = 1000;
- } else CheckJeklik_Timer -= diff;
-
- //Checking if Venoxis is dead. If not we cast his Aspect
- if (CheckVenoxis_Timer <= diff)
- {
- if (instance)
- {
- if (instance->GetData(DATA_VENOXIS) != DONE)
- {
- if (AspectOfVenoxis_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ASPECT_OF_VENOXIS);
- AspectOfVenoxis_Timer = 8000;
- } else AspectOfVenoxis_Timer -= diff;
- }
- }
- CheckVenoxis_Timer = 1000;
- } else CheckVenoxis_Timer -= diff;
-
- //Checking if Marli is dead. If not we cast her Aspect
- if (CheckMarli_Timer <= diff)
- {
- if (instance)
- {
- if (instance->GetData(DATA_MARLI) != DONE)
- {
- if (AspectOfMarli_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ASPECT_OF_MARLI);
- AspectOfMarli_Timer = 10000;
- } else AspectOfMarli_Timer -= diff;
-
- }
- }
- CheckMarli_Timer = 1000;
- } else CheckMarli_Timer -= diff;
+ events.Update(diff);
- //Checking if Thekal is dead. If not we cast his Aspect
- if (CheckThekal_Timer <= diff)
- {
- if (instance)
- {
- if (instance->GetData(DATA_THEKAL) != DONE)
- {
- if (AspectOfThekal_Timer <= diff)
- {
- DoCast(me, SPELL_ASPECT_OF_THEKAL);
- AspectOfThekal_Timer = 15000;
- } else AspectOfThekal_Timer -= diff;
- }
- }
- CheckThekal_Timer = 1000;
- } else CheckThekal_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Checking if Arlokk is dead. If yes we cast her Aspect
- if (CheckArlokk_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (instance)
+ switch (eventId)
{
- if (instance->GetData(DATA_ARLOKK) != DONE)
- {
- if (AspectOfArlokk_Timer <= diff)
- {
- DoCast(me, SPELL_ASPECT_OF_ARLOKK);
- DoResetThreat();
-
- AspectOfArlokk_Timer = urand(10000, 15000);
- } else AspectOfArlokk_Timer -= diff;
- }
+ case EVENT_BLOOD_SIPHON:
+ DoCastVictim(SPELL_BLOOD_SIPHON, true);
+ events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90000);
+ break;
+ case EVENT_CORRUPTED_BLOOD:
+ DoCastVictim(SPELL_CORRUPTED_BLOOD, true);
+ events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, urand(30000, 45000));
+ break;
+ case EVENT_CAUSE_INSANITY:
+ // DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_CAUSE_INSANITY);
+ // events.ScheduleEvent(EVENT_CAUSE_INSANITY, urand(35000, 45000));
+ break;
+ case EVENT_WILL_OF_HAKKAR:
+ DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_WILL_OF_HAKKAR);
+ events.ScheduleEvent(EVENT_WILL_OF_HAKKAR, urand(25000, 35000));
+ break;
+ case EVENT_ENRAGE:
+ if (!me->HasAura(SPELL_ENRAGE))
+ DoCast(me, SPELL_ENRAGE);
+ events.ScheduleEvent(EVENT_ENRAGE, 90000);
+ break;
+ case EVENT_ASPECT_OF_JEKLIK:
+ DoCastVictim(SPELL_ASPECT_OF_JEKLIK, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, urand(10000, 14000));
+ break;
+ case EVENT_ASPECT_OF_VENOXIS:
+ DoCastVictim(SPELL_ASPECT_OF_VENOXIS, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 8000);
+ break;
+ case EVENT_ASPECT_OF_MARLI:
+ DoCastVictim(SPELL_ASPECT_OF_MARLI, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 10000);
+ break;
+ case EVENT_ASPECT_OF_THEKAL:
+ DoCastVictim(SPELL_ASPECT_OF_THEKAL, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 15000);
+ break;
+ case EVENT_ASPECT_OF_ARLOKK:
+ DoCastVictim(SPELL_ASPECT_OF_ARLOKK, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, urand(10000, 15000));
+ break;
+ default:
+ break;
}
- CheckArlokk_Timer = 1000;
- } else CheckArlokk_Timer -= diff;
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
index bbdc2905874..15228815d69 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
@@ -27,75 +27,85 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-#define SPELL_MANABURN 26046
-#define SPELL_SLEEP 24664
+enum Spells
+{
+ SPELL_MANABURN = 26046,
+ SPELL_SLEEP = 24664
+};
-class boss_hazzarah : public CreatureScript
+enum Events
{
- public:
+ EVENT_MANABURN = 0,
+ EVENT_SLEEP = 1,
+ EVENT_ILLUSIONS = 2
+};
- boss_hazzarah()
- : CreatureScript("boss_hazzarah")
- {
- }
+class boss_hazzarah : public CreatureScript
+{
+ public: boss_hazzarah() : CreatureScript("boss_hazzarah") {}
- struct boss_hazzarahAI : public ScriptedAI
+ struct boss_hazzarahAI : public BossAI
{
- boss_hazzarahAI(Creature* creature) : ScriptedAI(creature) {}
-
- uint32 ManaBurn_Timer;
- uint32 Sleep_Timer;
- uint32 Illusions_Timer;
+ boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {}
void Reset()
{
- ManaBurn_Timer = urand(4000, 10000);
- Sleep_Timer = urand(10000, 18000);
- Illusions_Timer = urand(10000, 18000);
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_MANABURN, urand(4000, 10000));
+ events.ScheduleEvent(EVENT_SLEEP, urand(10000, 18000));
+ events.ScheduleEvent(EVENT_ILLUSIONS, urand(10000, 18000));
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- //ManaBurn_Timer
- if (ManaBurn_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_MANABURN);
- ManaBurn_Timer = urand(8000, 16000);
- } else ManaBurn_Timer -= diff;
+ events.Update(diff);
- //Sleep_Timer
- if (Sleep_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_SLEEP);
- Sleep_Timer = urand(12000, 20000);
- } else Sleep_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Illusions_Timer
- if (Illusions_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- //We will summon 3 illusions that will spawn on a random gamer and attack this gamer
- //We will just use one model for the beginning
- Unit* target = NULL;
- for (uint8 i = 0; i < 3; ++i)
+ switch (eventId)
{
- target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (!target)
- return;
-
- Creature* Illusion = me->SummonCreature(15163, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
- if (Illusion)
- Illusion->AI()->AttackStart(target);
+ case EVENT_MANABURN:
+ DoCastVictim(SPELL_MANABURN, true);
+ events.ScheduleEvent(EVENT_MANABURN, urand(8000, 16000));
+ break;
+ case EVENT_SLEEP:
+ DoCastVictim(SPELL_SLEEP, true);
+ events.ScheduleEvent(EVENT_SLEEP, urand(12000, 20000));
+ break;
+ case EVENT_ILLUSIONS:
+ // We will summon 3 illusions that will spawn on a random gamer and attack this gamer
+ // We will just use one model for the beginning
+ for (uint8 i = 0; i < 3; ++i)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ Creature* Illusion = me->SummonCreature(NPC_NIGHTMARE_ILLUSION, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
+ if (Illusion)
+ Illusion->AI()->AttackStart(target);
+ }
+ }
+ events.ScheduleEvent(EVENT_ILLUSIONS, urand(15000, 25000));
+ break;
+ default:
+ break;
}
-
- Illusions_Timer = urand(15000, 25000);
- } else Illusions_Timer -= diff;
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
index 10431ec84bd..7f19962e719 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
@@ -27,42 +27,34 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum Jeklik
+enum Says
{
SAY_AGGRO = 0,
SAY_RAIN_FIRE = 1,
- SAY_DEATH = 2,
+ SAY_DEATH = 2
+};
+enum Spells
+{
SPELL_CHARGE = 22911,
SPELL_SONICBURST = 23918,
SPELL_SCREECH = 6605,
SPELL_SHADOW_WORD_PAIN = 23952,
SPELL_MIND_FLAY = 23953,
- SPELL_CHAIN_MIND_FLAY = 26044, //Right ID unknown. So disabled
+ SPELL_CHAIN_MIND_FLAY = 26044, // Right ID unknown. So disabled
SPELL_GREATERHEAL = 23954,
SPELL_BAT_FORM = 23966,
-
// Batriders Spell
- SPELL_BOMB = 40332 //Wrong ID but Magmadars bomb is not working...
+ SPELL_BOMB = 40332 // Wrong ID but Magmadars bomb is not working...
};
-class boss_jeklik : public CreatureScript
+class boss_jeklik : public CreatureScript //jeklik
{
- public:
-
- boss_jeklik()
- : CreatureScript("boss_jeklik")
- {
- }
+ public: boss_jeklik() : CreatureScript("boss_jeklik") {}
- struct boss_jeklikAI : public ScriptedAI
+ struct boss_jeklikAI : public BossAI
{
- boss_jeklikAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- InstanceScript* instance;
+ boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) {}
uint32 Charge_Timer;
uint32 SonicBurst_Timer;
@@ -78,6 +70,7 @@ class boss_jeklik : public CreatureScript
void Reset()
{
+ _Reset();
Charge_Timer = 20000;
SonicBurst_Timer = 8000;
Screech_Timer = 13000;
@@ -91,18 +84,17 @@ class boss_jeklik : public CreatureScript
PhaseTwo = false;
}
- void EnterCombat(Unit* /*who*/)
- {
- Talk(SAY_AGGRO);
- DoCast(me, SPELL_BAT_FORM);
- }
-
void JustDied(Unit* /*killer*/)
{
+ _JustDied();
Talk(SAY_DEATH);
+ }
- if (instance)
- instance->SetData(DATA_JEKLIK, DONE);
+ void EnterCombat(Unit* /*who*/)
+ {
+ _EnterCombat();
+ Talk(SAY_AGGRO);
+ DoCast(me, SPELL_BAT_FORM);
}
void UpdateAI(const uint32 diff)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
index 7c4c9626f9a..005609e88db 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
@@ -27,147 +27,147 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum Jindo
+enum Say
{
- SAY_AGGRO = 1,
+ SAY_AGGRO = 1
+};
+enum Spells
+{
SPELL_BRAINWASHTOTEM = 24262,
- SPELL_POWERFULLHEALINGWARD = 24309, //We will not use this spell. We will summon a totem by script cause the spell totems will not cast.
+ SPELL_POWERFULLHEALINGWARD = 24309, // HACKED Totem summoned by script because the spell totems will not cast.
SPELL_HEX = 24053,
SPELL_DELUSIONSOFJINDO = 24306,
- SPELL_SHADEOFJINDO = 24308, //We will not use this spell. We will summon a shade by script.
-
+ SPELL_SHADEOFJINDO = 24308, // HACKED
//Healing Ward Spell
- SPELL_HEAL = 38588, //Totems are not working right. Right heal spell ID is 24311 but this spell is not casting...
-
+ SPELL_HEAL = 38588, // HACKED Totems are not working right. Right heal spell ID is 24311 but this spell is not casting...
//Shade of Jindo Spell
SPELL_SHADOWSHOCK = 19460,
SPELL_INVISIBLE = 24699
};
-class boss_jindo : public CreatureScript
+enum Events
{
- public:
+ EVENT_BRAINWASHTOTEM = 0,
+ EVENT_POWERFULLHEALINGWARD = 1,
+ EVENT_HEX = 2,
+ EVENT_DELUSIONSOFJINDO = 3,
+ EVENT_TELEPORT = 4
+};
- boss_jindo()
- : CreatureScript("boss_jindo")
- {
- }
+Position const TeleportLoc = {-11583.7783f, -1249.4278f, 77.5471f, 4.745f};
- struct boss_jindoAI : public ScriptedAI
- {
- boss_jindoAI(Creature* creature) : ScriptedAI(creature) {}
+class boss_jindo : public CreatureScript
+{
+ public: boss_jindo() : CreatureScript("boss_jindo") {}
- uint32 BrainWashTotem_Timer;
- uint32 HealingWard_Timer;
- uint32 Hex_Timer;
- uint32 Delusions_Timer;
- uint32 Teleport_Timer;
+ struct boss_jindoAI : public BossAI
+ {
+ boss_jindoAI(Creature* creature) : BossAI(creature, DATA_JINDO) {}
void Reset()
{
- BrainWashTotem_Timer = 20000;
- HealingWard_Timer = 16000;
- Hex_Timer = 8000;
- Delusions_Timer = 10000;
- Teleport_Timer = 5000;
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_BRAINWASHTOTEM, 20000);
+ events.ScheduleEvent(EVENT_POWERFULLHEALINGWARD, 16000);
+ events.ScheduleEvent(EVENT_HEX, 8000);
+ events.ScheduleEvent(EVENT_DELUSIONSOFJINDO, 10000);
+ events.ScheduleEvent(EVENT_TELEPORT, 5000);
Talk(SAY_AGGRO);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- //BrainWashTotem_Timer
- if (BrainWashTotem_Timer <= diff)
- {
- DoCast(me, SPELL_BRAINWASHTOTEM);
- BrainWashTotem_Timer = urand(18000, 26000);
- } else BrainWashTotem_Timer -= diff;
-
- //HealingWard_Timer
- if (HealingWard_Timer <= diff)
- {
- //DoCast(me, SPELL_POWERFULLHEALINGWARD);
- me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
- HealingWard_Timer = urand(14000, 20000);
- } else HealingWard_Timer -= diff;
-
- //Hex_Timer
- if (Hex_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_HEX);
-
- if (DoGetThreat(me->getVictim()))
- DoModifyThreatPercent(me->getVictim(), -80);
+ events.Update(diff);
- Hex_Timer = urand(12000, 20000);
- } else Hex_Timer -= diff;
-
- //Casting the delusion curse with a shade. So shade will attack the same target with the curse.
- if (Delusions_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- {
- DoCast(target, SPELL_DELUSIONSOFJINDO);
-
- Creature* Shade = me->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Shade)
- Shade->AI()->AttackStart(target);
- }
-
- Delusions_Timer = urand(4000, 12000);
- } else Delusions_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Teleporting a random gamer and spawning 9 skeletons that will attack this gamer
- if (Teleport_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- Unit* target = NULL;
- target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (target && target->GetTypeId() == TYPEID_PLAYER)
+ switch (eventId)
{
- DoTeleportPlayer(target, -11583.7783f, -1249.4278f, 77.5471f, 4.745f);
-
- if (DoGetThreat(me->getVictim()))
- DoModifyThreatPercent(target, -100);
-
- Creature* Skeletons;
- Skeletons = me->SummonCreature(14826, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
- Skeletons = me->SummonCreature(14826, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Skeletons)
- Skeletons->AI()->AttackStart(target);
+ case EVENT_BRAINWASHTOTEM:
+ DoCast(me, SPELL_BRAINWASHTOTEM);
+ events.ScheduleEvent(EVENT_BRAINWASHTOTEM, urand(18000, 26000));
+ break;
+ case EVENT_POWERFULLHEALINGWARD: // HACK
+ //DoCast(me, SPELL_POWERFULLHEALINGWARD);
+ me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
+ events.ScheduleEvent(EVENT_POWERFULLHEALINGWARD, urand(14000, 20000));
+ break;
+ case EVENT_HEX:
+ DoCastVictim(SPELL_HEX, true);
+ if (DoGetThreat(me->getVictim()))
+ DoModifyThreatPercent(me->getVictim(), -80);
+ events.ScheduleEvent(EVENT_HEX, urand(12000, 20000));
+ break;
+ case EVENT_DELUSIONSOFJINDO: // HACK
+ // Casting the delusion curse with a shade so shade will attack the same target with the curse.
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ DoCast(target, SPELL_DELUSIONSOFJINDO);
+ Creature* Shade = me->SummonCreature(NPC_SHADE_OF_JINDO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (Shade)
+ Shade->AI()->AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_DELUSIONSOFJINDO, urand(4000, 12000));
+ break;
+ case EVENT_TELEPORT: // Possible HACK
+ // Teleports a random player and spawns 9 Sacrificed Trolls to attack player
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ DoTeleportPlayer(target, TeleportLoc.m_positionX, TeleportLoc.m_positionY, TeleportLoc.m_positionZ, TeleportLoc.m_orientation);
+ if (DoGetThreat(me->getVictim()))
+ DoModifyThreatPercent(target, -100);
+ Creature* SacrificedTroll;
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (SacrificedTroll)
+ SacrificedTroll->AI()->AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_TELEPORT, urand(15000, 23000));
+ break;
+ default:
+ break;
}
-
- Teleport_Timer = urand(15000, 23000);
- } else Teleport_Timer -= diff;
+ }
DoMeleeAttackIfReady();
}
@@ -283,4 +283,3 @@ void AddSC_boss_jindo()
new mob_healing_ward();
new mob_shade_of_jindo();
}
-
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index bcc080bb8a5..258dda26c11 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -27,44 +27,37 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum Mandokir
+enum Says
{
- SAY_AGGRO = 0,
- SAY_DING_KILL = 1,
- SAY_WATCH = 2,
- SAY_WATCH_WHISPER = 3, //is this text for real? easter egg?
- SAY_GRATS_JINDO = 0,
-
- SPELL_CHARGE = 24408,
- SPELL_CLEAVE = 7160,
- SPELL_FEAR = 29321,
- SPELL_WHIRLWIND = 15589,
- SPELL_MORTAL_STRIKE = 16856,
- SPELL_ENRAGE = 24318,
- SPELL_WATCH = 24314,
- SPELL_LEVEL_UP = 24312,
-
-//Ohgans Spells
- SPELL_SUNDERARMOR = 24317,
-
- NPC_SPEAKER = 11391
+ SAY_AGGRO = 0,
+ SAY_DING_KILL = 1,
+ SAY_WATCH = 2,
+ SAY_WATCH_WHISPER = 3, // is this text for real? easter egg?
+ SAY_GRATS_JINDO = 0,
};
-class boss_mandokir : public CreatureScript
+enum Spells
{
- public:
+ SPELL_CHARGE = 24408,
+ SPELL_CLEAVE = 7160,
+ SPELL_FEAR = 29321,
+ SPELL_WHIRLWIND = 15589,
+ SPELL_MORTAL_STRIKE = 16856,
+ SPELL_ENRAGE = 24318,
+ SPELL_WATCH = 24314,
+ SPELL_LEVEL_UP = 24312,
+ SPELL_SWIFT_ORANGE_RAPTOR = 23243,
+ // Ohgans Spell
+ SPELL_SUNDERARMOR = 24317
+};
- boss_mandokir()
- : CreatureScript("boss_mandokir")
- {
- }
+class boss_mandokir : public CreatureScript
+{
+ public: boss_mandokir() : CreatureScript("boss_mandokir") {}
- struct boss_mandokirAI : public ScriptedAI
+ struct boss_mandokirAI : public BossAI
{
- boss_mandokirAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
+ boss_mandokirAI(Creature* creature) : BossAI(creature, DATA_MANDOKIR) {}
uint32 KillCount;
uint32 Watch_Timer;
@@ -114,6 +107,11 @@ class boss_mandokir : public CreatureScript
DoCast(me, 23243);
}
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
+ }
+
void KilledUnit(Unit* victim)
{
if (victim->GetTypeId() == TYPEID_PLAYER)
@@ -144,6 +142,7 @@ class boss_mandokir : public CreatureScript
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
Talk(SAY_AGGRO);
}
@@ -302,15 +301,10 @@ class boss_mandokir : public CreatureScript
}
};
-//Ohgan
+// Ohgan
class mob_ohgan : public CreatureScript
{
- public:
-
- mob_ohgan()
- : CreatureScript("mob_ohgan")
- {
- }
+ public: mob_ohgan() : CreatureScript("mob_ohgan") {}
struct mob_ohganAI : public ScriptedAI
{
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
index 56aeee93ee2..40850a988e4 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
@@ -27,192 +27,189 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum Marli
+enum Says
{
SAY_AGGRO = 0,
SAY_TRANSFORM = 1,
SAY_SPIDER_SPAWN = 2,
- SAY_DEATH = 3,
+ SAY_DEATH = 3
+};
+
+enum Spells
+{
+ SPELL_CHARGE = 22911,
+ SPELL_ASPECT_OF_MARLI = 24686, // A stun spell
+ SPELL_ENVOLWINGWEB = 24110,
+ SPELL_POISON_VOLLEY = 24099,
+ SPELL_SPIDER_FORM = 24084,
+ // The Spider Spell
+ SPELL_LEVELUP = 24312 // Not right Spell.
+};
- SPELL_CHARGE = 22911,
- SPELL_ASPECT_OF_MARLI = 24686, // A stun spell
- SPELL_ENVOLWINGWEB = 24110,
- SPELL_POISONVOLLEY = 24099,
- SPELL_SPIDER_FORM = 24084,
+enum Events
+{
+ EVENT_SPAWN_START_SPIDERS = 0, // Phase 1
+ EVENT_POISON_VOLLEY = 1, // Phase All
+ EVENT_SPAWN_SPIDER = 2, // Phase All
+ EVENT_CHARGE_PLAYER = 3, // Phase 3
+ EVENT_ASPECT_OF_MARLI = 4, // Phase 2
+ EVENT_TRANSFORM = 5, // Phase 2
+ EVENT_TRANSFORM_BACK = 6 // Phase 3
+};
-//The Spider Spells
- SPELL_LEVELUP = 24312 //Not right Spell.
+enum Phases
+{
+ PHASE_ONE = 1,
+ PHASE_TWO = 2,
+ PHASE_THREE = 3
+};
+
+enum ModelId
+{
+ MODEL_MARLI = 15220
};
class boss_marli : public CreatureScript
{
- public:
+ public: boss_marli() : CreatureScript("boss_marli") {}
- boss_marli()
- : CreatureScript("boss_marli")
+ struct boss_marliAI : public BossAI
{
- }
+ boss_marliAI(Creature* creature) : BossAI(creature, DATA_MARLI) {}
- struct boss_marliAI : public ScriptedAI
- {
- boss_marliAI(Creature* creature) : ScriptedAI(creature)
+ void Reset()
{
- instance = creature->GetInstanceScript();
+ _Reset();
}
- InstanceScript* instance;
-
- uint32 SpawnStartSpiders_Timer;
- uint32 PoisonVolley_Timer;
- uint32 SpawnSpider_Timer;
- uint32 Charge_Timer;
- uint32 Aspect_Timer;
- uint32 Transform_Timer;
- uint32 TransformBack_Timer;
-
- bool Spawned;
- bool PhaseTwo;
-
- void Reset()
+ void JustDied(Unit* /*killer*/)
{
- SpawnStartSpiders_Timer = 1000;
- PoisonVolley_Timer = 15000;
- SpawnSpider_Timer = 30000;
- Charge_Timer = 1500;
- Aspect_Timer = 12000;
- Transform_Timer = 45000;
- TransformBack_Timer = 25000;
-
- Spawned = false;
- PhaseTwo = false;
+ _JustDied();
+ Talk(SAY_DEATH);
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_SPAWN_START_SPIDERS, 1000, 0, PHASE_ONE);
Talk(SAY_AGGRO);
}
- void JustDied(Unit* /*killer*/)
- {
- Talk(SAY_DEATH);
- if (instance)
- instance->SetData(DATA_MARLI, DONE);
- }
-
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- if (me->getVictim() && me->isAlive())
- {
- if (PoisonVolley_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_POISONVOLLEY);
- PoisonVolley_Timer = urand(10000, 20000);
- } else PoisonVolley_Timer -= diff;
+ events.Update(diff);
- if (!PhaseTwo && Aspect_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ASPECT_OF_MARLI);
- Aspect_Timer = urand(13000, 18000);
- } else Aspect_Timer -= diff;
-
- if (!Spawned && SpawnStartSpiders_Timer <= diff)
- {
- Talk(SAY_SPIDER_SPAWN);
-
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (!target)
- return;
-
- Creature* Spider = NULL;
-
- Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Spider)
- Spider->AI()->AttackStart(target);
- Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Spider)
- Spider->AI()->AttackStart(target);
- Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Spider)
- Spider->AI()->AttackStart(target);
- Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Spider)
- Spider->AI()->AttackStart(target);
-
- Spawned = true;
- } else SpawnStartSpiders_Timer -= diff;
-
- if (SpawnSpider_Timer <= diff)
- {
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (!target)
- return;
-
- Creature* Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if (Spider)
- Spider->AI()->AttackStart(target);
- SpawnSpider_Timer = urand(12000, 17000);
- } else SpawnSpider_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (!PhaseTwo && Transform_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- Talk(SAY_TRANSFORM);
- DoCast(me, SPELL_SPIDER_FORM);
- const CreatureTemplate* cinfo = me->GetCreatureTemplate();
- me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
- me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
- me->UpdateDamagePhysical(BASE_ATTACK);
- DoCast(me->getVictim(), SPELL_ENVOLWINGWEB);
-
- if (DoGetThreat(me->getVictim()))
- DoModifyThreatPercent(me->getVictim(), -100);
+ case EVENT_SPAWN_START_SPIDERS:
- PhaseTwo = true;
- Transform_Timer = urand(35000, 60000);
- } else Transform_Timer -= diff;
-
- if (PhaseTwo)
- {
- if (Charge_Timer <= diff)
- {
- Unit* target = NULL;
- int i = 0;
- while (i < 3) // max 3 tries to get a random target with power_mana
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
- ++i;
- target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); // not aggro leader
- if (target && target->getPowerType() == POWER_MANA)
+ Talk(SAY_SPIDER_SPAWN);
+ Creature* Spider = NULL;
+ Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (Spider)
+ Spider->AI()->AttackStart(target);
+ Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (Spider)
+ Spider->AI()->AttackStart(target);
+ Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (Spider)
+ Spider->AI()->AttackStart(target);
+ Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (Spider)
+ Spider->AI()->AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_POISON_VOLLEY, 15000);
+ events.ScheduleEvent(EVENT_SPAWN_SPIDER, 30000);
+ events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO);
+ events.SetPhase(PHASE_TWO);
+ break;
+ case EVENT_POISON_VOLLEY:
+ DoCastVictim(SPELL_POISON_VOLLEY, true);
+ events.ScheduleEvent(EVENT_POISON_VOLLEY, urand(10000, 20000));
+ break;
+ case EVENT_ASPECT_OF_MARLI:
+ DoCastVictim(SPELL_ASPECT_OF_MARLI, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, urand(13000, 18000), 0, PHASE_TWO);
+ break;
+ case EVENT_SPAWN_SPIDER:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ Creature* Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
+ if (Spider)
+ Spider->AI()->AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_SPAWN_SPIDER, urand(12000, 17000));
+ break;
+ case EVENT_TRANSFORM:
+ {
+ Talk(SAY_TRANSFORM);
+ DoCast(me, SPELL_SPIDER_FORM);
+ const CreatureTemplate* cinfo = me->GetCreatureTemplate();
+ me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
+ me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
+ me->UpdateDamagePhysical(BASE_ATTACK);
+ DoCast(me->getVictim(), SPELL_ENVOLWINGWEB);
+ if (DoGetThreat(me->getVictim()))
+ DoModifyThreatPercent(me->getVictim(), -100);
+ events.ScheduleEvent(EVENT_CHARGE_PLAYER, 1500, 0, PHASE_THREE);
+ events.ScheduleEvent(EVENT_TRANSFORM_BACK, 25000, 0, PHASE_THREE);
+ events.SetPhase(PHASE_THREE);
+ break;
+ }
+ case EVENT_CHARGE_PLAYER:
+ {
+ Unit* target = NULL;
+ int i = 0;
+ while (i < 3) // max 3 tries to get a random target with power_mana
+ {
+ ++i;
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); // not aggro leader
+ if (target && target->getPowerType() == POWER_MANA)
i = 3;
+ }
+ if (target)
+ {
+ DoCast(target, SPELL_CHARGE);
+ //me->SetPosition(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0);
+ //me->SendMonsterMove(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, true, 1);
+ AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_CHARGE_PLAYER, 8000, 0, PHASE_THREE);
+ break;
}
- if (target)
+ case EVENT_TRANSFORM_BACK:
{
- DoCast(target, SPELL_CHARGE);
- //me->SetPosition(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0);
- //me->SendMonsterMove(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, true, 1);
- AttackStart(target);
+ me->SetDisplayId(MODEL_MARLI);
+ const CreatureTemplate* cinfo = me->GetCreatureTemplate();
+ me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1)));
+ me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1)));
+ me->UpdateDamagePhysical(BASE_ATTACK);
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_POISON_VOLLEY, 15000);
+ events.ScheduleEvent(EVENT_SPAWN_SPIDER, 30000);
+ events.ScheduleEvent(EVENT_TRANSFORM, urand(35000, 60000), 0, PHASE_TWO);
+ events.SetPhase(PHASE_TWO);
+ break;
}
-
- Charge_Timer = 8000;
- } else Charge_Timer -= diff;
-
- if (TransformBack_Timer <= diff)
- {
- me->SetDisplayId(15220);
- const CreatureTemplate* cinfo = me->GetCreatureTemplate();
- me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1)));
- me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1)));
- me->UpdateDamagePhysical(BASE_ATTACK);
-
- PhaseTwo = false;
- TransformBack_Timer = urand(25000, 40000);
- } else TransformBack_Timer -= diff;
-
+ default:
+ break;
}
-
- DoMeleeAttackIfReady();
}
+
+ DoMeleeAttackIfReady();
}
};
@@ -222,15 +219,10 @@ class boss_marli : public CreatureScript
}
};
-//Spawn of Marli
+// Spawn of Marli
class mob_spawn_of_marli : public CreatureScript
{
- public:
-
- mob_spawn_of_marli()
- : CreatureScript("mob_spawn_of_marli")
- {
- }
+ public: mob_spawn_of_marli() : CreatureScript("mob_spawn_of_marli") {}
struct mob_spawn_of_marliAI : public ScriptedAI
{
@@ -275,4 +267,3 @@ void AddSC_boss_marli()
new boss_marli();
new mob_spawn_of_marli();
}
-
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
index d562b7cdf9b..6bf87decf7e 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
@@ -40,16 +40,11 @@ enum Misc
class boss_renataki : public CreatureScript
{
- public:
+ public: boss_renataki() : CreatureScript("boss_renataki") {}
- boss_renataki()
- : CreatureScript("boss_renataki")
+ struct boss_renatakiAI : public BossAI
{
- }
-
- struct boss_renatakiAI : public ScriptedAI
- {
- boss_renatakiAI(Creature* creature) : ScriptedAI(creature) {}
+ boss_renatakiAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {}
uint32 Invisible_Timer;
uint32 Ambush_Timer;
@@ -62,6 +57,7 @@ class boss_renataki : public CreatureScript
void Reset()
{
+ _Reset();
Invisible_Timer = urand(8000, 18000);
Ambush_Timer = 3000;
Visible_Timer = 4000;
@@ -72,8 +68,14 @@ class boss_renataki : public CreatureScript
Ambushed = false;
}
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
+ }
+
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
}
void UpdateAI(const uint32 diff)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
index d91b8f0b483..ab45162fc35 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
@@ -27,28 +27,29 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "zulgurub.h"
-enum Thekal
+enum Says
{
SAY_AGGRO = 0,
- SAY_DEATH = 1,
-
- SPELL_MORTALCLEAVE = 22859,
- SPELL_SILENCE = 22666,
- SPELL_FRENZY = 8269,
- SPELL_FORCEPUNCH = 24189,
- SPELL_CHARGE = 24193,
- SPELL_ENRAGE = 8269,
- SPELL_SUMMONTIGERS = 24183,
- SPELL_TIGER_FORM = 24169,
- SPELL_RESURRECT = 24173, //We will not use this spell.
-
-//Zealot Lor'Khan Spells
+ SAY_DEATH = 1
+};
+
+enum Spells
+{
+ SPELL_MORTALCLEAVE = 22859, // Phase 1
+ SPELL_SILENCE = 22666, // Phase 1
+ SPELL_TIGER_FORM = 24169, // Phase 1
+ SPELL_RESURRECT = 24173, // Phase 1 // Not used in script.
+ SPELL_FRENZY = 8269, // Phase 2
+ SPELL_FORCEPUNCH = 24189, // Phase 2
+ SPELL_CHARGE = 24193, // Phase 2
+ SPELL_ENRAGE = 8269, // Phase 2
+ SPELL_SUMMONTIGERS = 24183, // Phase 2
+ // Zealot Lor'Khan Spells
SPELL_SHIELD = 20545,
SPELL_BLOODLUST = 24185,
SPELL_GREATERHEAL = 24208,
SPELL_DISARM = 6713,
-
-//Zealot Zath Spells
+ // Zealot Zath Spells
SPELL_SWEEPINGSTRIKES = 18765,
SPELL_SINISTERSTRIKE = 15581,
SPELL_GOUGE = 12540,
@@ -56,64 +57,57 @@ enum Thekal
SPELL_BLIND = 21060
};
-class boss_thekal : public CreatureScript
+enum Events
{
- public:
+ EVENT_MORTALCLEAVE = 0, // Phase 1
+ EVENT_SILENCE = 1, // Phase 1
+ EVENT_CHECK_TIMER = 2, // Phase 1
+ EVENT_RESURRECT_TIMER = 3, // Phase 1
+ EVENT_FRENZY = 4, // Phase 2
+ EVENT_FORCEPUNCH = 5, // Phase 2
+ EVENT_SPELL_CHARGE = 6, // Phase 2
+ EVENT_ENRAGE = 7, // Phase 2
+ EVENT_SUMMONTIGERS = 8 // Phase 2
+};
- boss_thekal()
- : CreatureScript("boss_thekal")
- {
- }
+enum Phases
+{
+ PHASE_ONE = 1,
+ PHASE_TWO = 2
+};
- struct boss_thekalAI : public ScriptedAI
- {
- boss_thekalAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
+class boss_thekal : public CreatureScript
+{
+ public: boss_thekal() : CreatureScript("boss_thekal") {}
- uint32 MortalCleave_Timer;
- uint32 Silence_Timer;
- uint32 Frenzy_Timer;
- uint32 ForcePunch_Timer;
- uint32 Charge_Timer;
- uint32 Enrage_Timer;
- uint32 SummonTigers_Timer;
- uint32 Check_Timer;
- uint32 Resurrect_Timer;
+ struct boss_thekalAI : public BossAI
+ {
+ boss_thekalAI(Creature* creature) : BossAI(creature, DATA_THEKAL) {}
- InstanceScript* instance;
bool Enraged;
- bool PhaseTwo;
bool WasDead;
void Reset()
{
- MortalCleave_Timer = 4000;
- Silence_Timer = 9000;
- Frenzy_Timer = 30000;
- ForcePunch_Timer = 4000;
- Charge_Timer = 12000;
- Enrage_Timer = 32000;
- SummonTigers_Timer = 25000;
- Check_Timer = 10000;
- Resurrect_Timer = 10000;
-
+ _Reset();
Enraged = false;
- PhaseTwo = false;
WasDead = false;
}
- void EnterCombat(Unit* /*who*/)
+ void JustDied(Unit* /*killer*/)
{
- Talk(SAY_AGGRO);
+ _JustDied();
+ Talk(SAY_DEATH);
}
- void JustDied(Unit* /*killer*/)
+ void EnterCombat(Unit* /*who*/)
{
- Talk(SAY_DEATH);
- if (instance)
- instance->SetData(DATA_THEKAL, DONE);
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_MORTALCLEAVE, 4000, 0, PHASE_ONE); // Phase 1
+ events.ScheduleEvent(EVENT_SILENCE, 9000, 0, PHASE_ONE); // Phase 1
+ events.ScheduleEvent(EVENT_CHECK_TIMER, 10000, 0, PHASE_ONE); // Phase 1
+ events.ScheduleEvent(EVENT_RESURRECT_TIMER, 10000, 0, PHASE_ONE); // Phase 1
+ Talk(SAY_AGGRO);
}
void JustReachedHome()
@@ -122,62 +116,123 @@ class boss_thekal : public CreatureScript
instance->SetData(DATA_THEKAL, NOT_STARTED);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- //Check_Timer for the death of LorKhan and Zath.
- if (!WasDead && Check_Timer <= diff)
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (instance)
- {
- if (instance->GetData(DATA_LORKHAN) == SPECIAL)
+ case EVENT_MORTALCLEAVE:
+ DoCastVictim(SPELL_MORTALCLEAVE, true);
+ events.ScheduleEvent(EVENT_MORTALCLEAVE, urand(15000, 20000), 0, PHASE_ONE);
+ break;
+ case EVENT_SILENCE:
+ DoCastVictim(SPELL_SILENCE, true);
+ events.ScheduleEvent(EVENT_SILENCE, urand(20000, 25000), 0, PHASE_ONE);
+ break;
+ case EVENT_RESURRECT_TIMER:
+ //Thekal will transform to Tiger if he died and was not resurrected after 10 seconds.
+ if (WasDead)
{
- //Resurrect LorKhan
- if (Unit* pLorKhan = Unit::GetUnit(*me, instance->GetData64(DATA_LORKHAN)))
- {
- pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- pLorKhan->setFaction(14);
- pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- pLorKhan->SetFullHealth();
-
- instance->SetData(DATA_LORKHAN, DONE);
- }
+ DoCast(me, SPELL_TIGER_FORM);
+ me->SetObjectScale(2.00f);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetFullHealth();
+ const CreatureTemplate* cinfo = me->GetCreatureTemplate();
+ me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 40)));
+ me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 40)));
+ me->UpdateDamagePhysical(BASE_ATTACK);
+ DoResetThreat();
+ events.ScheduleEvent(EVENT_FRENZY, 30000, 0, PHASE_TWO); // Phase 2
+ events.ScheduleEvent(EVENT_FORCEPUNCH, 4000, 0, PHASE_TWO); // Phase 2
+ events.ScheduleEvent(EVENT_SPELL_CHARGE, 12000, 0, PHASE_TWO); // Phase 2
+ events.ScheduleEvent(EVENT_ENRAGE, 32000, 0, PHASE_TWO); // Phase 2
+ events.ScheduleEvent(EVENT_SUMMONTIGERS, 25000, 0, PHASE_TWO); // Phase 2
+ events.SetPhase(PHASE_TWO);
}
-
- if (instance->GetData(DATA_ZATH) == SPECIAL)
+ events.ScheduleEvent(EVENT_RESURRECT_TIMER, 10000, 0, PHASE_ONE);
+ break;
+ case EVENT_CHECK_TIMER:
+ //Check_Timer for the death of LorKhan and Zath.
+ if (!WasDead)
{
- //Resurrect Zath
- Unit* pZath = Unit::GetUnit(*me, instance->GetData64(DATA_ZATH));
- if (pZath)
+ if (instance)
{
- pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- pZath->setFaction(14);
- pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- pZath->SetFullHealth();
-
- instance->SetData(DATA_ZATH, DONE);
+ if (instance->GetData(DATA_LORKHAN) == SPECIAL)
+ {
+ //Resurrect LorKhan
+ if (Unit* pLorKhan = Unit::GetUnit(*me, instance->GetData64(DATA_LORKHAN)))
+ {
+ pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ pLorKhan->setFaction(14);
+ pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ pLorKhan->SetFullHealth();
+ instance->SetData(DATA_LORKHAN, DONE);
+ }
+ }
+
+ if (instance->GetData(DATA_ZATH) == SPECIAL)
+ {
+ //Resurrect Zath
+ if (Unit* pZath = Unit::GetUnit(*me, instance->GetData64(DATA_ZATH)))
+ {
+ pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ pZath->setFaction(14);
+ pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ pZath->SetFullHealth();
+ instance->SetData(DATA_ZATH, DONE);
+ }
+ }
}
}
- }
-
- Check_Timer = 5000;
- } else Check_Timer -= diff;
-
- if (!PhaseTwo && MortalCleave_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_MORTALCLEAVE);
- MortalCleave_Timer = urand(15000, 20000);
- } else MortalCleave_Timer -= diff;
+ events.ScheduleEvent(EVENT_CHECK_TIMER, 5000, 0, PHASE_ONE);
+ break;
+ case EVENT_FRENZY:
+ DoCast(me, SPELL_FRENZY);
+ events.ScheduleEvent(EVENT_FRENZY, 30000, 0, PHASE_TWO);
+ break;
+ case EVENT_FORCEPUNCH:
+ DoCastVictim(SPELL_FORCEPUNCH, true);
+ events.ScheduleEvent(EVENT_FORCEPUNCH, urand(16000, 21000), 0, PHASE_TWO);
+ break;
+ case EVENT_CHARGE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ DoCast(target, SPELL_CHARGE);
+ DoResetThreat();
+ AttackStart(target);
+ }
+ events.ScheduleEvent(EVENT_CHARGE, urand(15000, 22000), 0, PHASE_TWO);
+ break;
+ case EVENT_ENRAGE:
+ if (HealthBelowPct(11) && !Enraged)
+ {
+ DoCast(me, SPELL_ENRAGE);
+ Enraged = true;
+ }
+ events.ScheduleEvent(EVENT_ENRAGE, 30000);
+ break;
+ case EVENT_SUMMONTIGERS:
+ DoCastVictim(SPELL_SUMMONTIGERS, true);
+ events.ScheduleEvent(EVENT_SUMMONTIGERS, urand(10000, 14000), 0, PHASE_TWO);
+ break;
+ default:
+ break;
+ }
- if (!PhaseTwo && Silence_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_SILENCE);
- Silence_Timer = urand(20000, 25000);
- } else Silence_Timer -= diff;
+ if (me->IsFullHealth() && WasDead)
+ WasDead = false;
- if (!PhaseTwo && !WasDead && !HealthAbovePct(5))
+ if ((events.GetPhaseMask() == PHASE_ONE) && !WasDead && !HealthAbovePct(5))
{
me->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
me->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
@@ -185,78 +240,12 @@ class boss_thekal : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetStandState(UNIT_STAND_STATE_SLEEP);
me->AttackStop();
-
if (instance)
instance->SetData(DATA_THEKAL, SPECIAL);
-
WasDead=true;
}
-
- //Thekal will transform to Tiger if he died and was not resurrected after 10 seconds.
- if (!PhaseTwo && WasDead)
- {
- if (Resurrect_Timer <= diff)
- {
- DoCast(me, SPELL_TIGER_FORM);
- me->SetObjectScale(2.00f);
- me->SetStandState(UNIT_STAND_STATE_STAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetFullHealth();
- const CreatureTemplate* cinfo = me->GetCreatureTemplate();
- me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 40)));
- me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 40)));
- me->UpdateDamagePhysical(BASE_ATTACK);
- DoResetThreat();
- PhaseTwo = true;
- } else Resurrect_Timer -= diff;
- }
-
- if (me->IsFullHealth() && WasDead)
- {
- WasDead = false;
- }
-
- if (PhaseTwo)
- {
- if (Charge_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- {
- DoCast(target, SPELL_CHARGE);
- DoResetThreat();
- AttackStart(target);
- }
-
- Charge_Timer = urand(15000, 22000);
- } else Charge_Timer -= diff;
-
- if (Frenzy_Timer <= diff)
- {
- DoCast(me, SPELL_FRENZY);
- Frenzy_Timer = 30000;
- } else Frenzy_Timer -= diff;
-
- if (ForcePunch_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_SILENCE);
- ForcePunch_Timer = urand(16000, 21000);
- } else ForcePunch_Timer -= diff;
-
- if (SummonTigers_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_SUMMONTIGERS);
- SummonTigers_Timer = urand(10000, 14000);
- } else SummonTigers_Timer -= diff;
-
- if (HealthBelowPct(11) && !Enraged)
- {
- DoCast(me, SPELL_ENRAGE);
- Enraged = true;
- }
- }
-
- DoMeleeAttackIfReady();
-
+ }
+ DoMeleeAttackIfReady();
}
};
@@ -269,12 +258,7 @@ class boss_thekal : public CreatureScript
//Zealot Lor'Khan
class mob_zealot_lorkhan : public CreatureScript
{
- public:
-
- mob_zealot_lorkhan()
- : CreatureScript("mob_zealot_lorkhan")
- {
- }
+ public: mob_zealot_lorkhan() : CreatureScript("mob_zealot_lorkhan") {}
struct mob_zealot_lorkhanAI : public ScriptedAI
{
@@ -585,4 +569,3 @@ void AddSC_boss_thekal()
new mob_zealot_lorkhan();
new mob_zealot_zath();
}
-
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
index ff63e4a8adb..11a6e710c3c 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
@@ -27,10 +27,10 @@
* - Fix timers (research some more)
*/
-enum Texts
+enum Says
{
SAY_VENOXIS_TRANSFORM = 1, // Let the coils of hate unfurl!
- SAY_VENOXIS_DEATH = 2, // Ssserenity.. at lassst!
+ SAY_VENOXIS_DEATH = 2 // Ssserenity.. at lassst!
};
enum Spells
@@ -42,7 +42,6 @@ enum Spells
SPELL_HOLY_NOVA = 23858,
SPELL_HOLY_FIRE = 23860,
SPELL_HOLY_WRATH = 23979,
-
// snake form
SPELL_POISON_CLOUD = 23861,
SPELL_VENOM_SPIT = 23862,
@@ -50,15 +49,9 @@ enum Spells
SPELL_PARASITIC_SERPENT = 23865,
SPELL_SUMMON_PARASITIC_SERPENT = 23866,
SPELL_PARASITIC_SERPENT_TRIGGER = 23867,
-
// used when swapping event-stages
SPELL_VENOXIS_TRANSFORM = 23849, // 50% health - shapechange to cobra
- SPELL_FRENZY = 8269, // 20% health - frenzy
-};
-
-enum NPCs
-{
- NPC_PARASITIC_SERPENT = 14884,
+ SPELL_FRENZY = 8269 // 20% health - frenzy
};
enum Events
@@ -70,10 +63,8 @@ enum Events
EVENT_HOLY_NOVA = 4,
EVENT_HOLY_FIRE = 5,
EVENT_HOLY_WRATH = 6,
-
// phase-changing
EVENT_TRANSFORM = 7,
-
// snake form events
EVENT_POISON_CLOUD = 8,
EVENT_VENOM_SPIT = 9,
@@ -84,49 +75,48 @@ enum Events
enum Phases
{
PHASE_ONE = 1, // troll form
- PHASE_TWO = 2, // snake form
+ PHASE_TWO = 2 // snake form
+};
+
+enum NPCs
+{
+ NPC_PARASITIC_SERPENT = 14884
};
class boss_venoxis : public CreatureScript
{
- public:
- boss_venoxis() : CreatureScript("boss_venoxis") {}
+ public: boss_venoxis() : CreatureScript("boss_venoxis") {}
struct boss_venoxisAI : public BossAI
{
- boss_venoxisAI(Creature* creature) : BossAI(creature, DATA_VENOXIS)
- {
- }
+ boss_venoxisAI(Creature* creature) : BossAI(creature, DATA_VENOXIS) {}
void Reset()
{
- events.Reset();
- summons.DespawnAll();
-
- // make sure this boss is properly reset
- instance->SetBossState(DATA_VENOXIS, NOT_STARTED);
-
+ _Reset();
// remove all spells and auras from previous attempts
me->RemoveAllAuras();
me->SetReactState(REACT_PASSIVE);
-
// set some internally used variables to their defaults
_inMeleeRange = 0;
_transformed = false;
_frenzied = false;
-
events.SetPhase(PHASE_ONE);
}
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
+ Talk(SAY_VENOXIS_DEATH);
+ me->RemoveAllAuras();
+ }
+
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
me->SetReactState(REACT_AGGRESSIVE);
-
- instance->SetBossState(DATA_VENOXIS, IN_PROGRESS);
-
// Always running events
events.ScheduleEvent(EVENT_THRASH, 5000);
-
// Phase one events (regular form)
events.ScheduleEvent(EVENT_HOLY_NOVA, 5000, 0, PHASE_ONE);
events.ScheduleEvent(EVENT_DISPEL_MAGIC, 35000, 0, PHASE_ONE);
@@ -157,14 +147,6 @@ class boss_venoxis : public CreatureScript
}
}
- void JustDied(Unit* /*killer*/)
- {
- Talk(SAY_VENOXIS_DEATH);
- // venoxis is dead, mark him as such for the instance
- instance->SetBossState(DATA_VENOXIS, DONE);
- me->RemoveAllAuras();
- }
-
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
index 810ee5e900e..d1e7edf0218 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
@@ -33,53 +33,63 @@ enum Spells
SPELL_LIGHTNINGWAVE = 24819
};
-class boss_wushoolay : public CreatureScript
+enum Events
{
- public:
+ EVENT_LIGHTNINGCLOUD = 0,
+ EVENT_LIGHTNINGWAVE = 1
+};
- boss_wushoolay()
- : CreatureScript("boss_wushoolay")
- {
- }
+class boss_wushoolay : public CreatureScript
+{
+ public: boss_wushoolay() : CreatureScript("boss_wushoolay") {}
- struct boss_wushoolayAI : public ScriptedAI
+ struct boss_wushoolayAI : public BossAI
{
- boss_wushoolayAI(Creature* creature) : ScriptedAI(creature) {}
-
- uint32 LightningCloud_Timer;
- uint32 LightningWave_Timer;
+ boss_wushoolayAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) {}
void Reset()
{
- LightningCloud_Timer = urand(5000, 10000);
- LightningWave_Timer = urand(8000, 16000);
+ _Reset();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_LIGHTNINGCLOUD, urand(5000, 10000));
+ events.ScheduleEvent(EVENT_LIGHTNINGWAVE, urand(8000, 16000));
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
- //LightningCloud_Timer
- if (LightningCloud_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_LIGHTNINGCLOUD);
- LightningCloud_Timer = urand(15000, 20000);
- } else LightningCloud_Timer -= diff;
+ events.Update(diff);
- //LightningWave_Timer
- if (LightningWave_Timer <= diff)
- {
- Unit* target = NULL;
- target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (target) DoCast(target, SPELL_LIGHTNINGWAVE);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- LightningWave_Timer = urand(12000, 16000);
- } else LightningWave_Timer -= diff;
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_LIGHTNINGCLOUD:
+ DoCastVictim(SPELL_LIGHTNINGCLOUD, true);
+ events.ScheduleEvent(EVENT_LIGHTNINGCLOUD, urand(15000, 20000));
+ break;
+ case EVENT_LIGHTNINGWAVE:
+ DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true), SPELL_LIGHTNINGWAVE);
+ events.ScheduleEvent(EVENT_LIGHTNINGWAVE, urand(12000, 16000));
+ break;
+ default:
+ break;
+ }
+ }
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
index cfaf19642f2..b997d277c95 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
@@ -29,33 +29,28 @@ EndScriptData */
class instance_zulgurub : public InstanceMapScript
{
- public:
- instance_zulgurub()
- : InstanceMapScript("instance_zulgurub", 309)
- {
- }
+ public: instance_zulgurub(): InstanceMapScript("instance_zulgurub", 309) {}
struct instance_zulgurub_InstanceMapScript : public InstanceScript
{
- instance_zulgurub_InstanceMapScript(Map* map) : InstanceScript(map) {}
+ instance_zulgurub_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
+ }
//If all High Priest bosses were killed. Lorkhan, Zath and Ohgan are added too.
- uint32 m_auiEncounter[MAX_ENCOUNTERS];
-
//Storing Lorkhan, Zath and Thekal because we need to cast on them later. Jindo is needed for healfunction too.
- uint64 m_uiLorKhanGUID;
- uint64 m_uiZathGUID;
- uint64 m_uiThekalGUID;
- uint64 m_uiJindoGUID;
+ uint64 LorKhanGUID;
+ uint64 ZathGUID;
+ uint64 ThekalGUID;
+ uint64 JindoGUID;
void Initialize()
{
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
-
- m_uiLorKhanGUID = 0;
- m_uiZathGUID = 0;
- m_uiThekalGUID = 0;
- m_uiJindoGUID = 0;
+ LorKhanGUID = 0;
+ ZathGUID = 0;
+ ThekalGUID = 0;
+ JindoGUID = 0;
}
bool IsEncounterInProgress() const
@@ -68,90 +63,124 @@ class instance_zulgurub : public InstanceMapScript
{
switch (creature->GetEntry())
{
- case 11347: m_uiLorKhanGUID = creature->GetGUID(); break;
- case 11348: m_uiZathGUID = creature->GetGUID(); break;
- case 14509: m_uiThekalGUID = creature->GetGUID(); break;
- case 11380: m_uiJindoGUID = creature->GetGUID(); break;
+ case NPC_ZEALOT_LORKHAN: LorKhanGUID = creature->GetGUID(); break;
+ case NPC_ZEALOT_ZATH: ZathGUID = creature->GetGUID(); break;
+ case NPC_HIGH_PRIEST_THEKAL: ThekalGUID = creature->GetGUID(); break;
+ case NPC_JINDO_THE_HEXXER: JindoGUID = creature->GetGUID(); break;
}
}
- void SetData(uint32 uiType, uint32 uiData)
+ bool SetBossState(uint32 type, EncounterState state)
{
- switch (uiType)
- {
- case DATA_ARLOKK:
- m_auiEncounter[0] = uiData;
- break;
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+ switch (type)
+ {
case DATA_JEKLIK:
- m_auiEncounter[1] = uiData;
- break;
-
case DATA_VENOXIS:
- m_auiEncounter[2] = uiData;
- break;
-
case DATA_MARLI:
- m_auiEncounter[3] = uiData;
- break;
-
+ case DATA_ARLOKK:
+ case DATA_HAKKAR:
+ case DATA_MANDOKIR:
+ case DATA_JINDO:
+ case DATA_GAHZRANKA:
+ case DATA_EDGE_OF_MADNESS:
case DATA_THEKAL:
- m_auiEncounter[4] = uiData;
- break;
-
case DATA_LORKHAN:
- m_auiEncounter[5] = uiData;
- break;
-
case DATA_ZATH:
- m_auiEncounter[6] = uiData;
- break;
-
case DATA_OHGAN:
- m_auiEncounter[7] = uiData;
+ break;
+ default:
break;
}
+
+ return true;
}
- uint32 GetData(uint32 uiType) const
+ uint32 GetData(uint32 type) const
+ {
+ switch (type)
{
- switch (uiType)
- {
- case DATA_ARLOKK:
- return m_auiEncounter[0];
- case DATA_JEKLIK:
- return m_auiEncounter[1];
- case DATA_VENOXIS:
- return m_auiEncounter[2];
- case DATA_MARLI:
- return m_auiEncounter[3];
- case DATA_THEKAL:
- return m_auiEncounter[4];
- case DATA_LORKHAN:
- return m_auiEncounter[5];
- case DATA_ZATH:
- return m_auiEncounter[6];
- case DATA_OHGAN:
- return m_auiEncounter[7];
- }
- return 0;
+ case DATA_JEKLIK: return GetBossState(DATA_JEKLIK);
+ case DATA_VENOXIS: return GetBossState(DATA_VENOXIS);
+ case DATA_MARLI: return GetBossState(DATA_MARLI);
+ case DATA_ARLOKK: return GetBossState(DATA_ARLOKK);
+ case DATA_HAKKAR: return GetBossState(DATA_HAKKAR);
+ case DATA_MANDOKIR: return GetBossState(DATA_MANDOKIR);
+ case DATA_JINDO: return GetBossState(DATA_JINDO);
+ case DATA_GAHZRANKA: return GetBossState(DATA_GAHZRANKA);
+ case DATA_EDGE_OF_MADNESS: return GetBossState(DATA_EDGE_OF_MADNESS);
+ case DATA_THEKAL: return GetBossState(DATA_THEKAL);
+ case DATA_LORKHAN: return GetBossState(DATA_LORKHAN);
+ case DATA_ZATH: return GetBossState(DATA_ZATH);
+ case DATA_OHGAN: return GetBossState(DATA_OHGAN);
+ break;
+ default:
+ break;
}
+ return 0;
+ }
+
uint64 GetData64(uint32 uiData) const
{
switch (uiData)
{
case DATA_LORKHAN:
- return m_uiLorKhanGUID;
+ return LorKhanGUID;
case DATA_ZATH:
- return m_uiZathGUID;
+ return ZathGUID;
case DATA_THEKAL:
- return m_uiThekalGUID;
+ return ThekalGUID;
case DATA_JINDO:
- return m_uiJindoGUID;
+ return JindoGUID;
}
return 0;
}
+
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "Z G " << GetBossSaveData();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
+
+ void Load(const char* str)
+ {
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(str);
+
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
+
+ if (dataHead1 == 'Z' && dataHead2 == 'G')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
index 22637315066..2544e4f4d5f 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -19,20 +18,36 @@
#ifndef DEF_ZULGURUB_H
#define DEF_ZULGURUB_H
+uint32 const EncounterCount = 13;
+
enum DataTypes
{
- MAX_ENCOUNTERS = 8,
+ DATA_JEKLIK = 0, // Main boss
+ DATA_VENOXIS = 1, // Main boss
+ DATA_MARLI = 2, // Main boss
+ DATA_ARLOKK = 3, // Main boss
+ DATA_THEKAL = 4, // Main boss
+ DATA_HAKKAR = 5, // End boss
+ DATA_MANDOKIR = 6, // Optional boss
+ DATA_JINDO = 7, // Optional boss
+ DATA_GAHZRANKA = 8, // Optional boss
+ DATA_EDGE_OF_MADNESS = 9, // Optional Event Edge of Madness - one of: Gri'lek, Renataki, Hazza'rah, or Wushoolay
+ DATA_LORKHAN = 10, // Zealot Lor'Khan add to High priest Thekal!
+ DATA_ZATH = 11, // Zealot Zath add to High priest Thekal!
+ DATA_OHGAN = 12 // Bloodlord Mandokir's raptor mount
+};
- DATA_ARLOKK = 1,
- DATA_JEKLIK = 2,
- DATA_VENOXIS = 3,
- DATA_MARLI = 4,
- DATA_OHGAN = 5,
- DATA_THEKAL = 6,
- DATA_ZATH = 7,
- DATA_LORKHAN = 8,
- DATA_JINDO = 10,
+enum CreatureIds
+{
+ NPC_ZEALOT_LORKHAN = 11347,
+ NPC_ZEALOT_ZATH = 11348,
+ NPC_HIGH_PRIEST_THEKAL = 14509,
+ NPC_JINDO_THE_HEXXER = 11380,
+ NPC_NIGHTMARE_ILLUSION = 15163,
+ NPC_ZULIAN_PROWLER = 15101,
+ NPC_SPEAKER = 11391,
+ NPC_SHADE_OF_JINDO = 14986,
+ NPC_SACRIFICED_TROLL = 14826
};
#endif
-
diff --git a/src/server/scripts/EasternKingdoms/boss_kruul.cpp b/src/server/scripts/EasternKingdoms/boss_kruul.cpp
index 226ff794a9f..158861e90c7 100644
--- a/src/server/scripts/EasternKingdoms/boss_kruul.cpp
+++ b/src/server/scripts/EasternKingdoms/boss_kruul.cpp
@@ -26,13 +26,16 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-#define SPELL_SHADOWVOLLEY 21341
-#define SPELL_CLEAVE 20677
-#define SPELL_THUNDERCLAP 23931
-#define SPELL_TWISTEDREFLECTION 21063
-#define SPELL_VOIDBOLT 21066
-#define SPELL_RAGE 21340
-#define SPELL_CAPTURESOUL 21054
+enum Spells
+{
+ SPELL_SHADOWVOLLEY = 21341,
+ SPELL_CLEAVE = 20677,
+ SPELL_THUNDERCLAP = 23931,
+ SPELL_TWISTEDREFLECTION = 21063,
+ SPELL_VOIDBOLT = 21066,
+ SPELL_RAGE = 21340,
+ SPELL_CAPTURESOUL = 21054
+};
class boss_kruul : public CreatureScript
{
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
index e72e6dff9cf..cfc35b676ea 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
@@ -16,25 +16,59 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ObjectMgr.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "Player.h"
#include "ruins_of_ahnqiraj.h"
enum Spells
{
- SPELL_STINGERSPRAY = 25749,
- SPELL_POISONSTINGER = 25748, // Only used in phase 1
+ SPELL_STINGER_SPRAY = 25749,
+ SPELL_POISON_STINGER = 25748,
SPELL_PARALYZE = 25725,
SPELL_TRASH = 3391,
- SPELL_FRENZY = 8269, // Not used
+ SPELL_FRENZY = 8269,
SPELL_LASH = 25852,
- SPELL_FEED = 25721,
+ SPELL_FEED = 25721
};
-enum Says
+enum Events
{
- EMOTE_FRENZY = 0 // Not used
+ EVENT_STINGER_SPRAY = 0,
+ EVENT_POISON_STINGER = 1,
+ EVENT_SUMMON_SWARMER = 2,
+ EVENT_SWARMER_ATTACK = 3,
+ EVENT_PARALYZE = 4,
+ EVENT_LASH = 5,
+ EVENT_TRASH = 6
+};
+
+enum Emotes
+{
+ EMOTE_FRENZY = 0
+};
+
+enum Phases
+{
+ PHASE_AIR = 0,
+ PHASE_GROUND = 1
+};
+
+enum Points
+{
+ POINT_AIR = 0,
+ POINT_GROUND = 1,
+ POINT_PARALYZE = 2
+};
+
+const Position AyamissAirPos = { -9689.292f, 1547.912f, 48.02729f, 0.0f };
+const Position AltarPos = { -9717.18f, 1517.72f, 27.4677f, 0.0f };
+// TODO: These below are probably incorrect, taken from SD2
+const Position SwarmerPos = { -9647.352f, 1578.062f, 55.32f, 0.0f };
+const Position LarvaPos[2] =
+{
+ { -9674.4707f, 1528.4133f, 22.457f, 0.0f },
+ { -9701.6005f, 1566.9993f, 24.118f, 0.0f }
};
class boss_ayamiss : public CreatureScript
@@ -42,27 +76,72 @@ class boss_ayamiss : public CreatureScript
public:
boss_ayamiss() : CreatureScript("boss_ayamiss") { }
- struct boss_ayamissAI : public ScriptedAI
+ struct boss_ayamissAI : public BossAI
{
- boss_ayamissAI(Creature* creature) : ScriptedAI(creature)
+ boss_ayamissAI(Creature* creature) : BossAI(creature, DATA_AYAMISS)
{
- instance = creature->GetInstanceScript();
}
- uint32 STINGERSPRAY_Timer;
- uint32 POISONSTINGER_Timer;
- uint32 SUMMONSWARMER_Timer;
- uint32 phase;
+ void Reset()
+ {
+ _Reset();
+ _phase = PHASE_AIR;
+ _enraged = false;
+ SetCombatMovement(false);
+ }
- InstanceScript* instance;
+ void JustSummoned(Creature* who)
+ {
+ switch (who->GetEntry())
+ {
+ case NPC_SWARMER:
+ _swarmers.push_back(who->GetGUID());
+ break;
+ case NPC_LARVA:
+ who->GetMotionMaster()->MovePoint(POINT_PARALYZE, AltarPos);
+ break;
+ case NPC_HORNET:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
+ who->AI()->AttackStart(target);
+ break;
+ }
+ }
- void Reset()
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if (type == POINT_MOTION_TYPE)
+ {
+ switch (id)
+ {
+ case POINT_AIR:
+ me->AddUnitState(UNIT_STATE_ROOT);
+ break;
+ case POINT_GROUND:
+ me->ClearUnitState(UNIT_STATE_ROOT);
+ break;
+ }
+ }
+ }
+
+ void EnterEvadeMode()
{
- STINGERSPRAY_Timer = 30000;
- POISONSTINGER_Timer = 30000;
- SUMMONSWARMER_Timer = 60000;
- phase = 1;
+ me->ClearUnitState(UNIT_STATE_ROOT);
+ BossAI::EnterEvadeMode();
+ }
+
+ void EnterCombat(Unit* attacker)
+ {
+ BossAI::EnterCombat(attacker);
+
+ events.ScheduleEvent(EVENT_STINGER_SPRAY, urand(20000, 30000));
+ events.ScheduleEvent(EVENT_POISON_STINGER, 5000);
+ events.ScheduleEvent(EVENT_SUMMON_SWARMER, 5000);
+ events.ScheduleEvent(EVENT_SWARMER_ATTACK, 60000);
+ events.ScheduleEvent(EVENT_PARALYZE, 15000);
+ me->SetCanFly(true);
+ me->SetDisableGravity(true);
+ me->GetMotionMaster()->MovePoint(POINT_AIR, AyamissAirPos);
}
void UpdateAI(uint32 const diff)
@@ -70,37 +149,148 @@ class boss_ayamiss : public CreatureScript
if (!UpdateVictim())
return;
- //If he is 70% start phase 2
- if (phase == 1 && !HealthAbovePct(70) && !me->IsNonMeleeSpellCasted(false))
+ events.Update(diff);
+
+ if (_phase == PHASE_AIR && me->GetHealthPct() < 70.0f)
+ {
+ _phase = PHASE_GROUND;
+ SetCombatMovement(true);
+ me->SetCanFly(false);
+ Position VictimPos;
+ me->getVictim()->GetPosition(&VictimPos);
+ me->GetMotionMaster()->MovePoint(POINT_GROUND, VictimPos);
+ DoResetThreat();
+ events.ScheduleEvent(EVENT_LASH, urand(5000, 8000));
+ events.ScheduleEvent(EVENT_TRASH, urand(3000, 6000));
+ events.CancelEvent(EVENT_POISON_STINGER);
+ }
+ else
{
- phase=2;
+ DoMeleeAttackIfReady();
}
- //STINGERSPRAY_Timer (only in phase2)
- if (phase == 2 && STINGERSPRAY_Timer <= diff)
+ if (!_enraged && me->GetHealthPct() < 20.0f)
{
- DoCast(me->getVictim(), SPELL_STINGERSPRAY);
- STINGERSPRAY_Timer = 30000;
- } else STINGERSPRAY_Timer -= diff;
+ DoCast(me, SPELL_FRENZY);
+ Talk(EMOTE_FRENZY);
+ _enraged = true;
+ }
- //POISONSTINGER_Timer (only in phase1)
- if (phase == 1 && POISONSTINGER_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCast(me->getVictim(), SPELL_POISONSTINGER);
- POISONSTINGER_Timer = 30000;
- } else POISONSTINGER_Timer -= diff;
+ switch (eventId)
+ {
+ case EVENT_STINGER_SPRAY:
+ DoCast(me, SPELL_STINGER_SPRAY);
+ events.ScheduleEvent(EVENT_STINGER_SPRAY, urand(15000, 20000));
+ break;
+ case EVENT_POISON_STINGER:
+ DoCastVictim(SPELL_POISON_STINGER);
+ events.ScheduleEvent(EVENT_POISON_STINGER, urand(2000, 3000));
+ break;
+ case EVENT_PARALYZE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true))
+ {
+ DoCast(target, SPELL_PARALYZE);
+ instance->SetData64(DATA_PARALYZED, target->GetGUID());
+ uint8 Index = urand(0, 1);
+ me->SummonCreature(NPC_LARVA, LarvaPos[Index], TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
+ }
+ events.ScheduleEvent(EVENT_PARALYZE, 15000);
+ break;
+ case EVENT_SWARMER_ATTACK:
+ for (std::list<uint64>::iterator i = _swarmers.begin(); i != _swarmers.end(); ++i)
+ if (Creature* swarmer = me->GetMap()->GetCreature(*i))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
+ swarmer->AI()->AttackStart(target);
+
+ _swarmers.clear();
+ events.ScheduleEvent(EVENT_SWARMER_ATTACK, 60000);
+ break;
+ case EVENT_SUMMON_SWARMER:
+ Position Pos;
+ me->GetRandomPoint(SwarmerPos, 80.0f, Pos);
+ me->SummonCreature(NPC_SWARMER, Pos);
+ events.ScheduleEvent(EVENT_SUMMON_SWARMER, 5000);
+ break;
+ case EVENT_TRASH:
+ DoCastVictim(SPELL_TRASH);
+ events.ScheduleEvent(EVENT_TRASH, urand(5000, 7000));
+ break;
+ case EVENT_LASH:
+ DoCastVictim(SPELL_LASH);
+ events.ScheduleEvent(EVENT_LASH, urand(8000, 15000));
+ break;
+ }
+ }
+ }
+ private:
+ std::list<uint64> _swarmers;
+ uint8 _phase;
+ bool _enraged;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_ayamissAI(creature);
+ }
+};
+
+class npc_hive_zara_larva : public CreatureScript
+{
+ public:
+ npc_hive_zara_larva() : CreatureScript("npc_hive_zara_larva") { }
+
+ struct npc_hive_zara_larvaAI : public ScriptedAI
+ {
+ npc_hive_zara_larvaAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ }
+
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if (type == POINT_MOTION_TYPE)
+ if (id == POINT_PARALYZE)
+ if (Player* target = ObjectAccessor::GetPlayer(*me, _instance->GetData64(DATA_PARALYZED)))
+ DoCast(target, SPELL_FEED); // Omnomnom
+ }
+
+ void MoveInLineOfSight(Unit* who)
+ {
+ if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS)
+ return;
+
+ ScriptedAI::MoveInLineOfSight(who);
+ }
+
+ void AttackStart(Unit* victim)
+ {
+ if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS)
+ return;
+
+ ScriptedAI::AttackStart(victim);
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS)
+ return;
- DoMeleeAttackIfReady();
+ ScriptedAI::UpdateAI(diff);
}
+ private:
+ InstanceScript* _instance;
};
CreatureAI* GetAI(Creature* creature) const
{
- return new boss_ayamissAI (creature);
+ return new npc_hive_zara_larvaAI(creature);
}
};
void AddSC_boss_ayamiss()
{
new boss_ayamiss();
+ new npc_hive_zara_larva();
}
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
index e26cba9cb6e..285d893fe41 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
@@ -70,11 +70,11 @@ class boss_buru : public CreatureScript
boss_buruAI(Creature* creature) : BossAI(creature, DATA_BURU)
{
}
-
+
void EnterEvadeMode()
{
BossAI::EnterEvadeMode();
-
+
for (std::list<uint64>::iterator i = Eggs.begin(); i != Eggs.end(); ++i)
if (Creature* egg = me->GetMap()->GetCreature(*Eggs.begin()))
egg->Respawn();
@@ -101,7 +101,7 @@ class boss_buru : public CreatureScript
if (_phase == PHASE_EGG)
me->DealDamage(me, 45000);
}
-
+
void KilledUnit(Unit* victim)
{
if (victim->GetTypeId() == TYPEID_PLAYER)
@@ -112,12 +112,12 @@ class boss_buru : public CreatureScript
{
if (_phase != PHASE_EGG)
return;
-
+
me->RemoveAurasDueToSpell(SPELL_FULL_SPEED);
me->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED);
events.ScheduleEvent(EVENT_GATHERING_SPEED, 9000);
events.ScheduleEvent(EVENT_FULL_SPEED, 60000);
-
+
if (Unit* victim = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
DoResetThreat();
@@ -125,21 +125,21 @@ class boss_buru : public CreatureScript
Talk(EMOTE_TARGET, victim->GetGUID());
}
}
-
+
void ManageRespawn(uint64 EggGUID)
{
ChaseNewVictim();
Eggs.push_back(EggGUID);
events.ScheduleEvent(EVENT_RESPAWN_EGG, 100000);
}
-
+
void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
-
+
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
@@ -170,7 +170,7 @@ class boss_buru : public CreatureScript
break;
}
}
-
+
if (me->GetHealthPct() < 20.0f && _phase == PHASE_EGG)
{
DoCast(me, SPELL_BURU_TRANSFORM); // Enrage
@@ -178,7 +178,7 @@ class boss_buru : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_THORNS);
_phase = PHASE_TRANSFORM;
}
-
+
DoMeleeAttackIfReady();
}
private:
@@ -203,14 +203,14 @@ class npc_buru_egg : public CreatureScript
{
_instance = me->GetInstanceScript();
}
-
+
void EnterCombat(Unit* attacker)
{
if (Creature* buru = me->GetMap()->GetCreature(_instance->GetData64(DATA_BURU)))
if (!buru->isInCombat())
buru->AI()->AttackStart(attacker);
}
-
+
void JustSummoned(Creature* who)
{
if (who->GetEntry() == NPC_HATCHLING)
@@ -218,7 +218,7 @@ class npc_buru_egg : public CreatureScript
if (Unit* target = buru->AI()->SelectTarget(SELECT_TARGET_RANDOM))
who->AI()->AttackStart(target);
}
-
+
void JustDied(Unit* /*killer*/)
{
DoCastAOE(SPELL_EXPLODE, true);
@@ -247,13 +247,13 @@ class spell_egg_explosion : public SpellScriptLoader
class spell_egg_explosion_SpellScript : public SpellScript
{
PrepareSpellScript(spell_egg_explosion_SpellScript);
-
+
void HandleAfterCast()
{
if (Creature* buru = GetCaster()->FindNearestCreature(NPC_BURU, 5.f))
buru->AI()->DoAction(ACTION_EXPLODE);
}
-
+
void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
if (Unit* target = GetHitUnit())
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index fcb6364244e..20c0dd035a4 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -89,7 +89,6 @@ class boss_ossirian : public CreatureScript
boss_ossirianAI(Creature* creature) : BossAI(creature, DATA_OSSIRIAN)
{
SaidIntro = false;
- Reset();
}
uint64 TriggerGUID;
@@ -121,13 +120,9 @@ class boss_ossirian : public CreatureScript
void DoAction(const int32 action)
{
if (action == ACTION_TRIGGER_WEAKNESS)
- {
if (Creature* Trigger = me->GetMap()->GetCreature(TriggerGUID))
- {
if (!Trigger->HasUnitState(UNIT_STATE_CASTING))
Trigger->CastSpell(Trigger, SpellWeakness[urand(0, 4)], false);
- }
- }
}
void EnterCombat(Unit* /*who*/)
@@ -172,7 +167,7 @@ class boss_ossirian : public CreatureScript
{
Cleanup();
summons.DespawnAll();
- ScriptedAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode();
}
void JustDied(Unit* /*killer*/)
@@ -207,13 +202,14 @@ class boss_ossirian : public CreatureScript
}
}
- void MoveInLineOfSight(Unit* /*who*/)
+ void MoveInLineOfSight(Unit* who)
{
if (!SaidIntro)
{
Talk(SAY_INTRO);
SaidIntro = true;
}
+ BossAI::MoveInLineOfSight(who);
}
void UpdateAI(uint32 const diff)
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
index 6dbeaed9e5d..658528f1fb4 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
@@ -36,6 +36,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
_buruGUID = 0;
_ayamissGUID = 0;
_ossirianGUID = 0;
+ _paralyzedGUID = 0;
}
void OnCreatureCreate(Creature* creature)
@@ -71,6 +72,12 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
return true;
}
+ void SetData64(uint32 type, uint64 data)
+ {
+ if (type == DATA_PARALYZED)
+ _paralyzedGUID = data;
+ }
+
uint64 GetData64(uint32 type) const
{
switch (type)
@@ -87,6 +94,8 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
return _ayamissGUID;
case DATA_OSSIRIAN:
return _ossirianGUID;
+ case DATA_PARALYZED:
+ return _paralyzedGUID;
}
return 0;
@@ -142,6 +151,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript
uint64 _buruGUID;
uint64 _ayamissGUID;
uint64 _ossirianGUID;
+ uint64 _paralyzedGUID;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
index 6ece21f627b..419aaf1c303 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
@@ -26,7 +26,9 @@ enum DataTypes
DATA_BURU = 3,
DATA_AYAMISS = 4,
DATA_OSSIRIAN = 5,
- NUM_ENCOUNTER = 6
+ NUM_ENCOUNTER = 6,
+
+ DATA_PARALYZED = 7
};
enum Creatures
@@ -42,12 +44,15 @@ enum Creatures
NPC_HIVEZARA_LARVA = 15555,
NPC_SAND_VORTEX = 15428,
NPC_OSSIRIAN_TRIGGER = 15590,
- NPC_HATCHLING = 15521
+ NPC_HATCHLING = 15521,
+ NPC_LARVA = 15555,
+ NPC_SWARMER = 15546,
+ NPC_HORNET = 15934
};
enum GameObjects
{
- GO_OSSIRIAN_CRYSTAL = 180619,
+ GO_OSSIRIAN_CRYSTAL = 180619
};
#endif
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
index 1186459218c..8030358a068 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
@@ -68,7 +68,7 @@ class boss_skeram : public CreatureScript
{
Talk(SAY_SLAY);
}
-
+
void EnterEvadeMode()
{
ScriptedAI::EnterEvadeMode();
@@ -93,10 +93,10 @@ class boss_skeram : public CreatureScript
rand = urand(0, 2);
creature->CastSpell(creature, BlinkSpells[rand]);
_flag |= (1 << rand);
-
+
if (_flag & (1 << 7))
_flag = 0;
-
+
if (Unit* Target = SelectTarget(SELECT_TARGET_RANDOM))
creature->AI()->AttackStart(Target);
@@ -183,12 +183,12 @@ class boss_skeram : public CreatureScript
DoMeleeAttackIfReady();
}
}
-
+
private:
float _hpct;
uint8 _flag;
};
-
+
CreatureAI* GetAI(Creature* creature) const
{
return new boss_skeramAI(creature);
diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp
index b2326de86ab..2d5b383cefc 100644
--- a/src/server/scripts/Kalimdor/zone_feralas.cpp
+++ b/src/server/scripts/Kalimdor/zone_feralas.cpp
@@ -221,7 +221,10 @@ class spell_gordunni_trap : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
if (GameObject* chest = caster->SummonGameObject(GO_GORDUNNI_DIRT_MOUND, caster->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0))
+ {
chest->SetSpellId(GetSpellInfo()->Id);
+ caster->RemoveGameObject(chest, false);
+ }
}
void Register()
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index f3f2e587178..536c2af2bd8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -20,25 +20,33 @@
#include "naxxramas.h"
#include "SpellInfo.h"
-#define SPELL_BOMBARD_SLIME 28280
-
-#define SPELL_POISON_CLOUD 28240
-#define SPELL_MUTATING_INJECTION 28169
-#define SPELL_SLIME_SPRAY RAID_MODE(28157, 54364)
-#define SPELL_BERSERK 26662
-#define SPELL_POISON_CLOUD_ADD 59116
+enum Spells
+{
+ SPELL_BOMBARD_SLIME = 28280,
+ SPELL_POISON_CLOUD = 28240,
+ SPELL_MUTATING_INJECTION = 28169,
+ SPELL_SLIME_SPRAY = 28157,
+ H_SPELL_SLIME_SPRAY = 54364,
+ SPELL_BERSERK = 26662,
+ SPELL_POISON_CLOUD_ADD = 59116
+};
-#define EVENT_BERSERK 1
-#define EVENT_CLOUD 2
-#define EVENT_INJECT 3
-#define EVENT_SPRAY 4
+enum Events
+{
+ EVENT_BERSERK = 0,
+ EVENT_CLOUD = 1,
+ EVENT_INJECT = 2,
+ EVENT_SPRAY = 3
+};
-#define MOB_FALLOUT_SLIME 16290
+enum CreatureId
+{
+ MOB_FALLOUT_SLIME = 16290
+};
class boss_grobbulus : public CreatureScript
{
-public:
- boss_grobbulus() : CreatureScript("boss_grobbulus") { }
+public: boss_grobbulus() : CreatureScript("boss_grobbulus") { }
CreatureAI* GetAI(Creature* creature) const
{
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index 92ced3c702f..891b91c6dfb 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -28,7 +28,7 @@ enum Spells
SPELL_ARCANE_BUFFET_H = 59485,
SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102,
SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137,
- SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138,
+ SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138
};
enum NPCs
@@ -42,7 +42,7 @@ enum CreatureSpells
SPELL_ARCANE_POWER = 54160,
H_SPELL_ARCANE_POWER = 59474,
SPELL_SUMMON_PLAYERS = 54164,
- SPELL_POWER_BALL_VISUAL = 54141,
+ SPELL_POWER_BALL_VISUAL = 54141
};
enum Yells
diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
index 9fa5a1a51f5..c55e93726a9 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
@@ -26,8 +26,11 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-#define SPELL_FOUL_SPORES 31673
-#define SPELL_ACID_GEYSER 38739
+enum Spells
+{
+ SPELL_FOUL_SPORES = 31673,
+ SPELL_ACID_GEYSER = 38739
+};
class boss_hungarfen : public CreatureScript
{
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
index 3c72c8353aa..dc9940c87b8 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -17,26 +16,112 @@
*/
/* ScriptData
-SDName: Boss_Gatewatcher_Gyrokill
-SD%Complete: 0
-SDComment: Place Holder
+SDName: boss_gatewatcher_gyrokill
+SD%Complete: 99%
+SDComment:
SDCategory: Tempest Keep, The Mechanar
EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "mechanar.h"
-//not used
-#define SAY_AGGRO -1554000
-#define SAY_SAW_ATTACK1 -1554001
-#define SAY_SAW_ATTACK2 -1554002
-#define SAY_SLAY1 -1554003
-#define SAY_SLAY2 -1554004
-#define SAY_DEATH -1554005
+enum Say
+{
+ SAY_AGGRO = 0,
+ SAY_SLAY = 1,
+ SAY_SAW_BLADEs = 2,
+ SAY_DEATH = 3
+};
-#define SPELL_STREAM_OF_MACHINE_FLUID 35311
-#define SPELL_SAW_BLADE 35318
-#define H_SPELL_SAW_BLADE 39192
-#define SPELL_SHADOW_POWER 35322
-#define H_SPELL_SHADOW_POWER 39193
+enum Spells
+{
+ SPELL_STREAM_OF_MACHINE_FLUID = 35311,
+ SPELL_SAW_BLADE = 35318,
+ H_SPELL_SAW_BLADE = 39192,
+ SPELL_SHADOW_POWER = 35322,
+ H_SPELL_SHADOW_POWER = 39193
+};
+enum Events
+{
+ EVENT_STREAM_OF_MACHINE_FLUID = 0,
+ EVENT_SAW_BLADE = 1,
+ EVENT_SHADOW_POWER = 2
+};
+
+class boss_gatewatcher_gyrokill : public CreatureScript
+{
+ public:
+ boss_gatewatcher_gyrokill() : CreatureScript("boss_gatewatcher_gyrokill") {}
+
+ struct boss_gatewatcher_gyrokillAI : public BossAI
+ {
+ boss_gatewatcher_gyrokillAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_GYROKILL) {}
+
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 10000);
+ events.ScheduleEvent(EVENT_SAW_BLADE, 20000);
+ events.ScheduleEvent(EVENT_SHADOW_POWER, 25000);
+ Talk(SAY_AGGRO);
+ }
+
+ void KilledUnit(Unit* /*victim*/)
+ {
+ Talk(SAY_SLAY);
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_STREAM_OF_MACHINE_FLUID:
+ DoCastVictim(SPELL_STREAM_OF_MACHINE_FLUID, true);
+ events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, urand(13000, 17000));
+ break;
+ case EVENT_SAW_BLADE:
+ DoCast(me, SPELL_SAW_BLADE);
+ Talk(SAY_SAW_BLADEs);
+ events.ScheduleEvent(EVENT_SAW_BLADE, urand(20000, 30000));
+ break;
+ case EVENT_SHADOW_POWER:
+ DoCast(me, SPELL_SHADOW_POWER);
+ events.ScheduleEvent(EVENT_SAW_BLADE, urand(25000, 35000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_gatewatcher_gyrokillAI (creature);
+ }
+};
+
+void AddSC_boss_gatewatcher_gyrokill()
+{
+ new boss_gatewatcher_gyrokill();
+}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
index 09ff6cf8e49..440e17a29cf 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
@@ -25,8 +25,9 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "mechanar.h"
-enum eSays
+enum Says
{
SAY_AGGRO = 0,
SAY_HAMMER = 1,
@@ -35,111 +36,96 @@ enum eSays
EMOTE_HAMMER = 4
};
-enum eSpells
+enum Spells
{
- // Spells to be casted
SPELL_SHADOW_POWER = 35322,
H_SPELL_SHADOW_POWER = 39193,
SPELL_HAMMER_PUNCH = 35326,
SPELL_JACKHAMMER = 35327,
H_SPELL_JACKHAMMER = 39194,
- SPELL_STREAM_OF_MACHINE_FLUID = 35311,
+ SPELL_STREAM_OF_MACHINE_FLUID = 35311
+};
+
+enum Events
+{
+ EVENT_STREAM_OF_MACHINE_FLUID = 0,
+ EVENT_JACKHAMMER = 1,
+ EVENT_SHADOW_POWER = 2
};
class boss_gatewatcher_iron_hand : public CreatureScript
{
public:
+ boss_gatewatcher_iron_hand(): CreatureScript("boss_gatewatcher_iron_hand") {}
- boss_gatewatcher_iron_hand()
- : CreatureScript("boss_gatewatcher_iron_hand")
+ struct boss_gatewatcher_iron_handAI : public BossAI
{
- }
- // Gatewatcher Iron-Hand AI
- struct boss_gatewatcher_iron_handAI : public ScriptedAI
- {
- boss_gatewatcher_iron_handAI(Creature* creature) : ScriptedAI(creature)
- {
- }
-
- uint32 Shadow_Power_Timer;
- uint32 Jackhammer_Timer;
- uint32 Stream_of_Machine_Fluid_Timer;
-
- void Reset()
- {
- Shadow_Power_Timer = 25000;
- Jackhammer_Timer = 45000;
- Stream_of_Machine_Fluid_Timer = 55000;
+ boss_gatewatcher_iron_handAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_IRON_HAND) {}
- }
- void EnterCombat(Unit* /*who*/)
- {
- Talk(SAY_AGGRO);
- }
-
- void KilledUnit(Unit* /*victim*/)
- {
- if (rand()%2)
- return;
+ void EnterCombat(Unit* /*who*/)
+ {
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 55000);
+ events.ScheduleEvent(EVENT_JACKHAMMER, 45000);
+ events.ScheduleEvent(EVENT_SHADOW_POWER, 25000);
+ Talk(SAY_AGGRO);
+ }
+ void KilledUnit(Unit* /*victim*/)
+ {
+ if (roll_chance_i(50))
Talk(SAY_SLAY);
- }
-
- void JustDied(Unit* /*killer*/)
- {
- Talk(SAY_DEATH);
- //TODO: Add door check/open code
- }
-
- void UpdateAI(const uint32 diff)
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
+ }
- //Shadow Power
- if (Shadow_Power_Timer <= diff)
- {
- DoCast(me, SPELL_SHADOW_POWER);
- Shadow_Power_Timer = urand(20000, 28000);
- }
- else
- Shadow_Power_Timer -= diff;
+ void JustDied(Unit* /*killer*/)
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
- //Jack Hammer
- if (Jackhammer_Timer <= diff)
- {
- //TODO: expect cast this about 5 times in a row (?), announce it by emote only once
- Talk(EMOTE_HAMMER);
- DoCast(me->getVictim(), SPELL_JACKHAMMER);
+ void UpdateAI(uint32 const diff)
+ {
+ if (!UpdateVictim())
+ return;
- //chance to yell, but not same time as emote (after spell in fact casted)
- if (rand()%2)
- return;
+ events.Update(diff);
- Talk(SAY_HAMMER);
- Jackhammer_Timer = 30000;
- }
- else
- Jackhammer_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Stream of Machine Fluid
- if (Stream_of_Machine_Fluid_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- DoCast(me->getVictim(), SPELL_STREAM_OF_MACHINE_FLUID);
- Stream_of_Machine_Fluid_Timer = urand(35000, 50000);
+ case EVENT_STREAM_OF_MACHINE_FLUID:
+ DoCastVictim(SPELL_STREAM_OF_MACHINE_FLUID, true);
+ events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, urand(35000, 50000));
+ break;
+ case EVENT_JACKHAMMER:
+ Talk(EMOTE_HAMMER);
+ //TODO: expect cast this about 5 times in a row (?), announce it by emote only once
+ DoCastVictim(SPELL_JACKHAMMER, true);
+ if (roll_chance_i(50))
+ Talk(SAY_HAMMER);
+ events.ScheduleEvent(EVENT_JACKHAMMER, 30000);
+ break;
+ case EVENT_SHADOW_POWER:
+ DoCast(me, SPELL_SHADOW_POWER);
+ events.ScheduleEvent(EVENT_SHADOW_POWER, urand(20000, 28000));
+ break;
+ default:
+ break;
}
- else
- Stream_of_Machine_Fluid_Timer -= diff;
-
- DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new boss_gatewatcher_iron_handAI(creature);
+ DoMeleeAttackIfReady();
}
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_gatewatcher_iron_handAI(creature);
+ }
};
void AddSC_boss_gatewatcher_iron_hand()
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
index f8c44471b30..1a43798ccef 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp
@@ -15,21 +15,144 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-//! TODO - Boss not scripted, just ported required spellscript from core
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
+#include "mechanar.h"
#include "Player.h"
enum Spells
{
+ SPELL_HEADCRACK = 35161,
+ SPELL_REFLECTIVE_MAGIC_SHIELD = 35158,
+ SPELL_REFLECTIVE_DAMAGE_SHIELD = 35159,
+ SPELL_POLARITY_SHIFT = 39096,
+ SPELL_BERSERK = 26662,
+ SPELL_NETHER_CHARGE_TIMER = 37670,
+ SPELL_NETHER_CHARGE_PASSIVE = 37670,
+
SPELL_POSITIVE_POLARITY = 39088,
SPELL_POSITIVE_CHARGE_STACK = 39089,
SPELL_POSITIVE_CHARGE = 39090,
+
SPELL_NEGATIVE_POLARITY = 39091,
SPELL_NEGATIVE_CHARGE_STACK = 39092,
- SPELL_NEGATIVE_CHARGE = 39093,
+ SPELL_NEGATIVE_CHARGE = 39093
+};
+
+enum Yells
+{
+ YELL_AGGRO = 0,
+ YELL_REFLECTIVE_MAGIC_SHIELD = 1,
+ YELL_REFLECTIVE_DAMAGE_SHIELD = 2,
+ YELL_KILL = 3,
+ YELL_DEATH = 4
+};
+
+enum Creatures
+{
+ NPC_NETHER_CHARGE = 20405
+};
+
+enum Events
+{
+ EVENT_NONE = 0,
+
+ EVENT_HEADCRACK = 1,
+ EVENT_REFLECTIVE_DAMAGE_SHIELD = 2,
+ EVENT_REFLECTIVE_MAGIE_SHIELD = 3,
+ EVENT_POSITIVE_SHIFT = 4,
+ EVENT_SUMMON_NETHER_CHARGE = 5,
+ EVENT_BERSERK = 6
+};
+
+class boss_mechano_lord_capacitus : public CreatureScript
+{
+ public:
+ boss_mechano_lord_capacitus() : CreatureScript("boss_mechano_lord_capacitus") { }
+
+ struct boss_mechano_lord_capacitusAI : public BossAI
+ {
+ boss_mechano_lord_capacitusAI(Creature* creature) : BossAI(creature, DATA_MECHANOLORD_CAPACITUS) { }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ _EnterCombat();
+ Talk(YELL_AGGRO);
+ events.ScheduleEvent(EVENT_HEADCRACK, 10 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_REFLECTIVE_DAMAGE_SHIELD, 15 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SUMMON_NETHER_CHARGE, 10 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_BERSERK, 3 * MINUTE * IN_MILLISECONDS);
+
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_POSITIVE_SHIFT, 15 * IN_MILLISECONDS);
+ }
+
+ void KilledUnit(Unit* /*victim*/)
+ {
+ Talk(YELL_KILL);
+ }
+
+ void JustDied(Unit* /*victim*/)
+ {
+ _JustDied();
+ Talk(YELL_DEATH);
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_HEADCRACK:
+ DoCastVictim(SPELL_HEADCRACK);
+ events.ScheduleEvent(EVENT_HEADCRACK, 10 * IN_MILLISECONDS);
+ break;
+ case EVENT_REFLECTIVE_DAMAGE_SHIELD:
+ Talk(YELL_REFLECTIVE_DAMAGE_SHIELD);
+ DoCast(me, SPELL_REFLECTIVE_DAMAGE_SHIELD);
+ events.ScheduleEvent(EVENT_REFLECTIVE_MAGIE_SHIELD, 30 * IN_MILLISECONDS);
+ break;
+ case EVENT_REFLECTIVE_MAGIE_SHIELD:
+ Talk(YELL_REFLECTIVE_MAGIC_SHIELD);
+ DoCast(me, SPELL_REFLECTIVE_MAGIC_SHIELD);
+ events.ScheduleEvent(EVENT_REFLECTIVE_DAMAGE_SHIELD, 30 * IN_MILLISECONDS);
+ break;
+ case EVENT_POSITIVE_SHIFT:
+ DoCastAOE(SPELL_POLARITY_SHIFT);
+ events.ScheduleEvent(EVENT_POSITIVE_SHIFT, urand(45, 60) * IN_MILLISECONDS);
+ break;
+ case EVENT_SUMMON_NETHER_CHARGE:
+ Position pos;
+ me->GetRandomNearPosition(pos, 5.0f);
+ me->SummonCreature(NPC_NETHER_CHARGE, pos, TEMPSUMMON_TIMED_DESPAWN, 18000);
+ events.ScheduleEvent(EVENT_SUMMON_NETHER_CHARGE, 10 * IN_MILLISECONDS);
+ break;
+ case EVENT_BERSERK:
+ DoCast(me, SPELL_BERSERK);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_mechano_lord_capacitusAI(creature);
+ }
};
class spell_capacitus_polarity_charge : public SpellScriptLoader
@@ -138,6 +261,7 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader
void AddSC_boss_mechano_lord_capacitus()
{
+ new boss_mechano_lord_capacitus();
new spell_capacitus_polarity_charge();
new spell_capacitus_polarity_shift();
}
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
index 5a9e551375b..0b2370e1b17 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
@@ -36,60 +36,45 @@ enum eSays
SAY_DEATH = 4
};
-enum eSpells
+enum Spells
{
- SPELL_SUMMON_RAGIN_FLAMES = 35275,
+ SPELL_SUMMON_RAGIN_FLAMES = 35275, // Not scripted
SPELL_FROST_ATTACK = 35263,
SPELL_ARCANE_BLAST = 35314,
SPELL_DRAGONS_BREATH = 35250,
SPELL_KNOCKBACK = 37317,
SPELL_SOLARBURN = 35267,
- H_SPELL_SUMMON_RAGIN_FLAMES = 39084,
- SPELL_INFERNO = 35268,
- H_SPELL_INFERNO = 39346,
- SPELL_FIRE_TAIL = 35278,
+ H_SPELL_SUMMON_RAGIN_FLAMES = 39084, // Not scripted
+ SPELL_INFERNO = 35268, // Not scripted
+ H_SPELL_INFERNO = 39346, // Not scripted
+ SPELL_FIRE_TAIL = 35278 // Not scripted
+};
+
+enum Events
+{
+ EVENT_FROST_ATTACK = 0,
+ EVENT_ARCANE_BLAST = 1,
+ EVENT_DRAGONS_BREATH = 2,
+ EVENT_KNOCKBACK = 3,
+ EVENT_SOLARBURN = 4
};
class boss_nethermancer_sepethrea : public CreatureScript
{
- public:
+ public: boss_nethermancer_sepethrea(): CreatureScript("boss_nethermancer_sepethrea") {}
- boss_nethermancer_sepethrea()
- : CreatureScript("boss_nethermancer_sepethrea")
+ struct boss_nethermancer_sepethreaAI : public BossAI
{
- }
- struct boss_nethermancer_sepethreaAI : public ScriptedAI
- {
- boss_nethermancer_sepethreaAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = creature->GetInstanceScript();
- }
-
- InstanceScript* instance;
-
- uint32 frost_attack_Timer;
- uint32 arcane_blast_Timer;
- uint32 dragons_breath_Timer;
- uint32 knockback_Timer;
- uint32 solarburn_Timer;
-
- void Reset()
- {
- frost_attack_Timer = urand(7000, 10000);
- arcane_blast_Timer = urand(12000, 18000);
- dragons_breath_Timer = urand(18000, 22000);
- knockback_Timer = urand(22000, 28000);
- solarburn_Timer = 30000;
-
- if (instance)
- instance->SetData(DATA_NETHERMANCER_EVENT, NOT_STARTED);
- }
+ boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature,DATA_NETHERMANCER_SEPRETHREA) {}
void EnterCombat(Unit* who)
{
- if (instance)
- instance->SetData(DATA_NETHERMANCER_EVENT, IN_PROGRESS);
-
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_FROST_ATTACK, urand(7000, 10000));
+ events.ScheduleEvent(EVENT_ARCANE_BLAST, urand(12000, 18000));
+ events.ScheduleEvent(EVENT_DRAGONS_BREATH, urand(18000, 22000));
+ events.ScheduleEvent(EVENT_KNOCKBACK, urand(22000, 28000));
+ events.ScheduleEvent(EVENT_SOLARBURN, 30000);
Talk(SAY_AGGRO);
DoCast(who, SPELL_SUMMON_RAGIN_FLAMES);
Talk(SAY_SUMMON);
@@ -102,66 +87,50 @@ class boss_nethermancer_sepethrea : public CreatureScript
void JustDied(Unit* /*killer*/)
{
+ _JustDied();
Talk(SAY_DEATH);
- if (instance)
- instance->SetData(DATA_NETHERMANCER_EVENT, DONE);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
- //Return since we have no target
if (!UpdateVictim())
return;
- //Frost Attack
- if (frost_attack_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_FROST_ATTACK);
+ events.Update(diff);
- frost_attack_Timer = urand(7000, 10000);
- }
- else
- frost_attack_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Arcane Blast
- if (arcane_blast_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ARCANE_BLAST);
- arcane_blast_Timer = 15000;
- }
- else
- arcane_blast_Timer -= diff;
- //Dragons Breath
- if (dragons_breath_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCast(me->getVictim(), SPELL_DRAGONS_BREATH);
+ switch (eventId)
{
- if (rand()%2)
- return;
- Talk(SAY_DRAGONS_BREATH);
+ case EVENT_FROST_ATTACK:
+ DoCastVictim(SPELL_FROST_ATTACK, true);
+ events.ScheduleEvent(EVENT_FROST_ATTACK, urand(7000, 10000));
+ break;
+ case EVENT_ARCANE_BLAST:
+ DoCastVictim(SPELL_ARCANE_BLAST, true);
+ events.ScheduleEvent(EVENT_ARCANE_BLAST, 15000);
+ break;
+ case EVENT_DRAGONS_BREATH:
+ DoCastVictim(SPELL_DRAGONS_BREATH, true);
+ events.ScheduleEvent(EVENT_DRAGONS_BREATH, urand(12000, 22000));
+ if (roll_chance_i(50))
+ Talk(SAY_DRAGONS_BREATH);
+ break;
+ case EVENT_KNOCKBACK:
+ DoCastVictim(SPELL_KNOCKBACK, true);
+ events.ScheduleEvent(EVENT_KNOCKBACK, urand(15000, 25000));
+ break;
+ case EVENT_SOLARBURN:
+ DoCastVictim(SPELL_SOLARBURN, true);
+ events.ScheduleEvent(EVENT_SOLARBURN, 30000);
+ break;
+ default:
+ break;
}
- dragons_breath_Timer = urand(12000, 22000);
}
- else
- dragons_breath_Timer -= diff;
-
- //Knockback
- if (knockback_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_KNOCKBACK);
- knockback_Timer = urand(15000, 25000);
- }
- else
- knockback_Timer -= diff;
-
- //Solarburn
- if (solarburn_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_SOLARBURN);
- solarburn_Timer = 30000;
- }
- else
- solarburn_Timer -= diff;
DoMeleeAttackIfReady();
}
@@ -172,13 +141,11 @@ class boss_nethermancer_sepethrea : public CreatureScript
return new boss_nethermancer_sepethreaAI(creature);
}
};
+
class mob_ragin_flames : public CreatureScript
{
public:
- mob_ragin_flames()
- : CreatureScript("mob_ragin_flames")
- {
- }
+ mob_ragin_flames() : CreatureScript("mob_ragin_flames") { }
struct mob_ragin_flamesAI : public ScriptedAI
{
@@ -217,7 +184,7 @@ class mob_ragin_flames : public CreatureScript
{
if (instance)
{
- if (instance->GetData(DATA_NETHERMANCER_EVENT) != IN_PROGRESS)
+ if (instance->GetData(DATA_NETHERMANCER_SEPRETHREA) != IN_PROGRESS)
{
//remove
me->setDeathState(JUST_DIED);
@@ -259,9 +226,9 @@ class mob_ragin_flames : public CreatureScript
return new mob_ragin_flamesAI(creature);
}
};
+
void AddSC_boss_nethermancer_sepethrea()
{
new boss_nethermancer_sepethrea();
new mob_ragin_flames();
}
-
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
index 41296daf1fa..9d894e41b60 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
@@ -25,8 +25,9 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "mechanar.h"
-enum eSays
+enum Says
{
SAY_AGGRO = 0,
SAY_DOMINATION = 1,
@@ -35,65 +36,53 @@ enum eSays
SAY_SLAY = 4,
SAY_DEATH = 5
};
-// Spells to be casted
-enum eSpells
+
+enum Spells
{
SPELL_MANA_TAP = 36021,
SPELL_ARCANE_TORRENT = 36022,
SPELL_DOMINATION = 35280,
H_SPELL_ARCANE_EXPLOSION = 15453,
SPELL_FRENZY = 36992,
- //Spells work, but not implemented
- SPELL_SUMMON_NETHER_WRAITH_1 = 35285,
- SPELL_SUMMON_NETHER_WRAITH_2 = 35286,
- SPELL_SUMMON_NETHER_WRAITH_3 = 35287,
- SPELL_SUMMON_NETHER_WRAITH_4 = 35288,
- // Add Spells
- SPELL_DETONATION = 35058,
- SPELL_ARCANE_MISSILES = 35034,
+ SPELL_SUMMON_NETHER_WRAITH_1 = 35285, // Not scripted
+ SPELL_SUMMON_NETHER_WRAITH_2 = 35286, // Not scripted
+ SPELL_SUMMON_NETHER_WRAITH_3 = 35287, // Not scripted
+ SPELL_SUMMON_NETHER_WRAITH_4 = 35288, // Not scripted
+ SPELL_DETONATION = 35058, // Used by Nether Wraith
+ SPELL_ARCANE_MISSILES = 35034 // Used by Nether Wraith
+};
+
+enum Events
+{
+ EVENT_SUMMON = 0,
+ EVENT_MANA_TAP = 1,
+ EVENT_ARCANE_TORRENT = 2,
+ EVENT_DOMINATION = 3,
+ EVENT_ARCANE_EXPLOSION = 4
+};
+
+enum Creatures
+{
+ NPC_NETHER_WRAITH = 21062
};
class boss_pathaleon_the_calculator : public CreatureScript
{
public:
+ boss_pathaleon_the_calculator(): CreatureScript("boss_pathaleon_the_calculator") {}
- boss_pathaleon_the_calculator()
- : CreatureScript("boss_pathaleon_the_calculator")
- {
- }
-
- struct boss_pathaleon_the_calculatorAI : public ScriptedAI
+ struct boss_pathaleon_the_calculatorAI : public BossAI
{
- boss_pathaleon_the_calculatorAI(Creature* creature) : ScriptedAI(creature), summons(me)
- {
- }
+ boss_pathaleon_the_calculatorAI(Creature* creature) : BossAI(creature, DATA_PATHALEON_THE_CALCULATOR) { }
- uint32 Summon_Timer;
- SummonList summons;
- uint32 ManaTap_Timer;
- uint32 ArcaneTorrent_Timer;
- uint32 Domination_Timer;
- uint32 ArcaneExplosion_Timer;
-
- bool Enraged;
-
- uint32 Counter;
-
- void Reset()
- {
- Summon_Timer = 30000;
- ManaTap_Timer = urand(12000, 20000);
- ArcaneTorrent_Timer = urand(16000, 25000);
- Domination_Timer = urand(25000, 40000);
- ArcaneExplosion_Timer = urand(8000, 13000);
-
- Enraged = false;
-
- Counter = 0;
- summons.DespawnAll();
- }
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
+ events.ScheduleEvent(EVENT_SUMMON, 30000);
+ events.ScheduleEvent(EVENT_MANA_TAP, urand(12000, 20000));
+ events.ScheduleEvent(EVENT_ARCANE_TORRENT, urand(16000, 25000));
+ events.ScheduleEvent(EVENT_DOMINATION, urand(25000, 40000));
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(8000, 13000));
Talk(SAY_AGGRO);
}
@@ -104,107 +93,82 @@ class boss_pathaleon_the_calculator : public CreatureScript
void JustDied(Unit* /*killer*/)
{
+ _JustDied();
Talk(SAY_DEATH);
-
- summons.DespawnAll();
}
- void JustSummoned(Creature* summon)
- {
- summons.Summon(summon);
- }
- void SummonedCreatureDespawn(Creature* summon)
+ void DamageTaken(Unit* /*attacker*/, uint32& damage)
{
- summons.Despawn(summon);
+ if (me->HealthBelowPctDamaged(20, damage) && !me->HasAura(SPELL_FRENZY))
+ {
+ DoCast(me, SPELL_FRENZY);
+ Talk(SAY_ENRAGE);
+ }
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(uint32 const diff)
{
- //Return since we have no target
if (!UpdateVictim())
return;
- if (Summon_Timer <= diff)
- {
- for (uint8 i = 0; i < 3; ++i)
- {
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- Creature* Wraith = me->SummonCreature(21062, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
- if (target && Wraith)
- Wraith->AI()->AttackStart(target);
- }
- Talk(SAY_SUMMON);
- Summon_Timer = urand(30000, 45000);
- }
- else
- Summon_Timer -= diff;
-
- if (ManaTap_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_MANA_TAP);
- ManaTap_Timer = urand(14000, 22000);
- }
- else
- ManaTap_Timer -= diff;
-
- if (ArcaneTorrent_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_ARCANE_TORRENT);
- ArcaneTorrent_Timer = urand(12000, 18000);
- }
- else
- ArcaneTorrent_Timer -= diff;
+ events.Update(diff);
- if (Domination_Timer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
- {
- Talk(SAY_DOMINATION);
- DoCast(target, SPELL_DOMINATION);
- }
- Domination_Timer = urand(25000, 30000);
- }
- else
- Domination_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Only casting if Heroic Mode is used
- if (IsHeroic())
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (ArcaneExplosion_Timer <= diff)
+ switch (eventId)
{
- DoCast(me->getVictim(), H_SPELL_ARCANE_EXPLOSION);
- ArcaneExplosion_Timer = urand(10000, 14000);
+ case EVENT_SUMMON:
+ for (uint8 i = 0; i < 3; ++i)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ {
+ if (Creature* Wraith = me->SummonCreature(NPC_NETHER_WRAITH, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000))
+ Wraith->AI()->AttackStart(target);
+ }
+ }
+ Talk(SAY_SUMMON);
+ events.ScheduleEvent(EVENT_SUMMON, urand(30000, 45000));
+ break;
+ case EVENT_MANA_TAP:
+ DoCastVictim(SPELL_MANA_TAP, true);
+ events.ScheduleEvent(EVENT_MANA_TAP, urand(14000, 22000));
+ break;
+ case EVENT_ARCANE_TORRENT:
+ DoCastVictim(SPELL_ARCANE_TORRENT, true);
+ events.ScheduleEvent(EVENT_ARCANE_TORRENT, urand(12000, 18000));
+ break;
+ case EVENT_DOMINATION:
+ Talk(SAY_DOMINATION);
+ DoCastVictim(SPELL_DOMINATION, true);
+ events.ScheduleEvent(EVENT_DOMINATION, urand(25000, 30000));
+ break;
+ case EVENT_ARCANE_EXPLOSION: // Heroic only
+ DoCastVictim(H_SPELL_ARCANE_EXPLOSION, true);
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(10000, 14000));
+ break;
+ default:
+ break;
}
- else
- ArcaneExplosion_Timer -= diff;
- }
-
- if (!Enraged && HealthBelowPct(21))
- {
- DoCast(me, SPELL_FRENZY);
- Talk(SAY_ENRAGE);
- Enraged = true;
-
}
DoMeleeAttackIfReady();
}
};
- CreatureAI* GetAI(Creature* creature) const
- {
- return new boss_pathaleon_the_calculatorAI (creature);
- }
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_pathaleon_the_calculatorAI (creature);
+ }
};
class mob_nether_wraith : public CreatureScript
{
public:
- mob_nether_wraith()
- : CreatureScript("mob_nether_wraith")
- {
- }
+ mob_nether_wraith() : CreatureScript("mob_nether_wraith") { }
struct mob_nether_wraithAI : public ScriptedAI
{
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
index 1f9ddfcdd0b..e6cb05084ad 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
@@ -16,68 +16,122 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Mechanar
-SD%Complete: 100
-SDComment:
-SDCategory: Mechanar
-EndScriptData */
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "mechanar.h"
-#define MAX_ENCOUNTER 1
+static DoorData const doorData[] =
+{
+ { GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+};
class instance_mechanar : public InstanceMapScript
{
public:
- instance_mechanar()
- : InstanceMapScript("instance_mechanar", 554)
- {
- }
+ instance_mechanar(): InstanceMapScript("instance_mechanar", 554) { }
struct instance_mechanar_InstanceMapScript : public InstanceScript
{
- instance_mechanar_InstanceMapScript(Map* map) : InstanceScript(map) {}
-
- uint32 m_auiEncounter[MAX_ENCOUNTER];
-
- void Initialize()
+ instance_mechanar_InstanceMapScript(Map* map) : InstanceScript(map)
{
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
}
+
- bool IsEncounterInProgress() const
+ void OnGameObjectCreate(GameObject* gameObject)
{
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- return true;
+ switch (gameObject->GetEntry())
+ {
+ case GO_DOOR_MOARG_1:
+ case GO_DOOR_MOARG_2:
+ case GO_DOOR_NETHERMANCER:
+ AddDoor(gameObject, true);
+ break;
+ default:
+ break;
+ }
+ }
- return false;
+ void OnGameObjectRemove(GameObject* gameObject)
+ {
+ switch (gameObject->GetEntry())
+ {
+ case GO_DOOR_MOARG_1:
+ case GO_DOOR_MOARG_2:
+ case GO_DOOR_NETHERMANCER:
+ AddDoor(gameObject, false);
+ break;
+ default:
+ break;
+ }
}
- uint32 GetData(uint32 type) const
+ bool SetBossState(uint32 type, EncounterState state)
{
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
switch (type)
{
- case DATA_NETHERMANCER_EVENT: return m_auiEncounter[0];
+ case DATA_GATEWATCHER_GYROKILL:
+ case DATA_GATEWATCHER_IRON_HAND:
+ case DATA_MECHANOLORD_CAPACITUS:
+ case DATA_NETHERMANCER_SEPRETHREA:
+ case DATA_PATHALEON_THE_CALCULATOR:
+ break;
+ default:
+ break;
}
- return false;
+ return true;
}
- uint64 GetData64(uint32 /*identifier*/) const
+ std::string GetSaveData()
{
- return 0;
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "M C " << GetBossSaveData();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
}
- void SetData(uint32 type, uint32 data)
+ void Load(const char* str)
{
- switch (type)
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(str);
+
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
+
+ if (dataHead1 == 'M' && dataHead2 == 'C')
{
- case DATA_NETHERMANCER_EVENT: m_auiEncounter[0] = data; break;
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
}
+ else
+ OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
}
};
@@ -89,6 +143,5 @@ class instance_mechanar : public InstanceMapScript
void AddSC_instance_mechanar()
{
- new instance_mechanar;
+ new instance_mechanar();
}
-
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h
index c933c90afef..0d3a4ea241d 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -19,6 +18,22 @@
#ifndef DEF_MECHANAR_H
#define DEF_MECHANAR_H
-#define DATA_NETHERMANCER_EVENT 1
-#endif
+uint32 const EncounterCount = 5;
+
+enum DataTypes
+{
+ DATA_GATEWATCHER_GYROKILL = 0,
+ DATA_GATEWATCHER_IRON_HAND = 1,
+ DATA_MECHANOLORD_CAPACITUS = 2,
+ DATA_NETHERMANCER_SEPRETHREA = 3,
+ DATA_PATHALEON_THE_CALCULATOR = 4
+};
+enum GameobjectIds
+{
+ GO_DOOR_MOARG_1 = 184632,
+ GO_DOOR_MOARG_2 = 184322,
+ GO_DOOR_NETHERMANCER = 184449
+};
+
+#endif
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index afb9a625761..060db02d53c 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -172,7 +172,7 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader
return true;
}
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_DK_ANTI_MAGIC_SHELL_TALENT))
return false;
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index a0307f994c9..6dd453597de 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -29,18 +29,19 @@
enum DruidSpells
{
- DRUID_INCREASED_MOONFIRE_DURATION = 38414,
- DRUID_NATURES_SPLENDOR = 57865,
- DRUID_LIFEBLOOM_FINAL_HEAL = 33778,
- DRUID_LIFEBLOOM_ENERGIZE = 64372,
- DRUID_SURVIVAL_INSTINCTS = 50322,
- DRUID_SAVAGE_ROAR = 62071,
- SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950,
- SPELL_KING_OF_THE_JUNGLE = 48492,
- SPELL_TIGER_S_FURY_ENERGIZE = 51178,
- SPELL_ENRAGE_MOD_DAMAGE = 51185,
+ SPELL_DRUID_ENRAGE_MOD_DAMAGE = 51185,
+ SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414,
+ SPELL_DRUID_KING_OF_THE_JUNGLE = 48492,
+ SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372,
+ SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778,
+ SPELL_DRUID_NATURES_SPLENDOR = 57865,
+ SPELL_DRUID_SURVIVAL_INSTINCTS = 50322,
+ SPELL_DRUID_SAVAGE_ROAR = 62071,
+ SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178,
+ SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950,
};
+// -5229 - Enrage
class spell_dru_enrage : public SpellScriptLoader
{
public:
@@ -52,8 +53,8 @@ class spell_dru_enrage : public SpellScriptLoader
void OnHit()
{
- if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_KING_OF_THE_JUNGLE, EFFECT_0))
- GetHitUnit()->CastCustomSpell(SPELL_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
+ if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0))
+ GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
}
void Register()
@@ -68,7 +69,7 @@ class spell_dru_enrage : public SpellScriptLoader
}
};
-// 54846 Glyph of Starfire
+// 54846 - Glyph of Starfire
class spell_dru_glyph_of_starfire : public SpellScriptLoader
{
public:
@@ -78,9 +79,9 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader
{
PrepareSpellScript(spell_dru_glyph_of_starfire_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(DRUID_INCREASED_MOONFIRE_DURATION) || !sSpellMgr->GetSpellInfo(DRUID_NATURES_SPLENDOR))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_INCREASED_MOONFIRE_DURATION) || !sSpellMgr->GetSpellInfo(SPELL_DRUID_NATURES_SPLENDOR))
return false;
return true;
}
@@ -95,9 +96,9 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader
uint32 countMin = aura->GetMaxDuration();
uint32 countMax = aura->GetSpellInfo()->GetMaxDuration() + 9000;
- if (caster->HasAura(DRUID_INCREASED_MOONFIRE_DURATION))
+ if (caster->HasAura(SPELL_DRUID_INCREASED_MOONFIRE_DURATION))
countMax += 3000;
- if (caster->HasAura(DRUID_NATURES_SPLENDOR))
+ if (caster->HasAura(SPELL_DRUID_NATURES_SPLENDOR))
countMax += 3000;
if (countMin < countMax)
@@ -120,6 +121,7 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader
}
};
+// -5570 - Insect Swarm
class spell_dru_insect_swarm : public SpellScriptLoader
{
public:
@@ -148,6 +150,7 @@ class spell_dru_insect_swarm : public SpellScriptLoader
}
};
+// -33763 - Lifebloom
class spell_dru_lifebloom : public SpellScriptLoader
{
public:
@@ -159,9 +162,9 @@ class spell_dru_lifebloom : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_FINAL_HEAL))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL))
return false;
- if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_ENERGIZE))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_ENERGIZE))
return false;
return true;
}
@@ -180,15 +183,15 @@ class spell_dru_lifebloom : public SpellScriptLoader
healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, stack);
healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack);
- GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
+ GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
// restore mana
int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2;
- caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
+ caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
return;
}
- GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
+ GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
}
void HandleDispel(DispelInfo* dispelInfo)
@@ -203,15 +206,15 @@ class spell_dru_lifebloom : public SpellScriptLoader
{
healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
- target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
+ target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
// restore mana
int32 returnMana = CalculatePct(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * dispelInfo->GetRemovedCharges() / 2;
- caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID());
+ caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID());
return;
}
- target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
+ target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
}
}
}
@@ -273,6 +276,7 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader
}
};
+// -16972 - Predatory Strikes
class spell_dru_predatory_strikes : public SpellScriptLoader
{
public:
@@ -388,6 +392,7 @@ class spell_dru_savage_defense : public SpellScriptLoader
}
};
+// 52610 - Savage Roar
class spell_dru_savage_roar : public SpellScriptLoader
{
public:
@@ -418,7 +423,7 @@ class spell_dru_savage_roar : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(DRUID_SAVAGE_ROAR))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SAVAGE_ROAR))
return false;
return true;
}
@@ -426,12 +431,12 @@ class spell_dru_savage_roar : public SpellScriptLoader
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->CastSpell(target, DRUID_SAVAGE_ROAR, true, NULL, aurEff, GetCasterGUID());
+ target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, true, NULL, aurEff, GetCasterGUID());
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->RemoveAurasDueToSpell(DRUID_SAVAGE_ROAR);
+ GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR);
}
void Register()
@@ -452,6 +457,7 @@ class spell_dru_savage_roar : public SpellScriptLoader
}
};
+// -50294 - Starfall (AOE)
class spell_dru_starfall_aoe : public SpellScriptLoader
{
public:
@@ -478,6 +484,7 @@ class spell_dru_starfall_aoe : public SpellScriptLoader
}
};
+// -50286 - Starfall (Dummy)
class spell_dru_starfall_dummy : public SpellScriptLoader
{
public:
@@ -523,6 +530,7 @@ class spell_dru_starfall_dummy : public SpellScriptLoader
}
};
+// 61336 - Survival Instincts
class spell_dru_survival_instincts : public SpellScriptLoader
{
public:
@@ -553,7 +561,7 @@ class spell_dru_survival_instincts : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(DRUID_SURVIVAL_INSTINCTS))
+ if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SURVIVAL_INSTINCTS))
return false;
return true;
}
@@ -562,12 +570,12 @@ class spell_dru_survival_instincts : public SpellScriptLoader
{
Unit* target = GetTarget();
int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount());
- target->CastCustomSpell(target, DRUID_SURVIVAL_INSTINCTS, &bp0, NULL, NULL, true);
+ target->CastCustomSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, &bp0, NULL, NULL, true);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- GetTarget()->RemoveAurasDueToSpell(DRUID_SURVIVAL_INSTINCTS);
+ GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS);
}
void Register()
@@ -622,6 +630,7 @@ class spell_dru_swift_flight_passive : public SpellScriptLoader
}
};
+// -5217 - Tiger's Fury
class spell_dru_tiger_s_fury : public SpellScriptLoader
{
public:
@@ -633,8 +642,8 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader
void OnHit()
{
- if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_KING_OF_THE_JUNGLE, EFFECT_1))
- GetHitUnit()->CastCustomSpell(SPELL_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
+ if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_1))
+ GetHitUnit()->CastCustomSpell(SPELL_DRUID_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
}
void Register()
@@ -649,6 +658,7 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader
}
};
+// 70691 - Item T10 Restoration 4P Bonus
class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader
{
public:
diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp
index 83532e7d72d..d883b4d7da7 100644
--- a/src/server/scripts/Spells/spell_holiday.cpp
+++ b/src/server/scripts/Spells/spell_holiday.cpp
@@ -17,6 +17,7 @@
/*
* Spells used in holidays/game events that do not fit any other category.
+ * Ordered alphabetically using scriptname.
* Scriptnames in this file should be prefixed with "spell_#holidayname_".
*/
@@ -133,6 +134,7 @@ class spell_hallow_end_trick : public SpellScriptLoader
class spell_hallow_end_trick_SpellScript : public SpellScript
{
PrepareSpellScript(spell_hallow_end_trick_SpellScript);
+
bool Validate(SpellInfo const* /*spell*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE)
@@ -170,7 +172,7 @@ class spell_hallow_end_trick : public SpellScriptLoader
break;
}
- caster->CastSpell(target, spellId, true, NULL);
+ caster->CastSpell(target, spellId, true);
}
}
@@ -218,8 +220,8 @@ class spell_hallow_end_trick_or_treat : public SpellScriptLoader
Unit* caster = GetCaster();
if (Player* target = GetHitPlayer())
{
- caster->CastSpell(target, roll_chance_i(50) ? SPELL_TRICK : SPELL_TREAT, true, NULL);
- caster->CastSpell(target, SPELL_TRICKED_OR_TREATED, true, NULL);
+ caster->CastSpell(target, roll_chance_i(50) ? SPELL_TRICK : SPELL_TREAT, true);
+ caster->CastSpell(target, SPELL_TRICKED_OR_TREATED, true);
}
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 36194a596ce..a9b21807899 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -32,7 +32,7 @@
enum HunterSpells
{
- SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET = 61669,
+ SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET = 61669,
SPELL_HUNTER_BESTIAL_WRATH = 19574,
SPELL_HUNTER_CHIMERA_SHOT_SERPENT = 53353,
SPELL_HUNTER_CHIMERA_SHOT_VIPER = 53358,
@@ -286,7 +286,6 @@ class spell_hun_last_stand_pet : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to pet's Last Stand
OnEffectHitTarget += SpellEffectFn(spell_hun_last_stand_pet_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
@@ -452,7 +451,6 @@ class spell_hun_pet_carrion_feeder : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to pet's Last Stand
OnEffectHit += SpellEffectFn(spell_hun_pet_carrion_feeder_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_hun_pet_carrion_feeder_SpellScript::CheckIfCorpseNear);
}
@@ -501,7 +499,6 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to pet's Last Stand
OnEffectHitTarget += SpellEffectFn(spell_hun_pet_heart_of_the_phoenix_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
@@ -551,7 +548,6 @@ class spell_hun_readiness : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to Readiness
OnEffectHitTarget += SpellEffectFn(spell_hun_readiness_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index cf10cfdab5c..61f0579190f 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -29,6 +29,10 @@
enum MageSpells
{
SPELL_MAGE_COLD_SNAP = 11958,
+ SPELL_MAGE_FROST_WARDING_R1 = 28332,
+ SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776,
+ SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394,
+ SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413,
SPELL_MAGE_SQUIRREL_FORM = 32813,
SPELL_MAGE_GIRAFFE_FORM = 32816,
SPELL_MAGE_SERPENT_FORM = 32817,
@@ -41,6 +45,7 @@ enum MageSpells
SPELL_MAGE_GLYPH_OF_BLAST_WAVE = 62126,
};
+// -11113 - Blast Wave
class spell_mage_blast_wave : public SpellScriptLoader
{
public:
@@ -50,7 +55,7 @@ class spell_mage_blast_wave : public SpellScriptLoader
{
PrepareSpellScript(spell_mage_blast_wave_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_BLAST_WAVE))
return false;
@@ -75,6 +80,7 @@ class spell_mage_blast_wave : public SpellScriptLoader
}
};
+// 11958 - Cold Snap
class spell_mage_cold_snap : public SpellScriptLoader
{
public:
@@ -91,7 +97,6 @@ class spell_mage_cold_snap : public SpellScriptLoader
void HandleDummy(SpellEffIndex /*effIndex*/)
{
-
Player* caster = GetCaster()->ToPlayer();
// immediately finishes the cooldown on Frost spells
const SpellCooldowns& cm = caster->GetSpellCooldownMap();
@@ -112,7 +117,6 @@ class spell_mage_cold_snap : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to Cold Snap
OnEffectHit += SpellEffectFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
@@ -123,102 +127,7 @@ class spell_mage_cold_snap : public SpellScriptLoader
}
};
-enum SilvermoonPolymorph
-{
- NPC_AUROSALIA = 18744,
-};
-
-// TODO: move out of here and rename - not a mage spell
-class spell_mage_polymorph_cast_visual : public SpellScriptLoader
-{
- public:
- spell_mage_polymorph_cast_visual() : SpellScriptLoader("spell_mage_polymorph_visual") { }
-
- class spell_mage_polymorph_cast_visual_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_polymorph_cast_visual_SpellScript);
-
- static const uint32 PolymorhForms[6];
-
- bool Validate(SpellInfo const* /*spellEntry*/)
- {
- // check if spell ids exist in dbc
- for (uint32 i = 0; i < 6; i++)
- if (!sSpellMgr->GetSpellInfo(PolymorhForms[i]))
- return false;
- return true;
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- if (Unit* target = GetCaster()->FindNearestCreature(NPC_AUROSALIA, 30.0f))
- if (target->GetTypeId() == TYPEID_UNIT)
- target->CastSpell(target, PolymorhForms[urand(0, 5)], true);
- }
-
- void Register()
- {
- // add dummy effect spell handler to Polymorph visual
- OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_mage_polymorph_cast_visual_SpellScript();
- }
-};
-
-const uint32 spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_SpellScript::PolymorhForms[6] =
-{
- SPELL_MAGE_SQUIRREL_FORM,
- SPELL_MAGE_GIRAFFE_FORM,
- SPELL_MAGE_SERPENT_FORM,
- SPELL_MAGE_DRAGONHAWK_FORM,
- SPELL_MAGE_WORGEN_FORM,
- SPELL_MAGE_SHEEP_FORM
-};
-
-class spell_mage_summon_water_elemental : public SpellScriptLoader
-{
- public:
- spell_mage_summon_water_elemental() : SpellScriptLoader("spell_mage_summon_water_elemental") { }
-
- class spell_mage_summon_water_elemental_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript);
-
- bool Validate(SpellInfo const* /*spellEntry*/)
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT))
- return false;
- return true;
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- // Glyph of Eternal Water
- if (caster->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER))
- caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true);
- else
- caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true);
- }
-
- void Register()
- {
- // add dummy effect spell handler to Summon Water Elemental
- OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_mage_summon_water_elemental_SpellScript();
- }
-};
-
-// Frost Warding
+// -543, -6143 - Frost Warding
class spell_mage_frost_warding_trigger : public SpellScriptLoader
{
public:
@@ -228,13 +137,7 @@ class spell_mage_frost_warding_trigger : public SpellScriptLoader
{
PrepareAuraScript(spell_mage_frost_warding_trigger_AuraScript);
- enum Spells
- {
- SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776,
- SPELL_MAGE_FROST_WARDING_R1 = 28332,
- };
-
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_R1))
return false;
@@ -274,13 +177,8 @@ class spell_mage_frost_warding_trigger : public SpellScriptLoader
class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript
{
public:
- enum Spells
- {
- SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413,
- SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394,
- };
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
return sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED)
&& sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_R1);
@@ -298,50 +196,51 @@ class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript
}
};
-// Incanter's Absorption
+// -543, -6143, -11426 - Incanter's Absorption
class spell_mage_incanters_absorbtion_absorb : public SpellScriptLoader
{
-public:
- spell_mage_incanters_absorbtion_absorb() : SpellScriptLoader("spell_mage_incanters_absorbtion_absorb") { }
+ public:
+ spell_mage_incanters_absorbtion_absorb() : SpellScriptLoader("spell_mage_incanters_absorbtion_absorb") { }
+
+ class spell_mage_incanters_absorbtion_absorb_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript
+ {
+ PrepareAuraScript(spell_mage_incanters_absorbtion_absorb_AuraScript);
- class spell_mage_incanters_absorbtion_absorb_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript
- {
- PrepareAuraScript(spell_mage_incanters_absorbtion_absorb_AuraScript);
+ void Register()
+ {
+ AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_incanters_absorbtion_absorb_AuraScript::Trigger, EFFECT_0);
+ }
+ };
- void Register()
+ AuraScript* GetAuraScript() const
{
- AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_incanters_absorbtion_absorb_AuraScript::Trigger, EFFECT_0);
+ return new spell_mage_incanters_absorbtion_absorb_AuraScript();
}
- };
-
- AuraScript* GetAuraScript() const
- {
- return new spell_mage_incanters_absorbtion_absorb_AuraScript();
- }
};
-// Incanter's Absorption
+// -1463 - Incanter's Absorption
class spell_mage_incanters_absorbtion_manashield : public SpellScriptLoader
{
-public:
- spell_mage_incanters_absorbtion_manashield() : SpellScriptLoader("spell_mage_incanters_absorbtion_manashield") { }
+ public:
+ spell_mage_incanters_absorbtion_manashield() : SpellScriptLoader("spell_mage_incanters_absorbtion_manashield") { }
- class spell_mage_incanters_absorbtion_manashield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript
- {
- PrepareAuraScript(spell_mage_incanters_absorbtion_manashield_AuraScript);
+ class spell_mage_incanters_absorbtion_manashield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript
+ {
+ PrepareAuraScript(spell_mage_incanters_absorbtion_manashield_AuraScript);
- void Register()
+ void Register()
+ {
+ AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_incanters_absorbtion_manashield_AuraScript::Trigger, EFFECT_0);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
{
- AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_incanters_absorbtion_manashield_AuraScript::Trigger, EFFECT_0);
+ return new spell_mage_incanters_absorbtion_manashield_AuraScript();
}
- };
-
- AuraScript* GetAuraScript() const
- {
- return new spell_mage_incanters_absorbtion_manashield_AuraScript();
- }
};
+// -44457 - Living Bomb
class spell_mage_living_bomb : public SpellScriptLoader
{
public:
@@ -380,6 +279,101 @@ class spell_mage_living_bomb : public SpellScriptLoader
}
};
+enum SilvermoonPolymorph
+{
+ NPC_AUROSALIA = 18744,
+};
+
+// TODO: move out of here and rename - not a mage spell
+// 32826 - Polymorph (Visual)
+class spell_mage_polymorph_cast_visual : public SpellScriptLoader
+{
+ public:
+ spell_mage_polymorph_cast_visual() : SpellScriptLoader("spell_mage_polymorph_visual") { }
+
+ class spell_mage_polymorph_cast_visual_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mage_polymorph_cast_visual_SpellScript);
+
+ static const uint32 PolymorhForms[6];
+
+ bool Validate(SpellInfo const* /*spellInfo*/)
+ {
+ // check if spell ids exist in dbc
+ for (uint32 i = 0; i < 6; ++i)
+ if (!sSpellMgr->GetSpellInfo(PolymorhForms[i]))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetCaster()->FindNearestCreature(NPC_AUROSALIA, 30.0f))
+ if (target->GetTypeId() == TYPEID_UNIT)
+ target->CastSpell(target, PolymorhForms[urand(0, 5)], true);
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_mage_polymorph_cast_visual_SpellScript();
+ }
+};
+
+const uint32 spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_SpellScript::PolymorhForms[6] =
+{
+ SPELL_MAGE_SQUIRREL_FORM,
+ SPELL_MAGE_GIRAFFE_FORM,
+ SPELL_MAGE_SERPENT_FORM,
+ SPELL_MAGE_DRAGONHAWK_FORM,
+ SPELL_MAGE_WORGEN_FORM,
+ SPELL_MAGE_SHEEP_FORM
+};
+
+// 31687 - Summon Water Elemental
+class spell_mage_summon_water_elemental : public SpellScriptLoader
+{
+ public:
+ spell_mage_summon_water_elemental() : SpellScriptLoader("spell_mage_summon_water_elemental") { }
+
+ class spell_mage_summon_water_elemental_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ // Glyph of Eternal Water
+ if (caster->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER))
+ caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true);
+ else
+ caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true);
+ }
+
+ void Register()
+ {
+ OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_mage_summon_water_elemental_SpellScript();
+ }
+};
+
void AddSC_mage_spell_scripts()
{
new spell_mage_blast_wave();
@@ -387,7 +381,7 @@ void AddSC_mage_spell_scripts()
new spell_mage_frost_warding_trigger();
new spell_mage_incanters_absorbtion_absorb();
new spell_mage_incanters_absorbtion_manashield();
+ new spell_mage_living_bomb();
new spell_mage_polymorph_cast_visual();
new spell_mage_summon_water_elemental();
- new spell_mage_living_bomb();
}
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index 07d903c9587..d3fc86302e1 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -29,28 +29,28 @@
enum PaladinSpells
{
- PALADIN_SPELL_DIVINE_PLEA = 54428,
- PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF = 67480,
+ SPELL_PALADIN_DIVINE_PLEA = 54428,
+ SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF = 67480,
- PALADIN_SPELL_HOLY_SHOCK_R1 = 20473,
- PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE = 25912,
- PALADIN_SPELL_HOLY_SHOCK_R1_HEALING = 25914,
+ SPELL_PALADIN_HOLY_SHOCK_R1 = 20473,
+ SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE = 25912,
+ SPELL_PALADIN_HOLY_SHOCK_R1_HEALING = 25914,
- SPELL_BLESSING_OF_LOWER_CITY_DRUID = 37878,
- SPELL_BLESSING_OF_LOWER_CITY_PALADIN = 37879,
- SPELL_BLESSING_OF_LOWER_CITY_PRIEST = 37880,
- SPELL_BLESSING_OF_LOWER_CITY_SHAMAN = 37881,
+ SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID = 37878,
+ SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN = 37879,
+ SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST = 37880,
+ SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN = 37881,
- SPELL_DIVINE_STORM = 53385,
- SPELL_DIVINE_STORM_DUMMY = 54171,
- SPELL_DIVINE_STORM_HEAL = 54172,
+ SPELL_PALADIN_DIVINE_STORM = 53385,
+ SPELL_PALADIN_DIVINE_STORM_DUMMY = 54171,
+ SPELL_PALADIN_DIVINE_STORM_HEAL = 54172,
- SPELL_FORBEARANCE = 25771,
- SPELL_AVENGING_WRATH_MARKER = 61987,
- SPELL_IMMUNE_SHIELD_MARKER = 61988,
+ SPELL_PALADIN_FORBEARANCE = 25771,
+ SPELL_PALADIN_AVENGING_WRATH_MARKER = 61987,
+ SPELL_PALADIN_IMMUNE_SHIELD_MARKER = 61988,
- SPELL_HAND_OF_SACRIFICE = 6940,
- SPELL_DIVINE_SACRIFICE = 64205,
+ SPELL_PALADIN_HAND_OF_SACRIFICE = 6940,
+ SPELL_PALADIN_DIVINE_SACRIFICE = 64205,
};
// 31850 - Ardent Defender
@@ -129,6 +129,7 @@ class spell_pal_ardent_defender : public SpellScriptLoader
}
};
+// 37877 - Blessing of Faith
class spell_pal_blessing_of_faith : public SpellScriptLoader
{
public:
@@ -138,9 +139,9 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_blessing_of_faith_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_DRUID) || !sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_PALADIN) || !sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_PRIEST) || !sSpellMgr->GetSpellInfo(SPELL_BLESSING_OF_LOWER_CITY_SHAMAN))
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN))
return false;
return true;
}
@@ -152,11 +153,20 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader
uint32 spell_id = 0;
switch (unitTarget->getClass())
{
- case CLASS_DRUID: spell_id = SPELL_BLESSING_OF_LOWER_CITY_DRUID; break;
- case CLASS_PALADIN: spell_id = SPELL_BLESSING_OF_LOWER_CITY_PALADIN; break;
- case CLASS_PRIEST: spell_id = SPELL_BLESSING_OF_LOWER_CITY_PRIEST; break;
- case CLASS_SHAMAN: spell_id = SPELL_BLESSING_OF_LOWER_CITY_SHAMAN; break;
- default: return; // ignore for non-healing classes
+ case CLASS_DRUID:
+ spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID;
+ break;
+ case CLASS_PALADIN:
+ spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN;
+ break;
+ case CLASS_PRIEST:
+ spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST;
+ break;
+ case CLASS_SHAMAN:
+ spell_id = SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN;
+ break;
+ default:
+ return; // ignore for non-healing classes
}
Unit* caster = GetCaster();
caster->CastSpell(caster, spell_id, true);
@@ -165,7 +175,6 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to Blessing of Faith
OnEffectHitTarget += SpellEffectFn(spell_pal_blessing_of_faith_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
@@ -187,9 +196,9 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
{
PrepareAuraScript(spell_pal_blessing_of_sanctuary_AuraScript);
- bool Validate(SpellInfo const* /*entry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF))
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF))
return false;
return true;
}
@@ -198,13 +207,13 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
{
Unit* target = GetTarget();
if (Unit* caster = GetCaster())
- caster->CastSpell(target, PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, true);
+ caster->CastSpell(target, SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF, true);
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
- target->RemoveAura(PALADIN_SPELL_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID());
+ target->RemoveAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID());
}
void Register()
@@ -220,141 +229,63 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader
}
};
-// 63521 Guarded by The Light
-class spell_pal_guarded_by_the_light : public SpellScriptLoader
-{
- public:
- spell_pal_guarded_by_the_light() : SpellScriptLoader("spell_pal_guarded_by_the_light") { }
-
- class spell_pal_guarded_by_the_light_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_pal_guarded_by_the_light_SpellScript);
-
- bool Validate(SpellInfo const* /*spellEntry*/)
- {
- if (!sSpellMgr->GetSpellInfo(PALADIN_SPELL_DIVINE_PLEA))
- return false;
- return true;
- }
-
- void HandleScriptEffect(SpellEffIndex /*effIndex*/)
- {
- // Divine Plea
- if (Aura* aura = GetCaster()->GetAura(PALADIN_SPELL_DIVINE_PLEA))
- aura->RefreshDuration();
- }
-
- void Register()
- {
- OnEffectHitTarget += SpellEffectFn(spell_pal_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_pal_guarded_by_the_light_SpellScript();
- }
-};
-
-class spell_pal_holy_shock : public SpellScriptLoader
+// 64205 - Divine Sacrifice
+class spell_pal_divine_sacrifice : public SpellScriptLoader
{
public:
- spell_pal_holy_shock() : SpellScriptLoader("spell_pal_holy_shock") { }
+ spell_pal_divine_sacrifice() : SpellScriptLoader("spell_pal_divine_sacrifice") { }
- class spell_pal_holy_shock_SpellScript : public SpellScript
+ class spell_pal_divine_sacrifice_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_pal_holy_shock_SpellScript);
-
- bool Validate(SpellInfo const* spell)
- {
- if (!sSpellMgr->GetSpellInfo(PALADIN_SPELL_HOLY_SHOCK_R1))
- return false;
-
- // can't use other spell than holy shock due to spell_ranks dependency
- if (sSpellMgr->GetFirstSpellInChain(PALADIN_SPELL_HOLY_SHOCK_R1) != sSpellMgr->GetFirstSpellInChain(spell->Id))
- return false;
-
- uint8 rank = sSpellMgr->GetSpellRank(spell->Id);
- if (!sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank, true) || !sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, rank, true))
- return false;
+ PrepareAuraScript(spell_pal_divine_sacrifice_AuraScript);
- return true;
- }
+ uint32 groupSize, minHpPct;
+ int32 remainingAmount;
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ bool Load()
{
- Unit* caster = GetCaster();
- if (Unit* unitTarget = GetHitUnit())
- {
- uint8 rank = sSpellMgr->GetSpellRank(GetSpellInfo()->Id);
- if (caster->IsFriendlyTo(unitTarget))
- caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_HEALING, rank), true, 0);
- else
- caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(PALADIN_SPELL_HOLY_SHOCK_R1_DAMAGE, rank), true, 0);
- }
- }
- SpellCastResult CheckCast()
- {
- Unit* caster = GetCaster();
- if (Unit* target = GetExplTargetUnit())
+ if (Unit* caster = GetCaster())
{
- if (!caster->IsFriendlyTo(target))
+ if (caster->GetTypeId() == TYPEID_PLAYER)
{
- if (!caster->IsValidAttackTarget(target))
- return SPELL_FAILED_BAD_TARGETS;
-
- if (!caster->isInFront(target))
- return SPELL_FAILED_UNIT_NOT_INFRONT;
+ if (caster->ToPlayer()->GetGroup())
+ groupSize = caster->ToPlayer()->GetGroup()->GetMembersCount();
+ else
+ groupSize = 1;
}
- }
- else
- return SPELL_FAILED_BAD_TARGETS;
- return SPELL_CAST_OK;
- }
+ else
+ return false;
- void Register()
- {
- // add dummy effect spell handler to Holy Shock
- OnCheckCast += SpellCheckCastFn(spell_pal_holy_shock_SpellScript::CheckCast);
- OnEffectHitTarget += SpellEffectFn(spell_pal_holy_shock_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ remainingAmount = (caster->CountPctFromMaxHealth(GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster)) * groupSize);
+ minHpPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster);
+ return true;
+ }
+ return false;
}
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_pal_holy_shock_SpellScript();
- }
-};
-class spell_pal_judgement_of_command : public SpellScriptLoader
-{
- public:
- spell_pal_judgement_of_command() : SpellScriptLoader("spell_pal_judgement_of_command") { }
-
- class spell_pal_judgement_of_command_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_pal_judgement_of_command_SpellScript)
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
{
- if (Unit* unitTarget = GetHitUnit())
- if (SpellInfo const* spell_proto = sSpellMgr->GetSpellInfo(GetEffectValue()))
- GetCaster()->CastSpell(unitTarget, spell_proto, true, NULL);
+ remainingAmount -= splitAmount;
+ // break when absorbed everything it could, or if the casters hp drops below 20%
+ if (Unit* caster = GetCaster())
+ if (remainingAmount <= 0 || (caster->GetHealthPct() < minHpPct))
+ caster->RemoveAura(SPELL_PALADIN_DIVINE_SACRIFICE);
}
void Register()
{
- // add dummy effect spell handler to Judgement of Command
- OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_of_command_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectSplit += AuraEffectSplitFn(spell_pal_divine_sacrifice_AuraScript::Split, EFFECT_0);
}
};
- SpellScript* GetSpellScript() const
+ AuraScript* GetAuraScript() const
{
- return new spell_pal_judgement_of_command_SpellScript();
+ return new spell_pal_divine_sacrifice_AuraScript();
}
};
+// 53385 - Divine Storm
class spell_pal_divine_storm : public SpellScriptLoader
{
public:
@@ -366,9 +297,9 @@ class spell_pal_divine_storm : public SpellScriptLoader
uint32 healPct;
- bool Validate(SpellInfo const* /* spell */)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM_DUMMY))
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_DUMMY))
return false;
return true;
}
@@ -382,7 +313,7 @@ class spell_pal_divine_storm : public SpellScriptLoader
void TriggerHeal()
{
Unit* caster = GetCaster();
- caster->CastCustomSpell(SPELL_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * healPct) / 100, caster, true);
+ caster->CastCustomSpell(SPELL_PALADIN_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * healPct) / 100, caster, true);
}
void Register()
@@ -397,6 +328,7 @@ class spell_pal_divine_storm : public SpellScriptLoader
}
};
+// 54171 - Divine Storm (Dummy)
class spell_pal_divine_storm_dummy : public SpellScriptLoader
{
public:
@@ -406,9 +338,9 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader
{
PrepareSpellScript(spell_pal_divine_storm_dummy_SpellScript);
- bool Validate(SpellInfo const* /* spell */)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM_HEAL))
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_HEAL))
return false;
return true;
}
@@ -418,13 +350,13 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader
_targetCount = targetList.size();
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
if (!_targetCount || ! GetHitUnit())
return;
int32 heal = GetEffectValue() / _targetCount;
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_DIVINE_STORM_HEAL, &heal, NULL, NULL, true);
+ GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_PALADIN_DIVINE_STORM_HEAL, &heal, NULL, NULL, true);
}
private:
uint32 _targetCount;
@@ -442,229 +374,314 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader
}
};
-class spell_pal_lay_on_hands : public SpellScriptLoader
+// 33695 - Exorcism and Holy Wrath Damage
+class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader
{
public:
- spell_pal_lay_on_hands() : SpellScriptLoader("spell_pal_lay_on_hands") { }
+ spell_pal_exorcism_and_holy_wrath_damage() : SpellScriptLoader("spell_pal_exorcism_and_holy_wrath_damage") { }
- class spell_pal_lay_on_hands_SpellScript : public SpellScript
+ class spell_pal_exorcism_and_holy_wrath_damage_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_pal_lay_on_hands_SpellScript);
+ PrepareAuraScript(spell_pal_exorcism_and_holy_wrath_damage_AuraScript);
- bool Validate(SpellInfo const* /*spell*/)
+ void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_FORBEARANCE))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_AVENGING_WRATH_MARKER))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_IMMUNE_SHIELD_MARKER))
+ if (!spellMod)
+ {
+ spellMod = new SpellModifier(aurEff->GetBase());
+ spellMod->op = SPELLMOD_DAMAGE;
+ spellMod->type = SPELLMOD_FLAT;
+ spellMod->spellId = GetId();
+ spellMod->mask[1] = 0x200002;
+ }
+
+ spellMod->value = aurEff->GetAmount();
+ }
+
+ void Register()
+ {
+ DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_pal_exorcism_and_holy_wrath_damage_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_pal_exorcism_and_holy_wrath_damage_AuraScript();
+ }
+};
+
+// 63521 - Guarded by The Light
+class spell_pal_guarded_by_the_light : public SpellScriptLoader
+{
+ public:
+ spell_pal_guarded_by_the_light() : SpellScriptLoader("spell_pal_guarded_by_the_light") { }
+
+ class spell_pal_guarded_by_the_light_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_pal_guarded_by_the_light_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_PLEA))
return false;
return true;
}
- SpellCastResult CheckCast()
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
{
- Unit* caster = GetCaster();
- if (Unit* target = GetExplTargetUnit())
- if (caster == target)
- if (target->HasAura(SPELL_FORBEARANCE) || target->HasAura(SPELL_AVENGING_WRATH_MARKER) || target->HasAura(SPELL_IMMUNE_SHIELD_MARKER))
- return SPELL_FAILED_TARGET_AURASTATE;
+ // Divine Plea
+ if (Aura* aura = GetCaster()->GetAura(SPELL_PALADIN_DIVINE_PLEA))
+ aura->RefreshDuration();
+ }
- return SPELL_CAST_OK;
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_pal_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
+ };
- void HandleScript()
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_pal_guarded_by_the_light_SpellScript();
+ }
+};
+
+// 6940 - Hand of Sacrifice
+class spell_pal_hand_of_sacrifice : public SpellScriptLoader
+{
+ public:
+ spell_pal_hand_of_sacrifice() : SpellScriptLoader("spell_pal_hand_of_sacrifice") { }
+
+ class spell_pal_hand_of_sacrifice_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_pal_hand_of_sacrifice_AuraScript);
+
+ int32 remainingAmount;
+
+ bool Load()
{
- Unit* caster = GetCaster();
- if (caster == GetHitUnit())
+ if (Unit* caster = GetCaster())
+ {
+ remainingAmount = caster->GetMaxHealth();
+ return true;
+ }
+ return false;
+ }
+
+ void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
+ {
+ remainingAmount -= splitAmount;
+
+ if (remainingAmount <= 0)
{
- caster->CastSpell(caster, SPELL_FORBEARANCE, true);
- caster->CastSpell(caster, SPELL_AVENGING_WRATH_MARKER, true);
- caster->CastSpell(caster, SPELL_IMMUNE_SHIELD_MARKER, true);
+ GetTarget()->RemoveAura(SPELL_PALADIN_HAND_OF_SACRIFICE);
}
}
void Register()
{
- OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands_SpellScript::CheckCast);
- AfterHit += SpellHitFn(spell_pal_lay_on_hands_SpellScript::HandleScript);
+ OnEffectSplit += AuraEffectSplitFn(spell_pal_hand_of_sacrifice_AuraScript::Split, EFFECT_0);
}
};
- SpellScript* GetSpellScript() const
+ AuraScript* GetAuraScript() const
{
- return new spell_pal_lay_on_hands_SpellScript();
+ return new spell_pal_hand_of_sacrifice_AuraScript();
}
};
-class spell_pal_righteous_defense : public SpellScriptLoader
+// -20473 - Holy Shock
+class spell_pal_holy_shock : public SpellScriptLoader
{
public:
- spell_pal_righteous_defense() : SpellScriptLoader("spell_pal_righteous_defense") { }
+ spell_pal_holy_shock() : SpellScriptLoader("spell_pal_holy_shock") { }
- class spell_pal_righteous_defense_SpellScript : public SpellScript
+ class spell_pal_holy_shock_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_pal_righteous_defense_SpellScript);
+ PrepareSpellScript(spell_pal_holy_shock_SpellScript);
- SpellCastResult CheckCast()
+ bool Validate(SpellInfo const* spell)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_SHOCK_R1))
+ return false;
+
+ // can't use other spell than holy shock due to spell_ranks dependency
+ if (sSpellMgr->GetFirstSpellInChain(SPELL_PALADIN_HOLY_SHOCK_R1) != sSpellMgr->GetFirstSpellInChain(spell->Id))
+ return false;
+
+ uint8 rank = sSpellMgr->GetSpellRank(spell->Id);
+ if (!sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE, rank, true) || !sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_HEALING, rank, true))
+ return false;
+
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
Unit* caster = GetCaster();
- if (caster->GetTypeId() != TYPEID_PLAYER)
- return SPELL_FAILED_DONT_REPORT;
+ if (Unit* unitTarget = GetHitUnit())
+ {
+ uint8 rank = sSpellMgr->GetSpellRank(GetSpellInfo()->Id);
+ if (caster->IsFriendlyTo(unitTarget))
+ caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_HEALING, rank), true, 0);
+ else
+ caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE, rank), true, 0);
+ }
+ }
+ SpellCastResult CheckCast()
+ {
+ Unit* caster = GetCaster();
if (Unit* target = GetExplTargetUnit())
{
- if (!target->IsFriendlyTo(caster) || target->getAttackers().empty())
- return SPELL_FAILED_BAD_TARGETS;
+ if (!caster->IsFriendlyTo(target))
+ {
+ if (!caster->IsValidAttackTarget(target))
+ return SPELL_FAILED_BAD_TARGETS;
+
+ if (!caster->isInFront(target))
+ return SPELL_FAILED_UNIT_NOT_INFRONT;
+ }
}
else
return SPELL_FAILED_BAD_TARGETS;
-
return SPELL_CAST_OK;
}
void Register()
{
- OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast);
+ OnCheckCast += SpellCheckCastFn(spell_pal_holy_shock_SpellScript::CheckCast);
+ OnEffectHitTarget += SpellEffectFn(spell_pal_holy_shock_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_pal_righteous_defense_SpellScript();
+ return new spell_pal_holy_shock_SpellScript();
}
};
-class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader
+// 20425 - Judgement of Command
+class spell_pal_judgement_of_command : public SpellScriptLoader
{
public:
- spell_pal_exorcism_and_holy_wrath_damage() : SpellScriptLoader("spell_pal_exorcism_and_holy_wrath_damage") { }
+ spell_pal_judgement_of_command() : SpellScriptLoader("spell_pal_judgement_of_command") { }
- class spell_pal_exorcism_and_holy_wrath_damage_AuraScript : public AuraScript
+ class spell_pal_judgement_of_command_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_pal_exorcism_and_holy_wrath_damage_AuraScript);
+ PrepareSpellScript(spell_pal_judgement_of_command_SpellScript);
- void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (!spellMod)
- {
- spellMod = new SpellModifier(aurEff->GetBase());
- spellMod->op = SPELLMOD_DAMAGE;
- spellMod->type = SPELLMOD_FLAT;
- spellMod->spellId = GetId();
- spellMod->mask[1] = 0x200002;
- }
-
- spellMod->value = aurEff->GetAmount();
+ if (Unit* unitTarget = GetHitUnit())
+ if (SpellInfo const* spell_proto = sSpellMgr->GetSpellInfo(GetEffectValue()))
+ GetCaster()->CastSpell(unitTarget, spell_proto, true, NULL);
}
void Register()
{
- DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_pal_exorcism_and_holy_wrath_damage_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_of_command_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_pal_exorcism_and_holy_wrath_damage_AuraScript();
+ return new spell_pal_judgement_of_command_SpellScript();
}
};
-class spell_pal_hand_of_sacrifice : public SpellScriptLoader
+// -633 - Lay on Hands
+class spell_pal_lay_on_hands : public SpellScriptLoader
{
public:
- spell_pal_hand_of_sacrifice() : SpellScriptLoader("spell_pal_hand_of_sacrifice") { }
+ spell_pal_lay_on_hands() : SpellScriptLoader("spell_pal_lay_on_hands") { }
- class spell_pal_hand_of_sacrifice_AuraScript : public AuraScript
+ class spell_pal_lay_on_hands_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_pal_hand_of_sacrifice_AuraScript);
-
- int32 remainingAmount;
+ PrepareSpellScript(spell_pal_lay_on_hands_SpellScript);
- bool Load()
+ bool Validate(SpellInfo const* /*spell*/)
{
- if (Unit* caster = GetCaster())
- {
- remainingAmount = caster->GetMaxHealth();
- return true;
- }
- return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_FORBEARANCE))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_AVENGING_WRATH_MARKER))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_IMMUNE_SHIELD_MARKER))
+ return false;
+ return true;
}
- void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
+ SpellCastResult CheckCast()
{
- remainingAmount -= splitAmount;
+ Unit* caster = GetCaster();
+ if (Unit* target = GetExplTargetUnit())
+ if (caster == target)
+ if (target->HasAura(SPELL_PALADIN_FORBEARANCE) || target->HasAura(SPELL_PALADIN_AVENGING_WRATH_MARKER) || target->HasAura(SPELL_PALADIN_IMMUNE_SHIELD_MARKER))
+ return SPELL_FAILED_TARGET_AURASTATE;
- if (remainingAmount <= 0)
+ return SPELL_CAST_OK;
+ }
+
+ void HandleScript()
+ {
+ Unit* caster = GetCaster();
+ if (caster == GetHitUnit())
{
- GetTarget()->RemoveAura(SPELL_HAND_OF_SACRIFICE);
+ caster->CastSpell(caster, SPELL_PALADIN_FORBEARANCE, true);
+ caster->CastSpell(caster, SPELL_PALADIN_AVENGING_WRATH_MARKER, true);
+ caster->CastSpell(caster, SPELL_PALADIN_IMMUNE_SHIELD_MARKER, true);
}
}
void Register()
{
- OnEffectSplit += AuraEffectSplitFn(spell_pal_hand_of_sacrifice_AuraScript::Split, EFFECT_0);
+ OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands_SpellScript::CheckCast);
+ AfterHit += SpellHitFn(spell_pal_lay_on_hands_SpellScript::HandleScript);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_pal_hand_of_sacrifice_AuraScript();
+ return new spell_pal_lay_on_hands_SpellScript();
}
};
-class spell_pal_divine_sacrifice : public SpellScriptLoader
+// 31789 - Righteous Defense
+class spell_pal_righteous_defense : public SpellScriptLoader
{
public:
- spell_pal_divine_sacrifice() : SpellScriptLoader("spell_pal_divine_sacrifice") { }
+ spell_pal_righteous_defense() : SpellScriptLoader("spell_pal_righteous_defense") { }
- class spell_pal_divine_sacrifice_AuraScript : public AuraScript
+ class spell_pal_righteous_defense_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_pal_divine_sacrifice_AuraScript);
-
- uint32 groupSize, minHpPct;
- int32 remainingAmount;
+ PrepareSpellScript(spell_pal_righteous_defense_SpellScript);
- bool Load()
+ SpellCastResult CheckCast()
{
+ Unit* caster = GetCaster();
+ if (caster->GetTypeId() != TYPEID_PLAYER)
+ return SPELL_FAILED_DONT_REPORT;
- if (Unit* caster = GetCaster())
+ if (Unit* target = GetExplTargetUnit())
{
- if (caster->GetTypeId() == TYPEID_PLAYER)
- {
- if (caster->ToPlayer()->GetGroup())
- groupSize = caster->ToPlayer()->GetGroup()->GetMembersCount();
- else
- groupSize = 1;
- }
- else
- return false;
-
- remainingAmount = (caster->CountPctFromMaxHealth(GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster)) * groupSize);
- minHpPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster);
- return true;
+ if (!target->IsFriendlyTo(caster) || target->getAttackers().empty())
+ return SPELL_FAILED_BAD_TARGETS;
}
- return false;
- }
+ else
+ return SPELL_FAILED_BAD_TARGETS;
- void Split(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & splitAmount)
- {
- remainingAmount -= splitAmount;
- // break when absorbed everything it could, or if the casters hp drops below 20%
- if (Unit* caster = GetCaster())
- if (remainingAmount <= 0 || (caster->GetHealthPct() < minHpPct))
- caster->RemoveAura(SPELL_DIVINE_SACRIFICE);
+ return SPELL_CAST_OK;
}
void Register()
{
- OnEffectSplit += AuraEffectSplitFn(spell_pal_divine_sacrifice_AuraScript::Split, EFFECT_0);
+ OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_pal_divine_sacrifice_AuraScript();
+ return new spell_pal_righteous_defense_SpellScript();
}
};
@@ -673,14 +690,14 @@ void AddSC_paladin_spell_scripts()
new spell_pal_ardent_defender();
new spell_pal_blessing_of_faith();
new spell_pal_blessing_of_sanctuary();
+ new spell_pal_divine_sacrifice();
+ new spell_pal_divine_storm();
+ new spell_pal_divine_storm_dummy();
+ new spell_pal_exorcism_and_holy_wrath_damage();
new spell_pal_guarded_by_the_light();
+ new spell_pal_hand_of_sacrifice();
new spell_pal_holy_shock();
new spell_pal_judgement_of_command();
- new spell_pal_divine_storm();
- new spell_pal_divine_storm_dummy();
new spell_pal_lay_on_hands();
new spell_pal_righteous_defense();
- new spell_pal_exorcism_and_holy_wrath_damage();
- new spell_pal_hand_of_sacrifice();
- new spell_pal_divine_sacrifice();
}
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 68a9337f8ea..1c416a0d28a 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -249,7 +249,6 @@ class spell_pri_penance : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to Penance
OnEffectHitTarget += SpellEffectFn(spell_pri_penance_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
OnCheckCast += SpellCheckCastFn(spell_pri_penance_SpellScript::CheckCast);
}
@@ -282,7 +281,6 @@ class spell_pri_prayer_of_mending_heal : public SpellScriptLoader
SetHitHeal(heal);
}
}
-
}
void Register()
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 9cd94e9c7d5..49a47a17392 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -25,6 +25,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
+#include "SpellAuras.h"
#include "Vehicle.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
@@ -1517,6 +1518,49 @@ class spell_q11010_q11102_q11023_q11008_check_fly_mount : public SpellScriptLoad
}
};
+enum SpellZuldrakRat
+{
+ SPELL_SUMMON_GORGED_LURKING_BASILISK = 50928
+};
+
+class spell_q12527_zuldrak_rat : public SpellScriptLoader
+{
+ public:
+ spell_q12527_zuldrak_rat() : SpellScriptLoader("spell_q12527_zuldrak_rat") { }
+
+ class spell_q12527_zuldrak_rat_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q12527_zuldrak_rat_SpellScript);
+
+ bool Validate(SpellInfo const* /*spell*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_GORGED_LURKING_BASILISK))
+ return false;
+ return true;
+ }
+
+ void HandleScriptEffect(SpellEffIndex /* effIndex */)
+ {
+ if (GetHitAura() && GetHitAura()->GetStackAmount() >= GetSpellInfo()->StackAmount)
+ {
+ GetHitUnit()->CastSpell((Unit*) NULL, SPELL_SUMMON_GORGED_LURKING_BASILISK, true);
+ if (Creature* basilisk = GetHitUnit()->ToCreature())
+ basilisk->DespawnOrUnsummon();
+ }
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q12527_zuldrak_rat_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_q12527_zuldrak_rat_SpellScript();
+ }
+};
+
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -1554,4 +1598,5 @@ void AddSC_quest_spell_scripts()
new spell_q11010_q11102_q11023_choose_loc();
new spell_q11010_q11102_q11023_q11008_check_fly_mount();
new spell_q12372_azure_on_death_force_whisper();
+ new spell_q12527_zuldrak_rat();
}
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp
index 01a4225cc00..70b677f5aaa 100644
--- a/src/server/scripts/Spells/spell_rogue.cpp
+++ b/src/server/scripts/Spells/spell_rogue.cpp
@@ -250,7 +250,7 @@ class spell_rog_preparation : public SpellScriptLoader
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_GLYPH_OF_PREPARATION))
return false;
@@ -292,7 +292,6 @@ class spell_rog_preparation : public SpellScriptLoader
void Register()
{
- // add dummy effect spell handler to Preparation
OnEffectHitTarget += SpellEffectFn(spell_rog_preparation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
@@ -348,35 +347,6 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader
}
};
-// 36554 - Shadowstep
-class spell_rog_shadowstep : public SpellScriptLoader
-{
- public:
- spell_rog_shadowstep() : SpellScriptLoader("spell_rog_shadowstep") { }
-
- class spell_rog_shadowstep_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_rog_shadowstep_SpellScript);
-
- SpellCastResult CheckCast()
- {
- if (GetCaster()->HasUnitState(UNIT_STATE_ROOT))
- return SPELL_FAILED_ROOTED;
- return SPELL_CAST_OK;
- }
-
- void Register()
- {
- OnCheckCast += SpellCheckCastFn(spell_rog_shadowstep_SpellScript::CheckCast);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_rog_shadowstep_SpellScript();
- }
-};
-
// 5938 - Shiv
class spell_rog_shiv : public SpellScriptLoader
{
@@ -425,6 +395,5 @@ void AddSC_rogue_spell_scripts()
new spell_rog_nerves_of_steel();
new spell_rog_preparation();
new spell_rog_prey_on_the_weak();
- new spell_rog_shadowstep();
new spell_rog_shiv();
}
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
index ff7c83b95a5..0d249953421 100644
--- a/src/server/scripts/Spells/spell_shaman.cpp
+++ b/src/server/scripts/Spells/spell_shaman.cpp
@@ -30,28 +30,69 @@
enum ShamanSpells
{
- SHAMAN_SPELL_GLYPH_OF_MANA_TIDE = 55441,
- SHAMAN_SPELL_MANA_TIDE_TOTEM = 39609,
- SHAMAN_SPELL_FIRE_NOVA_R1 = 1535,
- SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1 = 8349,
- SHAMAN_SPELL_SATED = 57724,
- SHAMAN_SPELL_EXHAUSTION = 57723,
+ SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC = 52752,
+ SPELL_SHAMAN_BIND_SIGHT = 6277,
+ SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT = 52025,
+ SPELL_SHAMAN_EXHAUSTION = 57723,
+ SPELL_SHAMAN_FIRE_NOVA_R1 = 1535,
+ SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349,
+ SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM = 55456,
+ SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441,
+ SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480,
+ SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 64694,
+ SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE = 52032,
+ SPELL_SHAMAN_MANA_TIDE_TOTEM = 39609,
+ SPELL_SHAMAN_SATED = 57724,
+ SPELL_SHAMAN_STORM_EARTH_AND_FIRE = 51483,
+ SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB = 64695,
+ SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM = 6474,
+ SPELL_SHAMAN_TOTEM_EARTHEN_POWER = 59566,
+ SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL = 52042
+};
- SHAMAN_SPELL_STORM_EARTH_AND_FIRE = 51483,
- EARTHBIND_TOTEM_SPELL_EARTHGRAB = 64695,
+enum ShamanSpellIcons
+{
+ SHAMAN_ICON_ID_RESTORATIVE_TOTEMS = 338,
+ SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW = 3087
+};
- // For Earthen Power
- SHAMAN_TOTEM_SPELL_EARTHBIND_TOTEM = 6474,
- SHAMAN_TOTEM_SPELL_EARTHEN_POWER = 59566,
+// 52759 - Ancestral Awakening (Proc)
+class spell_sha_ancestral_awakening_proc : public SpellScriptLoader
+{
+ public:
+ spell_sha_ancestral_awakening_proc() : SpellScriptLoader("spell_sha_ancestral_awakening_proc") { }
- SHAMAN_BIND_SIGHT = 6277,
+ class spell_sha_ancestral_awakening_proc_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_sha_ancestral_awakening_proc_SpellScript);
- ICON_ID_SHAMAN_LAVA_FLOW = 3087,
- SHAMAN_LAVA_FLOWS_R1 = 51480,
- SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 64694,
+ bool Validate(SpellInfo const* /*spellInfo*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC))
+ return false;
+ return true;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ int32 damage = GetEffectValue();
+ if (GetHitUnit())
+ GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, &damage, NULL, NULL, true);
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_sha_ancestral_awakening_proc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_sha_ancestral_awakening_proc_SpellScript();
+ }
};
-// 51474 - Astral shift
+// 51474 - Astral Shift
class spell_sha_astral_shift : public SpellScriptLoader
{
public:
@@ -95,115 +136,136 @@ class spell_sha_astral_shift : public SpellScriptLoader
}
};
-// 1535 Fire Nova
-class spell_sha_fire_nova : public SpellScriptLoader
+// 2825 - Bloodlust
+class spell_sha_bloodlust : public SpellScriptLoader
{
public:
- spell_sha_fire_nova() : SpellScriptLoader("spell_sha_fire_nova") { }
+ spell_sha_bloodlust() : SpellScriptLoader("spell_sha_bloodlust") { }
- class spell_sha_fire_nova_SpellScript : public SpellScript
+ class spell_sha_bloodlust_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_fire_nova_SpellScript);
+ PrepareSpellScript(spell_sha_bloodlust_SpellScript);
- bool Validate(SpellInfo const* spellEntry)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SHAMAN_SPELL_FIRE_NOVA_R1) || sSpellMgr->GetFirstSpellInChain(SHAMAN_SPELL_FIRE_NOVA_R1) != sSpellMgr->GetFirstSpellInChain(spellEntry->Id))
- return false;
-
- uint8 rank = sSpellMgr->GetSpellRank(spellEntry->Id);
- if (!sSpellMgr->GetSpellWithRank(SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1, rank, true))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED))
return false;
return true;
}
- SpellCastResult CheckFireTotem()
+ void RemoveInvalidTargets(std::list<WorldObject*>& targets)
{
- // fire totem
- if (!GetCaster()->m_SummonSlot[1])
- {
- SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_HAVE_FIRE_TOTEM);
- return SPELL_FAILED_CUSTOM_ERROR;
- }
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_SATED));
+ }
- return SPELL_CAST_OK;
+ void ApplyDebuff()
+ {
+ if (Unit* target = GetHitUnit())
+ target->CastSpell(target, SPELL_SHAMAN_SATED, true);
}
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ void Register()
{
- if (Unit* caster = GetCaster())
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_2, TARGET_UNIT_CASTER_AREA_RAID);
+ AfterHit += SpellHitFn(spell_sha_bloodlust_SpellScript::ApplyDebuff);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_sha_bloodlust_SpellScript();
+ }
+};
+
+// -1064 - Chain Heal
+class spell_sha_chain_heal : public SpellScriptLoader
+{
+ public:
+ spell_sha_chain_heal() : SpellScriptLoader("spell_sha_chain_heal") { }
+
+ class spell_sha_chain_heal_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_sha_chain_heal_SpellScript);
+
+ bool Load()
+ {
+ firstHeal = true;
+ riptide = false;
+ return true;
+ }
+
+ void HandleHeal(SpellEffIndex /*effIndex*/)
+ {
+ if (firstHeal)
{
- uint8 rank = sSpellMgr->GetSpellRank(GetSpellInfo()->Id);
- if (uint32 spellId = sSpellMgr->GetSpellWithRank(SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1, rank))
+ // Check if the target has Riptide
+ if (AuraEffect* aurEff = GetHitUnit()->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_SHAMAN, 0, 0, 0x10, GetCaster()->GetGUID()))
{
- Creature* totem = caster->GetMap()->GetCreature(caster->m_SummonSlot[1]);
- if (totem && totem->isTotem())
- caster->CastSpell(totem, spellId, true);
+ riptide = true;
+ // Consume it
+ GetHitUnit()->RemoveAura(aurEff->GetBase());
}
+ firstHeal = false;
}
+ // Riptide increases the Chain Heal effect by 25%
+ if (riptide)
+ SetHitHeal(GetHitHeal() * 1.25f);
}
void Register()
{
- OnCheckCast += SpellCheckCastFn(spell_sha_fire_nova_SpellScript::CheckFireTotem);
- OnEffectHitTarget += SpellEffectFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_sha_chain_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
}
+
+ bool firstHeal;
+ bool riptide;
};
SpellScript* GetSpellScript() const
{
- return new spell_sha_fire_nova_SpellScript();
+ return new spell_sha_chain_heal_SpellScript();
}
};
-// 39610 Mana Tide Totem
-class spell_sha_mana_tide_totem : public SpellScriptLoader
+// 8171 - Cleansing Totem (Pulse)
+class spell_sha_cleansing_totem_pulse : public SpellScriptLoader
{
public:
- spell_sha_mana_tide_totem() : SpellScriptLoader("spell_sha_mana_tide_totem") { }
+ spell_sha_cleansing_totem_pulse() : SpellScriptLoader("spell_sha_cleansing_totem_pulse") { }
- class spell_sha_mana_tide_totem_SpellScript : public SpellScript
+ class spell_sha_cleansing_totem_pulse_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_mana_tide_totem_SpellScript);
+ PrepareSpellScript(spell_sha_cleansing_totem_pulse_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SHAMAN_SPELL_GLYPH_OF_MANA_TIDE) || !sSpellMgr->GetSpellInfo(SHAMAN_SPELL_MANA_TIDE_TOTEM))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT))
return false;
return true;
}
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (Unit* caster = GetCaster())
- if (Unit* unitTarget = GetHitUnit())
- {
- if (unitTarget->getPowerType() == POWER_MANA)
- {
- int32 effValue = GetEffectValue();
- // Glyph of Mana Tide
- if (Unit* owner = caster->GetOwner())
- if (AuraEffect* dummy = owner->GetAuraEffect(SHAMAN_SPELL_GLYPH_OF_MANA_TIDE, 0))
- effValue += dummy->GetAmount();
- // Regenerate 6% of Total Mana Every 3 secs
- int32 effBasePoints0 = int32(CalculatePct(unitTarget->GetMaxPower(POWER_MANA), effValue));
- caster->CastCustomSpell(unitTarget, SHAMAN_SPELL_MANA_TIDE_TOTEM, &effBasePoints0, NULL, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
- }
- }
+ int32 bp = 1;
+ if (GetCaster() && GetHitUnit() && GetOriginalCaster())
+ GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT, NULL, &bp, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_sha_mana_tide_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_sha_cleansing_totem_pulse_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_sha_mana_tide_totem_SpellScript();
+ return new spell_sha_cleansing_totem_pulse_SpellScript();
}
};
-// 6474 - Earthbind Totem - Fix Talent:Earthen Power
+// 6474 - Earthbind Totem - Fix Talent: Earthen Power
class spell_sha_earthbind_totem : public SpellScriptLoader
{
public:
@@ -213,9 +275,9 @@ class spell_sha_earthbind_totem : public SpellScriptLoader
{
PrepareAuraScript(spell_sha_earthbind_totem_AuraScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SHAMAN_TOTEM_SPELL_EARTHBIND_TOTEM) || !sSpellMgr->GetSpellInfo(SHAMAN_TOTEM_SPELL_EARTHEN_POWER))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHEN_POWER))
return false;
return true;
}
@@ -227,7 +289,7 @@ class spell_sha_earthbind_totem : public SpellScriptLoader
if (Player* owner = GetCaster()->GetCharmerOrOwnerPlayerOrPlayerItself())
if (AuraEffect* aur = owner->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, 2289, 0))
if (roll_chance_i(aur->GetBaseAmount()))
- GetTarget()->CastSpell((Unit*)NULL, SHAMAN_TOTEM_SPELL_EARTHEN_POWER, true);
+ GetTarget()->CastSpell((Unit*)NULL, SPELL_SHAMAN_TOTEM_EARTHEN_POWER, true);
}
void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -238,10 +300,10 @@ class spell_sha_earthbind_totem : public SpellScriptLoader
if (!owner)
return;
// Storm, Earth and Fire
- if (AuraEffect* aurEff = owner->GetAuraEffectOfRankedSpell(SHAMAN_SPELL_STORM_EARTH_AND_FIRE, EFFECT_1))
+ if (AuraEffect* aurEff = owner->GetAuraEffectOfRankedSpell(SPELL_SHAMAN_STORM_EARTH_AND_FIRE, EFFECT_1))
{
if (roll_chance_i(aurEff->GetAmount()))
- GetCaster()->CastSpell(GetCaster(), EARTHBIND_TOTEM_SPELL_EARTHGRAB, false);
+ GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB, false);
}
}
@@ -275,6 +337,7 @@ class EarthenPowerTargetSelector
}
};
+// 59566 - Earthen Power
class spell_sha_earthen_power : public SpellScriptLoader
{
public:
@@ -301,177 +364,112 @@ class spell_sha_earthen_power : public SpellScriptLoader
}
};
-class spell_sha_bloodlust : public SpellScriptLoader
+// -1535 - Fire Nova
+class spell_sha_fire_nova : public SpellScriptLoader
{
public:
- spell_sha_bloodlust() : SpellScriptLoader("spell_sha_bloodlust") { }
+ spell_sha_fire_nova() : SpellScriptLoader("spell_sha_fire_nova") { }
- class spell_sha_bloodlust_SpellScript : public SpellScript
+ class spell_sha_fire_nova_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_bloodlust_SpellScript);
+ PrepareSpellScript(spell_sha_fire_nova_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* spellInfo)
{
- if (!sSpellMgr->GetSpellInfo(SHAMAN_SPELL_SATED))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_FIRE_NOVA_R1) || sSpellMgr->GetFirstSpellInChain(SPELL_SHAMAN_FIRE_NOVA_R1) != sSpellMgr->GetFirstSpellInChain(spellInfo->Id))
return false;
- return true;
- }
- void RemoveInvalidTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(Trinity::UnitAuraCheck(true, SHAMAN_SPELL_SATED));
- }
-
- void ApplyDebuff()
- {
- if (Unit* target = GetHitUnit())
- target->CastSpell(target, SHAMAN_SPELL_SATED, true);
- }
-
- void Register()
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_2, TARGET_UNIT_CASTER_AREA_RAID);
- AfterHit += SpellHitFn(spell_sha_bloodlust_SpellScript::ApplyDebuff);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_sha_bloodlust_SpellScript();
- }
-};
-
-class spell_sha_heroism : public SpellScriptLoader
-{
- public:
- spell_sha_heroism() : SpellScriptLoader("spell_sha_heroism") { }
-
- class spell_sha_heroism_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_sha_heroism_SpellScript);
-
- bool Validate(SpellInfo const* /*spellEntry*/)
- {
- if (!sSpellMgr->GetSpellInfo(SHAMAN_SPELL_EXHAUSTION))
+ uint8 rank = sSpellMgr->GetSpellRank(spellInfo->Id);
+ if (!sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1, rank, true))
return false;
return true;
}
- void RemoveInvalidTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(Trinity::UnitAuraCheck(true, SHAMAN_SPELL_EXHAUSTION));
- }
-
- void ApplyDebuff()
- {
- if (Unit* target = GetHitUnit())
- target->CastSpell(target, SHAMAN_SPELL_EXHAUSTION, true);
- }
-
- void Register()
+ SpellCastResult CheckFireTotem()
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_2, TARGET_UNIT_CASTER_AREA_RAID);
- AfterHit += SpellHitFn(spell_sha_heroism_SpellScript::ApplyDebuff);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_sha_heroism_SpellScript();
- }
-};
-
-enum AncestralAwakeningProc
-{
- SPELL_ANCESTRAL_AWAKENING_PROC = 52752,
-};
-
-class spell_sha_ancestral_awakening_proc : public SpellScriptLoader
-{
- public:
- spell_sha_ancestral_awakening_proc() : SpellScriptLoader("spell_sha_ancestral_awakening_proc") { }
-
- class spell_sha_ancestral_awakening_proc_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_sha_ancestral_awakening_proc_SpellScript);
+ // fire totem
+ if (!GetCaster()->m_SummonSlot[1])
+ {
+ SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_HAVE_FIRE_TOTEM);
+ return SPELL_FAILED_CUSTOM_ERROR;
+ }
- bool Validate(SpellInfo const* /*SpellEntry*/)
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_ANCESTRAL_AWAKENING_PROC))
- return false;
- return true;
+ return SPELL_CAST_OK;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- int32 damage = GetEffectValue();
- if (GetCaster() && GetHitUnit())
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_ANCESTRAL_AWAKENING_PROC, &damage, NULL, NULL, true);
+ if (Unit* caster = GetCaster())
+ {
+ uint8 rank = sSpellMgr->GetSpellRank(GetSpellInfo()->Id);
+ if (uint32 spellId = sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1, rank))
+ {
+ Creature* totem = caster->GetMap()->GetCreature(caster->m_SummonSlot[1]);
+ if (totem && totem->isTotem())
+ caster->CastSpell(totem, spellId, true);
+ }
+ }
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_sha_ancestral_awakening_proc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnCheckCast += SpellCheckCastFn(spell_sha_fire_nova_SpellScript::CheckFireTotem);
+ OnEffectHitTarget += SpellEffectFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_sha_ancestral_awakening_proc_SpellScript();
+ return new spell_sha_fire_nova_SpellScript();
}
};
-enum CleansingTotemPulse
-{
- SPELL_CLEANSING_TOTEM_EFFECT = 52025,
-};
-
-class spell_sha_cleansing_totem_pulse : public SpellScriptLoader
+// -8050 - Flame Shock
+class spell_sha_flame_shock : public SpellScriptLoader
{
public:
- spell_sha_cleansing_totem_pulse() : SpellScriptLoader("spell_sha_cleansing_totem_pulse") { }
+ spell_sha_flame_shock() : SpellScriptLoader("spell_sha_flame_shock") { }
- class spell_sha_cleansing_totem_pulse_SpellScript : public SpellScript
+ class spell_sha_flame_shock_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_sha_cleansing_totem_pulse_SpellScript);
+ PrepareAuraScript(spell_sha_flame_shock_AuraScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
+ bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_CLEANSING_TOTEM_EFFECT))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_R1))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDispel(DispelInfo* /*dispelInfo*/)
{
- int32 bp = 1;
- if (GetCaster() && GetHitUnit() && GetOriginalCaster())
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_CLEANSING_TOTEM_EFFECT, NULL, &bp, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
+ if (Unit* caster = GetCaster())
+ // Lava Flows
+ if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW, EFFECT_0))
+ {
+ if (sSpellMgr->GetFirstSpellInChain(SPELL_SHAMAN_LAVA_FLOWS_R1) != sSpellMgr->GetFirstSpellInChain(aurEff->GetId()))
+ return;
+
+ uint8 rank = sSpellMgr->GetSpellRank(aurEff->GetId());
+ caster->CastSpell(caster, sSpellMgr->GetSpellWithRank(SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1, rank), true);
+ }
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_sha_cleansing_totem_pulse_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ AfterDispel += AuraDispelFn(spell_sha_flame_shock_AuraScript::HandleDispel);
}
};
- SpellScript* GetSpellScript() const
+ AuraScript* GetAuraScript() const
{
- return new spell_sha_cleansing_totem_pulse_SpellScript();
+ return new spell_sha_flame_shock_AuraScript();
}
};
-enum HealingStreamTotem
-{
- SPELL_GLYPH_OF_HEALING_STREAM_TOTEM = 55456,
- ICON_ID_RESTORATIVE_TOTEMS = 338,
- SPELL_HEALING_STREAM_TOTEM_HEAL = 52042,
-};
-
+// 52041, 52046, 52047, 52048, 52049, 52050, 58759, 58760, 58761 - Healing Stream Totem
class spell_sha_healing_stream_totem : public SpellScriptLoader
{
public:
@@ -481,14 +479,14 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader
{
PrepareSpellScript(spell_sha_healing_stream_totem_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_GLYPH_OF_HEALING_STREAM_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_HEALING_STREAM_TOTEM_HEAL))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
int32 damage = GetEffectValue();
SpellInfo const* triggeringSpell = GetTriggeringSpell();
@@ -501,16 +499,16 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader
damage = int32(owner->SpellHealingBonusDone(target, triggeringSpell, damage, HEAL));
// Restorative Totems
- if (AuraEffect* dummy = owner->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, ICON_ID_RESTORATIVE_TOTEMS, 1))
+ if (AuraEffect* dummy = owner->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_RESTORATIVE_TOTEMS, 1))
AddPct(damage, dummy->GetAmount());
// Glyph of Healing Stream Totem
- if (AuraEffect const* aurEff = owner->GetAuraEffect(SPELL_GLYPH_OF_HEALING_STREAM_TOTEM, EFFECT_0))
+ if (AuraEffect const* aurEff = owner->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM, EFFECT_0))
AddPct(damage, aurEff->GetAmount());
damage = int32(target->SpellHealingBonusTaken(owner, triggeringSpell, damage, HEAL));
}
- caster->CastCustomSpell(target, SPELL_HEALING_STREAM_TOTEM_HEAL, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID());
+ caster->CastCustomSpell(target, SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID());
}
}
@@ -526,49 +524,50 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader
}
};
-enum ManaSpringTotem
-{
- SPELL_MANA_SPRING_TOTEM_ENERGIZE = 52032,
-};
-
-class spell_sha_mana_spring_totem : public SpellScriptLoader
+// 32182 - Heroism
+class spell_sha_heroism : public SpellScriptLoader
{
public:
- spell_sha_mana_spring_totem() : SpellScriptLoader("spell_sha_mana_spring_totem") { }
+ spell_sha_heroism() : SpellScriptLoader("spell_sha_heroism") { }
- class spell_sha_mana_spring_totem_SpellScript : public SpellScript
+ class spell_sha_heroism_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_mana_spring_totem_SpellScript);
+ PrepareSpellScript(spell_sha_heroism_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_MANA_SPRING_TOTEM_ENERGIZE))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void RemoveInvalidTargets(std::list<WorldObject*>& targets)
+ {
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_EXHAUSTION));
+ }
+
+ void ApplyDebuff()
{
- int32 damage = GetEffectValue();
if (Unit* target = GetHitUnit())
- if (Unit* caster = GetCaster())
- if (target->getPowerType() == POWER_MANA)
- caster->CastCustomSpell(target, SPELL_MANA_SPRING_TOTEM_ENERGIZE, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID());
+ target->CastSpell(target, SPELL_SHAMAN_EXHAUSTION, true);
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_sha_mana_spring_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_2, TARGET_UNIT_CASTER_AREA_RAID);
+ AfterHit += SpellHitFn(spell_sha_heroism_SpellScript::ApplyDebuff);
}
-
};
SpellScript* GetSpellScript() const
{
- return new spell_sha_mana_spring_totem_SpellScript();
+ return new spell_sha_heroism_SpellScript();
}
};
+// 60103 - Lava Lash
class spell_sha_lava_lash : public SpellScriptLoader
{
public:
@@ -583,7 +582,7 @@ class spell_sha_lava_lash : public SpellScriptLoader
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
if (Player* caster = GetCaster()->ToPlayer())
{
@@ -612,100 +611,94 @@ class spell_sha_lava_lash : public SpellScriptLoader
}
};
-// 1064 Chain Heal
-class spell_sha_chain_heal : public SpellScriptLoader
+// 52031, 52033, 52034, 52035, 52036, 58778, 58779, 58780 - Mana Spring Totem
+class spell_sha_mana_spring_totem : public SpellScriptLoader
{
public:
- spell_sha_chain_heal() : SpellScriptLoader("spell_sha_chain_heal") { }
+ spell_sha_mana_spring_totem() : SpellScriptLoader("spell_sha_mana_spring_totem") { }
- class spell_sha_chain_heal_SpellScript : public SpellScript
+ class spell_sha_mana_spring_totem_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_sha_chain_heal_SpellScript);
+ PrepareSpellScript(spell_sha_mana_spring_totem_SpellScript);
- bool Load()
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- firstHeal = true;
- riptide = false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE))
+ return false;
return true;
}
- void HandleHeal(SpellEffIndex /*effIndex*/)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (firstHeal)
- {
- // Check if the target has Riptide
- if (AuraEffect* aurEff = GetHitUnit()->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_SHAMAN, 0, 0, 0x10, GetCaster()->GetGUID()))
- {
- riptide = true;
- // Consume it
- GetHitUnit()->RemoveAura(aurEff->GetBase());
- }
- firstHeal = false;
- }
- // Riptide increases the Chain Heal effect by 25%
- if (riptide)
- SetHitHeal(GetHitHeal() * 1.25f);
+ int32 damage = GetEffectValue();
+ if (Unit* target = GetHitUnit())
+ if (Unit* caster = GetCaster())
+ if (target->getPowerType() == POWER_MANA)
+ caster->CastCustomSpell(target, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID());
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_sha_chain_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
+ OnEffectHitTarget += SpellEffectFn(spell_sha_mana_spring_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
- bool firstHeal;
- bool riptide;
};
SpellScript* GetSpellScript() const
{
- return new spell_sha_chain_heal_SpellScript();
+ return new spell_sha_mana_spring_totem_SpellScript();
}
};
-class spell_sha_flame_shock : public SpellScriptLoader
+// 39610 - Mana Tide Totem
+class spell_sha_mana_tide_totem : public SpellScriptLoader
{
public:
- spell_sha_flame_shock() : SpellScriptLoader("spell_sha_flame_shock") { }
+ spell_sha_mana_tide_totem() : SpellScriptLoader("spell_sha_mana_tide_totem") { }
- class spell_sha_flame_shock_AuraScript : public AuraScript
+ class spell_sha_mana_tide_totem_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_sha_flame_shock_AuraScript);
+ PrepareSpellScript(spell_sha_mana_tide_totem_SpellScript);
- bool Validate(SpellInfo const* /*spell*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SHAMAN_LAVA_FLOWS_R1))
- return false;
- if (!sSpellMgr->GetSpellInfo(SHAMAN_LAVA_FLOWS_TRIGGERED_R1))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_MANA_TIDE) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_MANA_TIDE_TOTEM))
return false;
return true;
}
- void HandleDispel(DispelInfo* /*dispelInfo*/)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
if (Unit* caster = GetCaster())
- // Lava Flows
- if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, ICON_ID_SHAMAN_LAVA_FLOW, EFFECT_0))
+ if (Unit* unitTarget = GetHitUnit())
{
- if (sSpellMgr->GetFirstSpellInChain(SHAMAN_LAVA_FLOWS_R1) != sSpellMgr->GetFirstSpellInChain(aurEff->GetId()))
- return;
-
- uint8 rank = sSpellMgr->GetSpellRank(aurEff->GetId());
- caster->CastSpell(caster, sSpellMgr->GetSpellWithRank(SHAMAN_LAVA_FLOWS_TRIGGERED_R1, rank), true);
+ if (unitTarget->getPowerType() == POWER_MANA)
+ {
+ int32 effValue = GetEffectValue();
+ // Glyph of Mana Tide
+ if (Unit* owner = caster->GetOwner())
+ if (AuraEffect* dummy = owner->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_MANA_TIDE, 0))
+ effValue += dummy->GetAmount();
+ // Regenerate 6% of Total Mana Every 3 secs
+ int32 effBasePoints0 = int32(CalculatePct(unitTarget->GetMaxPower(POWER_MANA), effValue));
+ caster->CastCustomSpell(unitTarget, SPELL_SHAMAN_MANA_TIDE_TOTEM, &effBasePoints0, NULL, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
+ }
}
}
void Register()
{
- AfterDispel += AuraDispelFn(spell_sha_flame_shock_AuraScript::HandleDispel);
+ OnEffectHitTarget += SpellEffectFn(spell_sha_mana_tide_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_sha_flame_shock_AuraScript();
+ return new spell_sha_mana_tide_totem_SpellScript();
}
};
+// 6495 - Sentry Totem
class spell_sha_sentry_totem : public SpellScriptLoader
{
public:
@@ -717,7 +710,7 @@ class spell_sha_sentry_totem : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(SHAMAN_BIND_SIGHT))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_BIND_SIGHT))
return false;
return true;
}
@@ -727,7 +720,7 @@ class spell_sha_sentry_totem : public SpellScriptLoader
if (Unit* caster = GetCaster())
if (Creature* totem = caster->GetMap()->GetCreature(caster->m_SummonSlot[4]))
if (totem->isTotem())
- caster->CastSpell(totem, SHAMAN_BIND_SIGHT, true);
+ caster->CastSpell(totem, SPELL_SHAMAN_BIND_SIGHT, true);
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
@@ -752,19 +745,19 @@ class spell_sha_sentry_totem : public SpellScriptLoader
void AddSC_shaman_spell_scripts()
{
+ new spell_sha_ancestral_awakening_proc();
new spell_sha_astral_shift();
- new spell_sha_fire_nova();
- new spell_sha_mana_tide_totem();
- new spell_sha_earthbind_totem();
- new spell_sha_earthen_power();
new spell_sha_bloodlust();
- new spell_sha_heroism();
- new spell_sha_ancestral_awakening_proc();
+ new spell_sha_chain_heal();
new spell_sha_cleansing_totem_pulse();
+ new spell_sha_earthbind_totem();
+ new spell_sha_earthen_power();
+ new spell_sha_fire_nova();
+ new spell_sha_flame_shock();
new spell_sha_healing_stream_totem();
- new spell_sha_mana_spring_totem();
+ new spell_sha_heroism();
new spell_sha_lava_lash();
- new spell_sha_chain_heal();
- new spell_sha_flame_shock();
+ new spell_sha_mana_spring_totem();
+ new spell_sha_mana_tide_totem();
new spell_sha_sentry_totem();
}
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 2070933173b..89c69733daf 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -28,141 +28,88 @@
enum WarlockSpells
{
- WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS = 54435,
- WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER = 54443,
- WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD = 54508,
- WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509,
- WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444,
- WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692,
- WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693,
- WARLOCK_DEMONIC_CIRCLE_SUMMON = 48018,
- WARLOCK_DEMONIC_CIRCLE_TELEPORT = 48020,
- WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST = 62388,
- WARLOCK_HAUNT = 48181,
- WARLOCK_HAUNT_HEAL = 48210,
- WARLOCK_UNSTABLE_AFFLICTION_DISPEL = 31117,
- WARLOCK_CURSE_OF_DOOM_EFFECT = 18662,
- WARLOCK_IMPROVED_HEALTH_FUNNEL_R1 = 18703,
- WARLOCK_IMPROVED_HEALTH_FUNNEL_R2 = 18704,
- WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1 = 60955,
- WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2 = 60956,
+ SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT = 18662,
+ SPELL_WARLOCK_DEMONIC_CIRCLE_SUMMON = 48018,
+ SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT = 48020,
+ SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST = 62388,
+ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS = 54435,
+ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER = 54443,
+ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD = 54508,
+ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509,
+ SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444,
+ SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692,
+ SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693,
+ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1 = 18703,
+ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R2 = 18704,
+ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1 = 60955,
+ SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2 = 60956,
+ SPELL_WARLOCK_HAUNT = 48181,
+ SPELL_WARLOCK_HAUNT_HEAL = 48210,
+ SPELL_WARLOCK_LIFE_TAP_ENERGIZE = 31818,
+ SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553,
+ SPELL_WARLOCK_SOULSHATTER = 32835,
+ SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL = 31117
};
-class spell_warl_banish : public SpellScriptLoader
+enum WarlockSpellIcons
{
-public:
- spell_warl_banish() : SpellScriptLoader("spell_warl_banish") { }
-
- class spell_warl_banish_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_warl_banish_SpellScript);
-
- bool Load()
- {
- _removed = false;
- return true;
- }
-
- void HandleBanish()
- {
- if (Unit* target = GetHitUnit())
- {
- if (target->GetAuraEffect(SPELL_AURA_SCHOOL_IMMUNITY, SPELLFAMILY_WARLOCK, 0, 0x08000000, 0))
- {
- //No need to remove old aura since its removed due to not stack by current Banish aura
- PreventHitDefaultEffect(EFFECT_0);
- PreventHitDefaultEffect(EFFECT_1);
- PreventHitDefaultEffect(EFFECT_2);
- _removed = true;
- }
- }
- }
-
- void RemoveAura()
- {
- if (_removed)
- PreventHitAura();
- }
-
- void Register()
- {
- BeforeHit += SpellHitFn(spell_warl_banish_SpellScript::HandleBanish);
- AfterHit += SpellHitFn(spell_warl_banish_SpellScript::RemoveAura);
- }
-
- bool _removed;
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_warl_banish_SpellScript();
- }
+ WARLOCK_ICON_ID_IMPROVED_LIFE_TAP = 208,
+ WARLOCK_ICON_ID_MANA_FEED = 1982
};
-// 47193 Demonic Empowerment
-class spell_warl_demonic_empowerment : public SpellScriptLoader
+// 710, 18647 - Banish
+class spell_warl_banish : public SpellScriptLoader
{
public:
- spell_warl_demonic_empowerment() : SpellScriptLoader("spell_warl_demonic_empowerment") { }
+ spell_warl_banish() : SpellScriptLoader("spell_warl_banish") { }
- class spell_warl_demonic_empowerment_SpellScript : public SpellScript
+ class spell_warl_banish_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warl_demonic_empowerment_SpellScript);
+ PrepareSpellScript(spell_warl_banish_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Load()
{
- if (!sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS) || !sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER) || !sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD) || !sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER) || !sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_EMPOWERMENT_IMP))
- return false;
+ _removed = false;
return true;
}
- void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ void HandleBanish()
{
- if (Creature* targetCreature = GetHitCreature())
+ if (Unit* target = GetHitUnit())
{
- if (targetCreature->isPet())
+ if (target->GetAuraEffect(SPELL_AURA_SCHOOL_IMMUNITY, SPELLFAMILY_WARLOCK, 0, 0x08000000, 0))
{
- CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(targetCreature->GetEntry());
- switch (ci->family)
- {
- case CREATURE_FAMILY_SUCCUBUS:
- targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS, true);
- break;
- case CREATURE_FAMILY_VOIDWALKER:
- {
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER);
- int32 hp = int32(targetCreature->CountPctFromMaxHealth(GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0)));
- targetCreature->CastCustomSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, &hp, NULL, NULL, true);
- //unitTarget->CastSpell(unitTarget, 54441, true);
- break;
- }
- case CREATURE_FAMILY_FELGUARD:
- targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD, true);
- break;
- case CREATURE_FAMILY_FELHUNTER:
- targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER, true);
- break;
- case CREATURE_FAMILY_IMP:
- targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_IMP, true);
- break;
- }
+ // No need to remove old aura since its removed due to not stack by current Banish aura
+ PreventHitDefaultEffect(EFFECT_0);
+ PreventHitDefaultEffect(EFFECT_1);
+ PreventHitDefaultEffect(EFFECT_2);
+ _removed = true;
}
}
}
+ void RemoveAura()
+ {
+ if (_removed)
+ PreventHitAura();
+ }
+
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warl_demonic_empowerment_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ BeforeHit += SpellHitFn(spell_warl_banish_SpellScript::HandleBanish);
+ AfterHit += SpellHitFn(spell_warl_banish_SpellScript::RemoveAura);
}
+
+ bool _removed;
};
SpellScript* GetSpellScript() const
{
- return new spell_warl_demonic_empowerment_SpellScript();
+ return new spell_warl_banish_SpellScript();
}
};
-// 6201 Create Healthstone (and ranks)
+// 6201 - Create Healthstone (and ranks)
class spell_warl_create_healthstone : public SpellScriptLoader
{
public:
@@ -174,9 +121,9 @@ class spell_warl_create_healthstone : public SpellScriptLoader
static uint32 const iTypes[8][3];
- bool Validate(SpellInfo const* /*spellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(WARLOCK_IMPROVED_HEALTHSTONE_R1) || !sSpellMgr->GetSpellInfo(WARLOCK_IMPROVED_HEALTHSTONE_R2))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2))
return false;
return true;
}
@@ -204,8 +151,12 @@ class spell_warl_create_healthstone : public SpellScriptLoader
{
switch (aurEff->GetId())
{
- case WARLOCK_IMPROVED_HEALTHSTONE_R1: rank = 1; break;
- case WARLOCK_IMPROVED_HEALTHSTONE_R2: rank = 2; break;
+ case SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1:
+ rank = 1;
+ break;
+ case SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2:
+ rank = 2;
+ break;
default:
sLog->outError(LOG_FILTER_SPELLS_AURAS, "Unknown rank of Improved Healthstone id: %d", aurEff->GetId());
break;
@@ -241,142 +192,336 @@ uint32 const spell_warl_create_healthstone::spell_warl_create_healthstone_SpellS
{36892, 36893, 36894} // Fel Healthstone
};
-// 47422 Everlasting Affliction
-class spell_warl_everlasting_affliction : public SpellScriptLoader
+// -603 - Curse of Doom
+class spell_warl_curse_of_doom : public SpellScriptLoader
{
public:
- spell_warl_everlasting_affliction() : SpellScriptLoader("spell_warl_everlasting_affliction") { }
+ spell_warl_curse_of_doom() : SpellScriptLoader("spell_warl_curse_of_doom") { }
- class spell_warl_everlasting_affliction_SpellScript : public SpellScript
+ class spell_warl_curse_of_doom_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_warl_everlasting_affliction_SpellScript);
+ PrepareAuraScript(spell_warl_curse_of_doom_AuraScript);
- void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ bool Validate(SpellInfo const* /*spell*/)
{
- if (Unit* unitTarget = GetHitUnit())
- // Refresh corruption on target
- if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, GetCaster()->GetGUID()))
- aur->GetBase()->RefreshDuration();
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT))
+ return false;
+ return true;
+ }
+
+ bool Load()
+ {
+ return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
+
+ void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (!GetCaster())
+ return;
+
+ AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode();
+ if (removeMode != AURA_REMOVE_BY_DEATH || !IsExpired())
+ return;
+
+ if (GetCaster()->ToPlayer()->isHonorOrXPTarget(GetTarget()))
+ GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT, true, NULL, aurEff);
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warl_everlasting_affliction_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_warl_curse_of_doom_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const
+ AuraScript* GetAuraScript() const
{
- return new spell_warl_everlasting_affliction_SpellScript();
+ return new spell_warl_curse_of_doom_AuraScript();
}
};
-// 18541 Ritual of Doom Effect
-class spell_warl_ritual_of_doom_effect : public SpellScriptLoader
+// 48018 - Demonic Circle Summon
+class spell_warl_demonic_circle_summon : public SpellScriptLoader
{
-public:
- spell_warl_ritual_of_doom_effect() : SpellScriptLoader("spell_warl_ritual_of_doom_effect") { }
+ public:
+ spell_warl_demonic_circle_summon() : SpellScriptLoader("spell_warl_demonic_circle_summon") { }
+
+ class spell_warl_demonic_circle_summon_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_warl_demonic_circle_summon_AuraScript);
+
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes mode)
+ {
+ // If effect is removed by expire remove the summoned demonic circle too.
+ if (!(mode & AURA_EFFECT_HANDLE_REAPPLY))
+ GetTarget()->RemoveGameObject(GetId(), true);
+
+ GetTarget()->RemoveAura(SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST);
+ }
+
+ void HandleDummyTick(AuraEffect const* /*aurEff*/)
+ {
+ if (GameObject* circle = GetTarget()->GetGameObject(GetId()))
+ {
+ // Here we check if player is in demonic circle teleport range, if so add
+ // WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST; allowing him to cast the WARLOCK_DEMONIC_CIRCLE_TELEPORT.
+ // If not in range remove the WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST.
+
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT);
+
+ if (GetTarget()->IsWithinDist(circle, spellInfo->GetMaxRange(true)))
+ {
+ if (!GetTarget()->HasAura(SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST))
+ GetTarget()->CastSpell(GetTarget(), SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST, true);
+ }
+ else
+ GetTarget()->RemoveAura(SPELL_WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST);
+ }
+ }
- class spell_warl_ritual_of_doom_effect_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_warl_ritual_of_doom_effect_SpellScript);
+ void Register()
+ {
+ OnEffectRemove += AuraEffectApplyFn(spell_warl_demonic_circle_summon_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_demonic_circle_summon_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+ };
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ AuraScript* GetAuraScript() const
{
- Unit* caster = GetCaster();
- caster->CastSpell(caster, GetEffectValue(), true);
+ return new spell_warl_demonic_circle_summon_AuraScript();
}
+};
- void Register()
+// 48020 - Demonic Circle Teleport
+class spell_warl_demonic_circle_teleport : public SpellScriptLoader
+{
+ public:
+ spell_warl_demonic_circle_teleport() : SpellScriptLoader("spell_warl_demonic_circle_teleport") { }
+
+ class spell_warl_demonic_circle_teleport_AuraScript : public AuraScript
{
- OnEffectHit += SpellEffectFn(spell_warl_ritual_of_doom_effect_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
+ PrepareAuraScript(spell_warl_demonic_circle_teleport_AuraScript);
- SpellScript* GetSpellScript() const
- {
- return new spell_warl_ritual_of_doom_effect_SpellScript();
- }
+ void HandleTeleport(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Player* player = GetTarget()->ToPlayer())
+ {
+ if (GameObject* circle = player->GetGameObject(SPELL_WARLOCK_DEMONIC_CIRCLE_SUMMON))
+ {
+ player->NearTeleportTo(circle->GetPositionX(), circle->GetPositionY(), circle->GetPositionZ(), circle->GetOrientation());
+ player->RemoveMovementImpairingAuras();
+ }
+ }
+ }
+
+ void Register()
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_warl_demonic_circle_teleport_AuraScript::HandleTeleport, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_warl_demonic_circle_teleport_AuraScript();
+ }
};
-class spell_warl_seed_of_corruption : public SpellScriptLoader
+// 47193 - Demonic Empowerment
+class spell_warl_demonic_empowerment : public SpellScriptLoader
{
public:
- spell_warl_seed_of_corruption() : SpellScriptLoader("spell_warl_seed_of_corruption") { }
+ spell_warl_demonic_empowerment() : SpellScriptLoader("spell_warl_demonic_empowerment") { }
- class spell_warl_seed_of_corruption_SpellScript : public SpellScript
+ class spell_warl_demonic_empowerment_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warl_seed_of_corruption_SpellScript);
+ PrepareSpellScript(spell_warl_demonic_empowerment_SpellScript);
- void FilterTargets(std::list<WorldObject*>& targets)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (GetExplTargetUnit())
- targets.remove(GetExplTargetUnit());
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP))
+ return false;
+ return true;
+ }
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Creature* targetCreature = GetHitCreature())
+ {
+ if (targetCreature->isPet())
+ {
+ CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(targetCreature->GetEntry());
+ switch (ci->family)
+ {
+ case CREATURE_FAMILY_SUCCUBUS:
+ targetCreature->CastSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS, true);
+ break;
+ case CREATURE_FAMILY_VOIDWALKER:
+ {
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER);
+ int32 hp = int32(targetCreature->CountPctFromMaxHealth(GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0)));
+ targetCreature->CastCustomSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, &hp, NULL, NULL, true);
+ //unitTarget->CastSpell(unitTarget, 54441, true);
+ break;
+ }
+ case CREATURE_FAMILY_FELGUARD:
+ targetCreature->CastSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD, true);
+ break;
+ case CREATURE_FAMILY_FELHUNTER:
+ targetCreature->CastSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER, true);
+ break;
+ case CREATURE_FAMILY_IMP:
+ targetCreature->CastSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP, true);
+ break;
+ }
+ }
+ }
}
void Register()
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warl_seed_of_corruption_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_warl_demonic_empowerment_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warl_seed_of_corruption_SpellScript();
+ return new spell_warl_demonic_empowerment_SpellScript();
}
};
-enum Soulshatter
+// 47422 - Everlasting Affliction
+class spell_warl_everlasting_affliction : public SpellScriptLoader
{
- SPELL_SOULSHATTER = 32835,
+ public:
+ spell_warl_everlasting_affliction() : SpellScriptLoader("spell_warl_everlasting_affliction") { }
+
+ class spell_warl_everlasting_affliction_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_warl_everlasting_affliction_SpellScript);
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* unitTarget = GetHitUnit())
+ // Refresh corruption on target
+ if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, GetCaster()->GetGUID()))
+ aur->GetBase()->RefreshDuration();
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_warl_everlasting_affliction_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_warl_everlasting_affliction_SpellScript();
+ }
};
-class spell_warl_soulshatter : public SpellScriptLoader
+// -48181 - Haunt
+class spell_warl_haunt : public SpellScriptLoader
{
public:
- spell_warl_soulshatter() : SpellScriptLoader("spell_warl_soulshatter") { }
+ spell_warl_haunt() : SpellScriptLoader("spell_warl_haunt") { }
- class spell_warl_soulshatter_SpellScript : public SpellScript
+ class spell_warl_haunt_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warl_soulshatter_SpellScript);
+ PrepareSpellScript(spell_warl_haunt_SpellScript);
+
+ void HandleOnHit()
+ {
+ if (Aura* aura = GetHitAura())
+ if (AuraEffect* aurEff = aura->GetEffect(EFFECT_1))
+ aurEff->SetAmount(CalculatePct(aurEff->GetAmount(), GetHitDamage()));
+ }
+
+ void Register()
+ {
+ OnHit += SpellHitFn(spell_warl_haunt_SpellScript::HandleOnHit);
+ }
+ };
+
+ class spell_warl_haunt_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_warl_haunt_AuraScript);
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_SOULSHATTER))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_HAUNT_HEAL))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
- if (Unit* target = GetHitUnit())
+ if (Unit* caster = GetCaster())
{
- if (target->CanHaveThreatList() && target->getThreatManager().getThreat(caster) > 0.0f)
- caster->CastSpell(target, SPELL_SOULSHATTER, true);
+ int32 amount = aurEff->GetAmount();
+ GetTarget()->CastCustomSpell(caster, SPELL_WARLOCK_HAUNT_HEAL, &amount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
}
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warl_soulshatter_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectRemove += AuraEffectApplyFn(spell_warl_haunt_AuraScript::HandleRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warl_soulshatter_SpellScript();
+ return new spell_warl_haunt_SpellScript();
+ }
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_warl_haunt_AuraScript();
}
};
-enum LifeTap
+// -755 - Health Funnel
+class spell_warl_health_funnel : public SpellScriptLoader
{
- SPELL_LIFE_TAP_ENERGIZE = 31818,
- SPELL_LIFE_TAP_ENERGIZE_2 = 32553,
- ICON_ID_IMPROVED_LIFE_TAP = 208,
- ICON_ID_MANA_FEED = 1982,
+ public:
+ spell_warl_health_funnel() : SpellScriptLoader("spell_warl_health_funnel") { }
+
+ class spell_warl_health_funnel_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_warl_health_funnel_AuraScript);
+
+ void ApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* caster = GetCaster();
+ if (!caster)
+ return;
+
+ Unit* target = GetTarget();
+ if (caster->HasAura(SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R2))
+ target->CastSpell(target, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2, true);
+ else if (caster->HasAura(SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1))
+ target->CastSpell(target, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1, true);
+ }
+
+ void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->RemoveAurasDueToSpell(SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1);
+ target->RemoveAurasDueToSpell(SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2);
+ }
+
+ void Register()
+ {
+ OnEffectRemove += AuraEffectRemoveFn(spell_warl_health_funnel_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
+ OnEffectApply += AuraEffectApplyFn(spell_warl_health_funnel_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_warl_health_funnel_AuraScript();
+ }
};
+// -1454 - Life Tap
class spell_warl_life_tap : public SpellScriptLoader
{
public:
@@ -393,7 +538,7 @@ class spell_warl_life_tap : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_LIFE_TAP_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_LIFE_TAP_ENERGIZE_2))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_LIFE_TAP_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2))
return false;
return true;
}
@@ -410,20 +555,20 @@ class spell_warl_life_tap : public SpellScriptLoader
target->ModifyHealth(-damage);
// Improved Life Tap mod
- if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, ICON_ID_IMPROVED_LIFE_TAP, 0))
+ if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_IMPROVED_LIFE_TAP, 0))
AddPct(mana, aurEff->GetAmount());
- caster->CastCustomSpell(target, SPELL_LIFE_TAP_ENERGIZE, &mana, NULL, NULL, false);
+ caster->CastCustomSpell(target, SPELL_WARLOCK_LIFE_TAP_ENERGIZE, &mana, NULL, NULL, false);
// Mana Feed
int32 manaFeedVal = 0;
- if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_WARLOCK, ICON_ID_MANA_FEED, 0))
+ if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_MANA_FEED, 0))
manaFeedVal = aurEff->GetAmount();
if (manaFeedVal > 0)
{
ApplyPct(manaFeedVal, mana);
- caster->CastCustomSpell(caster, SPELL_LIFE_TAP_ENERGIZE_2, &manaFeedVal, NULL, NULL, true, NULL);
+ caster->CastCustomSpell(caster, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2, &manaFeedVal, NULL, NULL, true, NULL);
}
}
}
@@ -448,149 +593,102 @@ class spell_warl_life_tap : public SpellScriptLoader
}
};
-class spell_warl_demonic_circle_summon : public SpellScriptLoader
+// 18541 - Ritual of Doom Effect
+class spell_warl_ritual_of_doom_effect : public SpellScriptLoader
{
public:
- spell_warl_demonic_circle_summon() : SpellScriptLoader("spell_warl_demonic_circle_summon") { }
+ spell_warl_ritual_of_doom_effect() : SpellScriptLoader("spell_warl_ritual_of_doom_effect") { }
- class spell_warl_demonic_circle_summon_AuraScript : public AuraScript
+ class spell_warl_ritual_of_doom_effect_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_warl_demonic_circle_summon_AuraScript);
-
- void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes mode)
- {
- // If effect is removed by expire remove the summoned demonic circle too.
- if (!(mode & AURA_EFFECT_HANDLE_REAPPLY))
- GetTarget()->RemoveGameObject(GetId(), true);
+ PrepareSpellScript(spell_warl_ritual_of_doom_effect_SpellScript);
- GetTarget()->RemoveAura(WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST);
- }
-
- void HandleDummyTick(AuraEffect const* /*aurEff*/)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (GameObject* circle = GetTarget()->GetGameObject(GetId()))
- {
- // Here we check if player is in demonic circle teleport range, if so add
- // WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST; allowing him to cast the WARLOCK_DEMONIC_CIRCLE_TELEPORT.
- // If not in range remove the WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST.
-
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(WARLOCK_DEMONIC_CIRCLE_TELEPORT);
-
- if (GetTarget()->IsWithinDist(circle, spellInfo->GetMaxRange(true)))
- {
- if (!GetTarget()->HasAura(WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST))
- GetTarget()->CastSpell(GetTarget(), WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST, true);
- }
- else
- GetTarget()->RemoveAura(WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST);
- }
+ Unit* caster = GetCaster();
+ caster->CastSpell(caster, GetEffectValue(), true);
}
void Register()
{
- OnEffectRemove += AuraEffectApplyFn(spell_warl_demonic_circle_summon_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_demonic_circle_summon_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ OnEffectHit += SpellEffectFn(spell_warl_ritual_of_doom_effect_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_warl_demonic_circle_summon_AuraScript();
+ return new spell_warl_ritual_of_doom_effect_SpellScript();
}
};
-class spell_warl_demonic_circle_teleport : public SpellScriptLoader
+// -27285 - Seed of Corruption
+class spell_warl_seed_of_corruption : public SpellScriptLoader
{
public:
- spell_warl_demonic_circle_teleport() : SpellScriptLoader("spell_warl_demonic_circle_teleport") { }
+ spell_warl_seed_of_corruption() : SpellScriptLoader("spell_warl_seed_of_corruption") { }
- class spell_warl_demonic_circle_teleport_AuraScript : public AuraScript
+ class spell_warl_seed_of_corruption_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_warl_demonic_circle_teleport_AuraScript);
+ PrepareSpellScript(spell_warl_seed_of_corruption_SpellScript);
- void HandleTeleport(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void FilterTargets(std::list<WorldObject*>& targets)
{
- if (Player* player = GetTarget()->ToPlayer())
- {
- if (GameObject* circle = player->GetGameObject(WARLOCK_DEMONIC_CIRCLE_SUMMON))
- {
- player->NearTeleportTo(circle->GetPositionX(), circle->GetPositionY(), circle->GetPositionZ(), circle->GetOrientation());
- player->RemoveMovementImpairingAuras();
- }
- }
+ if (GetExplTargetUnit())
+ targets.remove(GetExplTargetUnit());
}
void Register()
{
- OnEffectApply += AuraEffectApplyFn(spell_warl_demonic_circle_teleport_AuraScript::HandleTeleport, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warl_seed_of_corruption_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_warl_demonic_circle_teleport_AuraScript();
+ return new spell_warl_seed_of_corruption_SpellScript();
}
};
-class spell_warl_haunt : public SpellScriptLoader
+// 29858 - Soulshatter
+class spell_warl_soulshatter : public SpellScriptLoader
{
public:
- spell_warl_haunt() : SpellScriptLoader("spell_warl_haunt") { }
-
- class spell_warl_haunt_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_warl_haunt_SpellScript);
-
- void HandleOnHit()
- {
- if (Aura* aura = GetHitAura())
- if (AuraEffect* aurEff = aura->GetEffect(EFFECT_1))
- aurEff->SetAmount(CalculatePct(aurEff->GetAmount(), GetHitDamage()));
- }
-
- void Register()
- {
- OnHit += SpellHitFn(spell_warl_haunt_SpellScript::HandleOnHit);
- }
- };
+ spell_warl_soulshatter() : SpellScriptLoader("spell_warl_soulshatter") { }
- class spell_warl_haunt_AuraScript : public AuraScript
+ class spell_warl_soulshatter_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_warl_haunt_AuraScript);
+ PrepareSpellScript(spell_warl_soulshatter_SpellScript);
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(WARLOCK_HAUNT_HEAL))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOULSHATTER))
return false;
return true;
}
- void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (Unit* caster = GetCaster())
+ Unit* caster = GetCaster();
+ if (Unit* target = GetHitUnit())
{
- int32 amount = aurEff->GetAmount();
- GetTarget()->CastCustomSpell(caster, WARLOCK_HAUNT_HEAL, &amount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
+ if (target->CanHaveThreatList() && target->getThreatManager().getThreat(caster) > 0.0f)
+ caster->CastSpell(target, SPELL_WARLOCK_SOULSHATTER, true);
}
}
void Register()
{
- OnEffectRemove += AuraEffectApplyFn(spell_warl_haunt_AuraScript::HandleRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectHitTarget += SpellEffectFn(spell_warl_soulshatter_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warl_haunt_SpellScript();
- }
-
- AuraScript* GetAuraScript() const
- {
- return new spell_warl_haunt_AuraScript();
+ return new spell_warl_soulshatter_SpellScript();
}
};
+// -30108 - Unstable Affliction
class spell_warl_unstable_affliction : public SpellScriptLoader
{
public:
@@ -602,7 +700,7 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
bool Validate(SpellInfo const* /*spell*/)
{
- if (!sSpellMgr->GetSpellInfo(WARLOCK_UNSTABLE_AFFLICTION_DISPEL))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL))
return false;
return true;
}
@@ -614,7 +712,7 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
{
int32 damage = aurEff->GetAmount() * 9;
// backfire damage and silence
- caster->CastCustomSpell(dispelInfo->GetDispeller(), WARLOCK_UNSTABLE_AFFLICTION_DISPEL, &damage, NULL, NULL, true, NULL, aurEff);
+ caster->CastCustomSpell(dispelInfo->GetDispeller(), SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL, &damage, NULL, NULL, true, NULL, aurEff);
}
}
@@ -630,108 +728,20 @@ class spell_warl_unstable_affliction : public SpellScriptLoader
}
};
-class spell_warl_curse_of_doom : public SpellScriptLoader
-{
- public:
- spell_warl_curse_of_doom() : SpellScriptLoader("spell_warl_curse_of_doom") { }
-
- class spell_warl_curse_of_doom_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_warl_curse_of_doom_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/)
- {
- if (!sSpellMgr->GetSpellInfo(WARLOCK_CURSE_OF_DOOM_EFFECT))
- return false;
- return true;
- }
-
- bool Load()
- {
- return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (!GetCaster())
- return;
-
- AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode();
- if (removeMode != AURA_REMOVE_BY_DEATH || !IsExpired())
- return;
-
- if (GetCaster()->ToPlayer()->isHonorOrXPTarget(GetTarget()))
- GetCaster()->CastSpell(GetTarget(), WARLOCK_CURSE_OF_DOOM_EFFECT, true, NULL, aurEff);
- }
-
- void Register()
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_warl_curse_of_doom_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const
- {
- return new spell_warl_curse_of_doom_AuraScript();
- }
-};
-
-class spell_warl_health_funnel : public SpellScriptLoader
-{
-public:
- spell_warl_health_funnel() : SpellScriptLoader("spell_warl_health_funnel") { }
-
- class spell_warl_health_funnel_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_warl_health_funnel_AuraScript);
-
- void ApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* caster = GetCaster();
- if (!caster)
- return;
-
- Unit* target = GetTarget();
- if (caster->HasAura(WARLOCK_IMPROVED_HEALTH_FUNNEL_R2))
- target->CastSpell(target, WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2, true);
- else if (caster->HasAura(WARLOCK_IMPROVED_HEALTH_FUNNEL_R1))
- target->CastSpell(target, WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1, true);
- }
-
- void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- target->RemoveAurasDueToSpell(WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1);
- target->RemoveAurasDueToSpell(WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2);
- }
-
- void Register()
- {
- OnEffectRemove += AuraEffectRemoveFn(spell_warl_health_funnel_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
- OnEffectApply += AuraEffectApplyFn(spell_warl_health_funnel_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const
- {
- return new spell_warl_health_funnel_AuraScript();
- }
-};
-
void AddSC_warlock_spell_scripts()
{
new spell_warl_banish();
- new spell_warl_demonic_empowerment();
new spell_warl_create_healthstone();
+ new spell_warl_curse_of_doom();
+ new spell_warl_demonic_circle_summon();
+ new spell_warl_demonic_circle_teleport();
+ new spell_warl_demonic_empowerment();
new spell_warl_everlasting_affliction();
+ new spell_warl_haunt();
+ new spell_warl_health_funnel();
+ new spell_warl_life_tap();
new spell_warl_ritual_of_doom_effect();
new spell_warl_seed_of_corruption();
new spell_warl_soulshatter();
- new spell_warl_life_tap();
- new spell_warl_demonic_circle_summon();
- new spell_warl_demonic_circle_teleport();
- new spell_warl_haunt();
new spell_warl_unstable_affliction();
- new spell_warl_curse_of_doom();
- new spell_warl_health_funnel();
}
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index 7b6ac8fed12..f84265b89de 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -28,137 +28,173 @@
enum WarriorSpells
{
- WARRIOR_SPELL_LAST_STAND_TRIGGERED = 12976,
+ SPELL_WARRIOR_BLOODTHIRST = 23885,
+ SPELL_WARRIOR_BLOODTHIRST_DAMAGE = 23881,
+ SPELL_WARRIOR_CHARGE = 34846,
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12162,
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12850,
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12868,
+ SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC = 12721,
+ SPELL_WARRIOR_EXECUTE = 20647,
+ SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367,
+ SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF = 65156,
+ SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT = 64976,
+ SPELL_WARRIOR_LAST_STAND_TRIGGERED = 12976,
+ SPELL_WARRIOR_SLAM = 50783,
+ SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1 = 46859,
+ SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860,
+ SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849,
+ SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850,
+
+ SPELL_PALADIN_BLESSING_OF_SANCTUARY = 20911,
+ SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY = 25899,
+ SPELL_PRIEST_RENEWED_HOPE = 63944,
+ SPELL_GEN_DAMAGE_REDUCTION_AURA = 68066,
};
-class spell_warr_last_stand : public SpellScriptLoader
+enum WarriorSpellIcons
+{
+ WARRIOR_ICON_ID_SUDDEN_DEATH = 1989,
+};
+
+// 23881 - Bloodthirst
+class spell_warr_bloodthirst : public SpellScriptLoader
{
public:
- spell_warr_last_stand() : SpellScriptLoader("spell_warr_last_stand") { }
+ spell_warr_bloodthirst() : SpellScriptLoader("spell_warr_bloodthirst") { }
- class spell_warr_last_stand_SpellScript : public SpellScript
+ class spell_warr_bloodthirst_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_last_stand_SpellScript);
+ PrepareSpellScript(spell_warr_bloodthirst_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/)
+ void HandleDamage(SpellEffIndex /*effIndex*/)
{
- if (!sSpellMgr->GetSpellInfo(WARRIOR_SPELL_LAST_STAND_TRIGGERED))
- return false;
- return true;
+ int32 damage = GetEffectValue();
+ ApplyPct(damage, GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK));
+
+ if (Unit* target = GetHitUnit())
+ {
+ damage = GetCaster()->SpellDamageBonusDone(target, GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
+ damage = target->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
+ }
+ SetHitDamage(damage);
}
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- if (Unit* caster = GetCaster())
- {
- int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30));
- caster->CastCustomSpell(caster, WARRIOR_SPELL_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);
- }
+ int32 damage = GetEffectValue();
+ GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, NULL, NULL, true, NULL);
}
void Register()
{
- // add dummy effect spell handler to Last Stand
- OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_last_stand_SpellScript();
+ return new spell_warr_bloodthirst_SpellScript();
}
};
-class spell_warr_improved_spell_reflection : public SpellScriptLoader
+// 23880 - Bloodthirst (Heal)
+class spell_warr_bloodthirst_heal : public SpellScriptLoader
{
public:
- spell_warr_improved_spell_reflection() : SpellScriptLoader("spell_warr_improved_spell_reflection") { }
+ spell_warr_bloodthirst_heal() : SpellScriptLoader("spell_warr_bloodthirst_heal") { }
- class spell_warr_improved_spell_reflection_SpellScript : public SpellScript
+ class spell_warr_bloodthirst_heal_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_improved_spell_reflection_SpellScript);
+ PrepareSpellScript(spell_warr_bloodthirst_heal_SpellScript);
- void FilterTargets(std::list<WorldObject*>& unitList)
+ void HandleHeal(SpellEffIndex /*effIndex*/)
{
- if (GetCaster())
- unitList.remove(GetCaster());
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_BLOODTHIRST_DAMAGE))
+ SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster())));
}
void Register()
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_improved_spell_reflection_SpellScript();
+ return new spell_warr_bloodthirst_heal_SpellScript();
}
};
-enum DamageReductionAura
+// -100 - Charge
+class spell_warr_charge : public SpellScriptLoader
{
- SPELL_BLESSING_OF_SANCTUARY = 20911,
- SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899,
- SPELL_RENEWED_HOPE = 63944,
- SPELL_DAMAGE_REDUCTION_AURA = 68066,
-};
+ public:
+ spell_warr_charge() : SpellScriptLoader("spell_warr_charge") { }
-class spell_warr_vigilance : public SpellScriptLoader
-{
-public:
- spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { }
+ class spell_warr_charge_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_warr_charge_SpellScript);
- class spell_warr_vigilance_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_warr_vigilance_AuraScript);
+ bool Validate(SpellInfo const* /*spellInfo*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_CHARGE))
+ return false;
+ return true;
+ }
- bool Validate(SpellInfo const* /*SpellEntry*/)
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA))
- return false;
- return true;
- }
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ int32 chargeBasePoints0 = GetEffectValue();
+ Unit* caster = GetCaster();
+ caster->CastCustomSpell(caster, SPELL_WARRIOR_CHARGE, &chargeBasePoints0, NULL, NULL, true);
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* target = GetTarget())
- target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true);
- }
+ // Juggernaut crit bonus
+ if (caster->HasAura(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT))
+ caster->CastSpell(caster, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF, true);
+ }
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* target = GetTarget())
+ void Register()
{
- if (target->HasAura(SPELL_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_BLESSING_OF_SANCTUARY) ||
- target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) ||
- target->HasAura(SPELL_RENEWED_HOPE)))
- target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
}
- }
+ };
- void Register()
+ SpellScript* GetSpellScript() const
{
- OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ return new spell_warr_charge_SpellScript();
}
-
- };
-
- AuraScript* GetAuraScript() const
- {
- return new spell_warr_vigilance_AuraScript();
- }
};
-enum DeepWounds
+// 12809 - Concussion Blow
+class spell_warr_concussion_blow : public SpellScriptLoader
{
- SPELL_DEEP_WOUNDS_RANK_1 = 12162,
- SPELL_DEEP_WOUNDS_RANK_2 = 12850,
- SPELL_DEEP_WOUNDS_RANK_3 = 12868,
- SPELL_DEEP_WOUNDS_RANK_PERIODIC = 12721,
+ public:
+ spell_warr_concussion_blow() : SpellScriptLoader("spell_warr_concussion_blow") { }
+
+ class spell_warr_concussion_blow_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_warr_concussion_blow_SpellScript);
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue()));
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_warr_concussion_blow_SpellScript();
+ }
};
+// -12162 - Deep Wounds
class spell_warr_deep_wounds : public SpellScriptLoader
{
public:
@@ -168,14 +204,14 @@ class spell_warr_deep_wounds : public SpellScriptLoader
{
PrepareSpellScript(spell_warr_deep_wounds_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_3))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_3))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
int32 damage = GetEffectValue();
Unit* caster = GetCaster();
@@ -188,16 +224,16 @@ class spell_warr_deep_wounds : public SpellScriptLoader
damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE);
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_DEEP_WOUNDS_RANK_PERIODIC);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC);
uint32 ticks = spellInfo->GetDuration() / spellInfo->Effects[EFFECT_0].Amplitude;
// Add remaining ticks to damage done
- if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_DEEP_WOUNDS_RANK_PERIODIC, EFFECT_0, caster->GetGUID()))
+ if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, EFFECT_0, caster->GetGUID()))
damage += aurEff->GetAmount() * (ticks - aurEff->GetTickNumber());
- damage = damage / ticks;
+ damage /= ticks;
- caster->CastCustomSpell(target, SPELL_DEEP_WOUNDS_RANK_PERIODIC, &damage, NULL, NULL, true);
+ caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, &damage, NULL, NULL, true);
}
}
@@ -213,311 +249,261 @@ class spell_warr_deep_wounds : public SpellScriptLoader
}
};
-enum Charge
-{
- SPELL_JUGGERNAUT_CRIT_BONUS_TALENT = 64976,
- SPELL_JUGGERNAUT_CRIT_BONUS_BUFF = 65156,
- SPELL_CHARGE = 34846,
-};
-
-class spell_warr_charge : public SpellScriptLoader
+// -5308 - Execute
+class spell_warr_execute : public SpellScriptLoader
{
public:
- spell_warr_charge() : SpellScriptLoader("spell_warr_charge") { }
+ spell_warr_execute() : SpellScriptLoader("spell_warr_execute") { }
- class spell_warr_charge_SpellScript : public SpellScript
+ class spell_warr_execute_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_charge_SpellScript);
+ PrepareSpellScript(spell_warr_execute_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_JUGGERNAUT_CRIT_BONUS_TALENT) || !sSpellMgr->GetSpellInfo(SPELL_JUGGERNAUT_CRIT_BONUS_BUFF) || !sSpellMgr->GetSpellInfo(SPELL_CHARGE))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_EXECUTE) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_EXECUTION))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+
+ void HandleDummy(SpellEffIndex effIndex)
{
- int32 chargeBasePoints0 = GetEffectValue();
Unit* caster = GetCaster();
- caster->CastCustomSpell(caster, SPELL_CHARGE, &chargeBasePoints0, NULL, NULL, true);
+ if (Unit* target = GetHitUnit())
+ {
+ SpellInfo const* spellInfo = GetSpellInfo();
+ int32 rageUsed = std::min<int32>(300 - spellInfo->CalcPowerCost(caster, SpellSchoolMask(spellInfo->SchoolMask)), caster->GetPower(POWER_RAGE));
+ int32 newRage = std::max<int32>(0, caster->GetPower(POWER_RAGE) - rageUsed);
+
+ // Sudden Death rage save
+ if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_GENERIC, WARRIOR_ICON_ID_SUDDEN_DEATH, EFFECT_0))
+ {
+ int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue() * 10;
+ newRage = std::max(newRage, ragesave);
+ }
- //Juggernaut crit bonus
- if (caster->HasAura(SPELL_JUGGERNAUT_CRIT_BONUS_TALENT))
- caster->CastSpell(caster, SPELL_JUGGERNAUT_CRIT_BONUS_BUFF, true);
+ caster->SetPower(POWER_RAGE, uint32(newRage));
+ // Glyph of Execution bonus
+ if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_EXECUTION, EFFECT_0))
+ rageUsed += aurEff->GetAmount() * 10;
+
+
+ int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f);
+ caster->CastCustomSpell(target, SPELL_WARRIOR_EXECUTE, &bp, NULL, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
+ }
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_charge_SpellScript();
+ return new spell_warr_execute_SpellScript();
}
};
-enum Slam
-{
- SPELL_SLAM = 50783,
-};
-
-class spell_warr_slam : public SpellScriptLoader
+// 59725 - Improved Spell Reflection
+class spell_warr_improved_spell_reflection : public SpellScriptLoader
{
public:
- spell_warr_slam() : SpellScriptLoader("spell_warr_slam") { }
+ spell_warr_improved_spell_reflection() : SpellScriptLoader("spell_warr_improved_spell_reflection") { }
- class spell_warr_slam_SpellScript : public SpellScript
+ class spell_warr_improved_spell_reflection_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_slam_SpellScript);
+ PrepareSpellScript(spell_warr_improved_spell_reflection_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SLAM))
- return false;
- return true;
- }
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void FilterTargets(std::list<WorldObject*>& unitList)
{
- int32 bp0 = GetEffectValue();
- if (GetHitUnit())
- GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SLAM, &bp0, NULL, NULL, true, 0);
+ if (GetCaster())
+ unitList.remove(GetCaster());
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_slam_SpellScript();
+ return new spell_warr_improved_spell_reflection_SpellScript();
}
};
-enum Execute
-{
- SPELL_EXECUTE = 20647,
- SPELL_GLYPH_OF_EXECUTION = 58367,
- ICON_ID_SUDDEN_DEATH = 1989,
-};
-
-class spell_warr_execute : public SpellScriptLoader
+// 12975 - Last Stand
+class spell_warr_last_stand : public SpellScriptLoader
{
public:
- spell_warr_execute() : SpellScriptLoader("spell_warr_execute") { }
+ spell_warr_last_stand() : SpellScriptLoader("spell_warr_last_stand") { }
- class spell_warr_execute_SpellScript : public SpellScript
+ class spell_warr_last_stand_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_execute_SpellScript);
+ PrepareSpellScript(spell_warr_last_stand_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_EXECUTE) || !sSpellMgr->GetSpellInfo(SPELL_GLYPH_OF_EXECUTION))
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_LAST_STAND_TRIGGERED))
return false;
return true;
}
- void HandleDummy(SpellEffIndex effIndex)
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- Unit* caster = GetCaster();
- if (Unit* target = GetHitUnit())
+ if (Unit* caster = GetCaster())
{
- SpellInfo const* spellInfo = GetSpellInfo();
- int32 rageUsed = std::min<int32>(300 - spellInfo->CalcPowerCost(caster, SpellSchoolMask(spellInfo->SchoolMask)), caster->GetPower(POWER_RAGE));
- int32 newRage = std::max<int32>(0, caster->GetPower(POWER_RAGE) - rageUsed);
-
- // Sudden Death rage save
- if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_GENERIC, ICON_ID_SUDDEN_DEATH, EFFECT_0))
- {
- int32 ragesave = aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue() * 10;
- newRage = std::max(newRage, ragesave);
- }
-
- caster->SetPower(POWER_RAGE, uint32(newRage));
- // Glyph of Execution bonus
- if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_GLYPH_OF_EXECUTION, EFFECT_0))
- rageUsed += aurEff->GetAmount() * 10;
-
-
- int32 bp = GetEffectValue() + int32(rageUsed * spellInfo->Effects[effIndex].DamageMultiplier + caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.2f);
- caster->CastCustomSpell(target,SPELL_EXECUTE,&bp,0,0,true,0,0,GetOriginalCaster()->GetGUID());
+ int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30));
+ caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);
}
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_execute_SpellScript();
+ return new spell_warr_last_stand_SpellScript();
}
};
-class spell_warr_concussion_blow : public SpellScriptLoader
+// 7384, 7887, 11584, 11585 - Overpower
+class spell_warr_overpower : public SpellScriptLoader
{
public:
- spell_warr_concussion_blow() : SpellScriptLoader("spell_warr_concussion_blow") { }
+ spell_warr_overpower() : SpellScriptLoader("spell_warr_overpower") { }
- class spell_warr_concussion_blow_SpellScript : public SpellScript
+ class spell_warr_overpower_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_concussion_blow_SpellScript);
+ PrepareSpellScript(spell_warr_overpower_SpellScript);
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void HandleEffect(SpellEffIndex /*effIndex*/)
{
- SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue()));
+ uint32 spellId = 0;
+ if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1))
+ spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1;
+ else if (GetCaster()->HasAura(SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2))
+ spellId = SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2;
+
+ if (!spellId)
+ return;
+
+ if (Player* target = GetHitPlayer())
+ if (target->HasUnitState(UNIT_STATE_CASTING))
+ target->CastSpell(target, spellId, true);
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_concussion_blow_SpellScript();
+ return new spell_warr_overpower_SpellScript();
}
};
-enum Bloodthirst
-{
- SPELL_BLOODTHIRST = 23885,
-};
-
-class spell_warr_bloodthirst : public SpellScriptLoader
+// -1464 - Slam
+class spell_warr_slam : public SpellScriptLoader
{
public:
- spell_warr_bloodthirst() : SpellScriptLoader("spell_warr_bloodthirst") { }
+ spell_warr_slam() : SpellScriptLoader("spell_warr_slam") { }
- class spell_warr_bloodthirst_SpellScript : public SpellScript
+ class spell_warr_slam_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_warr_bloodthirst_SpellScript);
+ PrepareSpellScript(spell_warr_slam_SpellScript);
- void HandleDamage(SpellEffIndex /*effIndex*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- int32 damage = GetEffectValue();
- ApplyPct(damage, GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK));
-
- if (Unit* target = GetHitUnit())
- {
- damage = GetCaster()->SpellDamageBonusDone(target, GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
- damage = target->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), uint32(damage), SPELL_DIRECT_DAMAGE);
- }
- SetHitDamage(damage);
+ if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SLAM))
+ return false;
+ return true;
}
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- int32 damage = GetEffectValue();
- GetCaster()->CastCustomSpell(GetCaster(), SPELL_BLOODTHIRST, &damage, NULL, NULL, true, NULL);
+ int32 bp0 = GetEffectValue();
+ if (GetHitUnit())
+ GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_WARRIOR_SLAM, &bp0, NULL, NULL, true, 0);
}
void Register()
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
- return new spell_warr_bloodthirst_SpellScript();
+ return new spell_warr_slam_SpellScript();
}
};
-enum BloodthirstHeal
-{
- SPELL_BLOODTHIRST_DAMAGE = 23881,
-};
-
-class spell_warr_bloodthirst_heal : public SpellScriptLoader
+// 50720 - Vigilance
+class spell_warr_vigilance : public SpellScriptLoader
{
public:
- spell_warr_bloodthirst_heal() : SpellScriptLoader("spell_warr_bloodthirst_heal") { }
+ spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { }
- class spell_warr_bloodthirst_heal_SpellScript : public SpellScript
+ class spell_warr_vigilance_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_warr_bloodthirst_heal_SpellScript);
+ PrepareAuraScript(spell_warr_vigilance_AuraScript);
- void HandleHeal(SpellEffIndex /*effIndex*/)
+ bool Validate(SpellInfo const* /*spellInfo*/)
{
- if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_BLOODTHIRST_DAMAGE))
- SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster())));
+ if (!sSpellMgr->GetSpellInfo(SPELL_GEN_DAMAGE_REDUCTION_AURA))
+ return false;
+ return true;
}
- void Register()
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL);
+ if (Unit* target = GetTarget())
+ target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true);
}
- };
- SpellScript* GetSpellScript() const
- {
- return new spell_warr_bloodthirst_heal_SpellScript();
- }
-};
-
-enum Overpower
-{
- SPELL_UNRELENTING_ASSAULT_RANK_1 = 46859,
- SPELL_UNRELENTING_ASSAULT_RANK_2 = 46860,
- SPELL_UNRELENTING_ASSAULT_TRIGGER_1 = 64849,
- SPELL_UNRELENTING_ASSAULT_TRIGGER_2 = 64850,
-};
-
-class spell_warr_overpower : public SpellScriptLoader
-{
-public:
- spell_warr_overpower() : SpellScriptLoader("spell_warr_overpower") { }
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* target = GetTarget())
+ {
+ if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_PRIEST_RENEWED_HOPE)))
+ target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA);
+ }
+ }
- class spell_warr_overpower_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_warr_overpower_SpellScript);
+ void Register()
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ }
- void HandleEffect(SpellEffIndex /* effIndex */)
- {
- uint32 spellId = 0;
- if (GetCaster()->HasAura(SPELL_UNRELENTING_ASSAULT_RANK_1))
- spellId = SPELL_UNRELENTING_ASSAULT_TRIGGER_1;
- else if (GetCaster()->HasAura(SPELL_UNRELENTING_ASSAULT_RANK_2))
- spellId = SPELL_UNRELENTING_ASSAULT_TRIGGER_2;
-
- if (!spellId)
- return;
-
- if (Player* target = GetHitPlayer())
- if (target->HasUnitState(UNIT_STATE_CASTING))
- target->CastSpell(target, spellId, true);
- }
+ };
- void Register()
+ AuraScript* GetAuraScript() const
{
- OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY);
+ return new spell_warr_vigilance_AuraScript();
}
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_warr_overpower_SpellScript();
- }
};
void AddSC_warrior_spell_scripts()
{
- new spell_warr_last_stand();
- new spell_warr_improved_spell_reflection();
- new spell_warr_vigilance();
- new spell_warr_deep_wounds();
- new spell_warr_charge();
- new spell_warr_slam();
- new spell_warr_execute();
- new spell_warr_concussion_blow();
new spell_warr_bloodthirst();
new spell_warr_bloodthirst_heal();
+ new spell_warr_charge();
+ new spell_warr_concussion_blow();
+ new spell_warr_deep_wounds();
+ new spell_warr_execute();
+ new spell_warr_improved_spell_reflection();
+ new spell_warr_last_stand();
new spell_warr_overpower();
+ new spell_warr_slam();
+ new spell_warr_vigilance();
}