diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README | 18 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_18_00_world_version.sql (renamed from sql/updates/world/2011_06_18_00_world_version.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_18_01_world_misc.sql (renamed from sql/updates/world/2011_06_18_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_18_02_world_sai.sql (renamed from sql/updates/world/2011_06_18_02_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_18_03_world_misc.sql (renamed from sql/updates/world/2011_06_18_03_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_18_04_world_conditions.sql (renamed from sql/updates/world/2011_06_18_04_world_conditions.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_18_05_world_misc.sql (renamed from sql/updates/world/2011_06_18_05_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_19_02_world_creature_template.sql (renamed from sql/updates/world/2011_06_19_02_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_19_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_19_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_19_04_world_creature_template_addon.sql (renamed from sql/updates/world/2011_06_19_04_world_creature_template_addon.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_19_05_world_creature_onkill_reputation.sql (renamed from sql/updates/world/2011_06_19_05_world_creature_onkill_reputation.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_19_06_world_quest_template.sql (renamed from sql/updates/world/2011_06_19_06_world_quest_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_19_07_world_misc.sql (renamed from sql/updates/world/2011_06_19_07_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_20_00_world_misc.sql (renamed from sql/updates/world/2011_06_20_00_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_20_01_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_20_01_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_20_02_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_20_02_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_20_03_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_20_03_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_20_04_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_20_05_world_spell_proc_event.sql (renamed from sql/updates/world/2011_06_20_05_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_21_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_21_00_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_21_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_21_01_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_21_02_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_21_02_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_22_00_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_22_00_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_22_01_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_22_01_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_22_02_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_22_02_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_22_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_22_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_00_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_23_00_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_01_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_23_01_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_02_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_23_02_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_23_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_04_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_05_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_06_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_23_06_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_23_07_world_misc.sql (renamed from sql/updates/world/2011_06_23_07_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_00_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_01_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_02_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_04_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_05_world_spell_bonus_data.sql (renamed from sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_06_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_24_06_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_07_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_24_08_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_00_world_spell_dbc.sql (renamed from sql/updates/world/2011_06_25_00_world_spell_dbc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_01_world_script_texts.sql (renamed from sql/updates/world/2011_06_25_01_world_script_texts.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_02_world_misc.sql (renamed from sql/updates/world/2011_06_25_02_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_03_world_sai.sql (renamed from sql/updates/world/2011_06_25_03_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_04_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_05_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_06_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_07_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_08_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_09_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_10_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_11_world_creature_template.sql (renamed from sql/updates/world/2011_06_25_11_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_12_world_trinity_string.sql (renamed from sql/updates/world/2011_06_25_12_world_trinity_string.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_13_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_14_world_spell_proc_event.sql (renamed from sql/updates/world/2011_06_25_14_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_15_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_25_16_world_spell_proc_event.sql (renamed from sql/updates/world/2011_06_25_16_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_26_00_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_01_world_command.sql (renamed from sql/updates/world/2011_06_26_01_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_02_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_26_02_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_03_world_spell_dbc.sql (renamed from sql/updates/world/2011_06_26_03_world_spell_dbc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_04_world_spell_proc.sql (renamed from sql/updates/world/2011_06_26_04_world_spell_proc.sql) | 38 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_05_world_command.sql (renamed from sql/updates/world/2011_06_26_05_world_command.sql) | 6 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_06_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_26_06_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_26_07_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_26_07_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_00_world_sai.sql (renamed from sql/updates/world/2011_06_27_00_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_06_27_01_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_02_world_vehicle_scaling_info.sql (renamed from sql/updates/world/2011_06_27_02_world_vehicle_scaling_info.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_27_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_04_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_27_04_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_05_world_areatrigger_teleport.sql (renamed from sql/updates/world/2011_06_27_05_world_areatrigger_teleport.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_06_world_command.sql (renamed from sql/updates/world/2011_06_27_06_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_06_world_creature.sql (renamed from sql/updates/world/2011_06_27_06_world_creature.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_27_07_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_06_27_07_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_28_00_world_script_texts.sql (renamed from sql/updates/world/2011_06_28_00_world_script_texts.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_28_01_world_spelldifficulty_dbc.sql (renamed from sql/updates/world/2011_06_28_01_world_spelldifficulty_dbc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_29_00_world_command.sql (renamed from sql/updates/world/2011_06_29_00_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_30_00_world_creature_text.sql (renamed from sql/updates/world/2011_06_30_00_world_creature_text.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_06_30_01_world_sai.sql (renamed from sql/updates/world/2011_06_30_01_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_01_00_world_waypoint_data.sql (renamed from sql/updates/world/2011_07_01_00_world_waypoint_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_01_01_world_item_template.sql (renamed from sql/updates/world/2011_07_01_01_world_item_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_01_02_world_misc.sql (renamed from sql/updates/world/2011_07_01_02_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_01_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_07_01_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_01_03_world_disables.sql (renamed from sql/updates/world/2011_07_01_03_world_disables.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_02_00_world_areatrigger_scripts.sql (renamed from sql/updates/world/2011_07_02_00_world_areatrigger_scripts.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_02_00_world_instance_misc.sql (renamed from sql/updates/world/2011_07_02_00_world_instance_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_02_01_world_creature_addon.sql (renamed from sql/updates/world/2011_07_02_01_world_creature_addon.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_02_01_world_game_tele.sql (renamed from sql/updates/world/2011_07_02_01_world_game_tele.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_04_00_world_script_texts.sql (renamed from sql/updates/world/2011_07_04_00_world_script_texts.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_04_01_world_spell_proc_event.sql (renamed from sql/updates/world/2011_07_04_01_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_04_02_world_spell_proc_event.sql (renamed from sql/updates/world/2011_07_04_02_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_04_03_world_trinity_string.sql (renamed from sql/updates/world/2011_07_04_03_world_trinity_string.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_04_04_world_creature_ai_scripts.sql (renamed from sql/updates/world/2011_07_04_04_world_creature_ai_scripts.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_05_00_world_areatrigger_teleport.sql (renamed from sql/updates/world/2011_07_05_00_world_areatrigger_teleport.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_05_01_world_reputation_rate.sql (renamed from sql/updates/world/2011_07_05_01_world_reputation_rate.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_05_02_world_reputation_rate.sql (renamed from sql/updates/world/2011_07_05_02_world_reputation_rate.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_05_03_world_go_script_names.sql (renamed from sql/updates/world/2011_07_05_03_world_go_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_05_03_world_misc.sql (renamed from sql/updates/world/2011_07_05_03_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_05_04_world_areatrigger_teleport.sql (renamed from sql/updates/world/2011_07_05_04_world_areatrigger_teleport.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_06_00_world_sai.sql (renamed from sql/updates/world/2011_07_06_00_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_06_01_world_misc.sql (renamed from sql/updates/world/2011_07_06_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_07_00_world_creature.sql (renamed from sql/updates/world/2011_07_07_00_world_creature.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_07_01_world_misc.sql (renamed from sql/updates/world/2011_07_07_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_07_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_07_07_01_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_07_02_world_creature_template.sql (renamed from sql/updates/world/2011_07_07_02_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_08_00_world_conditions.sql (renamed from sql/updates/world/2011_07_08_00_world_conditions.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_15_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_07_15_00_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_15_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_07_15_01_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_15_02_world_spell_bonus_data.sql (renamed from sql/updates/world/2011_07_15_02_world_spell_bonus_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_15_03_world_creature_template.sql (renamed from sql/updates/world/2011_07_15_03_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_15_04_world_spell_script_names.sql (renamed from sql/updates/world/2011_07_15_04_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_15_05_world_spell_bonus_data.sql (renamed from sql/updates/world/2011_07_15_05_world_spell_bonus_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_21_00_world_spell_proc_event.sql (renamed from sql/updates/world/2011_07_21_00_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_21_01_world_spell_proc_event.sql (renamed from sql/updates/world/2011_07_21_01_world_spell_proc_event.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_22_00_world_creature_template.sql (renamed from sql/updates/world/2011_07_22_00_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_22_01_world_spell_bonus_data.sql (renamed from sql/updates/world/2011_07_22_01_world_spell_bonus_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_23_00_world_areatrigger_scripts.sql (renamed from sql/updates/world/2011_07_23_00_world_areatrigger_scripts.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_24_00_world_npc_vendor.sql (renamed from sql/updates/world/2011_07_24_00_world_npc_vendor.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_27_00_auth_account.sql (renamed from sql/updates/auth/2011_07_27_00_auth_account.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_27_00_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_07_27_00_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_27_01_world_trinity_string.sql (renamed from sql/updates/world/2011_07_27_01_world_trinity_string.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_07_29_00_world_gameobject_template.sql (renamed from sql/updates/world/2011_07_29_00_world_gameobject_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_01_00_world_sai.sql (renamed from sql/updates/world/2011_08_01_00_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_01_01_world_gossips.sql (renamed from sql/updates/world/2011_08_01_01_world_gossips.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_01_01_world_misc.sql (renamed from sql/updates/world/2011_08_01_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_01_01_world_waypoints.sql (renamed from sql/updates/world/2011_08_01_01_world_waypoints.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_01_02_world_creature_text.sql (renamed from sql/updates/world/2011_08_01_02_world_creature_text.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_01_03_world_spell_misc.sql (renamed from sql/updates/world/2011_08_01_03_world_spell_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_03_00_characters_characters.sql (renamed from sql/updates/characters/2011_08_03_00_characters_characters.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_06_00_world_creature_template.sql (renamed from sql/updates/world/2011_08_06_00_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_06_01_world_misc.sql (renamed from sql/updates/world/2011_08_06_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_06_02_world_misc.sql (renamed from sql/updates/world/2011_08_06_02_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_06_03_world_command.sql (renamed from sql/updates/world/2011_08_06_03_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_06_04_world_misc.sql (renamed from sql/updates/world/2011_08_06_04_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_07_00_world_gameobject_loot_template.sql (renamed from sql/updates/world/2011_08_07_00_world_gameobject_loot_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_07_01_world_reference_loot_template.sql (renamed from sql/updates/world/2011_08_07_01_world_reference_loot_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_07_02_world_spawns.sql (renamed from sql/updates/world/2011_08_07_02_world_spawns.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_07_03_world_sai.sql (renamed from sql/updates/world/2011_08_07_03_world_sai.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_07_04_world_misc.sql (renamed from sql/updates/world/2011_08_07_04_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_07_05_world_spell_misc.sql (renamed from sql/updates/world/2011_08_07_05_world_spell_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_09_00_world_prospecting_loot_template.sql (renamed from sql/updates/world/2011_08_09_00_world_prospecting_loot_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_09_01_world_misc.sql (renamed from sql/updates/world/2011_08_09_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_12_00_world_creature_template.sql (renamed from sql/updates/world/2011_08_12_00_world_creature_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_13_00_world_trinity_string.sql (renamed from sql/updates/world/2011_08_13_00_world_trinity_string.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_13_01_world_command.sql (renamed from sql/updates/world/2011_08_13_01_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_13_02_world_creature_scriptname.sql (renamed from sql/updates/world/2011_08_13_02_world_creature_scriptname.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_15_00_world_creature_loot_template.sql (renamed from sql/updates/world/2011_08_15_00_world_creature_loot_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_18_00_world_vehicle_template_accessory.sql (renamed from sql/updates/world/2011_08_18_00_world_vehicle_template_accessory.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_18_01_world_misc.sql (renamed from sql/updates/world/2011_08_18_01_world_misc.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_18_02_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_18_03_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_08_18_03_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_18_04_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_18_04_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_19_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_19_01_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_19_02_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_19_02_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_19_03_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_19_03_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_20_00_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_21_00_world_command.sql (renamed from sql/updates/world/2011_08_21_00_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_21_01_world_command.sql (renamed from sql/updates/world/2011_08_21_01_world_command.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_22_00_world_trinity_string.sql (renamed from sql/updates/world/2011_08_22_00_world_trinity_string.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_23_00_world_creature_equip_template.sql (renamed from sql/updates/world/2011_08_23_00_world_creature_equip_template.sql) | 0 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_00_world_game_event.sql | 3 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_01_world_conditions.sql | 4 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_01_world_spell_script_names.sql | 4 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_02_world_spell_script_names.sql | 4 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_03_world_access_requirement.sql | 3 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_04_world_achievement_criteria_data.sql | 5 | ||||
-rw-r--r-- | sql/old/3.3.5a/2011_08_24_05_world_creature_template.sql | 3 | ||||
-rw-r--r-- | sql/updates/world/2011_08_27_00_world_version.sql | 1 | ||||
-rw-r--r-- | sql/updates/world/2011_08_27_01_world_spell_script_names.sql | 1 | ||||
-rw-r--r-- | sql/updates/world/2011_08_28_00_world_instance_misc.sql | 16 | ||||
-rw-r--r-- | sql/updates/world/2011_08_29_00_world_instance_misc.sql | 7 | ||||
-rw-r--r-- | sql/updates/world/2011_08_30_00_world_spell_script_names.sql | 3 | ||||
-rw-r--r-- | sql/updates/world/2011_09_01_00_world_disables.sql | 3 | ||||
-rw-r--r-- | sql/updates/world/2011_09_01_02_spell_script_names.sql (renamed from sql/updates/world/2011_09_01_01_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/updates/world/2011_09_02_00_world_misc.sql | 17 | ||||
-rw-r--r-- | sql/updates/world/2011_09_02_02_world_spell_script_names.sql | 6 | ||||
-rw-r--r-- | sql/updates/world/2011_09_03_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_24_00_world_spell_script_names.sql) | 0 | ||||
-rw-r--r-- | sql/updates/world/2011_09_03_01_world_conditions.sql (renamed from sql/updates/world/2011_09_01_00_world_conditions.sql) | 0 | ||||
-rw-r--r-- | src/server/game/AI/CoreAI/GameObjectAI.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/AI/CoreAI/GuardAI.cpp | 10 | ||||
-rwxr-xr-x | src/server/game/AI/CoreAI/UnitAI.cpp | 12 | ||||
-rwxr-xr-x | src/server/game/AI/CoreAI/UnitAI.h | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 6 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 1 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/ArenaTeam.cpp | 8 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/ArenaTeam.h | 10 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/ArenaTeamMgr.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/ArenaTeamMgr.h | 4 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/Battleground.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/BattlegroundMgr.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/BattlegroundMgr.h | 2 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Battlegrounds/Zones/BattlegroundSA.h | 8 | ||||
-rwxr-xr-x | src/server/game/Chat/Channels/Channel.cpp | 1 | ||||
-rwxr-xr-x | src/server/game/Chat/Chat.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Chat/Commands/Level2.cpp | 20 | ||||
-rwxr-xr-x | src/server/game/Combat/ThreatManager.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCStores.cpp | 6 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCStructure.h | 10 | ||||
-rwxr-xr-x | src/server/game/DungeonFinding/LFGMgr.cpp | 68 | ||||
-rwxr-xr-x | src/server/game/DungeonFinding/LFGMgr.h | 46 | ||||
-rwxr-xr-x | src/server/game/Entities/Creature/Creature.h | 4 | ||||
-rwxr-xr-x | src/server/game/Entities/Creature/TemporarySummon.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 396 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Object.h | 84 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/ObjectDefines.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Updates/UpdateData.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Updates/UpdateData.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 26 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.h | 5 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 376 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/VehicleDefines.h | 3 | ||||
-rwxr-xr-x | src/server/game/Globals/ObjectMgr.h | 12 | ||||
-rwxr-xr-x | src/server/game/Grids/Notifiers/GridNotifiers.h | 28 | ||||
-rwxr-xr-x | src/server/game/Groups/Group.cpp | 26 | ||||
-rwxr-xr-x | src/server/game/Groups/Group.h | 24 | ||||
-rwxr-xr-x | src/server/game/Guilds/Guild.cpp | 24 | ||||
-rwxr-xr-x | src/server/game/Guilds/Guild.h | 26 | ||||
-rw-r--r-- | src/server/game/Guilds/GuildMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Guilds/GuildMgr.h | 3 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp | 26 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/GroupHandler.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/MovementHandler.cpp | 2 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/PetHandler.cpp | 3 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/SpellHandler.cpp | 8 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.cpp | 200 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 346 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.h | 1 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraDefines.h | 28 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 28 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 2 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuras.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuras.h | 6 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 560 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.h | 84 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 257 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 41 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellMgr.cpp | 55 | ||||
-rwxr-xr-x | src/server/game/Tickets/TicketMgr.h | 10 | ||||
-rw-r--r-- | src/server/game/Tools/PlayerDump.cpp | 10 | ||||
-rwxr-xr-x | src/server/game/World/World.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_account.cpp | 8 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 78 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_wp.cpp | 20 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/the_barrens.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp | 39 | ||||
-rwxr-xr-x | src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp | 2 | ||||
-rwxr-xr-x | src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp | 100 | ||||
-rwxr-xr-x | src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 125 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp | 83 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp | 25 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp | 2 | ||||
-rwxr-xr-x | src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h | 1 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Northrend/borean_tundra.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zuldrak.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Outland/nagrand.cpp | 40 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 55 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 84 | ||||
-rwxr-xr-x | src/server/scripts/World/achievement_scripts.cpp | 27 |
282 files changed, 2210 insertions, 1677 deletions
diff --git a/.gitignore b/.gitignore index 8970af46047..02609aebbe7 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ build/ *.kdev* *.bak *.patch +*.diff @@ -26,18 +26,24 @@ Copyright (C) TrinityCore (http://www.trinitycore.org) file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. -TrinityCore is a World of Warcraft game server emulator. It is derived +TrinityCore is a MMORPG Framework based mostly on C++. It is completely +open source, and is community supported. It is derived from MaNGOS, the Massive Network Game Object Server, and is based on the -code of that project. +code of that project with extensive changes over time to optimize, improve +and cleanup the codebase at the same time as improving the ingame mechanics +and functionality. If you wish to contribute ideas or code please visit +our site linked below or make pull requests to our github repo at +https://github.com/TrinityCore/TrinityCore For further information on the TrinityCore project, please visit our -project website at http://www.trinitycore.org. +project website at http://www.TrinityCore.org -API documentation can be obtained by running the "make doc" command inside +To get nightly builds of the master branch of TrinityCore, please visit +http://www.TrinityCore.net + +Documentation including installation instructions can be found inside the doc directory. SQL files to create the database can be found in the sql directory. Files to update your database from an older revision/version can be found in the sql/updates directory. - -See the docs/UnixInstall.txt file for installation instructions on Linux. diff --git a/sql/updates/world/2011_06_18_00_world_version.sql b/sql/old/3.3.5a/2011_06_18_00_world_version.sql index b5777669856..b5777669856 100644 --- a/sql/updates/world/2011_06_18_00_world_version.sql +++ b/sql/old/3.3.5a/2011_06_18_00_world_version.sql diff --git a/sql/updates/world/2011_06_18_01_world_misc.sql b/sql/old/3.3.5a/2011_06_18_01_world_misc.sql index acdd8239f21..acdd8239f21 100644 --- a/sql/updates/world/2011_06_18_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_18_01_world_misc.sql diff --git a/sql/updates/world/2011_06_18_02_world_sai.sql b/sql/old/3.3.5a/2011_06_18_02_world_sai.sql index fd906730661..fd906730661 100644 --- a/sql/updates/world/2011_06_18_02_world_sai.sql +++ b/sql/old/3.3.5a/2011_06_18_02_world_sai.sql diff --git a/sql/updates/world/2011_06_18_03_world_misc.sql b/sql/old/3.3.5a/2011_06_18_03_world_misc.sql index 087f46efb2a..087f46efb2a 100644 --- a/sql/updates/world/2011_06_18_03_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_18_03_world_misc.sql diff --git a/sql/updates/world/2011_06_18_04_world_conditions.sql b/sql/old/3.3.5a/2011_06_18_04_world_conditions.sql index 4c243a157e7..4c243a157e7 100644 --- a/sql/updates/world/2011_06_18_04_world_conditions.sql +++ b/sql/old/3.3.5a/2011_06_18_04_world_conditions.sql diff --git a/sql/updates/world/2011_06_18_05_world_misc.sql b/sql/old/3.3.5a/2011_06_18_05_world_misc.sql index 502bd03a5b6..502bd03a5b6 100644 --- a/sql/updates/world/2011_06_18_05_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_18_05_world_misc.sql diff --git a/sql/updates/world/2011_06_19_02_world_creature_template.sql b/sql/old/3.3.5a/2011_06_19_02_world_creature_template.sql index 7a220662d89..7a220662d89 100644 --- a/sql/updates/world/2011_06_19_02_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_06_19_02_world_creature_template.sql diff --git a/sql/updates/world/2011_06_19_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_19_03_world_achievement_criteria_data.sql index d46e343864c..d46e343864c 100644 --- a/sql/updates/world/2011_06_19_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_19_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_19_04_world_creature_template_addon.sql b/sql/old/3.3.5a/2011_06_19_04_world_creature_template_addon.sql index 2e6291cf7ee..2e6291cf7ee 100644 --- a/sql/updates/world/2011_06_19_04_world_creature_template_addon.sql +++ b/sql/old/3.3.5a/2011_06_19_04_world_creature_template_addon.sql diff --git a/sql/updates/world/2011_06_19_05_world_creature_onkill_reputation.sql b/sql/old/3.3.5a/2011_06_19_05_world_creature_onkill_reputation.sql index 5d83950eec1..5d83950eec1 100644 --- a/sql/updates/world/2011_06_19_05_world_creature_onkill_reputation.sql +++ b/sql/old/3.3.5a/2011_06_19_05_world_creature_onkill_reputation.sql diff --git a/sql/updates/world/2011_06_19_06_world_quest_template.sql b/sql/old/3.3.5a/2011_06_19_06_world_quest_template.sql index 71f79fd861f..71f79fd861f 100644 --- a/sql/updates/world/2011_06_19_06_world_quest_template.sql +++ b/sql/old/3.3.5a/2011_06_19_06_world_quest_template.sql diff --git a/sql/updates/world/2011_06_19_07_world_misc.sql b/sql/old/3.3.5a/2011_06_19_07_world_misc.sql index 17e90d4196b..17e90d4196b 100644 --- a/sql/updates/world/2011_06_19_07_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_19_07_world_misc.sql diff --git a/sql/updates/world/2011_06_20_00_world_misc.sql b/sql/old/3.3.5a/2011_06_20_00_world_misc.sql index 464325052e0..464325052e0 100644 --- a/sql/updates/world/2011_06_20_00_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_20_00_world_misc.sql diff --git a/sql/updates/world/2011_06_20_01_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_20_01_world_achievement_criteria_data.sql index d13b65d98f3..d13b65d98f3 100644 --- a/sql/updates/world/2011_06_20_01_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_20_01_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_20_02_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_20_02_world_achievement_criteria_data.sql index 82823227106..82823227106 100644 --- a/sql/updates/world/2011_06_20_02_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_20_02_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_20_03_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_20_03_world_spell_script_names.sql index 0f0efa3fcae..0f0efa3fcae 100644 --- a/sql/updates/world/2011_06_20_03_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_20_03_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_20_04_world_achievement_criteria_data.sql index 1de020af638..1de020af638 100644 --- a/sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_20_04_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_20_05_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_06_20_05_world_spell_proc_event.sql index 7d1a3d28fb5..7d1a3d28fb5 100644 --- a/sql/updates/world/2011_06_20_05_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_06_20_05_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_06_21_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_21_00_world_spell_script_names.sql index 76e2ea06d4b..76e2ea06d4b 100644 --- a/sql/updates/world/2011_06_21_00_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_21_00_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_21_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_21_01_world_spell_script_names.sql index 087891c0cbf..087891c0cbf 100644 --- a/sql/updates/world/2011_06_21_01_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_21_01_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_21_02_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_21_02_world_achievement_criteria_data.sql index 567f355f9cf..567f355f9cf 100644 --- a/sql/updates/world/2011_06_21_02_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_21_02_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_22_00_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_22_00_world_achievement_criteria_data.sql index 1cc5cfa5d19..1cc5cfa5d19 100644 --- a/sql/updates/world/2011_06_22_00_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_22_00_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_22_01_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_22_01_world_achievement_criteria_data.sql index e23c9436ec8..e23c9436ec8 100644 --- a/sql/updates/world/2011_06_22_01_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_22_01_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_22_02_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_22_02_world_achievement_criteria_data.sql index 9834ca79932..9834ca79932 100644 --- a/sql/updates/world/2011_06_22_02_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_22_02_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_22_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_22_03_world_achievement_criteria_data.sql index 2eafd5e4d6e..2eafd5e4d6e 100644 --- a/sql/updates/world/2011_06_22_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_22_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_00_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_23_00_world_achievement_criteria_data.sql index 9896dee28eb..9896dee28eb 100644 --- a/sql/updates/world/2011_06_23_00_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_23_00_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_01_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_23_01_world_achievement_criteria_data.sql index dab87f3b11d..dab87f3b11d 100644 --- a/sql/updates/world/2011_06_23_01_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_23_01_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_02_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_23_02_world_achievement_criteria_data.sql index ffaacf4c774..ffaacf4c774 100644 --- a/sql/updates/world/2011_06_23_02_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_23_02_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_23_03_world_achievement_criteria_data.sql index e074433c653..e074433c653 100644 --- a/sql/updates/world/2011_06_23_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_23_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_23_04_world_achievement_criteria_data.sql index e827105a94e..e827105a94e 100644 --- a/sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_23_04_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_23_05_world_achievement_criteria_data.sql index 6e39da9abb4..6e39da9abb4 100644 --- a/sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_23_05_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_23_06_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_23_06_world_spell_script_names.sql index 33d20e467c6..33d20e467c6 100644 --- a/sql/updates/world/2011_06_23_06_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_23_06_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_23_07_world_misc.sql b/sql/old/3.3.5a/2011_06_23_07_world_misc.sql index e160887bfbc..e160887bfbc 100644 --- a/sql/updates/world/2011_06_23_07_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_23_07_world_misc.sql diff --git a/sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_00_world_achievement_criteria_data.sql index 28f15696382..28f15696382 100644 --- a/sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_00_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_01_world_achievement_criteria_data.sql index 1054e710fec..1054e710fec 100644 --- a/sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_01_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_02_world_achievement_criteria_data.sql index 1668e241338..1668e241338 100644 --- a/sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_02_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_03_world_achievement_criteria_data.sql index be782da4967..be782da4967 100644 --- a/sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_04_world_achievement_criteria_data.sql index 056450445e2..056450445e2 100644 --- a/sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_04_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql b/sql/old/3.3.5a/2011_06_24_05_world_spell_bonus_data.sql index 58ae76c3100..58ae76c3100 100644 --- a/sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql +++ b/sql/old/3.3.5a/2011_06_24_05_world_spell_bonus_data.sql diff --git a/sql/updates/world/2011_06_24_06_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_24_06_world_spell_script_names.sql index 5c7b6e9bfc0..5c7b6e9bfc0 100644 --- a/sql/updates/world/2011_06_24_06_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_24_06_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_07_world_achievement_criteria_data.sql index cb76cbb1d4a..cb76cbb1d4a 100644 --- a/sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_07_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_24_08_world_achievement_criteria_data.sql index 4e64ce26ae1..4e64ce26ae1 100644 --- a/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_24_08_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_00_world_spell_dbc.sql b/sql/old/3.3.5a/2011_06_25_00_world_spell_dbc.sql index 782a29db90d..782a29db90d 100644 --- a/sql/updates/world/2011_06_25_00_world_spell_dbc.sql +++ b/sql/old/3.3.5a/2011_06_25_00_world_spell_dbc.sql diff --git a/sql/updates/world/2011_06_25_01_world_script_texts.sql b/sql/old/3.3.5a/2011_06_25_01_world_script_texts.sql index 8b0a68f41c0..8b0a68f41c0 100644 --- a/sql/updates/world/2011_06_25_01_world_script_texts.sql +++ b/sql/old/3.3.5a/2011_06_25_01_world_script_texts.sql diff --git a/sql/updates/world/2011_06_25_02_world_misc.sql b/sql/old/3.3.5a/2011_06_25_02_world_misc.sql index a30d8492262..a30d8492262 100644 --- a/sql/updates/world/2011_06_25_02_world_misc.sql +++ b/sql/old/3.3.5a/2011_06_25_02_world_misc.sql diff --git a/sql/updates/world/2011_06_25_03_world_sai.sql b/sql/old/3.3.5a/2011_06_25_03_world_sai.sql index 61ab8ff2b88..61ab8ff2b88 100644 --- a/sql/updates/world/2011_06_25_03_world_sai.sql +++ b/sql/old/3.3.5a/2011_06_25_03_world_sai.sql diff --git a/sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_04_world_achievement_criteria_data.sql index 66a9ff7f115..66a9ff7f115 100644 --- a/sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_04_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_05_world_achievement_criteria_data.sql index c67289b76a5..c67289b76a5 100644 --- a/sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_05_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_06_world_achievement_criteria_data.sql index 3fa82b56f43..3fa82b56f43 100644 --- a/sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_06_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_07_world_achievement_criteria_data.sql index f714e984a19..f714e984a19 100644 --- a/sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_07_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_08_world_achievement_criteria_data.sql index fd2567ed526..fd2567ed526 100644 --- a/sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_08_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_09_world_achievement_criteria_data.sql index 6a2681b5e71..6a2681b5e71 100644 --- a/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_09_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_10_world_achievement_criteria_data.sql index 1fddea0ad52..1fddea0ad52 100644 --- a/sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_10_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_11_world_creature_template.sql b/sql/old/3.3.5a/2011_06_25_11_world_creature_template.sql index a0a41fb74c0..a0a41fb74c0 100644 --- a/sql/updates/world/2011_06_25_11_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_06_25_11_world_creature_template.sql diff --git a/sql/updates/world/2011_06_25_12_world_trinity_string.sql b/sql/old/3.3.5a/2011_06_25_12_world_trinity_string.sql index cb4cbbe4a95..cb4cbbe4a95 100644 --- a/sql/updates/world/2011_06_25_12_world_trinity_string.sql +++ b/sql/old/3.3.5a/2011_06_25_12_world_trinity_string.sql diff --git a/sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_13_world_achievement_criteria_data.sql index a7a9de5cbdf..a7a9de5cbdf 100644 --- a/sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_13_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_14_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_06_25_14_world_spell_proc_event.sql index b78a9c087a9..b78a9c087a9 100644 --- a/sql/updates/world/2011_06_25_14_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_06_25_14_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_25_15_world_achievement_criteria_data.sql index 244d572253c..244d572253c 100644 --- a/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_25_15_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_25_16_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_06_25_16_world_spell_proc_event.sql index d7ee64c667c..d7ee64c667c 100644 --- a/sql/updates/world/2011_06_25_16_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_06_25_16_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_06_26_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_26_00_world_spell_script_names.sql index 0a7323b14bd..0a7323b14bd 100644 --- a/sql/updates/world/2011_06_26_00_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_26_00_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_26_01_world_command.sql b/sql/old/3.3.5a/2011_06_26_01_world_command.sql index d5ac88cfc4c..d5ac88cfc4c 100644 --- a/sql/updates/world/2011_06_26_01_world_command.sql +++ b/sql/old/3.3.5a/2011_06_26_01_world_command.sql diff --git a/sql/updates/world/2011_06_26_02_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_26_02_world_spell_script_names.sql index cde210b091c..cde210b091c 100644 --- a/sql/updates/world/2011_06_26_02_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_26_02_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_26_03_world_spell_dbc.sql b/sql/old/3.3.5a/2011_06_26_03_world_spell_dbc.sql index d618976707c..d618976707c 100644 --- a/sql/updates/world/2011_06_26_03_world_spell_dbc.sql +++ b/sql/old/3.3.5a/2011_06_26_03_world_spell_dbc.sql diff --git a/sql/updates/world/2011_06_26_04_world_spell_proc.sql b/sql/old/3.3.5a/2011_06_26_04_world_spell_proc.sql index 063a3edd3bf..3aa9131ba2c 100644 --- a/sql/updates/world/2011_06_26_04_world_spell_proc.sql +++ b/sql/old/3.3.5a/2011_06_26_04_world_spell_proc.sql @@ -1,19 +1,19 @@ -DROP TABLE IF EXISTS `spell_proc`;
-CREATE TABLE `spell_proc` (
- `spellId` mediumint(8) NOT NULL DEFAULT '0',
- `schoolMask` tinyint(4) NOT NULL DEFAULT '0',
- `spellFamilyName` smallint(5) unsigned NOT NULL DEFAULT '0',
- `spellFamilyMask0` int(10) unsigned NOT NULL DEFAULT '0',
- `spellFamilyMask1` int(10) unsigned NOT NULL DEFAULT '0',
- `spellFamilyMask2` int(10) unsigned NOT NULL DEFAULT '0',
- `typeMask` int(10) unsigned NOT NULL DEFAULT '0',
- `spellTypeMask` int(10) unsigned NOT NULL DEFAULT '0',
- `spellPhaseMask` int(10) NOT NULL DEFAULT '0',
- `hitMask` int(10) NOT NULL DEFAULT '0',
- `attributesMask` int(10) unsigned NOT NULL DEFAULT '0',
- `ratePerMinute` float NOT NULL DEFAULT '0',
- `chance` float NOT NULL DEFAULT '0',
- `cooldown` float unsigned NOT NULL DEFAULT '0',
- `charges` int(10) unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`spellId`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+DROP TABLE IF EXISTS `spell_proc`; +CREATE TABLE `spell_proc` ( + `spellId` mediumint(8) NOT NULL DEFAULT '0', + `schoolMask` tinyint(4) NOT NULL DEFAULT '0', + `spellFamilyName` smallint(5) unsigned NOT NULL DEFAULT '0', + `spellFamilyMask0` int(10) unsigned NOT NULL DEFAULT '0', + `spellFamilyMask1` int(10) unsigned NOT NULL DEFAULT '0', + `spellFamilyMask2` int(10) unsigned NOT NULL DEFAULT '0', + `typeMask` int(10) unsigned NOT NULL DEFAULT '0', + `spellTypeMask` int(10) unsigned NOT NULL DEFAULT '0', + `spellPhaseMask` int(10) NOT NULL DEFAULT '0', + `hitMask` int(10) NOT NULL DEFAULT '0', + `attributesMask` int(10) unsigned NOT NULL DEFAULT '0', + `ratePerMinute` float NOT NULL DEFAULT '0', + `chance` float NOT NULL DEFAULT '0', + `cooldown` float unsigned NOT NULL DEFAULT '0', + `charges` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`spellId`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/sql/updates/world/2011_06_26_05_world_command.sql b/sql/old/3.3.5a/2011_06_26_05_world_command.sql index b18bbe61954..6946985b50a 100644 --- a/sql/updates/world/2011_06_26_05_world_command.sql +++ b/sql/old/3.3.5a/2011_06_26_05_world_command.sql @@ -1,3 +1,3 @@ -DELETE FROM `command` WHERE `name` = 'reload spell_proc';
-INSERT INTO `command` VALUES
-('reload spell_proc',3,'Syntax: .reload spell_proc\nReload spell_proc table.');
+DELETE FROM `command` WHERE `name` = 'reload spell_proc'; +INSERT INTO `command` VALUES +('reload spell_proc',3,'Syntax: .reload spell_proc\nReload spell_proc table.'); diff --git a/sql/updates/world/2011_06_26_06_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_26_06_world_achievement_criteria_data.sql index b9cd7b9f7a0..b9cd7b9f7a0 100644 --- a/sql/updates/world/2011_06_26_06_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_26_06_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_26_07_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_26_07_world_spell_script_names.sql index 137a14ee485..137a14ee485 100644 --- a/sql/updates/world/2011_06_26_07_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_26_07_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_27_00_world_sai.sql b/sql/old/3.3.5a/2011_06_27_00_world_sai.sql index 35973836e88..35973836e88 100644 --- a/sql/updates/world/2011_06_27_00_world_sai.sql +++ b/sql/old/3.3.5a/2011_06_27_00_world_sai.sql diff --git a/sql/updates/world/2011_06_27_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_06_27_01_world_spell_script_names.sql index 9f0f34526c8..9f0f34526c8 100644 --- a/sql/updates/world/2011_06_27_01_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_06_27_01_world_spell_script_names.sql diff --git a/sql/updates/world/2011_06_27_02_world_vehicle_scaling_info.sql b/sql/old/3.3.5a/2011_06_27_02_world_vehicle_scaling_info.sql index 748b0f7c07d..748b0f7c07d 100644 --- a/sql/updates/world/2011_06_27_02_world_vehicle_scaling_info.sql +++ b/sql/old/3.3.5a/2011_06_27_02_world_vehicle_scaling_info.sql diff --git a/sql/updates/world/2011_06_27_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_27_03_world_achievement_criteria_data.sql index 58623a56ad1..58623a56ad1 100644 --- a/sql/updates/world/2011_06_27_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_27_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_27_04_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_27_04_world_achievement_criteria_data.sql index da4ab96ec04..da4ab96ec04 100644 --- a/sql/updates/world/2011_06_27_04_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_27_04_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_27_05_world_areatrigger_teleport.sql b/sql/old/3.3.5a/2011_06_27_05_world_areatrigger_teleport.sql index 01bb958320e..01bb958320e 100644 --- a/sql/updates/world/2011_06_27_05_world_areatrigger_teleport.sql +++ b/sql/old/3.3.5a/2011_06_27_05_world_areatrigger_teleport.sql diff --git a/sql/updates/world/2011_06_27_06_world_command.sql b/sql/old/3.3.5a/2011_06_27_06_world_command.sql index 7b3f1e5765f..7b3f1e5765f 100644 --- a/sql/updates/world/2011_06_27_06_world_command.sql +++ b/sql/old/3.3.5a/2011_06_27_06_world_command.sql diff --git a/sql/updates/world/2011_06_27_06_world_creature.sql b/sql/old/3.3.5a/2011_06_27_06_world_creature.sql index e4e6d3c98ce..e4e6d3c98ce 100644 --- a/sql/updates/world/2011_06_27_06_world_creature.sql +++ b/sql/old/3.3.5a/2011_06_27_06_world_creature.sql diff --git a/sql/updates/world/2011_06_27_07_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_06_27_07_world_achievement_criteria_data.sql index 7498bb0b972..7498bb0b972 100644 --- a/sql/updates/world/2011_06_27_07_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_06_27_07_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_06_28_00_world_script_texts.sql b/sql/old/3.3.5a/2011_06_28_00_world_script_texts.sql index 61e14a9c297..61e14a9c297 100644 --- a/sql/updates/world/2011_06_28_00_world_script_texts.sql +++ b/sql/old/3.3.5a/2011_06_28_00_world_script_texts.sql diff --git a/sql/updates/world/2011_06_28_01_world_spelldifficulty_dbc.sql b/sql/old/3.3.5a/2011_06_28_01_world_spelldifficulty_dbc.sql index 9f98c1b77e5..9f98c1b77e5 100644 --- a/sql/updates/world/2011_06_28_01_world_spelldifficulty_dbc.sql +++ b/sql/old/3.3.5a/2011_06_28_01_world_spelldifficulty_dbc.sql diff --git a/sql/updates/world/2011_06_29_00_world_command.sql b/sql/old/3.3.5a/2011_06_29_00_world_command.sql index 0b3c0fb485c..0b3c0fb485c 100644 --- a/sql/updates/world/2011_06_29_00_world_command.sql +++ b/sql/old/3.3.5a/2011_06_29_00_world_command.sql diff --git a/sql/updates/world/2011_06_30_00_world_creature_text.sql b/sql/old/3.3.5a/2011_06_30_00_world_creature_text.sql index f8e815404fa..f8e815404fa 100644 --- a/sql/updates/world/2011_06_30_00_world_creature_text.sql +++ b/sql/old/3.3.5a/2011_06_30_00_world_creature_text.sql diff --git a/sql/updates/world/2011_06_30_01_world_sai.sql b/sql/old/3.3.5a/2011_06_30_01_world_sai.sql index 69ee25148a4..69ee25148a4 100644 --- a/sql/updates/world/2011_06_30_01_world_sai.sql +++ b/sql/old/3.3.5a/2011_06_30_01_world_sai.sql diff --git a/sql/updates/world/2011_07_01_00_world_waypoint_data.sql b/sql/old/3.3.5a/2011_07_01_00_world_waypoint_data.sql index fba07a6c517..fba07a6c517 100644 --- a/sql/updates/world/2011_07_01_00_world_waypoint_data.sql +++ b/sql/old/3.3.5a/2011_07_01_00_world_waypoint_data.sql diff --git a/sql/updates/world/2011_07_01_01_world_item_template.sql b/sql/old/3.3.5a/2011_07_01_01_world_item_template.sql index 40dffd3cc47..40dffd3cc47 100644 --- a/sql/updates/world/2011_07_01_01_world_item_template.sql +++ b/sql/old/3.3.5a/2011_07_01_01_world_item_template.sql diff --git a/sql/updates/world/2011_07_01_02_world_misc.sql b/sql/old/3.3.5a/2011_07_01_02_world_misc.sql index ad831b12949..ad831b12949 100644 --- a/sql/updates/world/2011_07_01_02_world_misc.sql +++ b/sql/old/3.3.5a/2011_07_01_02_world_misc.sql diff --git a/sql/updates/world/2011_07_01_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_07_01_03_world_achievement_criteria_data.sql index c5a71295a8f..c5a71295a8f 100644 --- a/sql/updates/world/2011_07_01_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_07_01_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_07_01_03_world_disables.sql b/sql/old/3.3.5a/2011_07_01_03_world_disables.sql index d3572f54cd4..d3572f54cd4 100644 --- a/sql/updates/world/2011_07_01_03_world_disables.sql +++ b/sql/old/3.3.5a/2011_07_01_03_world_disables.sql diff --git a/sql/updates/world/2011_07_02_00_world_areatrigger_scripts.sql b/sql/old/3.3.5a/2011_07_02_00_world_areatrigger_scripts.sql index 6a9a93e59c6..6a9a93e59c6 100644 --- a/sql/updates/world/2011_07_02_00_world_areatrigger_scripts.sql +++ b/sql/old/3.3.5a/2011_07_02_00_world_areatrigger_scripts.sql diff --git a/sql/updates/world/2011_07_02_00_world_instance_misc.sql b/sql/old/3.3.5a/2011_07_02_00_world_instance_misc.sql index f8d37d99385..f8d37d99385 100644 --- a/sql/updates/world/2011_07_02_00_world_instance_misc.sql +++ b/sql/old/3.3.5a/2011_07_02_00_world_instance_misc.sql diff --git a/sql/updates/world/2011_07_02_01_world_creature_addon.sql b/sql/old/3.3.5a/2011_07_02_01_world_creature_addon.sql index 19e22f5e654..19e22f5e654 100644 --- a/sql/updates/world/2011_07_02_01_world_creature_addon.sql +++ b/sql/old/3.3.5a/2011_07_02_01_world_creature_addon.sql diff --git a/sql/updates/world/2011_07_02_01_world_game_tele.sql b/sql/old/3.3.5a/2011_07_02_01_world_game_tele.sql index 47f1d6fa29b..47f1d6fa29b 100644 --- a/sql/updates/world/2011_07_02_01_world_game_tele.sql +++ b/sql/old/3.3.5a/2011_07_02_01_world_game_tele.sql diff --git a/sql/updates/world/2011_07_04_00_world_script_texts.sql b/sql/old/3.3.5a/2011_07_04_00_world_script_texts.sql index fb954ffa448..fb954ffa448 100644 --- a/sql/updates/world/2011_07_04_00_world_script_texts.sql +++ b/sql/old/3.3.5a/2011_07_04_00_world_script_texts.sql diff --git a/sql/updates/world/2011_07_04_01_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_07_04_01_world_spell_proc_event.sql index 9b716e918a6..9b716e918a6 100644 --- a/sql/updates/world/2011_07_04_01_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_07_04_01_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_07_04_02_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_07_04_02_world_spell_proc_event.sql index f848fc52279..f848fc52279 100644 --- a/sql/updates/world/2011_07_04_02_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_07_04_02_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_07_04_03_world_trinity_string.sql b/sql/old/3.3.5a/2011_07_04_03_world_trinity_string.sql index 322c8ab2877..322c8ab2877 100644 --- a/sql/updates/world/2011_07_04_03_world_trinity_string.sql +++ b/sql/old/3.3.5a/2011_07_04_03_world_trinity_string.sql diff --git a/sql/updates/world/2011_07_04_04_world_creature_ai_scripts.sql b/sql/old/3.3.5a/2011_07_04_04_world_creature_ai_scripts.sql index 19d97d48a12..19d97d48a12 100644 --- a/sql/updates/world/2011_07_04_04_world_creature_ai_scripts.sql +++ b/sql/old/3.3.5a/2011_07_04_04_world_creature_ai_scripts.sql diff --git a/sql/updates/world/2011_07_05_00_world_areatrigger_teleport.sql b/sql/old/3.3.5a/2011_07_05_00_world_areatrigger_teleport.sql index b5ee4cecb87..b5ee4cecb87 100644 --- a/sql/updates/world/2011_07_05_00_world_areatrigger_teleport.sql +++ b/sql/old/3.3.5a/2011_07_05_00_world_areatrigger_teleport.sql diff --git a/sql/updates/world/2011_07_05_01_world_reputation_rate.sql b/sql/old/3.3.5a/2011_07_05_01_world_reputation_rate.sql index 798f6106f72..798f6106f72 100644 --- a/sql/updates/world/2011_07_05_01_world_reputation_rate.sql +++ b/sql/old/3.3.5a/2011_07_05_01_world_reputation_rate.sql diff --git a/sql/updates/world/2011_07_05_02_world_reputation_rate.sql b/sql/old/3.3.5a/2011_07_05_02_world_reputation_rate.sql index bb907ba2cea..bb907ba2cea 100644 --- a/sql/updates/world/2011_07_05_02_world_reputation_rate.sql +++ b/sql/old/3.3.5a/2011_07_05_02_world_reputation_rate.sql diff --git a/sql/updates/world/2011_07_05_03_world_go_script_names.sql b/sql/old/3.3.5a/2011_07_05_03_world_go_script_names.sql index 154b886c2f0..154b886c2f0 100644 --- a/sql/updates/world/2011_07_05_03_world_go_script_names.sql +++ b/sql/old/3.3.5a/2011_07_05_03_world_go_script_names.sql diff --git a/sql/updates/world/2011_07_05_03_world_misc.sql b/sql/old/3.3.5a/2011_07_05_03_world_misc.sql index ab7b6669f83..ab7b6669f83 100644 --- a/sql/updates/world/2011_07_05_03_world_misc.sql +++ b/sql/old/3.3.5a/2011_07_05_03_world_misc.sql diff --git a/sql/updates/world/2011_07_05_04_world_areatrigger_teleport.sql b/sql/old/3.3.5a/2011_07_05_04_world_areatrigger_teleport.sql index 2e9ecda4ba8..2e9ecda4ba8 100644 --- a/sql/updates/world/2011_07_05_04_world_areatrigger_teleport.sql +++ b/sql/old/3.3.5a/2011_07_05_04_world_areatrigger_teleport.sql diff --git a/sql/updates/world/2011_07_06_00_world_sai.sql b/sql/old/3.3.5a/2011_07_06_00_world_sai.sql index cc70fe77cec..cc70fe77cec 100644 --- a/sql/updates/world/2011_07_06_00_world_sai.sql +++ b/sql/old/3.3.5a/2011_07_06_00_world_sai.sql diff --git a/sql/updates/world/2011_07_06_01_world_misc.sql b/sql/old/3.3.5a/2011_07_06_01_world_misc.sql index 10633a55a6f..10633a55a6f 100644 --- a/sql/updates/world/2011_07_06_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_07_06_01_world_misc.sql diff --git a/sql/updates/world/2011_07_07_00_world_creature.sql b/sql/old/3.3.5a/2011_07_07_00_world_creature.sql index 009a9fb8083..009a9fb8083 100644 --- a/sql/updates/world/2011_07_07_00_world_creature.sql +++ b/sql/old/3.3.5a/2011_07_07_00_world_creature.sql diff --git a/sql/updates/world/2011_07_07_01_world_misc.sql b/sql/old/3.3.5a/2011_07_07_01_world_misc.sql index 066656343c7..066656343c7 100644 --- a/sql/updates/world/2011_07_07_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_07_07_01_world_misc.sql diff --git a/sql/updates/world/2011_07_07_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_07_07_01_world_spell_script_names.sql index 50483434dc0..50483434dc0 100644 --- a/sql/updates/world/2011_07_07_01_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_07_07_01_world_spell_script_names.sql diff --git a/sql/updates/world/2011_07_07_02_world_creature_template.sql b/sql/old/3.3.5a/2011_07_07_02_world_creature_template.sql index 401a7ad61a0..401a7ad61a0 100644 --- a/sql/updates/world/2011_07_07_02_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_07_07_02_world_creature_template.sql diff --git a/sql/updates/world/2011_07_08_00_world_conditions.sql b/sql/old/3.3.5a/2011_07_08_00_world_conditions.sql index ed723c1d250..ed723c1d250 100644 --- a/sql/updates/world/2011_07_08_00_world_conditions.sql +++ b/sql/old/3.3.5a/2011_07_08_00_world_conditions.sql diff --git a/sql/updates/world/2011_07_15_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_07_15_00_world_spell_script_names.sql index 0afcbebe864..0afcbebe864 100644 --- a/sql/updates/world/2011_07_15_00_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_07_15_00_world_spell_script_names.sql diff --git a/sql/updates/world/2011_07_15_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_07_15_01_world_spell_script_names.sql index c6b334c179c..c6b334c179c 100644 --- a/sql/updates/world/2011_07_15_01_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_07_15_01_world_spell_script_names.sql diff --git a/sql/updates/world/2011_07_15_02_world_spell_bonus_data.sql b/sql/old/3.3.5a/2011_07_15_02_world_spell_bonus_data.sql index 004f3597df2..004f3597df2 100644 --- a/sql/updates/world/2011_07_15_02_world_spell_bonus_data.sql +++ b/sql/old/3.3.5a/2011_07_15_02_world_spell_bonus_data.sql diff --git a/sql/updates/world/2011_07_15_03_world_creature_template.sql b/sql/old/3.3.5a/2011_07_15_03_world_creature_template.sql index 610cc916cfd..610cc916cfd 100644 --- a/sql/updates/world/2011_07_15_03_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_07_15_03_world_creature_template.sql diff --git a/sql/updates/world/2011_07_15_04_world_spell_script_names.sql b/sql/old/3.3.5a/2011_07_15_04_world_spell_script_names.sql index 7fa8011ded5..7fa8011ded5 100644 --- a/sql/updates/world/2011_07_15_04_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_07_15_04_world_spell_script_names.sql diff --git a/sql/updates/world/2011_07_15_05_world_spell_bonus_data.sql b/sql/old/3.3.5a/2011_07_15_05_world_spell_bonus_data.sql index 4fab7dec63f..4fab7dec63f 100644 --- a/sql/updates/world/2011_07_15_05_world_spell_bonus_data.sql +++ b/sql/old/3.3.5a/2011_07_15_05_world_spell_bonus_data.sql diff --git a/sql/updates/world/2011_07_21_00_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_07_21_00_world_spell_proc_event.sql index 8cfcdd5e6cb..8cfcdd5e6cb 100644 --- a/sql/updates/world/2011_07_21_00_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_07_21_00_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_07_21_01_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_07_21_01_world_spell_proc_event.sql index fa372615617..fa372615617 100644 --- a/sql/updates/world/2011_07_21_01_world_spell_proc_event.sql +++ b/sql/old/3.3.5a/2011_07_21_01_world_spell_proc_event.sql diff --git a/sql/updates/world/2011_07_22_00_world_creature_template.sql b/sql/old/3.3.5a/2011_07_22_00_world_creature_template.sql index db66c8dc424..db66c8dc424 100644 --- a/sql/updates/world/2011_07_22_00_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_07_22_00_world_creature_template.sql diff --git a/sql/updates/world/2011_07_22_01_world_spell_bonus_data.sql b/sql/old/3.3.5a/2011_07_22_01_world_spell_bonus_data.sql index bd70f6e5e45..bd70f6e5e45 100644 --- a/sql/updates/world/2011_07_22_01_world_spell_bonus_data.sql +++ b/sql/old/3.3.5a/2011_07_22_01_world_spell_bonus_data.sql diff --git a/sql/updates/world/2011_07_23_00_world_areatrigger_scripts.sql b/sql/old/3.3.5a/2011_07_23_00_world_areatrigger_scripts.sql index b3630999865..b3630999865 100644 --- a/sql/updates/world/2011_07_23_00_world_areatrigger_scripts.sql +++ b/sql/old/3.3.5a/2011_07_23_00_world_areatrigger_scripts.sql diff --git a/sql/updates/world/2011_07_24_00_world_npc_vendor.sql b/sql/old/3.3.5a/2011_07_24_00_world_npc_vendor.sql index 46090f15321..46090f15321 100644 --- a/sql/updates/world/2011_07_24_00_world_npc_vendor.sql +++ b/sql/old/3.3.5a/2011_07_24_00_world_npc_vendor.sql diff --git a/sql/updates/auth/2011_07_27_00_auth_account.sql b/sql/old/3.3.5a/2011_07_27_00_auth_account.sql index 34393d518fc..34393d518fc 100644 --- a/sql/updates/auth/2011_07_27_00_auth_account.sql +++ b/sql/old/3.3.5a/2011_07_27_00_auth_account.sql diff --git a/sql/updates/world/2011_07_27_00_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_07_27_00_world_achievement_criteria_data.sql index a573b1baf46..a573b1baf46 100644 --- a/sql/updates/world/2011_07_27_00_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_07_27_00_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_07_27_01_world_trinity_string.sql b/sql/old/3.3.5a/2011_07_27_01_world_trinity_string.sql index 3e4d9c3d662..3e4d9c3d662 100644 --- a/sql/updates/world/2011_07_27_01_world_trinity_string.sql +++ b/sql/old/3.3.5a/2011_07_27_01_world_trinity_string.sql diff --git a/sql/updates/world/2011_07_29_00_world_gameobject_template.sql b/sql/old/3.3.5a/2011_07_29_00_world_gameobject_template.sql index 5133ec4da1f..5133ec4da1f 100644 --- a/sql/updates/world/2011_07_29_00_world_gameobject_template.sql +++ b/sql/old/3.3.5a/2011_07_29_00_world_gameobject_template.sql diff --git a/sql/updates/world/2011_08_01_00_world_sai.sql b/sql/old/3.3.5a/2011_08_01_00_world_sai.sql index 03e4152ccfd..03e4152ccfd 100644 --- a/sql/updates/world/2011_08_01_00_world_sai.sql +++ b/sql/old/3.3.5a/2011_08_01_00_world_sai.sql diff --git a/sql/updates/world/2011_08_01_01_world_gossips.sql b/sql/old/3.3.5a/2011_08_01_01_world_gossips.sql index dbe2bc92519..dbe2bc92519 100644 --- a/sql/updates/world/2011_08_01_01_world_gossips.sql +++ b/sql/old/3.3.5a/2011_08_01_01_world_gossips.sql diff --git a/sql/updates/world/2011_08_01_01_world_misc.sql b/sql/old/3.3.5a/2011_08_01_01_world_misc.sql index b9f99ff7fd9..b9f99ff7fd9 100644 --- a/sql/updates/world/2011_08_01_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_01_01_world_misc.sql diff --git a/sql/updates/world/2011_08_01_01_world_waypoints.sql b/sql/old/3.3.5a/2011_08_01_01_world_waypoints.sql index 8b44e18d983..8b44e18d983 100644 --- a/sql/updates/world/2011_08_01_01_world_waypoints.sql +++ b/sql/old/3.3.5a/2011_08_01_01_world_waypoints.sql diff --git a/sql/updates/world/2011_08_01_02_world_creature_text.sql b/sql/old/3.3.5a/2011_08_01_02_world_creature_text.sql index 10db087bf33..10db087bf33 100644 --- a/sql/updates/world/2011_08_01_02_world_creature_text.sql +++ b/sql/old/3.3.5a/2011_08_01_02_world_creature_text.sql diff --git a/sql/updates/world/2011_08_01_03_world_spell_misc.sql b/sql/old/3.3.5a/2011_08_01_03_world_spell_misc.sql index 0c9b2c3677f..0c9b2c3677f 100644 --- a/sql/updates/world/2011_08_01_03_world_spell_misc.sql +++ b/sql/old/3.3.5a/2011_08_01_03_world_spell_misc.sql diff --git a/sql/updates/characters/2011_08_03_00_characters_characters.sql b/sql/old/3.3.5a/2011_08_03_00_characters_characters.sql index caa69a8655c..caa69a8655c 100644 --- a/sql/updates/characters/2011_08_03_00_characters_characters.sql +++ b/sql/old/3.3.5a/2011_08_03_00_characters_characters.sql diff --git a/sql/updates/world/2011_08_06_00_world_creature_template.sql b/sql/old/3.3.5a/2011_08_06_00_world_creature_template.sql index 1bf46fce8c3..1bf46fce8c3 100644 --- a/sql/updates/world/2011_08_06_00_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_08_06_00_world_creature_template.sql diff --git a/sql/updates/world/2011_08_06_01_world_misc.sql b/sql/old/3.3.5a/2011_08_06_01_world_misc.sql index 01e4828c67e..01e4828c67e 100644 --- a/sql/updates/world/2011_08_06_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_06_01_world_misc.sql diff --git a/sql/updates/world/2011_08_06_02_world_misc.sql b/sql/old/3.3.5a/2011_08_06_02_world_misc.sql index 9479a6824f2..9479a6824f2 100644 --- a/sql/updates/world/2011_08_06_02_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_06_02_world_misc.sql diff --git a/sql/updates/world/2011_08_06_03_world_command.sql b/sql/old/3.3.5a/2011_08_06_03_world_command.sql index 7c627b1a94c..7c627b1a94c 100644 --- a/sql/updates/world/2011_08_06_03_world_command.sql +++ b/sql/old/3.3.5a/2011_08_06_03_world_command.sql diff --git a/sql/updates/world/2011_08_06_04_world_misc.sql b/sql/old/3.3.5a/2011_08_06_04_world_misc.sql index c1ce37fc6c7..c1ce37fc6c7 100644 --- a/sql/updates/world/2011_08_06_04_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_06_04_world_misc.sql diff --git a/sql/updates/world/2011_08_07_00_world_gameobject_loot_template.sql b/sql/old/3.3.5a/2011_08_07_00_world_gameobject_loot_template.sql index 8c6ebc7e83f..8c6ebc7e83f 100644 --- a/sql/updates/world/2011_08_07_00_world_gameobject_loot_template.sql +++ b/sql/old/3.3.5a/2011_08_07_00_world_gameobject_loot_template.sql diff --git a/sql/updates/world/2011_08_07_01_world_reference_loot_template.sql b/sql/old/3.3.5a/2011_08_07_01_world_reference_loot_template.sql index 4b48fff1143..4b48fff1143 100644 --- a/sql/updates/world/2011_08_07_01_world_reference_loot_template.sql +++ b/sql/old/3.3.5a/2011_08_07_01_world_reference_loot_template.sql diff --git a/sql/updates/world/2011_08_07_02_world_spawns.sql b/sql/old/3.3.5a/2011_08_07_02_world_spawns.sql index 76a898b92b6..76a898b92b6 100644 --- a/sql/updates/world/2011_08_07_02_world_spawns.sql +++ b/sql/old/3.3.5a/2011_08_07_02_world_spawns.sql diff --git a/sql/updates/world/2011_08_07_03_world_sai.sql b/sql/old/3.3.5a/2011_08_07_03_world_sai.sql index 7e64ae3de32..7e64ae3de32 100644 --- a/sql/updates/world/2011_08_07_03_world_sai.sql +++ b/sql/old/3.3.5a/2011_08_07_03_world_sai.sql diff --git a/sql/updates/world/2011_08_07_04_world_misc.sql b/sql/old/3.3.5a/2011_08_07_04_world_misc.sql index aa37e60aca5..aa37e60aca5 100644 --- a/sql/updates/world/2011_08_07_04_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_07_04_world_misc.sql diff --git a/sql/updates/world/2011_08_07_05_world_spell_misc.sql b/sql/old/3.3.5a/2011_08_07_05_world_spell_misc.sql index 1d26731309f..1d26731309f 100644 --- a/sql/updates/world/2011_08_07_05_world_spell_misc.sql +++ b/sql/old/3.3.5a/2011_08_07_05_world_spell_misc.sql diff --git a/sql/updates/world/2011_08_09_00_world_prospecting_loot_template.sql b/sql/old/3.3.5a/2011_08_09_00_world_prospecting_loot_template.sql index 5496b87812d..5496b87812d 100644 --- a/sql/updates/world/2011_08_09_00_world_prospecting_loot_template.sql +++ b/sql/old/3.3.5a/2011_08_09_00_world_prospecting_loot_template.sql diff --git a/sql/updates/world/2011_08_09_01_world_misc.sql b/sql/old/3.3.5a/2011_08_09_01_world_misc.sql index 8099e91f6f7..8099e91f6f7 100644 --- a/sql/updates/world/2011_08_09_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_09_01_world_misc.sql diff --git a/sql/updates/world/2011_08_12_00_world_creature_template.sql b/sql/old/3.3.5a/2011_08_12_00_world_creature_template.sql index 190e3ce1903..190e3ce1903 100644 --- a/sql/updates/world/2011_08_12_00_world_creature_template.sql +++ b/sql/old/3.3.5a/2011_08_12_00_world_creature_template.sql diff --git a/sql/updates/world/2011_08_13_00_world_trinity_string.sql b/sql/old/3.3.5a/2011_08_13_00_world_trinity_string.sql index 7d6f8f465ad..7d6f8f465ad 100644 --- a/sql/updates/world/2011_08_13_00_world_trinity_string.sql +++ b/sql/old/3.3.5a/2011_08_13_00_world_trinity_string.sql diff --git a/sql/updates/world/2011_08_13_01_world_command.sql b/sql/old/3.3.5a/2011_08_13_01_world_command.sql index 850ccb335d4..850ccb335d4 100644 --- a/sql/updates/world/2011_08_13_01_world_command.sql +++ b/sql/old/3.3.5a/2011_08_13_01_world_command.sql diff --git a/sql/updates/world/2011_08_13_02_world_creature_scriptname.sql b/sql/old/3.3.5a/2011_08_13_02_world_creature_scriptname.sql index c8b85c37f66..c8b85c37f66 100644 --- a/sql/updates/world/2011_08_13_02_world_creature_scriptname.sql +++ b/sql/old/3.3.5a/2011_08_13_02_world_creature_scriptname.sql diff --git a/sql/updates/world/2011_08_15_00_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_08_15_00_world_creature_loot_template.sql index a5bfd7c44a6..a5bfd7c44a6 100644 --- a/sql/updates/world/2011_08_15_00_world_creature_loot_template.sql +++ b/sql/old/3.3.5a/2011_08_15_00_world_creature_loot_template.sql diff --git a/sql/updates/world/2011_08_18_00_world_vehicle_template_accessory.sql b/sql/old/3.3.5a/2011_08_18_00_world_vehicle_template_accessory.sql index 2659570e464..2659570e464 100644 --- a/sql/updates/world/2011_08_18_00_world_vehicle_template_accessory.sql +++ b/sql/old/3.3.5a/2011_08_18_00_world_vehicle_template_accessory.sql diff --git a/sql/updates/world/2011_08_18_01_world_misc.sql b/sql/old/3.3.5a/2011_08_18_01_world_misc.sql index 0a01fc87763..0a01fc87763 100644 --- a/sql/updates/world/2011_08_18_01_world_misc.sql +++ b/sql/old/3.3.5a/2011_08_18_01_world_misc.sql diff --git a/sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_08_18_02_world_achievement_criteria_data.sql index 6c52e685054..6c52e685054 100644 --- a/sql/updates/world/2011_08_18_02_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_08_18_02_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_08_18_03_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_08_18_03_world_achievement_criteria_data.sql index 91e9715006d..91e9715006d 100644 --- a/sql/updates/world/2011_08_18_03_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_08_18_03_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_08_18_04_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_18_04_world_spell_script_names.sql index a5ad44c5659..a5ad44c5659 100644 --- a/sql/updates/world/2011_08_18_04_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_08_18_04_world_spell_script_names.sql diff --git a/sql/updates/world/2011_08_19_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_19_01_world_spell_script_names.sql index 2a54a117c2c..2a54a117c2c 100644 --- a/sql/updates/world/2011_08_19_01_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_08_19_01_world_spell_script_names.sql diff --git a/sql/updates/world/2011_08_19_02_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_19_02_world_spell_script_names.sql index 8035a77d778..8035a77d778 100644 --- a/sql/updates/world/2011_08_19_02_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_08_19_02_world_spell_script_names.sql diff --git a/sql/updates/world/2011_08_19_03_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_19_03_world_spell_script_names.sql index adda3f57015..adda3f57015 100644 --- a/sql/updates/world/2011_08_19_03_world_spell_script_names.sql +++ b/sql/old/3.3.5a/2011_08_19_03_world_spell_script_names.sql diff --git a/sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_08_20_00_world_achievement_criteria_data.sql index 50cc98f9661..50cc98f9661 100644 --- a/sql/updates/world/2011_08_20_00_world_achievement_criteria_data.sql +++ b/sql/old/3.3.5a/2011_08_20_00_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2011_08_21_00_world_command.sql b/sql/old/3.3.5a/2011_08_21_00_world_command.sql index f0b91cd3dfe..f0b91cd3dfe 100644 --- a/sql/updates/world/2011_08_21_00_world_command.sql +++ b/sql/old/3.3.5a/2011_08_21_00_world_command.sql diff --git a/sql/updates/world/2011_08_21_01_world_command.sql b/sql/old/3.3.5a/2011_08_21_01_world_command.sql index 0d814210871..0d814210871 100644 --- a/sql/updates/world/2011_08_21_01_world_command.sql +++ b/sql/old/3.3.5a/2011_08_21_01_world_command.sql diff --git a/sql/updates/world/2011_08_22_00_world_trinity_string.sql b/sql/old/3.3.5a/2011_08_22_00_world_trinity_string.sql index b6737833a65..b6737833a65 100644 --- a/sql/updates/world/2011_08_22_00_world_trinity_string.sql +++ b/sql/old/3.3.5a/2011_08_22_00_world_trinity_string.sql diff --git a/sql/updates/world/2011_08_23_00_world_creature_equip_template.sql b/sql/old/3.3.5a/2011_08_23_00_world_creature_equip_template.sql index dc388b96f7c..dc388b96f7c 100644 --- a/sql/updates/world/2011_08_23_00_world_creature_equip_template.sql +++ b/sql/old/3.3.5a/2011_08_23_00_world_creature_equip_template.sql diff --git a/sql/old/3.3.5a/2011_08_24_00_world_game_event.sql b/sql/old/3.3.5a/2011_08_24_00_world_game_event.sql new file mode 100644 index 00000000000..e8a12ce8f6c --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_00_world_game_event.sql @@ -0,0 +1,3 @@ +-- Resync Darkmoon Faerie +UPDATE `game_event` SET `start_time`='2011-10-02 00:01:00' WHERE `eventEntry`=5; +UPDATE `game_event` SET `start_time`='2011-11-06 00:01:00' WHERE `eventEntry`=3; diff --git a/sql/old/3.3.5a/2011_08_24_01_world_conditions.sql b/sql/old/3.3.5a/2011_08_24_01_world_conditions.sql new file mode 100644 index 00000000000..7c2eb323733 --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_01_world_conditions.sql @@ -0,0 +1,4 @@ +DELETE FROM `conditions` WHERE `SourceEntry`=32146; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) +VALUES +(13,0,32146,0,18,1,18240,0,0,'','Spell Liquid Fire can only be cast at Sunspring Villager'); diff --git a/sql/old/3.3.5a/2011_08_24_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_24_01_world_spell_script_names.sql new file mode 100644 index 00000000000..5370158f1a5 --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_01_world_spell_script_names.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=32146; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) +VALUES +(32146,'spell_q9874_liquid_fire'); diff --git a/sql/old/3.3.5a/2011_08_24_02_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_24_02_world_spell_script_names.sql new file mode 100644 index 00000000000..1799d408747 --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_02_world_spell_script_names.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=54190; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) +VALUES +(54190,'spell_q12805_lifeblood_dummy'); diff --git a/sql/old/3.3.5a/2011_08_24_03_world_access_requirement.sql b/sql/old/3.3.5a/2011_08_24_03_world_access_requirement.sql new file mode 100644 index 00000000000..96fc93e7804 --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_03_world_access_requirement.sql @@ -0,0 +1,3 @@ +UPDATE access_requirement SET level_min=75 WHERE mapId=632 AND difficulty=0; +UPDATE access_requirement SET level_min=75 WHERE mapId=658 AND difficulty=0; +UPDATE access_requirement SET level_min=75 WHERE mapId=668 AND difficulty=0; diff --git a/sql/old/3.3.5a/2011_08_24_04_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_08_24_04_world_achievement_criteria_data.sql new file mode 100644 index 00000000000..1eb6e3f5f36 --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_04_world_achievement_criteria_data.sql @@ -0,0 +1,5 @@ +DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7636,7740) AND `type`=11; +INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) +VALUES +(7636,11,0,0,'achievement_bg_sa_defense_of_ancients'), +(7740,11,0,0,'achievement_bg_sa_defense_of_ancients'); diff --git a/sql/old/3.3.5a/2011_08_24_05_world_creature_template.sql b/sql/old/3.3.5a/2011_08_24_05_world_creature_template.sql new file mode 100644 index 00000000000..dfd98417df5 --- /dev/null +++ b/sql/old/3.3.5a/2011_08_24_05_world_creature_template.sql @@ -0,0 +1,3 @@ +UPDATE `creature_template` SET `difficulty_entry_1`=35529 WHERE `entry`=35049; -- Memory of Heigan +UPDATE `creature_template` SET `unit_class`=2 WHERE `entry`=35310; -- Argent Lightwielder +UPDATE `creature_template` SET `unit_class`=2 WHERE `entry`=35308; -- Argent Priestess (1) diff --git a/sql/updates/world/2011_08_27_00_world_version.sql b/sql/updates/world/2011_08_27_00_world_version.sql new file mode 100644 index 00000000000..47acc763681 --- /dev/null +++ b/sql/updates/world/2011_08_27_00_world_version.sql @@ -0,0 +1 @@ +UPDATE `version` SET `db_version`='TDB 335.11.42' LIMIT 1; diff --git a/sql/updates/world/2011_08_27_01_world_spell_script_names.sql b/sql/updates/world/2011_08_27_01_world_spell_script_names.sql new file mode 100644 index 00000000000..7ca3c9f4d64 --- /dev/null +++ b/sql/updates/world/2011_08_27_01_world_spell_script_names.sql @@ -0,0 +1 @@ +UPDATE `spell_script_names` SET `ScriptName`='spell_marrowgar_coldflame_bonestorm' WHERE `spell_id`=72705 AND `ScriptName`='spell_marrowgar_coldflame'; diff --git a/sql/updates/world/2011_08_28_00_world_instance_misc.sql b/sql/updates/world/2011_08_28_00_world_instance_misc.sql new file mode 100644 index 00000000000..751321d1187 --- /dev/null +++ b/sql/updates/world/2011_08_28_00_world_instance_misc.sql @@ -0,0 +1,16 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (70346,72456,72868,72869); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,0,70346,0,18,1,37672,0,0, '', 'Slime Puddle - target Mutated Abomination'), +(13,0,72456,0,18,1,38285,0,0, '', 'Slime Puddle - target Mutated Abomination'), +(13,0,72868,0,18,1,37672,0,0, '', 'Slime Puddle - target Mutated Abomination'), +(13,0,72869,0,18,1,38285,0,0, '', 'Slime Puddle - target Mutated Abomination'); + +UPDATE `creature_template` SET `exp`=2,`spell1`=70360,`spell2`=70539 WHERE `entry`=37672; +UPDATE `creature_template` SET `exp`=2,`spell1`=72527,`spell2`=72457 WHERE `entry`=38605; +UPDATE `creature_template` SET `exp`=2,`spell1`=70360,`spell2`=72875 WHERE `entry`=38786; +UPDATE `creature_template` SET `exp`=2,`spell1`=72527,`spell2`=72876 WHERE `entry`=38787; + +UPDATE `creature_template` SET `exp`=2,`spell1`=70360,`spell2`=70539 WHERE `entry`=38285; +UPDATE `creature_template` SET `exp`=2,`spell1`=72527,`spell2`=72457 WHERE `entry`=38788; +UPDATE `creature_template` SET `exp`=2,`spell1`=70360,`spell2`=72875 WHERE `entry`=38789; +UPDATE `creature_template` SET `exp`=2,`spell1`=72527,`spell2`=72876 WHERE `entry`=38790; diff --git a/sql/updates/world/2011_08_29_00_world_instance_misc.sql b/sql/updates/world/2011_08_29_00_world_instance_misc.sql new file mode 100644 index 00000000000..51a5e651d74 --- /dev/null +++ b/sql/updates/world/2011_08_29_00_world_instance_misc.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_putricide_expunged_gas'; +DELETE FROM `spell_proc_event` WHERE `entry` IN (70215,72858,72859,72860,70672,72455,72832,72833); +INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`procFlags`,`procEx`,`ppmRate`,`CustomChance`,`Cooldown`) VALUES +(70672,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0), +(72455,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0), +(72832,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0), +(72833,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0); diff --git a/sql/updates/world/2011_08_30_00_world_spell_script_names.sql b/sql/updates/world/2011_08_30_00_world_spell_script_names.sql new file mode 100644 index 00000000000..ebfc8f0cc6e --- /dev/null +++ b/sql/updates/world/2011_08_30_00_world_spell_script_names.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=13161; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(13161, 'spell_hun_aspect_of_the_beast'); diff --git a/sql/updates/world/2011_09_01_00_world_disables.sql b/sql/updates/world/2011_09_01_00_world_disables.sql new file mode 100644 index 00000000000..ee952215204 --- /dev/null +++ b/sql/updates/world/2011_09_01_00_world_disables.sql @@ -0,0 +1,3 @@ +DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=23789; +INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `comment`) VALUES +(0, 23789, 8, 'Stoneclaw Totem TEST - can crash client by spawning too many totems'); diff --git a/sql/updates/world/2011_09_01_01_spell_script_names.sql b/sql/updates/world/2011_09_01_02_spell_script_names.sql index b7b6907b7f1..b7b6907b7f1 100644 --- a/sql/updates/world/2011_09_01_01_spell_script_names.sql +++ b/sql/updates/world/2011_09_01_02_spell_script_names.sql diff --git a/sql/updates/world/2011_09_02_00_world_misc.sql b/sql/updates/world/2011_09_02_00_world_misc.sql new file mode 100644 index 00000000000..fa5c2a7ba7b --- /dev/null +++ b/sql/updates/world/2011_09_02_00_world_misc.sql @@ -0,0 +1,17 @@ +-- Add spell Magma Totem TEST to disables table +DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=61904; +INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `comment`) VALUES +(0, 61904, 8, 'Magma Totem TEST - can crash client by spawning too many totems'); + +-- Move a high guid to a lower one (Vyragosa) +SET @oldguid = 250006; +SET @newguid = 202602; +UPDATE `creature` SET `guid`=@newguid WHERE `guid`=@oldguid; +UPDATE `creature_addon` SET `guid`=@newguid, `path_id`=@newguid*100 WHERE `guid`=@oldguid; +UPDATE `waypoint_data` SET `id`=@newguid*100 WHERE `id`=@oldguid*100; + +-- By Aokromes: +-- Orientation fix for portal from ghostlands to eastern plagelands. +UPDATE `areatrigger_teleport` SET `target_orientation`=2.255664 WHERE `id`=4386; +-- Spawn Arcane Container also on heroic mode SLab +UPDATE `gameobject` SET `spawnMask`=3 WHERE `guid`=22674; diff --git a/sql/updates/world/2011_09_02_02_world_spell_script_names.sql b/sql/updates/world/2011_09_02_02_world_spell_script_names.sql new file mode 100644 index 00000000000..b95cd2c17d6 --- /dev/null +++ b/sql/updates/world/2011_09_02_02_world_spell_script_names.sql @@ -0,0 +1,6 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_rotface_mutated_infection'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(69674,'spell_rotface_mutated_infection'), +(71224,'spell_rotface_mutated_infection'), +(73022,'spell_rotface_mutated_infection'), +(73023,'spell_rotface_mutated_infection'); diff --git a/sql/updates/world/2011_08_24_00_world_spell_script_names.sql b/sql/updates/world/2011_09_03_00_world_spell_script_names.sql index 6cec12b63fd..6cec12b63fd 100644 --- a/sql/updates/world/2011_08_24_00_world_spell_script_names.sql +++ b/sql/updates/world/2011_09_03_00_world_spell_script_names.sql diff --git a/sql/updates/world/2011_09_01_00_world_conditions.sql b/sql/updates/world/2011_09_03_01_world_conditions.sql index c830d3ad18e..c830d3ad18e 100644 --- a/sql/updates/world/2011_09_01_00_world_conditions.sql +++ b/sql/updates/world/2011_09_03_01_world_conditions.sql diff --git a/src/server/game/AI/CoreAI/GameObjectAI.cpp b/src/server/game/AI/CoreAI/GameObjectAI.cpp index 28c42a8ccdb..e30ead861ce 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.cpp +++ b/src/server/game/AI/CoreAI/GameObjectAI.cpp @@ -26,4 +26,4 @@ int GameObjectAI::Permissible(const GameObject* go) return PERMIT_BASE_NO; } -NullGameObjectAI::NullGameObjectAI(GameObject* g) : GameObjectAI(g) {}
\ No newline at end of file +NullGameObjectAI::NullGameObjectAI(GameObject* g) : GameObjectAI(g) {} diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp index 237bc479074..9943a6dde9c 100755 --- a/src/server/game/AI/CoreAI/GuardAI.cpp +++ b/src/server/game/AI/CoreAI/GuardAI.cpp @@ -126,13 +126,17 @@ void GuardAI::UpdateAI(const uint32 /*diff*/) if (!UpdateVictim()) return; - i_victimGuid = me->getVictim()->GetGUID(); + Unit* const victim = me->getVictim(); + if (!victim) + return; + + i_victimGuid = victim->GetGUID(); if (me->isAttackReady()) { - if (me->IsWithinMeleeRange(me->getVictim())) + if (me->IsWithinMeleeRange(victim)) { - me->AttackerStateUpdate(me->getVictim()); + me->AttackerStateUpdate(victim); me->resetAttackTimer(); } } diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 91de52db9f8..b6517e3396b 100755 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -42,22 +42,26 @@ void UnitAI::DoMeleeAttackIfReady() if (me->HasUnitState(UNIT_STAT_CASTING)) return; + Unit *victim = me->getVictim(); + if (!victim || !victim->IsInWorld()) + return; + //Make sure our attack is ready and we aren't currently casting before checking distance if (me->isAttackReady()) { //If we are within range melee the target - if (me->IsWithinMeleeRange(me->getVictim())) + if (me->IsWithinMeleeRange(victim)) { - me->AttackerStateUpdate(me->getVictim()); + me->AttackerStateUpdate(victim); me->resetAttackTimer(); } } if (me->haveOffhandWeapon() && me->isAttackReady(OFF_ATTACK)) { //If we are within range melee the target - if (me->IsWithinMeleeRange(me->getVictim())) + if (me->IsWithinMeleeRange(victim)) { - me->AttackerStateUpdate(me->getVictim(), OFF_ATTACK); + me->AttackerStateUpdate(victim, OFF_ATTACK); me->resetAttackTimer(OFF_ATTACK); } } diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index ec00b53b5ca..3a6240ae2f2 100755 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -120,7 +120,7 @@ class UnitAI virtual void DoAction(int32 const /*param*/) {} virtual uint32 GetData(uint32 /*id = 0*/) { return 0; } virtual void SetData(uint32 /*id*/, uint32 /*value*/) {} - virtual void SetGUID(uint64 const /*guid*/, int32 /*id*/ = 0) {} + virtual void SetGUID(uint64 /*guid*/, int32 /*id*/ = 0) {} virtual uint64 GetGUID(int32 /*id*/ = 0) { return 0; } Unit* SelectTarget(SelectAggroTarget targetType, uint32 position = 0, float dist = 0.0f, bool playerOnly = false, int32 aura = 0); diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 7305d41ec2d..470eb54b584 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -235,7 +235,7 @@ void SmartAI::EndPath(bool fail) } }else { - for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); iter++) + for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); ++iter) { if (GetScript()->IsPlayer((*iter))) { @@ -401,7 +401,7 @@ bool SmartAI::IsEscortInvokerInRange() } }else { - for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); iter++) + for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); ++iter) { if (GetScript()->IsPlayer((*iter))) { @@ -687,7 +687,7 @@ void SmartAI::SetData(uint32 id, uint32 value) GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, NULL, id, value); } -void SmartAI::SetGUID(const uint64 /*guid*/, int32 /*id*/) +void SmartAI::SetGUID(uint64 /*guid*/, int32 /*id*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index a4926226a91..ffa52db8f06 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -157,7 +157,7 @@ class SmartAI : public CreatureAI void SetData(uint32 id, uint32 value); // Used in scripts to share variables - void SetGUID(const uint64 guid, int32 id = 0); + void SetGUID(uint64 guid, int32 id = 0); // Used in scripts to share variables uint64 GetGUID(int32 id = 0); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index cbcbc1e2290..0de13280376 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2846,7 +2846,7 @@ void SmartScript::SetData(uint32 id, uint32 value) { } -void SmartScript::SetGUID(const uint64 guid, int32 id) +void SmartScript::SetGUID(uint64 guid, int32 id) { } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index ce40d42a74e..475d6e440c1 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -494,7 +494,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) switch (e.GetActionType()) { case SMART_ACTION_SET_FACTION: - if (e.action.faction.factionID && !sFactionStore.LookupEntry(e.action.faction.factionID)) + if (e.action.faction.factionID && !sFactionTemplateStore.LookupEntry(e.action.faction.factionID)) { sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent Faction %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.faction.factionID); return false; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 30024c42932..d6235b05667 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1153,7 +1153,6 @@ struct SmartScriptHolder runOnce = false; link = 0; entryOrGuid = 0; - link = 0; event_id = 0; enableTimed = false; } diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 78153885fa4..693f8ddae27 100755 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -93,7 +93,7 @@ bool ArenaTeam::Create(uint32 captainGuid, uint8 type, std::string teamName, uin return true; } -bool ArenaTeam::AddMember(const uint64 playerGuid) +bool ArenaTeam::AddMember(uint64 playerGuid) { std::string playerName; uint8 playerClass; @@ -276,7 +276,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result) return true; } -void ArenaTeam::SetCaptain(const uint64 guid) +void ArenaTeam::SetCaptain(uint64 guid) { // Disable remove/promote buttons Player* oldCaptain = ObjectAccessor::FindPlayer(GetCaptain()); @@ -537,7 +537,7 @@ uint8 ArenaTeam::GetSlotByType(uint32 type) return 0xFF; } -bool ArenaTeam::IsMember(const uint64 guid) const +bool ArenaTeam::IsMember(uint64 guid) const { for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr) if (itr->Guid == guid) @@ -901,7 +901,7 @@ ArenaTeamMember* ArenaTeam::GetMember(const std::string& name) return NULL; } -ArenaTeamMember* ArenaTeam::GetMember(const uint64 guid) +ArenaTeamMember* ArenaTeam::GetMember(uint64 guid) { for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr) if (itr->Guid == guid) diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h index 2874df84078..c65226a53aa 100755 --- a/src/server/game/Battlegrounds/ArenaTeam.h +++ b/src/server/game/Battlegrounds/ArenaTeam.h @@ -131,10 +131,10 @@ class ArenaTeam uint32 GetRating() const { return Stats.Rating; } uint32 GetAverageMMR(Group* group) const; - void SetCaptain(const uint64 guid); - bool AddMember(const uint64 PlayerGuid); + void SetCaptain(uint64 guid); + bool AddMember(uint64 PlayerGuid); - // Shouldn't be const uint64 ed, because than can reference guid from members on Disband + // Shouldn't be uint64 ed, because than can reference guid from members on Disband // and this method removes given record from list. So invalid reference can happen. void DelMember(uint64 guid, bool cleanDb); @@ -142,9 +142,9 @@ class ArenaTeam bool Empty() const { return Members.empty(); } MemberList::iterator m_membersBegin() { return Members.begin(); } MemberList::iterator m_membersEnd() { return Members.end(); } - bool IsMember(const uint64 guid) const; + bool IsMember(uint64 guid) const; - ArenaTeamMember* GetMember(const uint64 guid); + ArenaTeamMember* GetMember(uint64 guid); ArenaTeamMember* GetMember(const std::string& name); bool IsFighting() const; diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index f164f56dffd..59f31e36971 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -53,7 +53,7 @@ ArenaTeam* ArenaTeamMgr::GetArenaTeamByName(const std::string& arenaTeamName) co return NULL; } -ArenaTeam* ArenaTeamMgr::GetArenaTeamByCaptain(uint64 const guid) const +ArenaTeam* ArenaTeamMgr::GetArenaTeamByCaptain(uint64 guid) const { for (ArenaTeamContainer::const_iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr) if (itr->second->GetCaptain() == guid) @@ -146,18 +146,20 @@ void ArenaTeamMgr::DistributeArenaPoints() if (ArenaTeam * at = teamItr->second) at->UpdateArenaPointsHelper(PlayerPoints); + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + // Cycle that gives points to all players for (std::map<uint32, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr) { - // Update database - CharacterDatabase.PExecute("UPDATE characters SET arenaPoints = arenaPoints + '%u' WHERE guid = '%u'", playerItr->second, playerItr->first); - // Add points to player if online - Player* pl = ObjectAccessor::FindPlayer(playerItr->first); - if (pl) - pl->ModifyArenaPoints(playerItr->second); + if (Player* player = HashMapHolder<Player>::Find(playerItr->first)) + player->ModifyArenaPoints(playerItr->second, &trans); + else // Update database + trans->PAppend("UPDATE characters SET arenaPoints=arenaPoints+%u WHERE guid=%u", playerItr->second, playerItr->first); } + CharacterDatabase.CommitTransaction(trans); + PlayerPoints.clear(); sWorld->SendWorldText(LANG_DIST_ARENA_POINTS_ONLINE_END); diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h index 1e45158b353..31f0a1773da 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.h +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h @@ -30,8 +30,8 @@ public: typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamContainer; ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const; - ArenaTeam* GetArenaTeamByName(const std::string& arenaTeamName) const; - ArenaTeam* GetArenaTeamByCaptain(uint64 const guid) const; + ArenaTeam* GetArenaTeamByName(std::string const& arenaTeamName) const; + ArenaTeam* GetArenaTeamByCaptain(uint64 guid) const; void LoadArenaTeams(); void AddArenaTeam(ArenaTeam* arenaTeam); diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 853215c7026..0090e910e8a 100755 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1664,7 +1664,7 @@ void Battleground::SendWarningToAll(int32 entry, ...) data << (uint32)1; data << (uint8)0; data << (uint64)0; - data << (uint32)(strlen(msg.c_str())+1); + data << (uint32)(msg.length() + 1); data << msg.c_str(); data << (uint8)0; for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index b9a92f0cb44..ce7fa8d81a4 100755 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -520,7 +520,7 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId bgTypeId if (selectionWeights) { - if (!selectionWeights->size()) + if (selectionWeights->empty()) return NULL; uint32 Weight = 0; uint32 selectedWeight = 0; diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h index 0b0c0ceb2a6..b453ba59170 100755 --- a/src/server/game/Battlegrounds/BattlegroundMgr.h +++ b/src/server/game/Battlegrounds/BattlegroundMgr.h @@ -122,7 +122,7 @@ class BattlegroundMgr bool isTesting() const { return m_Testing; } static bool IsArenaType(BattlegroundTypeId bgTypeId); - static bool IsBattlegroundType(BattlegroundTypeId bgTypeId) { return !BattlegroundMgr::IsArenaType(bgTypeId); } + static bool IsBattlegroundType(BattlegroundTypeId bgTypeId) { return !IsArenaType(bgTypeId); } static BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, uint8 arenaType); static BattlegroundTypeId BGTemplateId(BattlegroundQueueTypeId bgQueueTypeId); static uint8 BGArenaType(BattlegroundQueueTypeId bgQueueTypeId); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index 8f0e285f4bc..d477096e8e6 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -50,6 +50,7 @@ void BattlegroundSA::Reset() for (uint8 i = 0; i <= 5; i++) GateStatus[i] = BG_SA_GATE_OK; ShipsStarted = false; + gateDestroyed = false; Status = BG_SA_WARMUP; } @@ -261,7 +262,7 @@ void BattlegroundSA::StartShips() for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++) { - for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end();itr++) + for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if (Player* p = ObjectAccessor::FindPlayer(itr->first)) { @@ -610,6 +611,7 @@ void BattlegroundSA::DestroyGate(Player* player, GameObject* go) if (uws) UpdateWorldState(uws, GateStatus[i]); bool rewardHonor = true; + gateDestroyed = true; switch(i) { case BG_SA_GREEN_GATE: diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index e404d350329..1bc00459cd5 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -484,6 +484,12 @@ class BattlegroundSA : public Battleground /// Update score board void UpdatePlayerScore(Player *Source, uint32 type, uint32 value, bool doAddHonor = true); + // Achievement Defense of the Ancients + bool gateDestroyed; + + /// Id of attacker team + TeamId Attackers; + private: /** @@ -536,8 +542,6 @@ class BattlegroundSA : public Battleground /// Send packet to player for destroy boats (client part) void SendTransportsRemove(Player* player); - /// Id of attacker team - TeamId Attackers; /// Totale elapsed time of current round uint32 TotalTime; /// Max time of round diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index c56b975acb9..d39018e69a4 100755 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -377,7 +377,6 @@ void Channel::UnBan(uint64 good, const char *badname) void Channel::Password(uint64 p, const char *pass) { - std::string plName; uint32 sec = 0; Player *plr = ObjectAccessor::FindPlayer(p); if (plr) diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 9509302f87b..cecbd223ed9 100755 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -653,7 +653,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, co continue; bool match = false; - if (strlen(table[i].Name) > strlen(cmd.c_str())) + if (strlen(table[i].Name) > cmd.length()) { for (uint32 j = 0; table[j].Name != NULL; ++j) { @@ -694,7 +694,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, co SetSentErrorMessage(false); // table[i].Name == "" is special case: send original command to handler - if ((table[i].Handler)(this, strlen(table[i].Name) != 0 ? text : oldtext)) + if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext)) { if (table[i].SecurityLevel > SEC_PLAYER) { diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp index a0f590eca91..c03433e93b2 100755 --- a/src/server/game/Chat/Commands/Level2.cpp +++ b/src/server/game/Chat/Commands/Level2.cpp @@ -408,21 +408,31 @@ bool ChatHandler::HandlePInfoCommand(const char* args) // Add map, zone, subzone and phase to output int locale = GetSessionDbcLocale(); + std::string areaName = "<unknown>"; + std::string zoneName = ""; MapEntry const* map = sMapStore.LookupEntry(mapId); AreaTableEntry const* area = GetAreaEntryByAreaID(areaId); - AreaTableEntry const* zone = NULL; + if (area) + { + areaName = area->area_name[locale]; + + AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone); + + if (zone) + zoneName = zone->area_name[locale]; + } if (target) { - if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone)) - PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zone->area_name[locale], area->area_name[locale], phase); + if (!zoneName.empty()) + PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zoneName.c_str(), areaName.c_str(), phase); else - PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], area->area_name[locale], "--", phase); + PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], areaName.c_str(), "<unknown>", phase); } else - PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], area->area_name[locale]); + PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], areaName.c_str()); return true; } diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 242110f4a22..bf3650f611e 100755 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -301,7 +301,7 @@ HostileReference* ThreatContainer::selectNextVictim(Creature* attacker, HostileR bool noPriorityTargetFound = false; std::list<HostileReference*>::const_iterator lastRef = iThreatList.end(); - lastRef--; + --lastRef; for (std::list<HostileReference*>::const_iterator iter = iThreatList.begin(); iter != iThreatList.end() && !found;) { diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index b34ac0bc681..fc709599da5 100755 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -18,7 +18,7 @@ #include "DBCStores.h" -#include "Logging/Log.h" +#include "Log.h" #include "SharedDefines.h" #include "SpellMgr.h" @@ -239,7 +239,7 @@ inline void LoadDBC(uint32& availableDbcLocales, StoreProblemList& errors, DBCSt if (FILE* f = fopen(dbcFilename.c_str(), "rb")) { char buf[100]; - snprintf(buf, 100, " (exists, but has %d fields instead of " SIZEFMTD ") Possible wrong client version.", storage.GetFieldCount(), strlen(storage.GetFormat())); + snprintf(buf, 100, " (exists, but has %u fields instead of " SIZEFMTD ") Possible wrong client version.", storage.GetFieldCount(), strlen(storage.GetFormat())); errors.push_back(dbcFilename + buf); fclose(f); } @@ -363,7 +363,7 @@ void LoadDBCStores(const std::string& dataPath) // fill data for (uint32 i = 1; i < sMapDifficultyStore.GetNumRows(); ++i) if (MapDifficultyEntry const* entry = sMapDifficultyStore.LookupEntry(i)) - sMapDifficultyMap[MAKE_PAIR32(entry->MapId, entry->Difficulty)] = MapDifficulty(entry->resetTime, entry->maxPlayers, strlen(entry->areaTriggerText)>0); + sMapDifficultyMap[MAKE_PAIR32(entry->MapId, entry->Difficulty)] = MapDifficulty(entry->resetTime, entry->maxPlayers, entry->areaTriggerText[0] != '\0'); sMapDifficultyStore.Clear(); LoadDBC(availableDbcLocales, bad_dbc_files, sMovieStore, dbcPath, "Movie.dbc"); diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index c08255048b8..a45bafe8a2e 100755 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1172,12 +1172,12 @@ struct LFGDungeonEntry uint32 reclevel; // 20 uint32 recminlevel; // 21 uint32 recmaxlevel; // 22 - int32 map; // 23 + int32 map; // 23 uint32 difficulty; // 24 - //uint32 unk; // 25 + //uint32 flags; // 25 uint32 type; // 26 - //uint32 unk2; // 27 - //char* unk3; // 28 + //uint32 unk; // 27 + //char* iconname; // 28 uint32 expansion; // 29 //uint32 unk4; // 30 uint32 grouptype; // 31 @@ -1538,7 +1538,7 @@ struct SpellEntry uint32 Effect[MAX_SPELL_EFFECTS]; // 71-73 m_effect int32 EffectDieSides[MAX_SPELL_EFFECTS]; // 74-76 m_effectDieSides float EffectRealPointsPerLevel[MAX_SPELL_EFFECTS]; // 77-79 m_effectRealPointsPerLevel - int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) + int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82 m_effectBasePoints (must not be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) uint32 EffectMechanic[MAX_SPELL_EFFECTS]; // 83-85 m_effectMechanic uint32 EffectImplicitTargetA[MAX_SPELL_EFFECTS]; // 86-88 m_implicitTargetA uint32 EffectImplicitTargetB[MAX_SPELL_EFFECTS]; // 89-91 m_implicitTargetB diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 87466436980..c9752c6377b 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -308,7 +308,7 @@ void LFGMgr::Update(uint32 diff) @param[in] guid Player or group guid to add to queue @param[in] queueId Queue Id to add player/group to */ -void LFGMgr::AddToQueue(const uint64 guid, uint8 queueId) +void LFGMgr::AddToQueue(uint64 guid, uint8 queueId) { if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP)) queueId = 0; @@ -329,7 +329,7 @@ void LFGMgr::AddToQueue(const uint64 guid, uint8 queueId) @param[in] guid Player or group guid to add to queue @return true if guid was found in main queue. */ -bool LFGMgr::RemoveFromQueue(const uint64 guid) +bool LFGMgr::RemoveFromQueue(uint64 guid) { for (LfgGuidListMap::iterator it = m_currentQueue.begin(); it != m_currentQueue.end(); ++it) it->second.remove(guid); @@ -743,7 +743,7 @@ LfgProposal* LFGMgr::FindNewGroups(LfgGuidList& check, LfgGuidList& all) return NULL; // Try to match with queued groups - while (!pProposal && all.size() > 0) + while (!pProposal && !all.empty()) { check.push_back(all.front()); all.pop_front(); @@ -1250,7 +1250,7 @@ bool LFGMgr::CheckGroupRoles(LfgRolesMap& groles, bool removeLeaderFlag /*= true @param[in] guid Player guid to update answer @param[in] accept Player answer */ -void LFGMgr::UpdateProposal(uint32 proposalId, const uint64 guid, bool accept) +void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept) { // Check if the proposal exists LfgProposalMap::iterator itProposal = m_Proposals.find(proposalId); @@ -1364,17 +1364,29 @@ void LFGMgr::UpdateProposal(uint32 proposalId, const uint64 guid, bool accept) switch(role) { case ROLE_DAMAGE: - m_WaitTimeDps = int32((m_WaitTimeDps * m_NumWaitTimeDps + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeDps); + { + uint32 old_number = m_NumWaitTimeDps++; + m_WaitTimeDps = int32((m_WaitTimeDps * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeDps); break; + } case ROLE_HEALER: - m_WaitTimeHealer = int32((m_WaitTimeHealer * m_NumWaitTimeHealer + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeHealer); + { + uint32 old_number = m_NumWaitTimeHealer++; + m_WaitTimeHealer = int32((m_WaitTimeHealer * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeHealer); break; + } case ROLE_TANK: - m_WaitTimeTank = int32((m_WaitTimeTank * m_NumWaitTimeTank + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeTank); + { + uint32 old_number = m_NumWaitTimeTank++; + m_WaitTimeTank = int32((m_WaitTimeTank * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeTank); break; + } default: - m_WaitTimeAvg = int32((m_WaitTimeAvg * m_NumWaitTimeAvg + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeAvg); + { + uint32 old_number = m_NumWaitTimeAvg++; + m_WaitTimeAvg = int32((m_WaitTimeAvg * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeAvg); break; + } } grp->SetLfgRoles(pguid, pProposal->players[pguid]->role); SetState(pguid, LFG_STATE_DUNGEON); @@ -1519,7 +1531,7 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t @param[in] victim Victim guid @param[in] reason Kick reason */ -void LFGMgr::InitBoot(Group* grp, const uint64 kicker, const uint64 victim, std::string reason) +void LFGMgr::InitBoot(Group* grp, uint64 kicker, uint64 victim, std::string reason) { if (!grp) return; @@ -1889,7 +1901,7 @@ std::string LFGMgr::ConcatenateGuids(LfgGuidList check) return o.str(); } -LfgState LFGMgr::GetState(const uint64 guid) +LfgState LFGMgr::GetState(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetState: [" UI64FMTD "]", guid); if (IS_GROUP(guid)) @@ -1898,61 +1910,61 @@ LfgState LFGMgr::GetState(const uint64 guid) return m_Players[guid].GetState(); } -uint32 LFGMgr::GetDungeon(const uint64 guid, bool asId /*= true*/) +uint32 LFGMgr::GetDungeon(uint64 guid, bool asId /*= true*/) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetDungeon: [" UI64FMTD "] asId: %u", guid, asId); return m_Groups[guid].GetDungeon(asId); } -uint8 LFGMgr::GetRoles(const uint64 guid) +uint8 LFGMgr::GetRoles(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetRoles: [" UI64FMTD "]", guid); return m_Players[guid].GetRoles(); } -const std::string& LFGMgr::GetComment(const uint64 guid) +const std::string& LFGMgr::GetComment(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetComment: [" UI64FMTD "]", guid); return m_Players[guid].GetComment(); } -const LfgDungeonSet& LFGMgr::GetSelectedDungeons(const uint64 guid) +const LfgDungeonSet& LFGMgr::GetSelectedDungeons(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetSelectedDungeons: [" UI64FMTD "]", guid); return m_Players[guid].GetSelectedDungeons(); } -const LfgLockMap& LFGMgr::GetLockedDungeons(const uint64 guid) +const LfgLockMap& LFGMgr::GetLockedDungeons(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetLockedDungeons: [" UI64FMTD "]", guid); return m_Players[guid].GetLockedDungeons(); } -uint8 LFGMgr::GetKicksLeft(const uint64 guid) +uint8 LFGMgr::GetKicksLeft(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetKicksLeft: [" UI64FMTD "]", guid); return m_Groups[guid].GetKicksLeft(); } -uint8 LFGMgr::GetVotesNeeded(const uint64 guid) +uint8 LFGMgr::GetVotesNeeded(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetVotesNeeded: [" UI64FMTD "]", guid); return m_Groups[guid].GetVotesNeeded(); } -void LFGMgr::RestoreState(const uint64 guid) +void LFGMgr::RestoreState(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RestoreState: [" UI64FMTD "]", guid); m_Groups[guid].RestoreState(); } -void LFGMgr::ClearState(const uint64 guid) +void LFGMgr::ClearState(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::ClearState: [" UI64FMTD "]", guid); m_Players[guid].ClearState(); } -void LFGMgr::SetState(const uint64 guid, LfgState state) +void LFGMgr::SetState(uint64 guid, LfgState state) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetState: [" UI64FMTD "] state %u", guid, state); if (IS_GROUP(guid)) @@ -1961,43 +1973,43 @@ void LFGMgr::SetState(const uint64 guid, LfgState state) m_Players[guid].SetState(state); } -void LFGMgr::SetDungeon(const uint64 guid, uint32 dungeon) +void LFGMgr::SetDungeon(uint64 guid, uint32 dungeon) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetDungeon: [" UI64FMTD "] dungeon %u", guid, dungeon); m_Groups[guid].SetDungeon(dungeon); } -void LFGMgr::SetRoles(const uint64 guid, uint8 roles) +void LFGMgr::SetRoles(uint64 guid, uint8 roles) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetRoles: [" UI64FMTD "] roles: %u", guid, roles); m_Players[guid].SetRoles(roles); } -void LFGMgr::SetComment(const uint64 guid, const std::string& comment) +void LFGMgr::SetComment(uint64 guid, const std::string& comment) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetComment: [" UI64FMTD "] comment: %s", guid, comment.c_str()); m_Players[guid].SetComment(comment); } -void LFGMgr::SetSelectedDungeons(const uint64 guid, const LfgDungeonSet& dungeons) +void LFGMgr::SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetSelectedDungeons: [" UI64FMTD "]", guid); m_Players[guid].SetSelectedDungeons(dungeons); } -void LFGMgr::SetLockedDungeons(const uint64 guid, const LfgLockMap& lock) +void LFGMgr::SetLockedDungeons(uint64 guid, const LfgLockMap& lock) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetLockedDungeons: [" UI64FMTD "]", guid); m_Players[guid].SetLockedDungeons(lock); } -void LFGMgr::DecreaseKicksLeft(const uint64 guid) +void LFGMgr::DecreaseKicksLeft(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::DecreaseKicksLeft: [" UI64FMTD "]", guid); m_Groups[guid].DecreaseKicksLeft(); } -void LFGMgr::RemovePlayerData(const uint64 guid) +void LFGMgr::RemovePlayerData(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RemovePlayerData: [" UI64FMTD "]", guid); LfgPlayerDataMap::iterator it = m_Players.find(guid); @@ -2005,7 +2017,7 @@ void LFGMgr::RemovePlayerData(const uint64 guid) m_Players.erase(it); } -void LFGMgr::RemoveGroupData(const uint64 guid) +void LFGMgr::RemoveGroupData(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RemoveGroupData: [" UI64FMTD "]", guid); LfgGroupDataMap::iterator it = m_Groups.find(guid); diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 1ca256f5a92..6c42b1728c1 100755 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -272,45 +272,45 @@ class LFGMgr void UpdateRoleCheck(uint64 gguid, uint64 guid = 0, uint8 roles = ROLE_NONE); // Proposals - void UpdateProposal(uint32 proposalId, const uint64 guid, bool accept); + void UpdateProposal(uint32 proposalId, uint64 guid, bool accept); // Teleportation void TeleportPlayer(Player* plr, bool out, bool fromOpcode = false); // Vote kick - void InitBoot(Group* grp, const uint64 kguid, const uint64 vguid, std::string reason); + void InitBoot(Group* grp, uint64 kguid, uint64 vguid, std::string reason); void UpdateBoot(Player* plr, bool accept); void OfferContinue(Group* grp); void InitializeLockedDungeons(Player* plr); - void SetComment(const uint64 guid, const std::string& comment); - const LfgLockMap& GetLockedDungeons(const uint64 guid); - LfgState GetState(const uint64 guid); - const LfgDungeonSet& GetSelectedDungeons(const uint64 guid); - uint32 GetDungeon(const uint64 guid, bool asId = true); - void ClearState(const uint64 guid); - void RemovePlayerData(const uint64 guid); - void RemoveGroupData(const uint64 guid); - uint8 GetKicksLeft(const uint64 gguid); - uint8 GetVotesNeeded(const uint64 gguid); - void SetRoles(const uint64 guid, uint8 roles); + void SetComment(uint64 guid, const std::string& comment); + const LfgLockMap& GetLockedDungeons(uint64 guid); + LfgState GetState(uint64 guid); + const LfgDungeonSet& GetSelectedDungeons(uint64 guid); + uint32 GetDungeon(uint64 guid, bool asId = true); + void ClearState(uint64 guid); + void RemovePlayerData(uint64 guid); + void RemoveGroupData(uint64 guid); + uint8 GetKicksLeft(uint64 gguid); + uint8 GetVotesNeeded(uint64 gguid); + void SetRoles(uint64 guid, uint8 roles); private: - uint8 GetRoles(const uint64 guid); - const std::string& GetComment(const uint64 gguid); - void RestoreState(const uint64 guid); - void SetState(const uint64 guid, LfgState state); - void SetDungeon(const uint64 guid, uint32 dungeon); - void SetSelectedDungeons(const uint64 guid, const LfgDungeonSet& dungeons); - void SetLockedDungeons(const uint64 guid, const LfgLockMap& lock); - void DecreaseKicksLeft(const uint64 guid); + uint8 GetRoles(uint64 guid); + const std::string& GetComment(uint64 gguid); + void RestoreState(uint64 guid); + void SetState(uint64 guid, LfgState state); + void SetDungeon(uint64 guid, uint32 dungeon); + void SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons); + void SetLockedDungeons(uint64 guid, const LfgLockMap& lock); + void DecreaseKicksLeft(uint64 guid); void NoExiste(uint8 lala); // Queue - void AddToQueue(const uint64 guid, uint8 queueId); - bool RemoveFromQueue(const uint64 guid); + void AddToQueue(uint64 guid, uint8 queueId); + bool RemoveFromQueue(uint64 guid); // Proposals void RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType type); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index bf61e98bb41..7ad0386dcae 100755 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -740,10 +740,10 @@ class Creature : public Unit, public GridObject<Creature> class AssistDelayEvent : public BasicEvent { public: - AssistDelayEvent(const uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { } + AssistDelayEvent(uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { } bool Execute(uint64 e_time, uint32 p_time); - void AddAssistant(const uint64 guid) { m_assistants.push_back(guid); } + void AddAssistant(uint64 guid) { m_assistants.push_back(guid); } private: AssistDelayEvent(); diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 92c57009832..d1ad656ba3d 100755 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -203,7 +203,7 @@ void TempSummon::InitStats(uint32 duration) if (m_Properties->Faction) setFaction(m_Properties->Faction); - else if (IsVehicle()) // properties should be vehicle + else if (IsVehicle() && owner) // properties should be vehicle setFaction(owner->getFaction()); } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 5308c30a196..83ece2eda31 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1631,6 +1631,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) if (Unit* owner = GetOwner()) { trigger->setFaction(owner->getFaction()); + // needed for GO casts for proper target validation checks + trigger->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, owner->GetGUID()); trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID()); } else diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 4e7be5f140d..aa056e793f0 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -69,8 +69,8 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1) m_objectTypeId = TYPEID_OBJECT; m_objectType = TYPEMASK_OBJECT; - m_uint32Values = 0; - m_uint32Values_mirror = 0; + m_uint32Values = NULL; + _changedFields = NULL; m_valuesCount = 0; m_inWorld = false; @@ -112,17 +112,17 @@ Object::~Object() } delete [] m_uint32Values; - delete [] m_uint32Values_mirror; + delete [] _changedFields; } void Object::_InitValues() { - m_uint32Values = new uint32[ m_valuesCount ]; + m_uint32Values = new uint32[m_valuesCount]; memset(m_uint32Values, 0, m_valuesCount*sizeof(uint32)); - m_uint32Values_mirror = new uint32[ m_valuesCount ]; - memset(m_uint32Values_mirror, 0, m_valuesCount*sizeof(uint32)); + _changedFields = new bool[m_valuesCount]; + memset(_changedFields, 0, m_valuesCount*sizeof(bool)); m_objectUpdated = false; } @@ -159,6 +159,30 @@ std::string Object::_ConcatFields(uint16 startIndex, uint16 size) const return ss.str(); } +void Object::AddToWorld() +{ + if (m_inWorld) + return; + + ASSERT(m_uint32Values); + + m_inWorld = true; + + // synchronize values mirror with values array (changes will send in updatecreate opcode any way + ClearUpdateMask(true); +} + +void Object::RemoveFromWorld() +{ + if (!m_inWorld) + return; + + m_inWorld = false; + + // if we remove from world then sending changes not required + ClearUpdateMask(true); +} + void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags) const { ByteBuffer buf(500); @@ -296,17 +320,11 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags) const *data << ((Unit*)this)->GetSpeed(MOVE_TURN_RATE); *data << ((Unit*)this)->GetSpeed(MOVE_PITCH_RATE); + const Player* player = ToPlayer(); + // 0x08000000 - if (GetTypeId() == TYPEID_PLAYER && this->ToPlayer()->isInFlight()) + if (player && player->isInFlight()) { - //WPAssert(this->ToPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE); - - Player* player = const_cast<Object*>(this)->ToPlayer(); - if (!player) - return; - - FlightPathMovementGenerator *fmg = (FlightPathMovementGenerator*)(player->GetMotionMaster()->top()); - uint32 flags3 = SPLINEFLAG_GLIDE; *data << uint32(flags3); // splines flag? @@ -330,7 +348,9 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags) const } } - TaxiPathNodeList& path = const_cast<TaxiPathNodeList&>(fmg->GetPath()); + FlightPathMovementGenerator *fmg = + (FlightPathMovementGenerator*)(player->GetMotionMaster()->top()); + TaxiPathNodeList const& path = fmg->GetPath(); float x, y, z; player->GetPosition(x, y, z); @@ -532,7 +552,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask if (index == UNIT_NPC_FLAGS) { // remove custom flag before sending - uint32 appendValue = m_uint32Values[ index ]; + uint32 appendValue = m_uint32Values[index]; if (GetTypeId() == TYPEID_UNIT) { @@ -557,7 +577,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask else if (index >= UNIT_FIELD_BASEATTACKTIME && index <= UNIT_FIELD_RANGEDATTACKTIME) { // convert from float to uint32 and send - *data << uint32(m_floatValues[ index ] < 0 ? 0 : m_floatValues[ index ]); + *data << uint32(m_floatValues[index] < 0 ? 0 : m_floatValues[index]); } // there are some float values which may be negative or can't get negative due to other checks else if ((index >= UNIT_FIELD_NEGSTAT0 && index <= UNIT_FIELD_NEGSTAT4) || @@ -565,22 +585,33 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask (index >= UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE && index <= (UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE + 6)) || (index >= UNIT_FIELD_POSSTAT0 && index <= UNIT_FIELD_POSSTAT4)) { - *data << uint32(m_floatValues[ index ]); + *data << uint32(m_floatValues[index]); } // Gamemasters should be always able to select units - remove not selectable flag else if (index == UNIT_FIELD_FLAGS) { if (target->isGameMaster()) - *data << (m_uint32Values[ index ] & ~UNIT_FLAG_NOT_SELECTABLE); + *data << (m_uint32Values[index] & ~UNIT_FLAG_NOT_SELECTABLE); else - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } // use modelid_a if not gm, _h if gm for CREATURE_FLAG_EXTRA_TRIGGER creatures else if (index == UNIT_FIELD_DISPLAYID) { if (GetTypeId() == TYPEID_UNIT) { - const CreatureTemplate* cinfo = this->ToCreature()->GetCreatureInfo(); + CreatureTemplate const* cinfo = ToCreature()->GetCreatureInfo(); + + // this also applies for transform auras + if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(ToUnit()->getTransForm())) + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + if (transform->Effects[i].IsAura(SPELL_AURA_TRANSFORM)) + if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(transform->Effects[i].MiscValue)) + { + cinfo = transformInfo; + break; + } + if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) { if (target->isGameMaster()) @@ -599,10 +630,10 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask } } else - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } else - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } // hide lootable animation for unallowed players else if (index == UNIT_DYNAMIC_FLAGS) @@ -615,7 +646,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask { if (creature->isTappedBy(target)) { - dynamicFlags |= (UNIT_DYNFLAG_TAPPED|UNIT_DYNFLAG_TAPPED_BY_PLAYER); + dynamicFlags |= (UNIT_DYNFLAG_TAPPED | UNIT_DYNFLAG_TAPPED_BY_PLAYER); } else { @@ -638,17 +669,17 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask // FG: pretend that OTHER players in own group are friendly ("blue") else if (index == UNIT_FIELD_BYTES_2 || index == UNIT_FIELD_FACTIONTEMPLATE) { - if (((Unit*)this)->IsControlledByPlayer() && target != this && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && ((Unit*)this)->IsInRaidWith(target)) + Unit const* unit = ToUnit(); + if (unit->IsControlledByPlayer() && target != this && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(target)) { - FactionTemplateEntry const *ft1, *ft2; - ft1 = ((Unit*)this)->getFactionTemplateEntry(); - ft2 = target->getFactionTemplateEntry(); + FactionTemplateEntry const* ft1 = unit->getFactionTemplateEntry(); + FactionTemplateEntry const* ft2 = target->getFactionTemplateEntry(); if (ft1 && ft2 && !ft1->IsFriendlyTo(*ft2)) { if (index == UNIT_FIELD_BYTES_2) { // Allow targetting opposite faction in party when enabled in config - *data << (m_uint32Values[ index ] & ((UNIT_BYTE2_FLAG_SANCTUARY /*| UNIT_BYTE2_FLAG_AURAS | UNIT_BYTE2_FLAG_UNK5*/) << 8)); // this flag is at uint8 offset 1 !! + *data << (m_uint32Values[index] & ((UNIT_BYTE2_FLAG_SANCTUARY /*| UNIT_BYTE2_FLAG_AURAS | UNIT_BYTE2_FLAG_UNK5*/) << 8)); // this flag is at uint8 offset 1 !! } else { @@ -658,15 +689,15 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask } } else - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } else - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } else { // send in current format (float as float, uint32 as uint32) - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } } } @@ -682,7 +713,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask { if (IsActivateToQuest) { - switch(((GameObject*)this)->GetGoType()) + switch (ToGameObject()->GetGoType()) { case GAMEOBJECT_TYPE_CHEST: if (target->isGameMaster()) @@ -720,7 +751,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask } } else - *data << m_uint32Values[ index ]; // other cases + *data << m_uint32Values[index]; // other cases } } } @@ -731,7 +762,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask if (updateMask->GetBit(index)) { // send in current format (float as float, uint32 as uint32) - *data << m_uint32Values[ index ]; + *data << m_uint32Values[index]; } } } @@ -739,7 +770,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask void Object::ClearUpdateMask(bool remove) { - memcpy(m_uint32Values_mirror, m_uint32Values, m_valuesCount*sizeof(uint32)); + memset(_changedFields, 0, m_valuesCount*sizeof(bool)); if (m_objectUpdated) { @@ -749,7 +780,7 @@ void Object::ClearUpdateMask(bool remove) } } -void Object::BuildFieldsUpdate(Player *pl, UpdateDataMapType &data_map) const +void Object::BuildFieldsUpdate(Player* pl, UpdateDataMapType& data_map) const { UpdateDataMapType::iterator iter = data_map.find(pl); @@ -763,7 +794,7 @@ void Object::BuildFieldsUpdate(Player *pl, UpdateDataMapType &data_map) const BuildValuesUpdateBlockForPlayer(&iter->second, iter->first); } -void Object::_LoadIntoDataField(const char* data, uint32 startOffset, uint32 count) +void Object::_LoadIntoDataField(char const* data, uint32 startOffset, uint32 count) { if (!data) return; @@ -774,24 +805,26 @@ void Object::_LoadIntoDataField(const char* data, uint32 startOffset, uint32 cou return; for (uint32 index = 0; index < count; ++index) + { m_uint32Values[startOffset + index] = atol(tokens[index]); + _changedFields[startOffset + index] = true; + } } -void Object::_SetUpdateBits(UpdateMask *updateMask, Player* /*target*/) const +void Object::_SetUpdateBits(UpdateMask* updateMask, Player* /*target*/) const { - uint32 *value = m_uint32Values; - uint32 *mirror = m_uint32Values_mirror; + bool* indexes = _changedFields; - for (uint16 index = 0; index < m_valuesCount; ++index, ++value, ++mirror) + for (uint16 index = 0; index < m_valuesCount; ++index, ++indexes) { - if (*mirror != *value) + if (*indexes) updateMask->SetBit(index); } } -void Object::_SetCreateBits(UpdateMask *updateMask, Player* /*target*/) const +void Object::_SetCreateBits(UpdateMask* updateMask, Player* /*target*/) const { - uint32 *value = m_uint32Values; + uint32* value = m_uint32Values; for (uint16 index = 0; index < m_valuesCount; ++index, ++value) { @@ -804,17 +837,15 @@ void Object::SetInt32Value(uint16 index, int32 value) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (m_int32Values[ index ] != value) + if (m_int32Values[index] != value) { - m_int32Values[ index ] = value; + m_int32Values[index] = value; + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -823,17 +854,15 @@ void Object::SetUInt32Value(uint16 index, uint32 value) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (m_uint32Values[ index ] != value) + if (m_uint32Values[index] != value) { - m_uint32Values[ index ] = value; + m_uint32Values[index] = value; + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -842,67 +871,69 @@ void Object::UpdateUInt32Value(uint16 index, uint32 value) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - m_uint32Values[ index ] = value; + m_uint32Values[index] = value; + _changedFields[index] = true; } -void Object::SetUInt64Value(uint16 index, const uint64 value) +void Object::SetUInt64Value(uint16 index, uint64 value) { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true)); - if (*((uint64*)&(m_uint32Values[ index ])) != value) + if (*((uint64*)&(m_uint32Values[index])) != value) { - m_uint32Values[ index ] = *((uint32*)&value); - m_uint32Values[ index + 1 ] = *(((uint32*)&value) + 1); + m_uint32Values[index] = PAIR64_LOPART(value); + m_uint32Values[index + 1] = PAIR64_HIPART(value); + _changedFields[index] = true; + _changedFields[index + 1] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } -bool Object::AddUInt64Value(uint16 index, const uint64 value) +bool Object::AddUInt64Value(uint16 index, uint64 value) { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , true)); if (value && !*((uint64*)&(m_uint32Values[index]))) { - m_uint32Values[ index ] = *((uint32*)&value); - m_uint32Values[ index + 1 ] = *(((uint32*)&value) + 1); + m_uint32Values[index] = PAIR64_LOPART(value); + m_uint32Values[index + 1] = PAIR64_HIPART(value); + _changedFields[index] = true; + _changedFields[index + 1] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } + return true; } + return false; } -bool Object::RemoveUInt64Value(uint16 index, const uint64 value) +bool Object::RemoveUInt64Value(uint16 index, uint64 value) { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , true)); if (value && *((uint64*)&(m_uint32Values[index])) == value) { - m_uint32Values[ index ] = 0; - m_uint32Values[ index + 1 ] = 0; + m_uint32Values[index] = 0; + m_uint32Values[index + 1] = 0; + _changedFields[index] = true; + _changedFields[index + 1] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } + return true; } + return false; } @@ -910,17 +941,15 @@ void Object::SetFloatValue(uint16 index, float value) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (m_floatValues[ index ] != value) + if (m_floatValues[index] != value) { - m_floatValues[ index ] = value; + m_floatValues[index] = value; + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -935,18 +964,16 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value) return; } - if (uint8(m_uint32Values[ index ] >> (offset * 8)) != value) + if (uint8(m_uint32Values[index] >> (offset * 8)) != value) { - m_uint32Values[ index ] &= ~uint32(uint32(0xFF) << (offset * 8)); - m_uint32Values[ index ] |= uint32(uint32(value) << (offset * 8)); + m_uint32Values[index] &= ~uint32(uint32(0xFF) << (offset * 8)); + m_uint32Values[index] |= uint32(uint32(value) << (offset * 8)); + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -961,18 +988,16 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value) return; } - if (uint16(m_uint32Values[ index ] >> (offset * 16)) != value) + if (uint16(m_uint32Values[index] >> (offset * 16)) != value) { - m_uint32Values[ index ] &= ~uint32(uint32(0xFFFF) << (offset * 16)); - m_uint32Values[ index ] |= uint32(uint32(value) << (offset * 16)); + m_uint32Values[index] &= ~uint32(uint32(0xFFFF) << (offset * 16)); + m_uint32Values[index] |= uint32(uint32(value) << (offset * 16)); + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1028,20 +1053,18 @@ void Object::ApplyModPositiveFloatValue(uint16 index, float val, bool apply) void Object::SetFlag(uint16 index, uint32 newFlag) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - uint32 oldval = m_uint32Values[ index ]; + uint32 oldval = m_uint32Values[index]; uint32 newval = oldval | newFlag; if (oldval != newval) { - m_uint32Values[ index ] = newval; + m_uint32Values[index] = newval; + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1051,20 +1074,18 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag) ASSERT(index < m_valuesCount || PrintIndexError(index, true)); ASSERT(m_uint32Values); - uint32 oldval = m_uint32Values[ index ]; + uint32 oldval = m_uint32Values[index]; uint32 newval = oldval & ~oldFlag; if (oldval != newval) { - m_uint32Values[ index ] = newval; + m_uint32Values[index] = newval; + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1079,17 +1100,15 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag) return; } - if (!(uint8(m_uint32Values[ index ] >> (offset * 8)) & newFlag)) + if (!(uint8(m_uint32Values[index] >> (offset * 8)) & newFlag)) { - m_uint32Values[ index ] |= uint32(uint32(newFlag) << (offset * 8)); + m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8)); + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1104,17 +1123,15 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag) return; } - if (uint8(m_uint32Values[ index ] >> (offset * 8)) & oldFlag) + if (uint8(m_uint32Values[index] >> (offset * 8)) & oldFlag) { - m_uint32Values[ index ] &= ~uint32(uint32(oldFlag) << (offset * 8)); + m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8)); + _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1127,7 +1144,7 @@ bool Object::PrintIndexError(uint32 index, bool set) const return false; } -bool Position::HasInLine(const Unit* const target, float distance, float width) const +bool Position::HasInLine(Unit const* target, float distance, float width) const { if (!HasInArc(M_PI, target) || !target->IsWithinDist3d(m_positionX, m_positionY, m_positionZ, distance)) return false; @@ -1143,14 +1160,14 @@ std::string Position::ToString() const return sstr.str(); } -ByteBuffer &operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const & streamer) +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer) { float x, y, z, o; buf >> x >> y >> z >> o; streamer.m_pos->Relocate(x, y, z, o); return buf; } -ByteBuffer & operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const & streamer) +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer) { float x, y, z; streamer.m_pos->GetPosition(x, y, z); @@ -1158,7 +1175,7 @@ ByteBuffer & operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const & s return buf; } -ByteBuffer &operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const & streamer) +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer) { float x, y, z; buf >> x >> y >> z; @@ -1166,7 +1183,7 @@ ByteBuffer &operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const & st return buf; } -ByteBuffer & operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const & streamer) +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer) { float x, y, z, o; streamer.m_pos->GetPosition(x, y, z, o); @@ -1192,19 +1209,16 @@ void MovementInfo::OutDebug() if (flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT) sLog->outString("time2: %u", t_time2); } + if ((flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) - { sLog->outString("pitch: %f", pitch); - } + sLog->outString("fallTime: %u", fallTime); if (flags & MOVEMENTFLAG_JUMPING) - { sLog->outString("j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", j_zspeed, j_sinAngle, j_cosAngle, j_xyspeed); - } + if (flags & MOVEMENTFLAG_SPLINE_ELEVATION) - { sLog->outString("splineElevation: %f", splineElevation); - } } WorldObject::WorldObject(): WorldLocation(), @@ -1328,7 +1342,9 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool bool WorldObject::IsWithinLOSInMap(const WorldObject* obj) const { - if (!IsInMap(obj)) return false; + if (!IsInMap(obj)) + return false; + float ox, oy, oz; obj->GetPosition(ox, oy, oz); return(IsWithinLOS(ox, oy, oz)); @@ -1811,14 +1827,11 @@ void WorldObject::SendPlaySound(uint32 Sound, bool OnlySelf) void Object::ForceValuesUpdateAtIndex(uint32 i) { - m_uint32Values_mirror[i] = GetUInt32Value(i) + 1; // makes server think the field changed - if (m_inWorld) + _changedFields[i] = true; + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } @@ -2015,6 +2028,12 @@ void Unit::BuildHeartBeatMsg(WorldPacket *data) const BuildMovementPacket(data); } +void WorldObject::SendMessageToSet(WorldPacket *data, bool self) +{ + SendMessageToSetInRange(data, GetVisibilityRange(), self); +} + + void WorldObject::SendMessageToSetInRange(WorldPacket *data, float dist, bool /*self*/) { Trinity::MessageDistDeliverer notifier(this, data, dist); @@ -2368,7 +2387,7 @@ Creature* WorldObject::SummonTrigger(float x, float y, float z, float ang, uint3 return summon; } -Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive) +Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive) const { Creature *creature = NULL; Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck checker(*this, entry, alive, range); @@ -2377,7 +2396,7 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive return creature; } -GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) +GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const { GameObject *go = NULL; Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range); @@ -2386,7 +2405,7 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) return go; } -void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) +void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const { CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY())); Cell cell(pair); @@ -2400,7 +2419,7 @@ void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList cell.Visit(pair, visitor, *(this->GetMap())); } -void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) +void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const { CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY())); Cell cell(pair); @@ -2749,19 +2768,23 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/) struct WorldObjectChangeAccumulator { - UpdateDataMapType &i_updateDatas; - WorldObject &i_object; + UpdateDataMapType& i_updateDatas; + WorldObject& i_object; std::set<uint64> plr_list; WorldObjectChangeAccumulator(WorldObject &obj, UpdateDataMapType &d) : i_updateDatas(d), i_object(obj) {} void Visit(PlayerMapType &m) { + Player* source = NULL; for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - BuildPacket(iter->getSource()); - if (!iter->getSource()->GetSharedVisionList().empty()) + source = iter->getSource(); + + BuildPacket(source); + + if (!source->GetSharedVisionList().empty()) { - SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); - for (; it != iter->getSource()->GetSharedVisionList().end(); ++it) + SharedVisionList::const_iterator it = source->GetSharedVisionList().begin(); + for (; it != source->GetSharedVisionList().end(); ++it) BuildPacket(*it); } } @@ -2769,30 +2792,37 @@ struct WorldObjectChangeAccumulator void Visit(CreatureMapType &m) { + Creature* source = NULL; for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - if (!iter->getSource()->GetSharedVisionList().empty()) + source = iter->getSource(); + if (!source->GetSharedVisionList().empty()) { - SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); - for (; it != iter->getSource()->GetSharedVisionList().end(); ++it) + SharedVisionList::const_iterator it = source->GetSharedVisionList().begin(); + for (; it != source->GetSharedVisionList().end(); ++it) BuildPacket(*it); } } } + void Visit(DynamicObjectMapType &m) { + DynamicObject* source = NULL; for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - uint64 guid = iter->getSource()->GetCasterGUID(); + source = iter->getSource(); + uint64 guid = source->GetCasterGUID(); + if (IS_PLAYER_GUID(guid)) { //Caster may be NULL if DynObj is in removelist if (Player *caster = ObjectAccessor::FindPlayer(guid)) - if (caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID()) + if (caster->GetUInt64Value(PLAYER_FARSIGHT) == source->GetGUID()) BuildPacket(caster); } } } + void BuildPacket(Player* plr) { // Only send update once to a player diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index a0433f8f475..9de040714e5 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -125,29 +125,9 @@ class Object virtual ~Object (); bool IsInWorld() const { return m_inWorld; } - virtual void AddToWorld() - { - if (m_inWorld) - return; - - ASSERT(m_uint32Values); - - m_inWorld = true; - - // synchronize values mirror with values array (changes will send in updatecreate opcode any way - ClearUpdateMask(true); - } - - virtual void RemoveFromWorld() - { - if (!m_inWorld) - return; - m_inWorld = false; - - // if we remove from world then sending changes not required - ClearUpdateMask(true); - } + virtual void AddToWorld(); + virtual void RemoveFromWorld(); uint64 GetGUID() const { return GetUInt64Value(0); } uint32 GetGUIDLow() const { return GUID_LOPART(GetUInt64Value(0)); } @@ -172,54 +152,54 @@ class Object int32 GetInt32Value(uint16 index) const { ASSERT(index < m_valuesCount || PrintIndexError(index , false)); - return m_int32Values[ index ]; + return m_int32Values[index]; } uint32 GetUInt32Value(uint16 index) const { ASSERT(index < m_valuesCount || PrintIndexError(index , false)); - return m_uint32Values[ index ]; + return m_uint32Values[index]; } uint64 GetUInt64Value(uint16 index) const { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , false)); - return *((uint64*)&(m_uint32Values[ index ])); + return *((uint64*)&(m_uint32Values[index])); } float GetFloatValue(uint16 index) const { ASSERT(index < m_valuesCount || PrintIndexError(index , false)); - return m_floatValues[ index ]; + return m_floatValues[index]; } uint8 GetByteValue(uint16 index, uint8 offset) const { ASSERT(index < m_valuesCount || PrintIndexError(index , false)); ASSERT(offset < 4); - return *(((uint8*)&m_uint32Values[ index ])+offset); + return *(((uint8*)&m_uint32Values[index])+offset); } uint16 GetUInt16Value(uint16 index, uint8 offset) const { ASSERT(index < m_valuesCount || PrintIndexError(index , false)); ASSERT(offset < 2); - return *(((uint16*)&m_uint32Values[ index ])+offset); + return *(((uint16*)&m_uint32Values[index])+offset); } - void SetInt32Value(uint16 index, int32 value); - void SetUInt32Value(uint16 index, uint32 value); - void UpdateUInt32Value(uint16 index, uint32 value); - void SetUInt64Value(uint16 index, const uint64 value); - void SetFloatValue(uint16 index, float value); + void SetInt32Value(uint16 index, int32 value); + void SetUInt32Value(uint16 index, uint32 value); + void UpdateUInt32Value(uint16 index, uint32 value); + void SetUInt64Value(uint16 index, uint64 value); + void SetFloatValue(uint16 index, float value); void SetByteValue(uint16 index, uint8 offset, uint8 value); void SetUInt16Value(uint16 index, uint8 offset, uint16 value); void SetInt16Value(uint16 index, uint8 offset, int16 value) { SetUInt16Value(index, offset, (uint16)value); } void SetStatFloatValue(uint16 index, float value); void SetStatInt32Value(uint16 index, int32 value); - bool AddUInt64Value(uint16 index, const uint64 value); - bool RemoveUInt64Value(uint16 index, const uint64 value); + bool AddUInt64Value(uint16 index, uint64 value); + bool RemoveUInt64Value(uint16 index, uint64 value); void ApplyModUInt32Value(uint16 index, int32 val, bool apply); void ApplyModInt32Value(uint16 index, int32 val, bool apply); @@ -248,7 +228,7 @@ class Object bool HasFlag(uint16 index, uint32 flag) const { if (index >= m_valuesCount && !PrintIndexError(index , false)) return false; - return (m_uint32Values[ index ] & flag) != 0; + return (m_uint32Values[index] & flag) != 0; } void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag); @@ -328,6 +308,9 @@ class Object const Unit* ToUnit() const {if (GetTypeId() == TYPEID_UNIT || GetTypeId() == TYPEID_PLAYER) return (const Unit*)((Unit*)this); else return NULL; } GameObject* ToGameObject(){ if (GetTypeId() == TYPEID_GAMEOBJECT) return reinterpret_cast<GameObject*>(this); else return NULL; } const GameObject* ToGameObject() const {if (GetTypeId() == TYPEID_GAMEOBJECT) return (const GameObject*)((GameObject*)this); else return NULL; } + + Corpse* ToCorpse(){ if (GetTypeId() == TYPEID_CORPSE) return reinterpret_cast<Corpse*>(this); else return NULL; } + const Corpse* ToCorpse() const {if (GetTypeId() == TYPEID_CORPSE) return (const Corpse*)((Corpse*)this); else return NULL; } protected: Object (); @@ -355,7 +338,7 @@ class Object float *m_floatValues; }; - uint32 *m_uint32Values_mirror; + bool* _changedFields; uint16 m_valuesCount; @@ -468,13 +451,13 @@ struct Position bool IsInDist(const Position *pos, float dist) const { return GetExactDistSq(pos) < dist * dist; } bool HasInArc(float arcangle, const Position *pos) const; - bool HasInLine(const Unit* target, float distance, float width) const; + bool HasInLine(Unit const* target, float distance, float width) const; std::string ToString() const; }; -ByteBuffer &operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const & streamer); -ByteBuffer & operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const & streamer); -ByteBuffer &operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const & streamer); -ByteBuffer & operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const & streamer); +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer); +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer); +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer); +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer); struct MovementInfo { @@ -722,7 +705,7 @@ class WorldObject : public Object, public WorldLocation virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units - virtual void SendMessageToSet(WorldPacket *data, bool self) { SendMessageToSetInRange(data, GetVisibilityRange(), self); } + virtual void SendMessageToSet(WorldPacket *data, bool self); virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self); virtual void SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr); @@ -803,11 +786,11 @@ class WorldObject : public Object, public WorldLocation GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime); Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL); - Creature* FindNearestCreature(uint32 entry, float range, bool alive = true); - GameObject* FindNearestGameObject(uint32 entry, float range); + Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const; + GameObject* FindNearestGameObject(uint32 entry, float range) const; - void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange); - void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange); + void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const; + void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const; void DestroyForNearbyPlayers(); virtual void UpdateObjectVisibility(bool forced = true); @@ -881,11 +864,14 @@ namespace Trinity template<class T> void RandomResizeList(std::list<T> &_list, uint32 _size) { - while (_list.size() > _size) + size_t list_size = _list.size(); + + while (list_size > _size) { typename std::list<T>::iterator itr = _list.begin(); - advance(itr, urand(0, _list.size() - 1)); + std::advance(itr, urand(0, list_size - 1)); _list.erase(itr); + --list_size; } } diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h index b231cb38e1a..6dd04e1dee4 100755 --- a/src/server/game/Entities/Object/ObjectDefines.h +++ b/src/server/game/Entities/Object/ObjectDefines.h @@ -78,7 +78,7 @@ enum HighGuid #define _GUID_LOPART_2(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF)) #define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x0000000000FFFFFF)) -inline bool IsGuidHaveEnPart(uint64 const guid) +inline bool IsGuidHaveEnPart(uint64 guid) { switch(GUID_HIPART(guid)) { diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp index 3884ce9f26f..547c415bc73 100755 --- a/src/server/game/Entities/Object/Updates/UpdateData.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp @@ -34,7 +34,7 @@ void UpdateData::AddOutOfRangeGUID(std::set<uint64>& guids) m_outOfRangeGUIDs.insert(guids.begin(), guids.end()); } -void UpdateData::AddOutOfRangeGUID(const uint64 guid) +void UpdateData::AddOutOfRangeGUID(uint64 guid) { m_outOfRangeGUIDs.insert(guid); } diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h index f81a0464043..87e98ead61c 100755 --- a/src/server/game/Entities/Object/Updates/UpdateData.h +++ b/src/server/game/Entities/Object/Updates/UpdateData.h @@ -53,7 +53,7 @@ class UpdateData UpdateData(); void AddOutOfRangeGUID(std::set<uint64>& guids); - void AddOutOfRangeGUID(const uint64 guid); + void AddOutOfRangeGUID(uint64 guid); void AddUpdateBlock(const ByteBuffer &block); bool BuildPacket(WorldPacket* packet); bool HasData() { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty(); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3de39aa1d74..58a297a8b2c 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -918,7 +918,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) PlayerInfo const* info = sObjectMgr->GetPlayerInfo(createInfo->Race, createInfo->Class); if (!info) { - sLog->outError("Player have incorrect race/class pair. Can't be loaded."); + sLog->outError("Player (Name %s) has incorrect race/class pair. Can't be loaded.", m_name.c_str()); return false; } @@ -1244,9 +1244,15 @@ void Player::StopMirrorTimer(MirrorTimerType Type) GetSession()->SendPacket(&data); } +bool Player::IsImmuneToEnvironmentalDamage() +{ + // check for GM and death state included in isAttackableByAOE + return (!isTargetableForAttack(false)); +} + uint32 Player::EnvironmentalDamage(EnviromentalDamage type, uint32 damage) { - if (!isAlive() || isGameMaster()) + if (IsImmuneToEnvironmentalDamage()) return 0; // Absorb, resist some environmental damage type @@ -18141,7 +18147,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result) PlayerInfo const *info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); if (!info) { - sLog->outError("Player have incorrect race/class pair. Can't be loaded."); + sLog->outError("Player (Name %s) has incorrect race/class pair. Can't be loaded.", GetName()); return false; } @@ -19604,8 +19610,8 @@ void Player::SendRemoveControlBar() bool Player::IsAffectedBySpellmod(SpellInfo const *spellInfo, SpellModifier *mod, Spell* spell) { - if (!mod || !spellInfo) - return false; + if (!mod || !spellInfo) + return false; // Mod out of charges if (spell && mod->charges == -1 && spell->m_appliedMods.find(mod->ownerAura) == spell->m_appliedMods.end()) @@ -21151,19 +21157,23 @@ void Player::UpdateTriggerVisibility() if (m_clientGUIDs.empty()) return; + if (!IsInWorld()) + return; + UpdateData udata; WorldPacket packet; - for (ClientGUIDs::iterator itr=m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) + for (ClientGUIDs::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) { if (IS_CREATURE_GUID(*itr)) { - Creature *obj = IsInWorld() ? GetMap()->GetCreature(*itr) : NULL; - if (!obj || !obj->isTrigger()) + Creature *obj = GetMap()->GetCreature(*itr); + if (!obj || !(obj->isTrigger() || obj->HasAuraType(SPELL_AURA_TRANSFORM))) // can transform into triggers continue; obj->BuildCreateUpdateBlockForPlayer(&udata, this); } } + udata.BuildPacket(&packet); GetSession()->SendPacket(&packet); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ead732d93a6..9a0f35313f6 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1567,7 +1567,7 @@ class Player : public Unit, public GridObject<Player> uint64 GetSelection() const { return m_curSelection; } Unit *GetSelectedUnit() const; Player *GetSelectedPlayer() const; - void SetSelection(const uint64 guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); } + void SetSelection(uint64 guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); } uint8 GetComboPoints() { return m_comboPoints; } uint64 GetComboTarget() const { return m_comboTarget; } @@ -1902,7 +1902,7 @@ class Player : public Unit, public GridObject<Player> void UpdateRuneRegen(RuneType rune); uint64 GetLootGUID() const { return m_lootGuid; } - void SetLootGUID(const uint64 guid) { m_lootGuid = guid; } + void SetLootGUID(uint64 guid) { m_lootGuid = guid; } void RemovedInsignia(Player* looterPlr); @@ -2247,6 +2247,7 @@ class Player : public Unit, public GridObject<Player> /*** ENVIROMENTAL SYSTEM ***/ /*********************************************************/ + bool IsImmuneToEnvironmentalDamage(); uint32 EnvironmentalDamage(EnviromentalDamage type, uint32 damage); /*********************************************************/ diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index eb789fde038..4cea8f56005 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -620,7 +620,7 @@ bool Unit::HasAuraTypeWithFamilyFlags(AuraType auraType, uint32 familyName, uint void Unit::DealDamageMods(Unit* victim, uint32 &damage, uint32* absorb) { - if (!victim->isAlive() || victim->HasUnitState(UNIT_STAT_IN_FLIGHT) || (victim->GetTypeId() == TYPEID_UNIT && victim->ToCreature()->IsInEvadeMode())) + if (!victim || !victim->isAlive() || victim->HasUnitState(UNIT_STAT_IN_FLIGHT) || (victim->GetTypeId() == TYPEID_UNIT && victim->ToCreature()->IsInEvadeMode())) { if (absorb) *absorb += damage; @@ -2402,14 +2402,22 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spell) } // Check for attack from behind - if (!victim->HasInArc(M_PI, this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION)) + if (!victim->HasInArc(M_PI, this)) { - // Can`t dodge from behind in PvP (but its possible in PvE) - if (victim->GetTypeId() == TYPEID_PLAYER) - canDodge = false; - // Can`t parry or block - canParry = false; - canBlock = false; + if (!victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION)) + { + // Can`t dodge from behind in PvP (but its possible in PvE) + if (victim->GetTypeId() == TYPEID_PLAYER) + canDodge = false; + // Can`t parry or block + canParry = false; + canBlock = false; + } + else // Only deterrence as of 3.3.5 + { + if (spell->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) + canParry = false; + } } // Check creatures flags_extra for disable parry if (victim->GetTypeId() == TYPEID_UNIT) @@ -4980,10 +4988,6 @@ bool Unit::HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return false; } - // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) - return false; - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) return false; @@ -5600,16 +5604,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 71203; break; } - // Gaseous Bloat (Professor Putricide add) - case 70215: - case 72858: - case 72859: - case 72860: - { - target = getVictim(); - triggered_spell_id = 70701; - break; - } // Essence of the Blood Queen case 70871: { @@ -6471,16 +6465,14 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } case SPELLFAMILY_ROGUE: { - switch(dummySpell->Id) + switch (dummySpell->Id) { - // Glyph of Backstab - case 56800: + case 56800: // Glyph of Backstab { triggered_spell_id = 63975; break; } - // Deadly Throw Interrupt - case 32748: + case 32748: // Deadly Throw Interrupt { // Prevent cast Deadly Throw Interrupt on self from last effect (apply dummy) of Deadly Throw if (this == victim) @@ -6490,124 +6482,126 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere break; } } - // Cut to the Chase - if (dummySpell->SpellIconID == 2909) + + switch (dummySpell->SpellIconID) { - // "refresh your Slice and Dice duration to its 5 combo point maximum" - // lookup Slice and Dice - if (AuraEffect const* aur = GetAuraEffect(SPELL_AURA_MOD_MELEE_HASTE, SPELLFAMILY_ROGUE, 0x40000, 0, 0)) + case 2116: // Quick Recovery { - aur->GetBase()->SetDuration(aur->GetSpellInfo()->GetMaxDuration(), true); - return true; - } - return false; - } - // Deadly Brew - else if (dummySpell->SpellIconID == 2963) - { - triggered_spell_id = 3409; - break; - } - // Quick Recovery - else if (dummySpell->SpellIconID == 2116) - { - if (!procSpell) - return false; + if (!procSpell) + return false; - // energy cost save - basepoints0 = CalculatePctN(int32(procSpell->ManaCost), triggerAmount); - if (basepoints0 <= 0) - return false; + // energy cost save + basepoints0 = CalculatePctN(int32(procSpell->ManaCost), triggerAmount); + if (basepoints0 <= 0) + return false; - target = this; - triggered_spell_id = 31663; - break; + target = this; + triggered_spell_id = 31663; + break; + } + case 2909: // Cut to the Chase + { + // "refresh your Slice and Dice duration to its 5 combo point maximum" + // lookup Slice and Dice + if (AuraEffect const* aur = GetAuraEffect(SPELL_AURA_MOD_MELEE_HASTE, SPELLFAMILY_ROGUE, 0x40000, 0, 0)) + { + aur->GetBase()->SetDuration(aur->GetSpellInfo()->GetMaxDuration(), true); + return true; + } + return false; + } + case 2963: // Deadly Brew + { + triggered_spell_id = 3409; + break; + } } break; } case SPELLFAMILY_HUNTER: { - // Thrill of the Hunt - if (dummySpell->SpellIconID == 2236) + switch (dummySpell->SpellIconID) { - if (!procSpell) - return false; + case 267: // Improved Mend Pet + { + int32 chance = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcValue(); + if (!roll_chance_i(chance)) + return false; - Spell* spell = ToPlayer()->m_spellModTakingSpell; + triggered_spell_id = 24406; + break; + } + case 2236: // Thrill of the Hunt + { + if (!procSpell) + return false; - // Disable charge drop because of Lock and Load - ToPlayer()->SetSpellModTakingSpell(spell, false); + Spell* spell = ToPlayer()->m_spellModTakingSpell; - // Explosive Shot - if (procSpell->SpellFamilyFlags[2] & 0x200) - { - if (AuraEffect const* pEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DUMMY, SPELLFAMILY_HUNTER, 0x0, 0x80000000, 0x0, GetGUID())) - basepoints0 = pEff->GetSpellInfo()->CalcPowerCost(this, SpellSchoolMask(pEff->GetSpellInfo()->SchoolMask)) * 4/10/3; - } - else - basepoints0 = procSpell->CalcPowerCost(this, SpellSchoolMask(procSpell->SchoolMask)) * 4/10; + // Disable charge drop because of Lock and Load + ToPlayer()->SetSpellModTakingSpell(spell, false); - ToPlayer()->SetSpellModTakingSpell(spell, true); + // Explosive Shot + if (procSpell->SpellFamilyFlags[2] & 0x200) + { + if (AuraEffect const* pEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DUMMY, SPELLFAMILY_HUNTER, 0x0, 0x80000000, 0x0, GetGUID())) + basepoints0 = pEff->GetSpellInfo()->CalcPowerCost(this, SpellSchoolMask(pEff->GetSpellInfo()->SchoolMask)) * 4/10/3; + } + else + basepoints0 = procSpell->CalcPowerCost(this, SpellSchoolMask(procSpell->SchoolMask)) * 4/10; - if (basepoints0 <= 0) - return false; + ToPlayer()->SetSpellModTakingSpell(spell, true); - target = this; - triggered_spell_id = 34720; - break; - } - // Hunting Party - if (dummySpell->SpellIconID == 3406) - { - triggered_spell_id = 57669; - target = this; - break; - } - // Improved Mend Pet - if (dummySpell->SpellIconID == 267) - { - int32 chance = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcValue(); - if (!roll_chance_i(chance)) - return false; + if (basepoints0 <= 0) + return false; - triggered_spell_id = 24406; - break; - } - // Lock and Load - if (dummySpell->SpellIconID == 3579) - { - // Proc only from periodic (from trap activation proc another aura of this spell) - if (!(procFlag & PROC_FLAG_DONE_PERIODIC) || !roll_chance_i(triggerAmount)) - return false; - triggered_spell_id = 56453; - target = this; - break; - } - // Rapid Recuperation - if (dummySpell->SpellIconID == 3560) - { - // This effect only from Rapid Killing (mana regen) - if (!(procSpell->SpellFamilyFlags[1] & 0x01000000)) - return false; + target = this; + triggered_spell_id = 34720; + break; + } + case 3406: // Hunting Party + { + triggered_spell_id = 57669; + target = this; + break; + } + case 3560: // Rapid Recuperation + { + // This effect only from Rapid Killing (mana regen) + if (!(procSpell->SpellFamilyFlags[1] & 0x01000000)) + return false; - target = this; + target = this; - switch(dummySpell->Id) + switch (dummySpell->Id) + { + case 53228: // Rank 1 + triggered_spell_id = 56654; + break; + case 53232: // Rank 2 + triggered_spell_id = 58882; + break; + } + break; + } + case 3579: // Lock and Load { - case 53228: // Rank 1 - triggered_spell_id = 56654; - break; - case 53232: // Rank 2 - triggered_spell_id = 58882; - break; + // Proc only from periodic (from trap activation proc another aura of this spell) + if (!(procFlag & PROC_FLAG_DONE_PERIODIC) || !roll_chance_i(triggerAmount)) + return false; + triggered_spell_id = 56453; + target = this; + break; } - break; } - // Glyph of Mend Pet - if (dummySpell->Id == 57870) + + switch (dummySpell->Id) { - victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID()); - return true; + case 57870: // Glyph of Mend Pet + { + victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID()); + return true; + } } break; } @@ -7769,10 +7763,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return false; } - // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) - return false; - if (cooldown_spell_id == 0) cooldown_spell_id = triggered_spell_id; @@ -7831,10 +7821,6 @@ bool Unit::HandleObsModEnergyAuraProc(Unit* victim, uint32 /*damage*/, AuraEffec return false; } - // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) - return false; - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) return false; if (basepoints0) @@ -7888,10 +7874,6 @@ bool Unit::HandleModDamagePctTakenAuraProc(Unit* victim, uint32 /*damage*/, Aura return false; } - // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) - return false; - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) return false; @@ -7922,6 +7904,27 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp RemoveAuraFromStack(71564); *handled = true; break; + // Gaseous Bloat + case 70672: + case 72455: + case 72832: + case 72833: + { + *handled = true; + uint32 stack = triggeredByAura->GetStackAmount(); + int32 const mod = (GetMap()->GetSpawnMode() & 1) ? 1500 : 1250; + int32 dmg = 0; + for (uint8 i = 1; i < stack; ++i) + dmg += mod * stack; + if (Unit* caster = triggeredByAura->GetCaster()) + { + caster->CastCustomSpell(70701, SPELLVALUE_BASE_POINT0, dmg); + if (Creature* creature = caster->ToCreature()) + creature->DespawnOrUnsummon(1); + } + break; + } + // Ball of Flames Proc case 71756: case 72782: case 72783: @@ -8054,6 +8057,10 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp if (plr->getClass() != CLASS_DEATH_KNIGHT) return false; + RuneType rune = ToPlayer()->GetLastUsedRune(); + // can't proc from death rune use + if (rune == RUNE_DEATH) + return false; AuraEffect* aurEff = triggeredByAura->GetEffect(EFFECT_0); if (!aurEff) return false; @@ -8412,76 +8419,42 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg target = this; break; } - // Lightning Capacitor - case 37657: - { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 37658, true, NULL, triggeredByAura); - - Aura* dummy = GetAura(37658); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if (!dummy || dummy->GetStackAmount() < triggerAmount) - return false; - - RemoveAurasDueToSpell(37658); - trigger_spell_id = 37661; - target = victim; - break; - } - // Thunder Capacitor - case 54841: + case 37657: // Lightning Capacitor + case 54841: // Thunder Capacitor + case 67712: // Item - Coliseum 25 Normal Caster Trinket + case 67758: // Item - Coliseum 25 Heroic Caster Trinket { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 54842, true, NULL, triggeredByAura); - - // counting - Aura* dummy = GetAura(54842); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if (!dummy || dummy->GetStackAmount() < triggerAmount) + if (!victim || !victim->isAlive() || GetTypeId() != TYPEID_PLAYER) return false; - RemoveAurasDueToSpell(54842); - trigger_spell_id = 54843; - target = victim; - break; - } - //Item - Coliseum 25 Normal Caster Trinket - case 67712: - { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 67713, true, NULL, triggeredByAura); - - Aura* dummy = GetAura(67713); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if (!dummy || dummy->GetStackAmount() < triggerAmount) - return false; + uint32 stack_spell_id = 0; + switch (auraSpellInfo->Id) + { + case 37657: + stack_spell_id = 37658; + trigger_spell_id = 37661; + break; + case 54841: + stack_spell_id = 54842; + trigger_spell_id = 54843; + break; + case 67712: + stack_spell_id = 67713; + trigger_spell_id = 67714; + break; + case 67758: + stack_spell_id = 67759; + trigger_spell_id = 67760; + break; + } - RemoveAurasDueToSpell(67713); - trigger_spell_id = 67714; - target = victim; - break; - } - //Item - Coliseum 25 Heroic Caster Trinket - case 67758: - { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 67759, true, NULL, triggeredByAura); + CastSpell(this, stack_spell_id, true, NULL, triggeredByAura); - Aura* dummy = GetAura(67759); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) + Aura* dummy = GetAura(stack_spell_id); if (!dummy || dummy->GetStackAmount() < triggerAmount) return false; - RemoveAurasDueToSpell(67759); - trigger_spell_id = 67760; + RemoveAurasDueToSpell(stack_spell_id); target = victim; break; } @@ -9074,10 +9047,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg if (target == NULL) target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry && triggerEntry->IsPositive() ? this : victim; - // default case - if ((!target && triggerEntry->IsRequiringSelectedTarget()) || (target && target != this && !target->isAlive())) - return false; - if (basepoints0) CastCustomSpell(target, trigger_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); else @@ -11748,8 +11717,6 @@ void Unit::MeleeDamageBonus(Unit* victim, uint32 *pdamage, WeaponAttackType attT else TakenFlatBenefit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN); - Player* player = ToPlayer(); - // Done/Taken total percent damage auras float DoneTotalMod = 1.0f; float TakenTotalMod = 1.0f; @@ -13289,7 +13256,8 @@ float Unit::GetSpellMaxRangeForTarget(Unit* target, SpellInfo const* spellInfo) if (spellInfo->RangeEntry->maxRangeFriend == spellInfo->RangeEntry->maxRangeHostile) return spellInfo->GetMaxRange(); return spellInfo->GetMaxRange(!IsHostileTo(target)); -}; +} + float Unit::GetSpellMinRangeForTarget(Unit* target, SpellInfo const* spellInfo) { if (!spellInfo->RangeEntry) @@ -13297,7 +13265,7 @@ float Unit::GetSpellMinRangeForTarget(Unit* target, SpellInfo const* spellInfo) if (spellInfo->RangeEntry->minRangeFriend == spellInfo->RangeEntry->minRangeHostile) return spellInfo->GetMinRange(); return spellInfo->GetMinRange(!IsHostileTo(target)); -}; +} Unit* Unit::GetUnit(WorldObject& object, uint64 guid) { diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index caf1f4e46ad..e777f16b99a 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -174,7 +174,7 @@ enum UnitStandFlags { UNIT_STAND_FLAGS_UNK1 = 0x01, UNIT_STAND_FLAGS_CREEP = 0x02, - UNIT_STAND_FLAGS_UNK3 = 0x04, + UNIT_STAND_FLAGS_UNTRACKABLE = 0x04, UNIT_STAND_FLAGS_UNK4 = 0x08, UNIT_STAND_FLAGS_UNK5 = 0x10, UNIT_STAND_FLAGS_ALL = 0xFF @@ -185,7 +185,7 @@ enum UnitBytes1_Flags { UNIT_BYTE1_FLAG_ALWAYS_STAND = 0x01, UNIT_BYTE1_FLAG_UNK_2 = 0x02, - UNIT_BYTE1_FLAG_UNTRACKABLE = 0x04, + UNIT_BYTE1_FLAG_UNK_3 = 0x04, UNIT_BYTE1_FLAG_ALL = 0xFF }; @@ -1866,11 +1866,6 @@ class Unit : public WorldObject void SetShapeshiftForm(ShapeshiftForm form) { SetByteValue(UNIT_FIELD_BYTES_2, 3, form); - - // force update as too quick shapeshifting and back - // causes the value to stay the same serverside - // causes issues clientside (player gets stuck) - ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2); } inline bool IsInFeralForm() const @@ -2055,7 +2050,8 @@ class Unit : public WorldObject static Player* GetPlayer(WorldObject& object, uint64 guid); static Creature* GetCreature(WorldObject& object, uint64 guid); - MotionMaster* GetMotionMaster(){ return &i_motionMaster; } + MotionMaster* GetMotionMaster() { return &i_motionMaster; } + const MotionMaster* GetMotionMaster() const { return &i_motionMaster; } bool IsStopped() const { return !(HasUnitState(UNIT_STAT_MOVING)); } void StopMoving(); diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h index cf52f725916..f903cf80eea 100644 --- a/src/server/game/Entities/Vehicle/VehicleDefines.h +++ b/src/server/game/Entities/Vehicle/VehicleDefines.h @@ -20,6 +20,9 @@ #define __TRINITY_VEHICLEDEFINES_H #include "Define.h" +#include <vector> +#include <map> + struct VehicleSeatEntry; enum PowerType diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 196bce7e9d8..3190bc7af2c 100755 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -653,17 +653,21 @@ class ObjectMgr PlayerClassInfo const* GetPlayerClassInfo(uint32 class_) const { - if (class_ >= MAX_CLASSES) return NULL; + if (class_ >= MAX_CLASSES) + return NULL; return &playerClassInfo[class_]; } void GetPlayerClassLevelInfo(uint32 class_, uint8 level, PlayerClassLevelInfo* info) const; PlayerInfo const* GetPlayerInfo(uint32 race, uint32 class_) const { - if (race >= MAX_RACES) return NULL; - if (class_ >= MAX_CLASSES) return NULL; + if (race >= MAX_RACES) + return NULL; + if (class_ >= MAX_CLASSES) + return NULL; PlayerInfo const* info = &playerInfo[race][class_]; - if (info->displayId_m == 0 || info->displayId_f == 0) return NULL; + if (info->displayId_m == 0 || info->displayId_f == 0) + return NULL; return info; } void GetPlayerLevelInfo(uint32 race, uint32 class_, uint8 level, PlayerLevelInfo* info) const; diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 4d4f0bfe05e..32ef215a5ee 100755 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -1274,6 +1274,34 @@ namespace Trinity bool _equals; }; + class ObjectGUIDCheck + { + public: + ObjectGUIDCheck(uint64 GUID) : _GUID(GUID) {} + bool operator()(WorldObject* object) + { + return object->GetGUID() == _GUID; + } + + private: + uint64 _GUID; + }; + + class UnitAuraCheck + { + public: + UnitAuraCheck(bool present, uint32 spellId, uint64 casterGUID = 0) : _present(present), _spellId(spellId), _casterGUID(casterGUID) {} + bool operator()(Unit* unit) + { + return unit->HasAura(_spellId, _casterGUID) == _present; + } + + private: + bool _present; + uint32 _spellId; + uint64 _casterGUID; + }; + // Player checks and do // Prepare using Builder localized packets with caching and send to player diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index c26ffdd3190..b9e00bc7231 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -270,7 +270,7 @@ void Group::RemoveAllInvites() m_invitees.clear(); } -Player* Group::GetInvited(const uint64 guid) const +Player* Group::GetInvited(uint64 guid) const { for (InvitesList::const_iterator itr = m_invitees.begin(); itr != m_invitees.end(); ++itr) { @@ -387,7 +387,7 @@ bool Group::AddMember(Player* player) return true; } -bool Group::RemoveMember(const uint64 guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/) +bool Group::RemoveMember(uint64 guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/) { BroadcastGroupUpdate(); @@ -498,7 +498,7 @@ bool Group::RemoveMember(const uint64 guid, const RemoveMethod &method /*= GROUP } } -void Group::ChangeLeader(const uint64 guid) +void Group::ChangeLeader(uint64 guid) { member_witerator slot = _getMemberWSlot(guid); @@ -652,7 +652,7 @@ void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r) } } -void Group::SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) +void Group::SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) { WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1+1)); data << uint64(SourceGuid); // guid of the item rolled @@ -676,7 +676,7 @@ void Group::SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 } } -void Group::SendLootRollWon(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) +void Group::SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) { WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1)); data << uint64(SourceGuid); // guid of the item rolled @@ -949,7 +949,7 @@ void Group::MasterLoot(Loot* /*loot*/, WorldObject* pLootedObject) } } -void Group::CountRollVote(const uint64 playerGUID, const uint64 Guid, uint32 NumberOfPlayers, uint8 Choice) +void Group::CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choice) { Rolls::iterator rollI = GetRoll(Guid); if (rollI == RollId.end()) @@ -1003,7 +1003,7 @@ void Group::EndRoll(Loot *pLoot) itr = RollId.begin(); } else - itr++; + ++itr; } } @@ -1295,7 +1295,7 @@ void Group::OfflineReadyCheck() } } -bool Group::_setMembersGroup(const uint64 guid, uint8 group) +bool Group::_setMembersGroup(uint64 guid, uint8 group) { member_witerator slot = _getMemberWSlot(guid); if (slot == m_memberSlots.end()) @@ -1322,7 +1322,7 @@ bool Group::SameSubGroup(Player const* member1, Player const* member2) const } // Allows setting sub groups both for online or offline members -void Group::ChangeMembersGroup(const uint64 guid, uint8 group) +void Group::ChangeMembersGroup(uint64 guid, uint8 group) { // Only raid groups have sub groups if (!isRaidGroup()) @@ -1767,7 +1767,7 @@ void Group::SetLootMethod(LootMethod method) m_lootMethod = method; } -void Group::SetLooterGuid(const uint64 guid) +void Group::SetLooterGuid(uint64 guid) { m_looterGuid = guid; } @@ -1847,12 +1847,12 @@ ItemQualities Group::GetLootThreshold() const return m_lootThreshold; } -bool Group::IsMember(const uint64 guid) const +bool Group::IsMember(uint64 guid) const { return _getMemberCSlot(guid) != m_memberSlots.end(); } -bool Group::IsLeader(const uint64 guid) const +bool Group::IsLeader(uint64 guid) const { return (GetLeaderGUID() == guid); } @@ -1873,7 +1873,7 @@ bool Group::IsAssistant(uint64 guid) const return mslot->flags & MEMBER_FLAG_ASSISTANT; } -bool Group::SameSubGroup(uint64 guid1, const uint64 guid2) const +bool Group::SameSubGroup(uint64 guid1, uint64 guid2) const { member_citerator mslot2 = _getMemberCSlot(guid2); if (mslot2 == m_memberSlots.end()) diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index ff9114b8c71..083e6e15225 100755 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -191,10 +191,10 @@ class Group void RemoveAllInvites(); bool AddLeaderInvite(Player* player); bool AddMember(Player* player); - bool RemoveMember(const uint64 guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL); - void ChangeLeader(const uint64 guid); + bool RemoveMember(uint64 guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL); + void ChangeLeader(uint64 guid); void SetLootMethod(LootMethod method); - void SetLooterGuid(const uint64 guid); + void SetLooterGuid(uint64 guid); void UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed = false); void SetLootThreshold(ItemQualities threshold); void Disband(bool hideDestroy=false); @@ -217,15 +217,15 @@ class Group uint32 GetDbStoreId() { return m_dbStoreId; }; // member manipulation methods - bool IsMember(const uint64 guid) const; - bool IsLeader(const uint64 guid) const; + bool IsMember(uint64 guid) const; + bool IsLeader(uint64 guid) const; uint64 GetMemberGUID(const std::string& name); bool IsAssistant(uint64 guid) const; - Player* GetInvited(const uint64 guid) const; + Player* GetInvited(uint64 guid) const; Player* GetInvited(const std::string& name) const; - bool SameSubGroup(uint64 guid1, const uint64 guid2) const; + bool SameSubGroup(uint64 guid1, uint64 guid2) const; bool SameSubGroup(uint64 guid1, MemberSlot const* slot2) const; bool SameSubGroup(Player const* member1, Player const* member2) const; bool HasFreeSlotSubGroup(uint8 subgroup) const; @@ -241,7 +241,7 @@ class Group void SetBattlegroundGroup(Battleground *bg); GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot); - void ChangeMembersGroup(const uint64 guid, uint8 group); + void ChangeMembersGroup(uint64 guid, uint8 group); void ChangeMembersGroup(Player* player, uint8 group); void SetTargetIcon(uint8 id, uint64 whoGuid, uint64 targetGuid); void SetGroupMemberFlag(uint64 guid, bool apply, GroupMemberFlags flag); @@ -272,8 +272,8 @@ class Group bool isRollLootActive() const; void SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r); - void SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); - void SendLootRollWon(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); + void SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); + void SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r); void SendLooter(Creature *pCreature, Player *pLooter); void GroupLoot(Loot *loot, WorldObject* pLootedObject); @@ -281,7 +281,7 @@ class Group void MasterLoot(Loot *loot, WorldObject* pLootedObject); Rolls::iterator GetRoll(uint64 Guid); void CountTheRoll(Rolls::iterator roll, uint32 NumberOfPlayers); - void CountRollVote(const uint64 playerGUID, const uint64 Guid, uint32 NumberOfPlayers, uint8 Choise); + void CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise); void EndRoll(Loot *loot); // related to disenchant rolls @@ -301,7 +301,7 @@ class Group void BroadcastGroupUpdate(void); protected: - bool _setMembersGroup(const uint64 guid, uint8 group); + bool _setMembersGroup(uint64 guid, uint8 group); void _homebindIfInstance(Player* player); void _initRaidSubGroupsCounter(); diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index accfba7812a..63aa0f88b14 100755 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1508,7 +1508,7 @@ void Guild::HandleRemoveMember(WorldSession* session, const std::string& name) SendCommandResult(session, GUILD_QUIT_S, ERR_GUILD_RANK_TOO_HIGH_S, name); else { - const uint64 guid = pMember->GetGUID(); + uint64 guid = pMember->GetGUID(); // After call to DeleteMember pointer to member becomes invalid DeleteMember(guid, false, true); _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUIDLow(), GUID_LOPART(guid)); @@ -1790,7 +1790,7 @@ void Guild::SendBankTabText(WorldSession *session, uint8 tabId) const void Guild::SendPermissions(WorldSession *session) const { - const uint64 guid = session->GetPlayer()->GetGUID(); + uint64 guid = session->GetPlayer()->GetGUID(); uint8 rankId = session->GetPlayer()->GetRank(); WorldPacket data(MSG_GUILD_PERMISSIONS, 4 * 15 + 1); @@ -2063,7 +2063,7 @@ void Guild::BroadcastPacket(WorldPacket* packet) const /////////////////////////////////////////////////////////////////////////////// // Members handling -bool Guild::AddMember(const uint64 guid, uint8 rankId) +bool Guild::AddMember(uint64 guid, uint8 rankId) { Player* player = ObjectAccessor::FindPlayer(guid); // Player cannot be in guild @@ -2132,7 +2132,7 @@ bool Guild::AddMember(const uint64 guid, uint8 rankId) return true; } -void Guild::DeleteMember(const uint64 guid, bool isDisbanding, bool isKicked) +void Guild::DeleteMember(uint64 guid, bool isDisbanding, bool isKicked) { uint32 lowguid = GUID_LOPART(guid); Player* player = ObjectAccessor::FindPlayer(guid); @@ -2188,7 +2188,7 @@ void Guild::DeleteMember(const uint64 guid, bool isDisbanding, bool isKicked) _UpdateAccountsNumber(); } -bool Guild::ChangeMemberRank(const uint64 guid, uint8 newRank) +bool Guild::ChangeMemberRank(uint64 guid, uint8 newRank) { if (newRank <= _GetLowestRankId()) // Validate rank (allow only existing ranks) if (Member* pMember = GetMember(guid)) @@ -2352,7 +2352,7 @@ void Guild::_DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB) m_bankTabs.clear(); } -bool Guild::_ModifyBankMoney(SQLTransaction& trans, const uint64 amount, bool add) +bool Guild::_ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add) { if (add) m_bankMoney += amount; @@ -2448,21 +2448,21 @@ inline uint8 Guild::_GetRankBankTabRights(uint8 rankId, uint8 tabId) const return 0; } -inline uint32 Guild::_GetMemberRemainingSlots(const uint64 guid, uint8 tabId) const +inline uint32 Guild::_GetMemberRemainingSlots(uint64 guid, uint8 tabId) const { if (const Member* pMember = GetMember(guid)) return pMember->GetBankRemainingValue(tabId, this); return 0; } -inline uint32 Guild::_GetMemberRemainingMoney(const uint64 guid) const +inline uint32 Guild::_GetMemberRemainingMoney(uint64 guid) const { if (const Member* pMember = GetMember(guid)) return pMember->GetBankRemainingValue(GUILD_BANK_MAX_TABS, this); return 0; } -inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, const uint64 guid, uint8 tabId) +inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, uint64 guid, uint8 tabId) { // Remaining slots must be more then 0 if (uint32 remainingSlots = _GetMemberRemainingSlots(guid, tabId)) @@ -2472,7 +2472,7 @@ inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, const ui pMember->DecreaseBankRemainingValue(trans, tabId, 1); } -inline bool Guild::_MemberHasTabRights(const uint64 guid, uint8 tabId, uint32 rights) const +inline bool Guild::_MemberHasTabRights(uint64 guid, uint8 tabId, uint32 rights) const { if (const Member* pMember = GetMember(guid)) { @@ -2632,7 +2632,7 @@ bool Guild::_DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError void Guild::_SendBankContent(WorldSession *session, uint8 tabId) const { - const uint64 guid = session->GetPlayer()->GetGUID(); + uint64 guid = session->GetPlayer()->GetGUID(); if (_MemberHasTabRights(guid, tabId, GUILD_BANK_RIGHT_VIEW_TAB)) if (const BankTab* pTab = GetBankTab(tabId)) { @@ -2726,7 +2726,7 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const } } -void Guild::_BroadcastEvent(GuildEvents guildEvent, const uint64 guid, const char* param1, const char* param2, const char* param3) const +void Guild::_BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1, const char* param2, const char* param3) const { uint8 count = !param3 ? (!param2 ? (!param1 ? 0 : 1) : 2) : 3; diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index f38d444bbb4..40a281bf122 100755 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -257,7 +257,7 @@ private: }; public: - Member(uint32 guildId, const uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { } + Member(uint32 guildId, uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { } void SetStats(Player* player); void SetStats(const std::string& name, uint8 level, uint8 _class, uint32 zoneId, uint32 accountId); @@ -280,7 +280,7 @@ private: inline void UpdateLogoutTime() { m_logoutTime = ::time(NULL); } inline bool IsRank(uint8 rankId) const { return m_rankId == rankId; } inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; } - inline bool IsSamePlayer(const uint64 guid) const { return m_guid == guid; } + inline bool IsSamePlayer(uint64 guid) const { return m_guid == guid; } void DecreaseBankRemainingValue(SQLTransaction& trans, uint8 tabId, uint32 amount); uint32 GetBankRemainingValue(uint8 tabId, const Guild* guild) const; @@ -656,9 +656,9 @@ public: // Members // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned. - bool AddMember(const uint64 guid, uint8 rankId = GUILD_RANK_NONE); - void DeleteMember(const uint64 guid, bool isDisbanding = false, bool isKicked = false); - bool ChangeMemberRank(const uint64 guid, uint8 newRank); + bool AddMember(uint64 guid, uint8 rankId = GUILD_RANK_NONE); + void DeleteMember(uint64 guid, bool isDisbanding = false, bool isKicked = false); + bool ChangeMemberRank(uint64 guid, uint8 newRank); // Bank void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount); @@ -698,12 +698,12 @@ private: inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; } inline const BankTab* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; } - inline const Member* GetMember(const uint64 guid) const + inline const Member* GetMember(uint64 guid) const { Members::const_iterator itr = m_members.find(GUID_LOPART(guid)); return itr != m_members.end() ? itr->second : NULL; } - inline Member* GetMember(const uint64 guid) + inline Member* GetMember(uint64 guid) { Members::iterator itr = m_members.find(GUID_LOPART(guid)); return itr != m_members.end() ? itr->second : NULL; @@ -736,7 +736,7 @@ private: void _UpdateAccountsNumber(); bool _IsLeader(Player* player) const; void _DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB = false); - bool _ModifyBankMoney(SQLTransaction& trans, const uint64 amount, bool add); + bool _ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add); void _SetLeaderGUID(Member* pLeader); void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay); @@ -747,10 +747,10 @@ private: uint32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const; std::string _GetRankName(uint8 rankId) const; - uint32 _GetMemberRemainingSlots(const uint64 guid, uint8 tabId) const; - uint32 _GetMemberRemainingMoney(const uint64 guid) const; - void _DecreaseMemberRemainingSlots(SQLTransaction& trans, const uint64 guid, uint8 tabId); - bool _MemberHasTabRights(const uint64 guid, uint8 tabId, uint32 rights) const; + uint32 _GetMemberRemainingSlots(uint64 guid, uint8 tabId) const; + uint32 _GetMemberRemainingMoney(uint64 guid) const; + void _DecreaseMemberRemainingSlots(SQLTransaction& trans, uint64 guid, uint8 tabId); + bool _MemberHasTabRights(uint64 guid, uint8 tabId, uint32 rights) const; void _LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2 = 0, uint8 newRank = 0); void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); @@ -765,6 +765,6 @@ private: void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const; void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const; - void _BroadcastEvent(GuildEvents guildEvent, const uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const; + void _BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const; }; #endif diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 68ea5bfbbcb..8eac07918de 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -81,7 +81,7 @@ std::string GuildMgr::GetGuildNameById(uint32 guildId) const return ""; } -Guild* GuildMgr::GetGuildByLeader(const uint64 guid) const +Guild* GuildMgr::GetGuildByLeader(uint64 guid) const { for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr) if (itr->second->GetLeaderGUID() == guid) diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index ce756fceb69..e53c46cb6be 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -23,13 +23,14 @@ class GuildMgr { friend class ACE_Singleton<GuildMgr, ACE_Null_Mutex>; +private: GuildMgr(); ~GuildMgr(); public: typedef UNORDERED_MAP<uint32, Guild*> GuildContainer; - Guild* GetGuildByLeader(uint64 const guid) const; + Guild* GetGuildByLeader(uint64 guid) const; Guild* GetGuildById(uint32 guildId) const; Guild* GetGuildByName(const std::string& guildName) const; std::string GetGuildNameById(uint32 guildId) const; diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp index c022d81404c..69024837d61 100755 --- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp @@ -1035,35 +1035,9 @@ void WorldSession::HandleSetFactionAtWar(WorldPacket & recv_data) void WorldSession::HandleSetFactionCheat(WorldPacket & /*recv_data*/) { sLog->outError("WORLD SESSION: HandleSetFactionCheat, not expected call, please report."); - /* - uint32 FactionID; - uint32 Standing; - - recv_data >> FactionID; - recv_data >> Standing; - - std::list<struct Factions>::iterator itr; - - for (itr = GetPlayer()->factions.begin(); itr != GetPlayer()->factions.end(); ++itr) - { - if (itr->ReputationListID == FactionID) - { - itr->Standing += Standing; - itr->Flags = (itr->Flags | 1); - break; - } - } - */ GetPlayer()->GetReputationMgr().SendStates(); } -void WorldSession::HandleMeetingStoneInfo(WorldPacket & /*recv_data*/) -{ - sLog->outStaticDebug("WORLD: Received CMSG_MEETING_STONE_INFO"); - - //SendLfgUpdate(0, 0, 0); -} - void WorldSession::HandleTutorialFlag(WorldPacket & recv_data) { uint32 data; diff --git a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp index fe7e6a0f104..cf58f16c445 100755 --- a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp @@ -770,7 +770,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_AURAS) { - const uint64 auramask = player->GetAuraUpdateMaskForRaid(); + uint64 auramask = player->GetAuraUpdateMaskForRaid(); *data << uint64(auramask); for (uint32 i = 0; i < MAX_AURAS; ++i) { @@ -860,7 +860,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke { if (pet) { - const uint64 auramask = pet->GetAuraUpdateMaskForRaid(); + uint64 auramask = pet->GetAuraUpdateMaskForRaid(); *data << uint64(auramask); for (uint32 i = 0; i < MAX_AURAS; ++i) { diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp index 6446710ed38..2c22b4fe9d7 100755 --- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp @@ -67,7 +67,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() ASSERT(oldMap); if (GetPlayer()->IsInWorld()) { - sLog->outCrash("Player is still in world when teleported from map %u! to new map %u", oldMap->GetId(), loc.GetMapId()); + sLog->outCrash("Player (Name %s) is still in world when teleported from map %u to new map %u", GetPlayer()->GetName(), oldMap->GetId(), loc.GetMapId()); oldMap->Remove(GetPlayer(), false); } diff --git a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp index 53681540f86..f763d5bc966 100755 --- a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp @@ -576,7 +576,6 @@ void WorldSession::HandlePetSetAction(WorldPacket & recv_data) for (Unit::ControlList::iterator itr = GetPlayer()->m_Controlled.begin(); itr != GetPlayer()->m_Controlled.end(); ++itr) if ((*itr)->GetEntry() == pet->GetEntry()) (*itr)->GetCharmInfo()->ToggleCreatureAutocast(spellInfo, false); - } } @@ -678,7 +677,7 @@ void WorldSession::HandlePetAbandon(WorldPacket & recv_data) if (pet->GetGUID() == _player->GetPetGUID()) { uint32 feelty = pet->GetPower(POWER_HAPPINESS); - pet->SetPower(POWER_HAPPINESS , (feelty-50000) > 0 ?(feelty-50000) : 0); + pet->SetPower(POWER_HAPPINESS , feelty > 50000 ? (feelty-50000) : 0); } _player->RemovePet((Pet*)pet, PET_SAVE_AS_DELETED); diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp index 716aaa9e74f..45d4414d9ed 100755 --- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp @@ -295,12 +295,8 @@ void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data) if (_player->m_mover != _player) return; - GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid); - - if (!obj) - return; - - obj->Use(_player); + if (GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid)) + obj->Use(_player); } void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket) diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 14381491874..629df10abf7 100755 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -250,7 +250,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x0DD*/ { "SMSG_MONSTER_MOVE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x0DE*/ { "SMSG_MOVE_WATER_WALK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x0DF*/ { "SMSG_MOVE_LAND_WALK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x0E0*/ { "MSG_MOVE_SET_RAW_POSITION_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x0E0*/ { "CMSG_MOVE_CHARM_PORT_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x0E1*/ { "CMSG_MOVE_SET_RAW_POSITION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x0E2*/ { "SMSG_FORCE_RUN_SPEED_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x0E3*/ { "CMSG_FORCE_RUN_SPEED_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, @@ -281,8 +281,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x0FC*/ { "CMSG_COMPLETE_CINEMATIC", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCompleteCinematic }, /*0x0FD*/ { "SMSG_TUTORIAL_FLAGS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x0FE*/ { "CMSG_TUTORIAL_FLAG", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag }, - /*0x0FF*/ { "CMSG_TUTORIAL_CLEAR", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialClear }, - /*0x100*/ { "CMSG_TUTORIAL_RESET", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialReset }, + /*0x0FF*/ { "CMSG_TUTORIAL_CLEAR", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialClear }, + /*0x100*/ { "CMSG_TUTORIAL_RESET", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialReset }, /*0x101*/ { "CMSG_STANDSTATECHANGE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleStandStateChangeOpcode }, /*0x102*/ { "CMSG_EMOTE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEmoteOpcode }, /*0x103*/ { "SMSG_EMOTE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -298,12 +298,12 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x10D*/ { "CMSG_SWAP_INV_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapInvItemOpcode }, /*0x10E*/ { "CMSG_SPLIT_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitItemOpcode }, /*0x10F*/ { "CMSG_AUTOEQUIP_ITEM_SLOT", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemSlotOpcode }, - /*0x110*/ { "OBSOLETE_DROP_ITEM", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x110*/ { "CMSG_UNCLAIM_LICENSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x111*/ { "CMSG_DESTROYITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDestroyItemOpcode }, /*0x112*/ { "SMSG_INVENTORY_CHANGE_FAILURE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x113*/ { "SMSG_OPEN_CONTAINER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x114*/ { "CMSG_INSPECT", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectOpcode }, - /*0x115*/ { "SMSG_INSPECT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x115*/ { "SMSG_INSPECT_RESULTS_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x116*/ { "CMSG_INITIATE_TRADE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInitiateTradeOpcode }, /*0x117*/ { "CMSG_BEGIN_TRADE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBeginTradeOpcode }, /*0x118*/ { "CMSG_BUSY_TRADE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode }, @@ -344,9 +344,9 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x13B*/ { "CMSG_CANCEL_CHANNELLING", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelChanneling }, /*0x13C*/ { "SMSG_AI_REACTION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x13D*/ { "CMSG_SET_SELECTION", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetSelectionOpcode }, - /*0x13E*/ { "CMSG_EQUIPMENT_SET_DELETE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetDelete }, - /*0x13F*/ { "CMSG_INSTANCE_LOCK_WARNING_RESPONSE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInstanceLockResponse }, - /*0x140*/ { "CMSG_UNUSED2", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x13E*/ { "CMSG_DELETEEQUIPMENT_SET", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetDelete }, + /*0x13F*/ { "CMSG_INSTANCE_LOCK_RESPONSE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInstanceLockResponse }, + /*0x140*/ { "CMSG_DEBUG_PASSIVE_AURA", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x141*/ { "CMSG_ATTACKSWING", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackSwingOpcode }, /*0x142*/ { "CMSG_ATTACKSTOP", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackStopOpcode }, /*0x143*/ { "SMSG_ATTACKSTART", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -358,8 +358,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x149*/ { "SMSG_ATTACKSWING_CANT_ATTACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x14A*/ { "SMSG_ATTACKERSTATEUPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x14B*/ { "SMSG_BATTLEFIELD_PORT_DENIED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x14C*/ { "SMSG_DAMAGE_DONE_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x14D*/ { "SMSG_UNIT_SPELLCAST_START", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x14C*/ { "CMSG_PERFORM_ACTION_SET", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x14D*/ { "SMSG_RESUME_CAST_BAR", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x14E*/ { "SMSG_CANCEL_COMBAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x14F*/ { "SMSG_SPELLBREAKLOG", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x150*/ { "SMSG_SPELLHEALLOG", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -394,7 +394,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x16D*/ { "CMSG_DUEL_CANCELLED", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDuelCancelledOpcode }, /*0x16E*/ { "SMSG_MOUNTRESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x16F*/ { "SMSG_DISMOUNTRESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x170*/ { "SMSG_PUREMOUNT_CANCELLED_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x170*/ { "SMSG_REMOVED_FROM_PVP_QUEUE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x171*/ { "CMSG_MOUNTSPECIAL_ANIM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSpecialAnimOpcode }, /*0x172*/ { "SMSG_MOUNTSPECIAL_ANIM", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x173*/ { "SMSG_PET_TAME_FAILURE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -509,7 +509,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x1E0*/ { "CMSG_SETSHEATHED", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetSheathedOpcode }, /*0x1E1*/ { "SMSG_COOLDOWN_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x1E2*/ { "SMSG_SPELL_DELAYED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x1E3*/ { "CMSG_QUEST_POI_QUERY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPOIQuery }, + /*0x1E3*/ { "CMSG_QUEST_POI_QUERY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPOIQuery }, /*0x1E4*/ { "SMSG_QUEST_POI_QUERY_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x1E5*/ { "CMSG_GHOST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x1E6*/ { "CMSG_GM_INVIS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, @@ -535,7 +535,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x1FA*/ { "CMSG_GM_NUKE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x1FB*/ { "MSG_RANDOM_ROLL", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomRollOpcode }, /*0x1FC*/ { "SMSG_ENVIRONMENTALDAMAGELOG", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x1FD*/ { "CMSG_PLAYER_DIFFICULTY_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x1FD*/ { "CMSG_CHANGEPLAYER_DIFFICULTY", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x1FE*/ { "SMSG_RWHOIS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x1FF*/ { "SMSG_LFG_PLAYER_REWARD", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x200*/ { "SMSG_LFG_TELEPORT_DENIED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -552,7 +552,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x20B*/ { "CMSG_UPDATE_ACCOUNT_DATA", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData }, /*0x20C*/ { "SMSG_UPDATE_ACCOUNT_DATA", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x20D*/ { "SMSG_CLEAR_FAR_SIGHT_IMMEDIATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x20E*/ { "SMSG_PLAYER_DIFFICULTY_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x20E*/ { "SMSG_CHANGEPLAYER_DIFFICULTY_RESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x20F*/ { "CMSG_GM_TEACH", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x210*/ { "CMSG_GM_CREATE_ITEM_TARGET", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x211*/ { "CMSG_GMTICKET_GETTICKET", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketGetTicketOpcode }, @@ -601,8 +601,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x23C*/ { "CMSG_BATTLEFIELD_LIST", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode }, /*0x23D*/ { "SMSG_BATTLEFIELD_LIST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x23E*/ { "CMSG_BATTLEFIELD_JOIN", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x23F*/ { "SMSG_BATTLEFIELD_WIN_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x240*/ { "SMSG_BATTLEFIELD_LOSE_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x23F*/ { "SMSG_FORCE_SET_VEHICLE_REC_ID", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x240*/ { "CMSG_SET_VEHICLE_REC_ID_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x241*/ { "CMSG_TAXICLEARNODE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x242*/ { "CMSG_TAXIENABLENODE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x243*/ { "CMSG_ITEM_TEXT_QUERY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemTextQuery }, @@ -635,7 +635,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x25E*/ { "SMSG_AUCTION_BIDDER_NOTIFICATION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x25F*/ { "SMSG_AUCTION_OWNER_NOTIFICATION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x260*/ { "SMSG_PROCRESIST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x261*/ { "SMSG_STANDSTATE_CHANGE_FAILURE_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x261*/ { "SMSG_COMBAT_EVENT_FAILED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x262*/ { "SMSG_DISPEL_FAILED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x263*/ { "SMSG_SPELLORDAMAGE_IMMUNE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x264*/ { "CMSG_AUCTION_LIST_BIDDER_ITEMS", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListBidderItems }, @@ -666,7 +666,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x27D*/ { "CMSG_ENABLE_DAMAGE_LOG", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x27E*/ { "CMSG_GROUP_CHANGE_SUB_GROUP", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupChangeSubGroupOpcode }, /*0x27F*/ { "CMSG_REQUEST_PARTY_MEMBER_STATS", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyMemberStatsOpcode}, - /*0x280*/ { "CMSG_GROUP_SWAP_SUB_GROUP", STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x280*/ { "CMSG_GROUP_SWAP_SUB_GROUP", STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x281*/ { "CMSG_RESET_FACTION_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x282*/ { "CMSG_AUTOSTORE_BANK_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBankItemOpcode }, /*0x283*/ { "CMSG_AUTOBANK_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoBankItemOpcode }, @@ -684,15 +684,15 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x28F*/ { "CMSG_GROUP_ASSISTANT_LEADER", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupAssistantLeaderOpcode}, /*0x290*/ { "CMSG_BUYBACK_ITEM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuybackItem }, /*0x291*/ { "SMSG_SERVER_MESSAGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x292*/ { "CMSG_SET_SAVED_INSTANCE_EXTEND", STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x292*/ { "CMSG_SET_SAVED_INSTANCE_EXTEND", STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x293*/ { "SMSG_LFG_OFFER_CONTINUE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x294*/ { "CMSG_MEETINGSTONE_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x295*/ { "SMSG_MEETINGSTONE_SETQUEUE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x296*/ { "CMSG_MEETINGSTONE_INFO", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMeetingStoneInfo }, - /*0x297*/ { "SMSG_MEETINGSTONE_COMPLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x298*/ { "SMSG_MEETINGSTONE_IN_PROGRESS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x294*/ { "CMSG_TEST_DROP_RATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x295*/ { "SMSG_TEST_DROP_RATE_RESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x296*/ { "CMSG_LFG_GET_STATUS", STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x297*/ { "SMSG_SHOW_MAILBOX", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x298*/ { "SMSG_RESET_RANGED_COMBAT_TIMER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x299*/ { "SMSG_MEETINGSTONE_MEMBER_ADDED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x29A*/ { "CMSG_GMTICKETSYSTEM_TOGGLE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x29A*/ { "SMSG_CHAT_NOT_IN_PARTY", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x29B*/ { "CMSG_CANCEL_GROWTH_AURA", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelGrowthAuraOpcode }, /*0x29C*/ { "SMSG_CANCEL_AUTO_REPEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x29D*/ { "SMSG_STANDSTATE_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -711,7 +711,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x2AA*/ { "MSG_TALENT_WIPE_CONFIRM", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTalentWipeConfirmOpcode }, /*0x2AB*/ { "SMSG_SUMMON_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x2AC*/ { "CMSG_SUMMON_RESPONSE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSummonResponseOpcode }, - /*0x2AD*/ { "MSG_MOVE_TOGGLE_GRAVITY_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x2AD*/ { "MSG_DEV_SHOWLABEL", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x2AE*/ { "SMSG_MONSTER_MOVE_TRANSPORT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x2AF*/ { "SMSG_PET_BROKEN", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x2B0*/ { "MSG_MOVE_FEATHER_FALL", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, @@ -729,7 +729,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x2BC*/ { "SMSG_PLAYER_SKINNED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x2BD*/ { "SMSG_DURABILITY_DAMAGE_DEATH", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x2BE*/ { "CMSG_SET_EXPLORATION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x2BF*/ { "CMSG_SET_ACTIONBAR_TOGGLES", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionBarToggles }, + /*0x2BF*/ { "CMSG_SET_ACTIONBAR_TOGGLES", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionBarToggles }, /*0x2C0*/ { "UMSG_DELETE_GUILD_CHARTER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x2C1*/ { "MSG_PETITION_RENAME", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionRenameOpcode }, /*0x2C2*/ { "SMSG_INIT_WORLD_STATES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -747,7 +747,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x2CE*/ { "CMSG_MOVE_TIME_SKIPPED", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode }, /*0x2CF*/ { "CMSG_MOVE_FEATHER_FALL_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleFeatherFallAck }, /*0x2D0*/ { "CMSG_MOVE_WATER_WALK_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck }, - /*0x2D1*/ { "CMSG_MOVE_NOT_ACTIVE_MOVER", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMover }, + /*0x2D1*/ { "CMSG_MOVE_NOT_ACTIVE_MOVER", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMover }, /*0x2D2*/ { "SMSG_PLAY_SOUND", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x2D3*/ { "CMSG_BATTLEFIELD_STATUS", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode }, /*0x2D4*/ { "SMSG_BATTLEFIELD_STATUS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -757,11 +757,11 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x2D8*/ { "CMSG_MOVE_START_SWIM_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x2D9*/ { "CMSG_MOVE_STOP_SWIM_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x2DA*/ { "SMSG_FORCE_WALK_SPEED_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x2DB*/ { "CMSG_FORCE_WALK_SPEED_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, + /*0x2DB*/ { "CMSG_FORCE_WALK_SPEED_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, /*0x2DC*/ { "SMSG_FORCE_SWIM_BACK_SPEED_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x2DD*/ { "CMSG_FORCE_SWIM_BACK_SPEED_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, + /*0x2DD*/ { "CMSG_FORCE_SWIM_BACK_SPEED_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, /*0x2DE*/ { "SMSG_FORCE_TURN_RATE_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x2DF*/ { "CMSG_FORCE_TURN_RATE_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, + /*0x2DF*/ { "CMSG_FORCE_TURN_RATE_CHANGE_ACK", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck }, /*0x2E0*/ { "MSG_PVP_LOG_DATA", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePVPLogDataOpcode }, /*0x2E1*/ { "CMSG_LEAVE_BATTLEFIELD", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveBattlefieldOpcode }, /*0x2E2*/ { "CMSG_AREA_SPIRIT_HEALER_QUERY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueryOpcode}, @@ -836,7 +836,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x327*/ { "CMSG_GM_UPDATE_TICKET_STATUS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x328*/ { "SMSG_GM_TICKET_STATUS_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x329*/ { "MSG_SET_DUNGEON_DIFFICULTY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetDungeonDifficultyOpcode}, - /*0x32A*/ { "CMSG_GMSURVEY_SUBMIT", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMSurveySubmit }, + /*0x32A*/ { "CMSG_GMSURVEY_SUBMIT", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMSurveySubmit }, /*0x32B*/ { "SMSG_UPDATE_INSTANCE_OWNERSHIP", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x32C*/ { "CMSG_IGNORE_KNOCKBACK_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x32D*/ { "SMSG_CHAT_PLAYER_AMBIGUOUS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -856,9 +856,9 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x33B*/ { "SMSG_INSTANCE_DIFFICULTY", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x33C*/ { "MSG_GM_RESETINSTANCELIMIT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x33D*/ { "SMSG_MOTD", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x33E*/ { "SMSG_MOVE_SET_FLIGHT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x33F*/ { "SMSG_MOVE_UNSET_FLIGHT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x340*/ { "CMSG_MOVE_FLIGHT_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x33E*/ { "SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY",STATUS_NEVER,PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x33F*/ { "SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY",STATUS_NEVER,PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x340*/ { "CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK",STATUS_NEVER,PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x341*/ { "MSG_MOVE_START_SWIM_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x342*/ { "MSG_MOVE_STOP_SWIM_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x343*/ { "SMSG_MOVE_SET_CAN_FLY", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -868,7 +868,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x347*/ { "CMSG_SOCKET_GEMS", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSocketOpcode }, /*0x348*/ { "CMSG_ARENA_TEAM_CREATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x349*/ { "SMSG_ARENA_TEAM_COMMAND_RESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x34A*/ { "UMSG_UPDATE_ARENA_TEAM_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x34A*/ { "MSG_MOVE_UPDATE_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY",STATUS_NEVER,PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x34B*/ { "CMSG_ARENA_TEAM_QUERY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArenaTeamQueryOpcode }, /*0x34C*/ { "SMSG_ARENA_TEAM_QUERY_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x34D*/ { "CMSG_ARENA_TEAM_ROSTER", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArenaTeamRosterOpcode }, @@ -950,7 +950,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x399*/ { "CMSG_ACTIVE_PVP_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x39A*/ { "CMSG_CHEAT_DUMP_ITEMS_DEBUG_ONLY", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x39B*/ { "SMSG_CHEAT_DUMP_ITEMS_DEBUG_ONLY_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x39C*/ { "SMSG_CHEAT_DUMP_ITEMS_DEBUG_ONLY_RESPONSE_WRITE_FILE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x39C*/ { "SMSG_CHEAT_DUMP_ITEMS_DEBUG_ONLY_RESPONSE_WRITE_FILE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x39D*/ { "SMSG_UPDATE_COMBO_POINTS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x39E*/ { "SMSG_VOICE_SESSION_ROSTER_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x39F*/ { "SMSG_VOICE_SESSION_LEAVE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -959,7 +959,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x3A2*/ { "SMSG_VOICE_SET_TALKER_MUTED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x3A3*/ { "SMSG_INIT_EXTRA_AURA_INFO_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x3A4*/ { "SMSG_SET_EXTRA_AURA_INFO_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x3A5*/ { "SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x3A5*/ { "SMSG_SET_EXTRA_AURA_INFO_NEED_UPDATE_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x3A6*/ { "SMSG_CLEAR_EXTRA_AURA_INFO_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x3A7*/ { "MSG_MOVE_START_DESCEND", STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes }, /*0x3A8*/ { "CMSG_IGNORE_REQUIREMENTS_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, @@ -1145,9 +1145,9 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x45C*/ { "SMSG_FORCE_PITCH_RATE_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x45D*/ { "CMSG_FORCE_PITCH_RATE_CHANGE_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x45E*/ { "SMSG_SPLINE_SET_PITCH_RATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x45F*/ { "SMSG_MOVE_ABANDON_TRANSPORT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x460*/ { "SMSG_CALENDAR_UPDATE_INVITE_LIST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x461*/ { "SMSG_CALENDAR_UPDATE_INVITE_LIST2", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x45F*/ { "CMSG_CALENDAR_EVENT_INVITE_NOTES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x460*/ { "SMSG_CALENDAR_EVENT_INVITE_NOTES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x461*/ { "SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x462*/ { "CMSG_UPDATE_MISSILE_TRAJECTORY", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x463*/ { "SMSG_UPDATE_ACCOUNT_DATA_COMPLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x464*/ { "SMSG_TRIGGER_MOVIE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -1163,7 +1163,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x46E*/ { "CMSG_COMPLETE_ACHIEVEMENT_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x46F*/ { "SMSG_QUESTUPDATE_ADD_PVP_KILL", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x470*/ { "CMSG_SET_CRITERIA_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x471*/ { "SMSG_CALENDAR_UPDATE_INVITE_LIST3", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x471*/ { "SMSG_CALENDAR_RAID_LOCKOUT_UPDATED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x472*/ { "CMSG_UNITANIMTIER_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x473*/ { "CMSG_CHAR_CUSTOMIZE", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCustomize }, /*0x474*/ { "SMSG_CHAR_CUSTOMIZE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -1214,30 +1214,30 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x4A1*/ { "SMSG_SERVER_INFO_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4A2*/ { "CMSG_CHECK_LOGIN_CRITERIA", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4A3*/ { "SMSG_SERVER_BUCK_DATA_START", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4A4*/ { "CMSG_QUERY_VEHICLE_STATUS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4A5*/ { "UMSG_UNKNOWN_1189", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4A4*/ { "CMSG_SET_BREATH", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4A5*/ { "CMSG_QUERY_VEHICLE_STATUS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4A6*/ { "SMSG_BATTLEGROUND_INFO_THROTTLED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4A7*/ { "SMSG_PLAYER_VEHICLE_DATA", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4A8*/ { "CMSG_PLAYER_VEHICLE_ENTER", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEnterPlayerVehicle }, - /*0x4A9*/ { "CMSG_EJECT_PASSENGER", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEjectPassenger }, + /*0x4A9*/ { "CMSG_CONTROLLER_EJECT_PASSENGER", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEjectPassenger }, /*0x4AA*/ { "SMSG_PET_GUIDS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4AB*/ { "SMSG_CLIENTCACHE_VERSION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4AC*/ { "UMSG_UNKNOWN_1196", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4AD*/ { "UMSG_UNKNOWN_1197", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4AE*/ { "UMSG_UNKNOWN_1198", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4AF*/ { "UMSG_UNKNOWN_1199", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4B0*/ { "UMSG_UNKNOWN_1200", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4B1*/ { "UMSG_UNKNOWN_1201", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4AC*/ { "CMSG_CHANGE_GDF_ARENA_RATING", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4AD*/ { "CMSG_SET_ARENA_TEAM_RATING_BY_INDEX", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4AE*/ { "CMSG_SET_ARENA_TEAM_WEEKLY_GAMES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4AF*/ { "CMSG_SET_ARENA_TEAM_SEASON_GAMES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4B0*/ { "CMSG_SET_ARENA_MEMBER_WEEKLY_GAMES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4B1*/ { "CMSG_SET_ARENA_MEMBER_SEASON_GAMES", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4B2*/ { "SMSG_ITEM_REFUND_INFO_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4B3*/ { "CMSG_ITEM_REFUND_INFO", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemRefundInfoRequest }, /*0x4B4*/ { "CMSG_ITEM_REFUND", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemRefund }, /*0x4B5*/ { "SMSG_ITEM_REFUND_RESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4B6*/ { "CMSG_CORPSE_MAP_POSITION_QUERY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCorpseMapPositionQuery }, /*0x4B7*/ { "SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4B8*/ { "CMSG_LFG_SET_ROLES_2", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL }, - /*0x4B9*/ { "UMSG_UNKNOWN_1209", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4BA*/ { "CMSG_CALENDAR_CONTEXT_EVENT_SIGNUP", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4BB*/ { "SMSG_CALENDAR_ACTION_PENDING", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4B8*/ { "CMSG_UNUSED5", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL }, + /*0x4B9*/ { "CMSG_UNUSED6", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4BA*/ { "CMSG_CALENDAR_EVENT_SIGNUP", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4BB*/ { "SMSG_CALENDAR_CLEAR_PENDING_ACTION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4BC*/ { "SMSG_EQUIPMENT_SET_LIST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4BD*/ { "CMSG_EQUIPMENT_SET_SAVE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetSave }, /*0x4BE*/ { "CMSG_UPDATE_PROJECTILE_POSITION", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateProjectilePosition }, @@ -1245,33 +1245,33 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x4C0*/ { "SMSG_TALENTS_INFO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4C1*/ { "CMSG_LEARN_PREVIEW_TALENTS", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnPreviewTalents }, /*0x4C2*/ { "CMSG_LEARN_PREVIEW_TALENTS_PET", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnPreviewTalentsPet }, - /*0x4C3*/ { "UMSG_UNKNOWN_1219", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4C4*/ { "UMSG_UNKNOWN_1220", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4C5*/ { "UMSG_UNKNOWN_1221", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4C6*/ { "UMSG_UNKNOWN_1222", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4C3*/ { "CMSG_SET_ACTIVE_TALENT_GROUP_OBSOLETE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4C4*/ { "CMSG_GM_GRANT_ACHIEVEMENT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4C5*/ { "CMSG_GM_REMOVE_ACHIEVEMENT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4C6*/ { "CMSG_GM_SET_CRITERIA_FOR_PLAYER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4C7*/ { "SMSG_ARENA_OPPONENT_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4C8*/ { "SMSG_ARENA_TEAM_CHANGE_FAILED_QUEUED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4C9*/ { "UMSG_UNKNOWN_1225", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4CA*/ { "UMSG_UNKNOWN_1226", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4CB*/ { "UMSG_UNKNOWN_1227", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4CC*/ { "UMSG_UNKNOWN_1228", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4C9*/ { "CMSG_PROFILEDATA_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4CA*/ { "SMSG_PROFILEDATA_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4CB*/ { "CMSG_START_BATTLEFIELD_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4CC*/ { "CMSG_END_BATTLEFIELD_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4CD*/ { "SMSG_MULTIPLE_PACKETS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4CE*/ { "SMSG_FORCE_UNK1_SPEED_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4CF*/ { "CMSG_FORCE_UNK1_SPEED_CHANGE_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4D0*/ { "SMSG_FORCE_UNK2_SPEED_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4D1*/ { "CMSG_FORCE_UNK2_SPEED_CHANGE_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4D2*/ { "MSG_MOVE_UNKNOWN_1234", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4D3*/ { "SMSG_SPLINE_MOVE_UNKNOWN_1235", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4D4*/ { "SMSG_SPLINE_MOVE_UNKNOWN_1236", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4D2*/ { "MSG_MOVE_GRAVITY_CHNG", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4D3*/ { "SMSG_SPLINE_MOVE_GRAVITY_DISABLE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4D4*/ { "SMSG_SPLINE_MOVE_GRAVITY_ENABLE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4D5*/ { "CMSG_EQUIPMENT_SET_USE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetUse }, /*0x4D6*/ { "SMSG_EQUIPMENT_SET_USE_RESULT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4D7*/ { "UMSG_UNKNOWN_1239", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4D8*/ { "SMSG_UNKNOWN_1240", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4D7*/ { "CMSG_FORCE_ANIM", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4D8*/ { "SMSG_FORCE_ANIM", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4D9*/ { "CMSG_CHAR_FACTION_CHANGE", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharFactionOrRaceChange }, /*0x4DA*/ { "SMSG_CHAR_FACTION_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4DB*/ { "UMSG_UNKNOWN_1243", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4DC*/ { "UMSG_UNKNOWN_1244", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4DD*/ { "UMSG_UNKNOWN_1245", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4DB*/ { "CMSG_PVP_QUEUE_STATS_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4DC*/ { "SMSG_PVP_QUEUE_STATS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4DD*/ { "CMSG_SET_PAID_SERVICE_CHEAT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4DE*/ { "SMSG_BATTLEFIELD_MGR_ENTRY_INVITE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4DF*/ { "CMSG_BATTLEFIELD_MGR_ENTRY_INVITE_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4E0*/ { "SMSG_BATTLEFIELD_MGR_ENTERED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, @@ -1283,58 +1283,58 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x4E6*/ { "SMSG_BATTLEFIELD_MGR_EJECTED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4E7*/ { "CMSG_BATTLEFIELD_MGR_EXIT_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4E8*/ { "SMSG_BATTLEFIELD_MGR_STATE_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4E9*/ { "UMSG_UNKNOWN_1257", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4EA*/ { "UMSG_UNKNOWN_1258", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4E9*/ { "CMSG_BATTLEFIELD_MANAGER_ADVANCE_STATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4EA*/ { "CMSG_BATTLEFIELD_MANAGER_SET_NEXT_TRANSITION_TIME",STATUS_NEVER,PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4EB*/ { "MSG_SET_RAID_DIFFICULTY", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRaidDifficultyOpcode }, - /*0x4EC*/ { "UMSG_UNKNOWN_1260", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4EC*/ { "CMSG_TOGGLE_XP_GAIN", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4ED*/ { "SMSG_TOGGLE_XP_GAIN", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4EE*/ { "SMSG_GMRESPONSE_DB_ERROR", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4EF*/ { "SMSG_GMRESPONSE_RECEIVED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4F0*/ { "CMSG_GMRESPONSE_RESOLVE", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMResponseResolve }, /*0x4F1*/ { "SMSG_GMRESPONSE_STATUS_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4F2*/ { "UMSG_UNKNOWN_1266", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4F3*/ { "UMSG_UNKNOWN_1267", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4F4*/ { "UMSG_UNKNOWN_1268", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4F5*/ { "UMSG_UNKNOWN_1269", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4F2*/ { "SMSG_GMRESPONSE_CREATE_TICKET", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4F3*/ { "CMSG_GMRESPONSE_CREATE_TICKET", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4F4*/ { "CMSG_SERVERINFO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4F5*/ { "SMSG_SERVERINFO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4F6*/ { "CMSG_WORLD_STATE_UI_TIMER_UPDATE", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleWorldStateUITimerUpdate }, /*0x4F7*/ { "SMSG_WORLD_STATE_UI_TIMER_UPDATE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4F8*/ { "CMSG_CHAR_RACE_CHANGE", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharFactionOrRaceChange }, - /*0x4F9*/ { "UMSG_UNKNOWN_1273", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4F9*/ { "MSG_VIEW_PHASE_SHIFT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4FA*/ { "SMSG_TALENTS_INVOLUNTARILY_RESET", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4FB*/ { "UMSG_UNKNOWN_1275", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x4FC*/ { "SMSG_UNKNOWN_1276", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x4FB*/ { "CMSG_DEBUG_SERVER_GEO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4FC*/ { "SMSG_DEBUG_SERVER_GEO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x4FD*/ { "SMSG_LOOT_SLOT_CHANGED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x4FE*/ { "UMSG_UNKNOWN_1278", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x4FE*/ { "UMSG_UPDATE_GROUP_INFO", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x4FF*/ { "CMSG_READY_FOR_ACCOUNT_DATA_TIMES", STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleReadyForAccountDataTimes }, /*0x500*/ { "CMSG_QUERY_QUESTS_COMPLETED", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryQuestsCompleted }, /*0x501*/ { "SMSG_QUERY_QUESTS_COMPLETED_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x502*/ { "CMSG_GM_REPORT_LAG", STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportLag }, - /*0x503*/ { "UMSG_UNKNOWN_1283", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x504*/ { "UMSG_UNKNOWN_1284", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x505*/ { "UMSG_UNKNOWN_1285", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x503*/ { "CMSG_AFK_MONITOR_INFO_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x504*/ { "SMSG_AFK_MONITOR_INFO_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x505*/ { "CMSG_AFK_MONITOR_INFO_CLEAR", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x506*/ { "SMSG_CORPSE_IS_NOT_IN_INSTANCE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x507*/ { "UMSG_UNKNOWN_1287", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x507*/ { "CMSG_GM_NUKE_CHARACTER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x508*/ { "CMSG_SET_ALLOW_LOW_LEVEL_RAID1", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x509*/ { "CMSG_SET_ALLOW_LOW_LEVEL_RAID2", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x50A*/ { "SMSG_CAMERA_SHAKE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x50B*/ { "SMSG_UPDATE_ITEM_ENCHANTMENTS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x50C*/ { "UMSG_UNKNOWN_1292", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x50C*/ { "CMSG_SET_CHARACTER_MODEL", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x50D*/ { "SMSG_REDIRECT_CLIENT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x50E*/ { "CMSG_REDIRECTION_FAILED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x50F*/ { "SMSG_UNKNOWN_1295", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x510*/ { "CMSG_UNKNOWN_1296", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x50F*/ { "SMSG_SUSPEND_COMMS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x510*/ { "CMSG_SUSPEND_COMMS_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x511*/ { "SMSG_FORCE_SEND_QUEUED_PACKETS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, /*0x512*/ { "CMSG_REDIRECTION_AUTH_PROOF", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x513*/ { "UMSG_UNKNOWN_1299", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x514*/ { "SMSG_COMBAT_LOG_MULTIPLE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x515*/ { "SMSG_LFG_OPEN_FROM_GOSSIP", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x516*/ { "SMSG_UNKNOWN_1302", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x517*/ { "CMSG_UNKNOWN_1303", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x518*/ { "SMSG_UNKNOWN_1304", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x519*/ { "UMSG_UNKNOWN_1305", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x51A*/ { "UMSG_UNKNOWN_1306", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x513*/ { "CMSG_DROP_NEW_CONNECTION", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x514*/ { "SMSG_SEND_ALL_COMBAT_LOG", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x515*/ { "SMSG_OPEN_LFG_DUNGEON_FINDER", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x516*/ { "SMSG_MOVE_SET_COLLISION_HGT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x517*/ { "CMSG_MOVE_SET_COLLISION_HGT_ACK", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x518*/ { "MSG_MOVE_SET_COLLISION_HGT", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x519*/ { "CMSG_CLEAR_RANDOM_BG_WIN_TIME", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, + /*0x51A*/ { "CMSG_CLEAR_HOLIDAY_BG_WIN_TIME", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, /*0x51B*/ { "CMSG_COMMENTATOR_SKIRMISH_QUEUE_COMMAND", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL }, - /*0x51C*/ { "SMSG_UNKNOWN_1308", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x51D*/ { "SMSG_UNKNOWN_1309", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, - /*0x51E*/ { "SMSG_UNKNOWN_1310", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x51C*/ { "SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT1", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x51D*/ { "SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT2", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, + /*0x51E*/ { "SMSG_COMPRESSED_UNKNOWN_1310", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide }, }; diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index a6f598e5866..5f88aa3c01f 100755 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -258,7 +258,7 @@ enum Opcodes SMSG_MONSTER_MOVE = 0x0DD, SMSG_MOVE_WATER_WALK = 0x0DE, SMSG_MOVE_LAND_WALK = 0x0DF, - MSG_MOVE_SET_RAW_POSITION_ACK = 0x0E0, + CMSG_MOVE_CHARM_PORT_CHEAT = 0x0E0, CMSG_MOVE_SET_RAW_POSITION = 0x0E1, SMSG_FORCE_RUN_SPEED_CHANGE = 0x0E2, CMSG_FORCE_RUN_SPEED_CHANGE_ACK = 0x0E3, @@ -306,12 +306,12 @@ enum Opcodes CMSG_SWAP_INV_ITEM = 0x10D, CMSG_SPLIT_ITEM = 0x10E, CMSG_AUTOEQUIP_ITEM_SLOT = 0x10F, - OBSOLETE_DROP_ITEM = 0x110, + CMSG_UNCLAIM_LICENSE = 0x110, CMSG_DESTROYITEM = 0x111, SMSG_INVENTORY_CHANGE_FAILURE = 0x112, SMSG_OPEN_CONTAINER = 0x113, CMSG_INSPECT = 0x114, - SMSG_INSPECT = 0x115, + SMSG_INSPECT_RESULTS_UPDATE = 0x115, CMSG_INITIATE_TRADE = 0x116, CMSG_BEGIN_TRADE = 0x117, CMSG_BUSY_TRADE = 0x118, @@ -352,9 +352,9 @@ enum Opcodes CMSG_CANCEL_CHANNELLING = 0x13B, SMSG_AI_REACTION = 0x13C, CMSG_SET_SELECTION = 0x13D, - CMSG_EQUIPMENT_SET_DELETE = 0x13E, - CMSG_INSTANCE_LOCK_WARNING_RESPONSE = 0x13F, - CMSG_UNUSED2 = 0x140, + CMSG_DELETEEQUIPMENT_SET = 0x13E, + CMSG_INSTANCE_LOCK_RESPONSE = 0x13F, + CMSG_DEBUG_PASSIVE_AURA = 0x140, CMSG_ATTACKSWING = 0x141, CMSG_ATTACKSTOP = 0x142, SMSG_ATTACKSTART = 0x143, @@ -366,8 +366,8 @@ enum Opcodes SMSG_ATTACKSWING_CANT_ATTACK = 0x149, SMSG_ATTACKERSTATEUPDATE = 0x14A, SMSG_BATTLEFIELD_PORT_DENIED = 0x14B, - SMSG_DAMAGE_DONE_OBSOLETE = 0x14C, - SMSG_UNIT_SPELLCAST_START = 0x14D, + CMSG_PERFORM_ACTION_SET = 0x14C, + SMSG_RESUME_CAST_BAR = 0x14D, SMSG_CANCEL_COMBAT = 0x14E, SMSG_SPELLBREAKLOG = 0x14F, SMSG_SPELLHEALLOG = 0x150, @@ -402,7 +402,7 @@ enum Opcodes CMSG_DUEL_CANCELLED = 0x16D, SMSG_MOUNTRESULT = 0x16E, SMSG_DISMOUNTRESULT = 0x16F, - SMSG_PUREMOUNT_CANCELLED_OBSOLETE = 0x170, // ERR_REMOVE_FROM_PVP_QUEUE_* events + SMSG_REMOVED_FROM_PVP_QUEUE = 0x170, CMSG_MOUNTSPECIAL_ANIM = 0x171, SMSG_MOUNTSPECIAL_ANIM = 0x172, SMSG_PET_TAME_FAILURE = 0x173, @@ -543,7 +543,7 @@ enum Opcodes CMSG_GM_NUKE = 0x1FA, MSG_RANDOM_ROLL = 0x1FB, SMSG_ENVIRONMENTALDAMAGELOG = 0x1FC, - CMSG_PLAYER_DIFFICULTY_CHANGE = 0x1FD, + CMSG_CHANGEPLAYER_DIFFICULTY = 0x1FD, SMSG_RWHOIS = 0x1FE, SMSG_LFG_PLAYER_REWARD = 0x1FF, // uint32, uint8, uint32, uint32, uint32, uint32, uint32, uint8, for (uint8) {uint32, uint32, uint32} SMSG_LFG_TELEPORT_DENIED = 0x200, // uint32 (1, 2, 4, 6;0, 5, 7) @@ -560,7 +560,7 @@ enum Opcodes CMSG_UPDATE_ACCOUNT_DATA = 0x20B, SMSG_UPDATE_ACCOUNT_DATA = 0x20C, SMSG_CLEAR_FAR_SIGHT_IMMEDIATE = 0x20D, - SMSG_PLAYER_DIFFICULTY_CHANGE = 0x20E, + SMSG_CHANGEPLAYER_DIFFICULTY_RESULT = 0x20E, CMSG_GM_TEACH = 0x20F, CMSG_GM_CREATE_ITEM_TARGET = 0x210, CMSG_GMTICKET_GETTICKET = 0x211, @@ -609,8 +609,8 @@ enum Opcodes CMSG_BATTLEFIELD_LIST = 0x23C, SMSG_BATTLEFIELD_LIST = 0x23D, CMSG_BATTLEFIELD_JOIN = 0x23E, - SMSG_BATTLEFIELD_WIN_OBSOLETE = 0x23F, - SMSG_BATTLEFIELD_LOSE_OBSOLETE = 0x240, + SMSG_FORCE_SET_VEHICLE_REC_ID = 0x23F, + CMSG_SET_VEHICLE_REC_ID_ACK = 0x240, CMSG_TAXICLEARNODE = 0x241, CMSG_TAXIENABLENODE = 0x242, CMSG_ITEM_TEXT_QUERY = 0x243, @@ -643,7 +643,7 @@ enum Opcodes SMSG_AUCTION_BIDDER_NOTIFICATION = 0x25E, SMSG_AUCTION_OWNER_NOTIFICATION = 0x25F, SMSG_PROCRESIST = 0x260, - SMSG_STANDSTATE_CHANGE_FAILURE_OBSOLETE = 0x261, + SMSG_COMBAT_EVENT_FAILED = 0x261, SMSG_DISPEL_FAILED = 0x262, SMSG_SPELLORDAMAGE_IMMUNE = 0x263, CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x264, @@ -692,14 +692,14 @@ enum Opcodes CMSG_GROUP_ASSISTANT_LEADER = 0x28F, CMSG_BUYBACK_ITEM = 0x290, SMSG_SERVER_MESSAGE = 0x291, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x292, // lua: SetSavedInstanceExtend + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x292, SMSG_LFG_OFFER_CONTINUE = 0x293, - CMSG_MEETINGSTONE_CHEAT = 0x294, // not found 3.3 - SMSG_MEETINGSTONE_SETQUEUE = 0x295, // string, showed in console - CMSG_MEETINGSTONE_INFO = 0x296, // EVENT_LFG_UPDATE - SMSG_MEETINGSTONE_COMPLETE = 0x297, // EVENT_MAIL_SHOW - SMSG_MEETINGSTONE_IN_PROGRESS = 0x298, // uint32, some UPDATE_COOLDOWN events - SMSG_MEETINGSTONE_MEMBER_ADDED = 0x299, // uint32, errors: ERR_NOT_IN_GROUP (2, 51) and ERR_NOT_IN_RAID (3, 39, 40) + CMSG_TEST_DROP_RATE = 0x294, + SMSG_TEST_DROP_RATE_RESULT = 0x295, + CMSG_LFG_GET_STATUS = 0x296, + SMSG_SHOW_MAILBOX = 0x297, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x298, + SMSG_CHAT_NOT_IN_PARTY = 0x299, // uint32, errors: ERR_NOT_IN_GROUP (2, 51) and ERR_NOT_IN_RAID (3, 39, 40) CMSG_GMTICKETSYSTEM_TOGGLE = 0x29A, CMSG_CANCEL_GROWTH_AURA = 0x29B, SMSG_CANCEL_AUTO_REPEAT = 0x29C, @@ -719,7 +719,7 @@ enum Opcodes MSG_TALENT_WIPE_CONFIRM = 0x2AA, SMSG_SUMMON_REQUEST = 0x2AB, CMSG_SUMMON_RESPONSE = 0x2AC, - MSG_MOVE_TOGGLE_GRAVITY_CHEAT = 0x2AD, + MSG_DEV_SHOWLABEL = 0x2AD, SMSG_MONSTER_MOVE_TRANSPORT = 0x2AE, SMSG_PET_BROKEN = 0x2AF, MSG_MOVE_FEATHER_FALL = 0x2B0, @@ -864,9 +864,9 @@ enum Opcodes SMSG_INSTANCE_DIFFICULTY = 0x33B, MSG_GM_RESETINSTANCELIMIT = 0x33C, SMSG_MOTD = 0x33D, - SMSG_MOVE_SET_FLIGHT = 0x33E, - SMSG_MOVE_UNSET_FLIGHT = 0x33F, - CMSG_MOVE_FLIGHT_ACK = 0x340, + SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY= 0x33E, + SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY= 0x33F, + CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK= 0x340, MSG_MOVE_START_SWIM_CHEAT = 0x341, MSG_MOVE_STOP_SWIM_CHEAT = 0x342, SMSG_MOVE_SET_CAN_FLY = 0x343, @@ -876,7 +876,7 @@ enum Opcodes CMSG_SOCKET_GEMS = 0x347, CMSG_ARENA_TEAM_CREATE = 0x348, SMSG_ARENA_TEAM_COMMAND_RESULT = 0x349, - UMSG_UPDATE_ARENA_TEAM_OBSOLETE = 0x34A, + MSG_MOVE_UPDATE_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY= 0x34A, CMSG_ARENA_TEAM_QUERY = 0x34B, SMSG_ARENA_TEAM_QUERY_RESPONSE = 0x34C, CMSG_ARENA_TEAM_ROSTER = 0x34D, @@ -894,29 +894,29 @@ enum Opcodes MSG_MOVE_START_ASCEND = 0x359, MSG_MOVE_STOP_ASCEND = 0x35A, SMSG_ARENA_TEAM_STATS = 0x35B, - CMSG_LFG_JOIN = 0x35C, // CMSG JoinLFG - CMSG_LFG_LEAVE = 0x35D, // CMSG LeaveLFG - CMSG_SEARCH_LFG_JOIN = 0x35E, // CMSG SearchLFGJoin - CMSG_SEARCH_LFG_LEAVE = 0x35F, // CMSG SearchLFGLeave - SMSG_UPDATE_LFG_LIST = 0x360, // SMSG uint32, uint32, if (uint8) { uint32 count, for (count) { uint64} }, uint32 count2, uint32, for (count2) { uint64, uint32 flags, if (flags & 0x2) {string}, if (flags & 0x10) {for (3) uint8}, if (flags & 0x80) {uint64, uint32}}, uint32 count3, uint32, for (count3) {uint64, uint32 flags, if (flags & 0x1) {uint8, uint8, uint8, for (3) uint8, uint32, uint32, uint32, uint32, uint32, uint32, float, float, uint32, uint32, uint32, uint32, uint32, float, uint32, uint32, uint32, uint32, uint32, uint32}, if (flags&0x2) string, if (flags&0x4) uint8, if (flags&0x8) uint64, if (flags&0x10) uint8, if (flags&0x20) uint32, if (flags&0x40) uint8, if (flags& 0x80) {uint64, uint32}} - SMSG_LFG_PROPOSAL_UPDATE = 0x361, // SMSG uint32, uint8, uint32, uint32, uint8, for (uint8) {uint32, uint8, uint8, uint8, uint8} - CMSG_LFG_PROPOSAL_RESULT = 0x362, // CMSG AcceptProposal, RejectProposal - SMSG_LFG_ROLE_CHECK_UPDATE = 0x363, // SMSG uint32, uint8, for (uint8) uint32, uint8, for (uint8) { uint64, uint8, uint32, uint8, } - SMSG_LFG_JOIN_RESULT = 0x364, // SMSG uint32 unk, uint32, if (unk == 6) { uint8 count, for (count) uint64 } - SMSG_LFG_QUEUE_STATUS = 0x365, // SMSG uint32 dungeon, uint32 lfgtype, uint32, uint32, uint32, uint32, uint8, uint8, uint8, uint8 - CMSG_SET_LFG_COMMENT = 0x366, // CMSG SetLFGComment - SMSG_LFG_UPDATE_PLAYER = 0x367, // SMSG uint8, if (uint8) { uint8, uint8, uint8, uint8, if (uint8) for (uint8) uint32, string} - SMSG_LFG_UPDATE_PARTY = 0x368, // SMSG uint8, if (uint8) { uint8, uint8, uint8, for (3) uint8, uint8, if (uint8) for (uint8) uint32, string} - SMSG_LFG_UPDATE_SEARCH = 0x369, // SMSG uint8 - CMSG_LFG_SET_ROLES = 0x36A, // CMSG SetLFGRoles - CMSG_LFG_SET_NEEDS = 0x36B, // CMSG SetLFGNeeds - CMSG_LFG_SET_BOOT_VOTE = 0x36C, // CMSG SetLFGBootVote - SMSG_LFG_BOOT_PLAYER = 0x36D, // SMSG uint8, uint8, uint8, uint64, uint32, uint32, uint32, uint32 - CMSG_LFD_PLAYER_LOCK_INFO_REQUEST = 0x36E, // CMSG RequestLFDPlayerLockInfo - SMSG_LFG_PLAYER_INFO = 0x36F, // SMSG uint8, for (uint8) { uint32, uint8, uint32, uint32, uint32, uint32, uint8, for (uint8) {uint32, uint32, uint32}}, uint32, for (uint32) {uint32, uint32} - CMSG_LFG_TELEPORT = 0x370, // CMSG LFGTeleport - CMSG_LFD_PARTY_LOCK_INFO_REQUEST = 0x371, // CMSG RequestLFDPartyLockInfo - SMSG_LFG_PARTY_INFO = 0x372, // SMSG uint8, for (uint8) uint64 + CMSG_LFG_JOIN = 0x35C, + CMSG_LFG_LEAVE = 0x35D, + CMSG_SEARCH_LFG_JOIN = 0x35E, + CMSG_SEARCH_LFG_LEAVE = 0x35F, + SMSG_UPDATE_LFG_LIST = 0x360, // uint32, uint32, if (uint8) { uint32 count, for (count) { uint64} }, uint32 count2, uint32, for (count2) { uint64, uint32 flags, if (flags & 0x2) {string}, if (flags & 0x10) {for (3) uint8}, if (flags & 0x80) {uint64, uint32}}, uint32 count3, uint32, for (count3) {uint64, uint32 flags, if (flags & 0x1) {uint8, uint8, uint8, for (3) uint8, uint32, uint32, uint32, uint32, uint32, uint32, float, float, uint32, uint32, uint32, uint32, uint32, float, uint32, uint32, uint32, uint32, uint32, uint32}, if (flags&0x2) string, if (flags&0x4) uint8, if (flags&0x8) uint64, if (flags&0x10) uint8, if (flags&0x20) uint32, if (flags&0x40) uint8, if (flags& 0x80) {uint64, uint32}} + SMSG_LFG_PROPOSAL_UPDATE = 0x361, // uint32, uint8, uint32, uint32, uint8, for (uint8) {uint32, uint8, uint8, uint8, uint8} + CMSG_LFG_PROPOSAL_RESULT = 0x362, + SMSG_LFG_ROLE_CHECK_UPDATE = 0x363, // uint32, uint8, for (uint8) uint32, uint8, for (uint8) { uint64, uint8, uint32, uint8, } + SMSG_LFG_JOIN_RESULT = 0x364, // uint32 unk, uint32, if (unk == 6) { uint8 count, for (count) uint64 } + SMSG_LFG_QUEUE_STATUS = 0x365, // uint32 dungeon, uint32 lfgtype, uint32, uint32, uint32, uint32, uint8, uint8, uint8, uint8 + CMSG_SET_LFG_COMMENT = 0x366, + SMSG_LFG_UPDATE_PLAYER = 0x367, // uint8, if (uint8) { uint8, uint8, uint8, uint8, if (uint8) for (uint8) uint32, string} + SMSG_LFG_UPDATE_PARTY = 0x368, // uint8, if (uint8) { uint8, uint8, uint8, for (3) uint8, uint8, if (uint8) for (uint8) uint32, string} + SMSG_LFG_UPDATE_SEARCH = 0x369, // uint8 + CMSG_LFG_SET_ROLES = 0x36A, + CMSG_LFG_SET_NEEDS = 0x36B, + CMSG_LFG_SET_BOOT_VOTE = 0x36C, + SMSG_LFG_BOOT_PLAYER = 0x36D, // uint8, uint8, uint8, uint64, uint32, uint32, uint32, uint32 + CMSG_LFD_PLAYER_LOCK_INFO_REQUEST = 0x36E, + SMSG_LFG_PLAYER_INFO = 0x36F, // uint8, for (uint8) { uint32, uint8, uint32, uint32, uint32, uint32, uint8, for (uint8) {uint32, uint32, uint32}}, uint32, for (uint32) {uint32, uint32} + CMSG_LFG_TELEPORT = 0x370, + CMSG_LFD_PARTY_LOCK_INFO_REQUEST = 0x371, + SMSG_LFG_PARTY_INFO = 0x372, // uint8, for (uint8) uint64 SMSG_TITLE_EARNED = 0x373, CMSG_SET_TITLE = 0x374, CMSG_CANCEL_MOUNT_AURA = 0x375, @@ -1031,7 +1031,7 @@ enum Opcodes SMSG_COMSAT_CONNECT_FAIL = 0x3E2, SMSG_VOICE_CHAT_STATUS = 0x3E3, CMSG_REPORT_PVP_AFK = 0x3E4, - SMSG_REPORT_PVP_AFK_RESULT = 0x3E5, // SMSG? + SMSG_REPORT_PVP_AFK_RESULT = 0x3E5, CMSG_GUILD_BANKER_ACTIVATE = 0x3E6, CMSG_GUILD_BANK_QUERY_TAB = 0x3E7, SMSG_GUILD_BANK_LIST = 0x3E8, @@ -1075,7 +1075,7 @@ enum Opcodes CMSG_REFER_A_FRIEND = 0x40E, MSG_GM_CHANGE_ARENA_RATING = 0x40F, CMSG_DECLINE_CHANNEL_INVITE = 0x410, - SMSG_GROUPACTION_THROTTLED = 0x411, // SMSG? + SMSG_GROUPACTION_THROTTLED = 0x411, SMSG_OVERRIDE_LIGHT = 0x412, // uint32 defaultMapLight, uint32 overrideLight, uint32 transitionTimeMs SMSG_TOTEM_CREATED = 0x413, CMSG_TOTEM_DESTROYED = 0x414, @@ -1153,9 +1153,9 @@ enum Opcodes SMSG_FORCE_PITCH_RATE_CHANGE = 0x45C, CMSG_FORCE_PITCH_RATE_CHANGE_ACK = 0x45D, SMSG_SPLINE_SET_PITCH_RATE = 0x45E, - SMSG_MOVE_ABANDON_TRANSPORT = 0x45F, - SMSG_CALENDAR_UPDATE_INVITE_LIST = 0x460, - SMSG_CALENDAR_UPDATE_INVITE_LIST2 = 0x461, + CMSG_CALENDAR_EVENT_INVITE_NOTES = 0x45F, + SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x460, + SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x461, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x462, SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x463, SMSG_TRIGGER_MOVIE = 0x464, @@ -1171,7 +1171,7 @@ enum Opcodes CMSG_COMPLETE_ACHIEVEMENT_CHEAT = 0x46E, SMSG_QUESTUPDATE_ADD_PVP_KILL = 0x46F, CMSG_SET_CRITERIA_CHEAT = 0x470, - SMSG_CALENDAR_UPDATE_INVITE_LIST3 = 0x471, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x471, CMSG_UNITANIMTIER_CHEAT = 0x472, CMSG_CHAR_CUSTOMIZE = 0x473, SMSG_CHAR_CUSTOMIZE = 0x474, @@ -1214,137 +1214,137 @@ enum Opcodes SMSG_PET_LEARNED_SPELL = 0x499, SMSG_PET_REMOVED_SPELL = 0x49A, CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE = 0x49B, - CMSG_HEARTH_AND_RESURRECT = 0x49C, // not changed in 3.1 - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x49D, // not changed 9626 - SMSG_CRITERIA_DELETED = 0x49E, // not changed 9626 - SMSG_ACHIEVEMENT_DELETED = 0x49F, // not changed 9626 - CMSG_SERVER_INFO_QUERY = 0x4A0, // not found - SMSG_SERVER_INFO_RESPONSE = 0x4A1, // not found - CMSG_CHECK_LOGIN_CRITERIA = 0x4A2, // not found - SMSG_SERVER_BUCK_DATA_START = 0x4A3, // not found - CMSG_QUERY_VEHICLE_STATUS = 0x4A4, // not found - UMSG_UNKNOWN_1189 = 0x4A5, // not found, old SMSG_PET_GUIDS + CMSG_HEARTH_AND_RESURRECT = 0x49C, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x49D, + SMSG_CRITERIA_DELETED = 0x49E, + SMSG_ACHIEVEMENT_DELETED = 0x49F, + CMSG_SERVER_INFO_QUERY = 0x4A0, + SMSG_SERVER_INFO_RESPONSE = 0x4A1, + CMSG_CHECK_LOGIN_CRITERIA = 0x4A2, + SMSG_SERVER_BUCK_DATA_START = 0x4A3, + CMSG_SET_BREATH = 0x4A4, + CMSG_QUERY_VEHICLE_STATUS = 0x4A5, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x4A6, // empty, "You can't do that yet" - SMSG_PLAYER_VEHICLE_DATA = 0x4A7, // smsg guid+uint32 (vehicle) - CMSG_PLAYER_VEHICLE_ENTER = 0x4A8, // cmsg uint64 - CMSG_EJECT_PASSENGER = 0x4A9, // cmsg uint64 - SMSG_PET_GUIDS = 0x4AA, // shifted+5 - SMSG_CLIENTCACHE_VERSION = 0x4AB, // shifted+5 - UMSG_UNKNOWN_1196 = 0x4AC, // not found - UMSG_UNKNOWN_1197 = 0x4AD, // not found - UMSG_UNKNOWN_1198 = 0x4AE, // not found - UMSG_UNKNOWN_1199 = 0x4AF, // not found - UMSG_UNKNOWN_1200 = 0x4B0, // not found - UMSG_UNKNOWN_1201 = 0x4B1, // not found - SMSG_ITEM_REFUND_INFO_RESPONSE = 0x4B2, // refund item info - CMSG_ITEM_REFUND_INFO = 0x4B3, // refund request? + SMSG_PLAYER_VEHICLE_DATA = 0x4A7, // guid+uint32 (vehicle) + CMSG_PLAYER_VEHICLE_ENTER = 0x4A8, // uint64 + CMSG_CONTROLLER_EJECT_PASSENGER = 0x4A9, // uint64 + SMSG_PET_GUIDS = 0x4AA, + SMSG_CLIENTCACHE_VERSION = 0x4AB, + CMSG_CHANGE_GDF_ARENA_RATING = 0x4AC, + CMSG_SET_ARENA_TEAM_RATING_BY_INDEX = 0x4AD, + CMSG_SET_ARENA_TEAM_WEEKLY_GAMES = 0x4AE, + CMSG_SET_ARENA_TEAM_SEASON_GAMES = 0x4AF, + CMSG_SET_ARENA_MEMBER_WEEKLY_GAMES = 0x4B0, + CMSG_SET_ARENA_MEMBER_SEASON_GAMES = 0x4B1, + SMSG_ITEM_REFUND_INFO_RESPONSE = 0x4B2, + CMSG_ITEM_REFUND_INFO = 0x4B3, CMSG_ITEM_REFUND = 0x4B4, // lua: ContainerRefundItemPurchase - SMSG_ITEM_REFUND_RESULT = 0x4B5, // refund item result - CMSG_CORPSE_MAP_POSITION_QUERY = 0x4B6, // CMSG, uint32 - SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE = 0x4B7, // SMSG, 3*float+float - UMSG_UNKNOWN_1208 = 0x4B8, // not found - UMSG_UNKNOWN_1209 = 0x4B9, // not found - CMSG_CALENDAR_CONTEXT_EVENT_SIGNUP = 0x4BA, // CMSG, uint64, lua: CalendarContextEventSignUp - SMSG_CALENDAR_ACTION_PENDING = 0x4BB, // SMSG, calendar related EVENT_CALENDAR_ACTION_PENDING - SMSG_EQUIPMENT_SET_LIST = 0x4BC, // SMSG, equipment manager list? - CMSG_EQUIPMENT_SET_SAVE = 0x4BD, // CMSG, lua: SaveEquipmentSet - CMSG_UPDATE_PROJECTILE_POSITION = 0x4BE, // CMSG, uint64 caster, uint32 spellId, uint8 castId, vector3 position - SMSG_SET_PROJECTILE_POSITION = 0x4BF, // SMSG, uint64 caster, uint8 castId, vector3 position - SMSG_TALENTS_INFO = 0x4C0, // SMSG, talents related - CMSG_LEARN_PREVIEW_TALENTS = 0x4C1, // CMSG, lua: LearnPreviewTalents (for player?) - CMSG_LEARN_PREVIEW_TALENTS_PET = 0x4C2, // CMSG, lua: LearnPreviewTalents (for pet?) - UMSG_UNKNOWN_1219 = 0x4C3, // not found 3.2 - UMSG_UNKNOWN_1220 = 0x4C4, // not found 3.2 - UMSG_UNKNOWN_1221 = 0x4C5, // not found 3.2 - UMSG_UNKNOWN_1222 = 0x4C6, // not found 3.2 - SMSG_ARENA_OPPONENT_UPDATE = 0x4C7, // uint64, EVENT_ARENA_OPPONENT_UPDATE - SMSG_ARENA_TEAM_CHANGE_FAILED_QUEUED = 0x4C8, // uint32 "Can't modify arena team while queued or in a match." 3.2 - UMSG_UNKNOWN_1225 = 0x4C9, // not found 3.2 - UMSG_UNKNOWN_1226 = 0x4CA, // not found 3.2 - UMSG_UNKNOWN_1227 = 0x4CB, // not found 3.2 - UMSG_UNKNOWN_1228 = 0x4CC, // not found 3.2 - SMSG_MULTIPLE_PACKETS = 0x4CD, // SMSG, handles any opcode - SMSG_FORCE_UNK1_SPEED_CHANGE = 0x4CE, // SMSG, movement related - CMSG_FORCE_UNK1_SPEED_CHANGE_ACK = 0x4CF, // movement related - SMSG_FORCE_UNK2_SPEED_CHANGE = 0x4D0, // SMSG, movement related - CMSG_FORCE_UNK2_SPEED_CHANGE_ACK = 0x4D1, // movement related - MSG_MOVE_UNKNOWN_1234 = 0x4D2, // SMSG, movement related - SMSG_SPLINE_MOVE_UNKNOWN_1235 = 0x4D3, // SMSG, movement related - SMSG_SPLINE_MOVE_UNKNOWN_1236 = 0x4D4, // SMSG, movement related - CMSG_EQUIPMENT_SET_USE = 0x4D5, // CMSG, lua: UseEquipmentSet - SMSG_EQUIPMENT_SET_USE_RESULT = 0x4D6, // SMSG, UseEquipmentSetResult? - UMSG_UNKNOWN_1239 = 0x4D7, // not found 3.2 - SMSG_UNKNOWN_1240 = 0x4D8, // SMSG, uint64, string, doing nothing - CMSG_CHAR_FACTION_CHANGE = 0x4D9, // lua: CreateCharacter (PFC client response) - SMSG_CHAR_FACTION_CHANGE = 0x4DA, // response to 1241 (PFC server response) - UMSG_UNKNOWN_1243 = 0x4DB, // not found 3.2 - UMSG_UNKNOWN_1244 = 0x4DC, // not found 3.2 - UMSG_UNKNOWN_1245 = 0x4DD, // not found 3.2 - SMSG_BATTLEFIELD_MGR_ENTRY_INVITE = 0x4DE, // uint32, EVENT_BATTLEFIELD_MGR_ENTRY_INVITE - CMSG_BATTLEFIELD_MGR_ENTRY_INVITE_RESPONSE = 0x4DF, // lua: BattlefieldMgrEntryInviteResponse - SMSG_BATTLEFIELD_MGR_ENTERED = 0x4E0, // uint32, uint8, uint8 EVENT_BATTLEFIELD_MGR_ENTERED - SMSG_BATTLEFIELD_MGR_QUEUE_INVITE = 0x4E1, // uint32 EVENT_BATTLEFIELD_MGR_QUEUE_INVITE - CMSG_BATTLEFIELD_MGR_QUEUE_INVITE_RESPONSE = 0x4E2, // lua: BattlefieldMgrQueueInviteResponse - CMSG_BATTLEFIELD_MGR_QUEUE_REQUEST = 0x4E3, // lua: BattlefieldMgrQueueRequest - SMSG_BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE = 0x4E4, // uint32, uint8 EVENT_BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE - SMSG_BATTLEFIELD_MGR_EJECT_PENDING = 0x4E5, // uint32 EVENT_BATTLEFIELD_MGR_EJECT_PENDING - SMSG_BATTLEFIELD_MGR_EJECTED = 0x4E6, // uint32, uint32, uint8 EVENT_BATTLEFIELD_MGR_EJECTED - CMSG_BATTLEFIELD_MGR_EXIT_REQUEST = 0x4E7, // lua: BattlefieldMgrExitRequest - SMSG_BATTLEFIELD_MGR_STATE_CHANGE = 0x4E8, // uint32, uint32 EVENT_BATTLEFIELD_MGR_STATE_CHANGE - UMSG_UNKNOWN_1257 = 0x4E9, // not found 3.2 - UMSG_UNKNOWN_1258 = 0x4EA, // not found 3.2 - MSG_SET_RAID_DIFFICULTY = 0x4EB, // lua: SetRaidDifficulty - UMSG_UNKNOWN_1260 = 0x4EC, // not found 3.2 + SMSG_ITEM_REFUND_RESULT = 0x4B5, + CMSG_CORPSE_MAP_POSITION_QUERY = 0x4B6, // uint32 + SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE = 0x4B7, // 3*float+float + CMSG_UNUSED5 = 0x4B8, + CMSG_UNUSED6 = 0x4B9, + CMSG_CALENDAR_EVENT_SIGNUP = 0x4BA, // uint64 + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x4BB, + SMSG_EQUIPMENT_SET_LIST = 0x4BC, // equipment manager list? + CMSG_EQUIPMENT_SET_SAVE = 0x4BD, + CMSG_UPDATE_PROJECTILE_POSITION = 0x4BE, // uint64 caster, uint32 spellId, uint8 castId, vector3 position + SMSG_SET_PROJECTILE_POSITION = 0x4BF, // uint64 caster, uint8 castId, vector3 position + SMSG_TALENTS_INFO = 0x4C0, + CMSG_LEARN_PREVIEW_TALENTS = 0x4C1, + CMSG_LEARN_PREVIEW_TALENTS_PET = 0x4C2, + CMSG_SET_ACTIVE_TALENT_GROUP_OBSOLETE = 0x4C3, + CMSG_GM_GRANT_ACHIEVEMENT = 0x4C4, + CMSG_GM_REMOVE_ACHIEVEMENT = 0x4C5, + CMSG_GM_SET_CRITERIA_FOR_PLAYER = 0x4C6, + SMSG_ARENA_OPPONENT_UPDATE = 0x4C7, // uint64 + SMSG_ARENA_TEAM_CHANGE_FAILED_QUEUED = 0x4C8, // uint32 "Can't modify arena team while queued or in a match." + CMSG_PROFILEDATA_REQUEST = 0x4C9, + SMSG_PROFILEDATA_RESPONSE = 0x4CA, + CMSG_START_BATTLEFIELD_CHEAT = 0x4CB, + CMSG_END_BATTLEFIELD_CHEAT = 0x4CC, + SMSG_MULTIPLE_PACKETS = 0x4CD, + SMSG_FORCE_UNK1_SPEED_CHANGE = 0x4CE, + CMSG_FORCE_UNK1_SPEED_CHANGE_ACK = 0x4CF, + SMSG_FORCE_UNK2_SPEED_CHANGE = 0x4D0, + CMSG_FORCE_UNK2_SPEED_CHANGE_ACK = 0x4D1, + MSG_MOVE_GRAVITY_CHNG = 0x4D2, + SMSG_SPLINE_MOVE_GRAVITY_DISABLE = 0x4D3, + SMSG_SPLINE_MOVE_GRAVITY_ENABLE = 0x4D4, + CMSG_EQUIPMENT_SET_USE = 0x4D5, + SMSG_EQUIPMENT_SET_USE_RESULT = 0x4D6, + CMSG_FORCE_ANIM = 0x4D7, + SMSG_FORCE_ANIM = 0x4D8, + CMSG_CHAR_FACTION_CHANGE = 0x4D9, + SMSG_CHAR_FACTION_CHANGE = 0x4DA, + CMSG_PVP_QUEUE_STATS_REQUEST = 0x4DB, + SMSG_PVP_QUEUE_STATS = 0x4DC, + CMSG_SET_PAID_SERVICE_CHEAT = 0x4DD, + SMSG_BATTLEFIELD_MGR_ENTRY_INVITE = 0x4DE, // uint32 + CMSG_BATTLEFIELD_MGR_ENTRY_INVITE_RESPONSE = 0x4DF, + SMSG_BATTLEFIELD_MGR_ENTERED = 0x4E0, // uint32, uint8, uint8 + SMSG_BATTLEFIELD_MGR_QUEUE_INVITE = 0x4E1, // uint32 + CMSG_BATTLEFIELD_MGR_QUEUE_INVITE_RESPONSE = 0x4E2, + CMSG_BATTLEFIELD_MGR_QUEUE_REQUEST = 0x4E3, + SMSG_BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE = 0x4E4, // uint32, uint8 + SMSG_BATTLEFIELD_MGR_EJECT_PENDING = 0x4E5, // uint32 + SMSG_BATTLEFIELD_MGR_EJECTED = 0x4E6, // uint32, uint32, uint8 + CMSG_BATTLEFIELD_MGR_EXIT_REQUEST = 0x4E7, + SMSG_BATTLEFIELD_MGR_STATE_CHANGE = 0x4E8, // uint32, uint32 + CMSG_BATTLEFIELD_MANAGER_ADVANCE_STATE = 0x4E9, + CMSG_BATTLEFIELD_MANAGER_SET_NEXT_TRANSITION_TIME= 0x4EA, + MSG_SET_RAID_DIFFICULTY = 0x4EB, + CMSG_TOGGLE_XP_GAIN = 0x4EC, SMSG_TOGGLE_XP_GAIN = 0x4ED, // enable/disable XP gain console message SMSG_GMRESPONSE_DB_ERROR = 0x4EE, // empty SMSG_GMRESPONSE_RECEIVED = 0x4EF, // uint32, uint32, string[2000], string[4000][4] - CMSG_GMRESPONSE_RESOLVE = 0x4F0, // lua: GMResponseResolve + CMSG_GMRESPONSE_RESOLVE = 0x4F0, SMSG_GMRESPONSE_STATUS_UPDATE = 0x4F1, // uint8 (1 - EVENT_GMSURVEY_DISPLAY, 0 - EVENT_UPDATE_TICKET) - UMSG_UNKNOWN_1266 = 0x4F2, // not found 3.2 - UMSG_UNKNOWN_1267 = 0x4F3, // not found 3.2 - UMSG_UNKNOWN_1268 = 0x4F4, // not found 3.2 - UMSG_UNKNOWN_1269 = 0x4F5, // not found 3.2 + SMSG_GMRESPONSE_CREATE_TICKET = 0x4F2, + CMSG_GMRESPONSE_CREATE_TICKET = 0x4F3, + CMSG_SERVERINFO = 0x4F4, + SMSG_SERVERINFO = 0x4F5, CMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F6, SMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x4F7, - CMSG_CHAR_RACE_CHANGE = 0x4F8, // called from lua: CreateCharacter, paid race change - UMSG_UNKNOWN_1273 = 0x4F9, // not found 10554 - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x4FA, // uint8 EVENT_TALENTS_INVOLUNTARILY_RESET - UMSG_UNKNOWN_1275 = 0x4FB, // not found 10554 - SMSG_UNKNOWN_1276 = 0x4FC, // does nothing in 10554 - SMSG_LOOT_SLOT_CHANGED = 0x4FD, // EVENT_LOOT_SLOT_CHANGED - UMSG_UNKNOWN_1278 = 0x4FE, // not found 10596 - CMSG_READY_FOR_ACCOUNT_DATA_TIMES = 0x4FF, // lua: ReadyForAccountDataTimes - CMSG_QUERY_QUESTS_COMPLETED = 0x500, // lua: QueryQuestsCompleted - SMSG_QUERY_QUESTS_COMPLETED_RESPONSE = 0x501, // response to 0x500 - CMSG_GM_REPORT_LAG = 0x502, // lua: GMReportLag - UMSG_UNKNOWN_1283 = 0x503, - UMSG_UNKNOWN_1284 = 0x504, - UMSG_UNKNOWN_1285 = 0x505, + CMSG_CHAR_RACE_CHANGE = 0x4F8, + MSG_VIEW_PHASE_SHIFT = 0x4F9, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x4FA, // uint8 + CMSG_DEBUG_SERVER_GEO = 0x4FB, + SMSG_DEBUG_SERVER_GEO = 0x4FC, + SMSG_LOOT_SLOT_CHANGED = 0x4FD, + UMSG_UPDATE_GROUP_INFO = 0x4FE, + CMSG_READY_FOR_ACCOUNT_DATA_TIMES = 0x4FF, + CMSG_QUERY_QUESTS_COMPLETED = 0x500, + SMSG_QUERY_QUESTS_COMPLETED_RESPONSE = 0x501, + CMSG_GM_REPORT_LAG = 0x502, + CMSG_AFK_MONITOR_INFO_REQUEST = 0x503, + SMSG_AFK_MONITOR_INFO_RESPONSE = 0x504, + CMSG_AFK_MONITOR_INFO_CLEAR = 0x505, SMSG_CORPSE_NOT_IN_INSTANCE = 0x506, - UMSG_UNKNOWN_1287 = 0x507, // not found - CMSG_SET_ALLOW_LOW_LEVEL_RAID1 = 0x508, // lua: SetAllowLowLevelRaid - CMSG_SET_ALLOW_LOW_LEVEL_RAID2 = 0x509, // lua: SetAllowLowLevelRaid + CMSG_GM_NUKE_CHARACTER = 0x507, + CMSG_SET_ALLOW_LOW_LEVEL_RAID1 = 0x508, + CMSG_SET_ALLOW_LOW_LEVEL_RAID2 = 0x509, SMSG_CAMERA_SHAKE = 0x50A, // uint32 SpellEffectCameraShakes.dbc index, uint32 SMSG_UPDATE_ITEM_ENCHANTMENTS = 0x50B, // some item update packet? - UMSG_UNKNOWN_1292 = 0x50C, // not found + CMSG_SET_CHARACTER_MODEL = 0x50C, SMSG_REDIRECT_CLIENT = 0x50D, // uint32 ip, uint16 port, uint32 unk, uint8[20] hash (ip + port, seed=sessionkey) CMSG_REDIRECTION_FAILED = 0x50E, // something with networking - SMSG_UNKNOWN_1295 = 0x50F, // not found - disconnect - CMSG_UNKNOWN_1296 = 0x510, // something with networking - SMSG_FORCE_SEND_QUEUED_PACKETS = 0x511, // not found - crash - CMSG_REDIRECTION_AUTH_PROOF = 0x512, // something with networking - UMSG_UNKNOWN_1299 = 0x513, // not found - SMSG_UNKNOWN_1300 = 0x514, // SMSG - SMSG_UNKNOWN_1301 = 0x515, // event 0x204 (opens dungeon finder, probably for outdoor bosses) - SMSG_UNKNOWN_1302 = 0x516, // something with player movement (move event 58?) - CMSG_UNKNOWN_1303 = 0x517, // something with player movement (move event 58?) - SMSG_UNKNOWN_1304 = 0x518, // something with player movement (move event 58?), speed packet - UMSG_UNKNOWN_1305 = 0x519, // not found - UMSG_UNKNOWN_1306 = 0x51A, // not found - CMSG_COMMENTATOR_SKIRMISH_QUEUE_COMMAND = 0x51B, // lua: CommentatorSetSkirmishMatchmakingMode/CommentatorRequestSkirmishQueueData/CommentatorRequestSkirmishMode/CommentatorStartSkirmishMatch - SMSG_UNKNOWN_1308 = 0x51C, // event EVENT_COMMENTATOR_SKIRMISH_QUEUE_REQUEST, CGCommentator::QueueNode - SMSG_UNKNOWN_1309 = 0x51D, // event EVENT_COMMENTATOR_SKIRMISH_QUEUE_REQUEST - SMSG_UNKNOWN_1310 = 0x51E, // some compressed packet? + SMSG_SUSPEND_COMMS = 0x50F, + CMSG_SUSPEND_COMMS_ACK = 0x510, + SMSG_FORCE_SEND_QUEUED_PACKETS = 0x511, + CMSG_REDIRECTION_AUTH_PROOF = 0x512, + CMSG_DROP_NEW_CONNECTION = 0x513, + SMSG_SEND_ALL_COMBAT_LOG = 0x514, + SMSG_OPEN_LFG_DUNGEON_FINDER = 0x515, + SMSG_MOVE_SET_COLLISION_HGT = 0x516, + CMSG_MOVE_SET_COLLISION_HGT_ACK = 0x517, + MSG_MOVE_SET_COLLISION_HGT = 0x518, + CMSG_CLEAR_RANDOM_BG_WIN_TIME = 0x519, + CMSG_CLEAR_HOLIDAY_BG_WIN_TIME = 0x51A, + CMSG_COMMENTATOR_SKIRMISH_QUEUE_COMMAND = 0x51B, + SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT1 = 0x51C, + SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT2 = 0x51D, + SMSG_COMPRESSED_UNKNOWN_1310 = 0x51E, // some compressed packet? NUM_MSG_TYPES = 0x51F }; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 7c6ee20eeb2..fe082119f78 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -495,7 +495,6 @@ class WorldSession void HandleSetActionButtonOpcode(WorldPacket& recvPacket); void HandleGameObjectUseOpcode(WorldPacket& recPacket); - void HandleMeetingStoneInfo(WorldPacket& recPacket); void HandleGameobjectReportUse(WorldPacket& recvPacket); void HandleNameQueryOpcode(WorldPacket& recvPacket); diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 96d6505a764..727e48b2041 100755 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -22,15 +22,15 @@ enum AURA_FLAGS { - AFLAG_NONE = 0x00, - AFLAG_EFF_INDEX_0 = 0x01, - AFLAG_EFF_INDEX_1 = 0x02, - AFLAG_EFF_INDEX_2 = 0x04, - AFLAG_CASTER = 0x08, - AFLAG_POSITIVE = 0x10, - AFLAG_DURATION = 0x20, - AFLAG_UNK2 = 0x40, - AFLAG_NEGATIVE = 0x80 + AFLAG_NONE = 0x00, + AFLAG_EFF_INDEX_0 = 0x01, + AFLAG_EFF_INDEX_1 = 0x02, + AFLAG_EFF_INDEX_2 = 0x04, + AFLAG_CASTER = 0x08, + AFLAG_POSITIVE = 0x10, + AFLAG_DURATION = 0x20, + AFLAG_ANY_EFFECT_AMOUNT_SENT = 0x40, // used with AFLAG_EFF_INDEX_0/1/2 + AFLAG_NEGATIVE = 0x80 }; // these are modes, in which aura effect handler may be called @@ -221,7 +221,7 @@ enum AuraType SPELL_AURA_NO_PVP_CREDIT = 159, SPELL_AURA_MOD_AOE_AVOIDANCE = 160, SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161, - SPELL_AURA_POWER_BURN_MANA = 162, + SPELL_AURA_POWER_BURN = 162, SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163, SPELL_AURA_164 = 164, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165, @@ -276,7 +276,7 @@ enum AuraType SPELL_AURA_214 = 214, SPELL_AURA_ARENA_PREPARATION = 215, SPELL_AURA_HASTE_SPELLS = 216, - SPELL_AURA_217 = 217, + SPELL_AURA_MOD_MELEE_HASTE_2 = 217, // NYI SPELL_AURA_HASTE_RANGED = 218, SPELL_AURA_MOD_MANA_REGEN_FROM_STAT = 219, SPELL_AURA_MOD_RATING_FROM_STAT = 220, @@ -292,7 +292,7 @@ enum AuraType SPELL_AURA_230 = 230, SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE = 231, SPELL_AURA_MECHANIC_DURATION_MOD = 232, - SPELL_AURA_233 = 233, + SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS = 233, // client-side only SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK = 234, SPELL_AURA_MOD_DISPEL_RESIST = 235, SPELL_AURA_CONTROL_VEHICLE = 236, @@ -335,7 +335,7 @@ enum AuraType SPELL_AURA_X_RAY = 273, SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274, SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275, - SPELL_AURA_276 = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done + SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, // NYI SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277, SPELL_AURA_MOD_DISARM_RANGED = 278, SPELL_AURA_INITIALIZE_IMAGES = 279, @@ -367,7 +367,7 @@ enum AuraType SPELL_AURA_MOD_MINIMUM_SPEED = 305, SPELL_AURA_306 = 306, SPELL_AURA_HEAL_ABSORB_TEST = 307, - SPELL_AURA_308 = 308, + SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER = 308, // NYI SPELL_AURA_309 = 309, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, SPELL_AURA_311 = 311, diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 25af367685d..8b68bff0a56 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -215,7 +215,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //159 SPELL_AURA_NO_PVP_CREDIT only for Honorless Target spell &AuraEffect::HandleNoImmediateEffect, //160 SPELL_AURA_MOD_AOE_AVOIDANCE implemented in Unit::MagicSpellHitResult &AuraEffect::HandleNoImmediateEffect, //161 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT - &AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN_MANA implemented in AuraEffect::PeriodicTick + &AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN implemented in AuraEffect::PeriodicTick &AuraEffect::HandleNoImmediateEffect, //163 SPELL_AURA_MOD_CRIT_DAMAGE_BONUS &AuraEffect::HandleUnused, //164 unused (3.2.0), only one test spell &AuraEffect::HandleNoImmediateEffect, //165 SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS implemented in Unit::MeleeDamageBonus @@ -372,7 +372,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //316 SPELL_AURA_PERIODIC_HASTE implemented in AuraEffect::CalculatePeriodic }; -AuraEffect::AuraEffect(Aura * base, uint8 effIndex, int32 *baseAmount, Unit* caster): +AuraEffect::AuraEffect(Aura* base, uint8 effIndex, int32 *baseAmount, Unit* caster): m_base(base), m_spellInfo(base->GetSpellInfo()), m_effIndex(effIndex), m_baseAmount(baseAmount ? *baseAmount : m_spellInfo->Effects[m_effIndex].BasePoints), m_canBeRecalculated(true), m_spellmod(NULL), m_isPeriodic(false), @@ -785,7 +785,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load) case SPELL_AURA_PERIODIC_HEALTH_FUNNEL: case SPELL_AURA_PERIODIC_MANA_LEECH: case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: - case SPELL_AURA_POWER_BURN_MANA: + case SPELL_AURA_POWER_BURN: m_isPeriodic = true; break; case SPELL_AURA_PERIODIC_TRIGGER_SPELL: @@ -1326,8 +1326,8 @@ void AuraEffect::PeriodicTick(AuraApplication * aurApp, Unit* caster) const case SPELL_AURA_PERIODIC_ENERGIZE: HandlePeriodicEnergizeAuraTick(target, caster); break; - case SPELL_AURA_POWER_BURN_MANA: - HandlePeriodicPowerBurnManaAuraTick(target, caster); + case SPELL_AURA_POWER_BURN: + HandlePeriodicPowerBurnAuraTick(target, caster); break; case SPELL_AURA_DUMMY: // Haunting Spirits @@ -1562,7 +1562,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const // Survival of the Fittest if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DRUID, 961, 0)) { - int32 bp = 100 + aurEff->GetSpellInfo()->Effects[EFFECT_2].CalcValue(); + int32 bp = aurEff->GetSpellInfo()->Effects[EFFECT_2].CalcValue(); target->CastCustomSpell(target, 62069, &bp, NULL, NULL, true, 0, this); } break; @@ -2751,13 +2751,13 @@ void AuraEffect::HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode Unit* target = aurApp->GetTarget(); if (apply) - target->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNTRACKABLE); + target->SetByteFlag(UNIT_FIELD_BYTES_1, 2, UNIT_STAND_FLAGS_UNTRACKABLE); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(GetAuraType())) return; - target->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNTRACKABLE); + target->RemoveByteFlag(UNIT_FIELD_BYTES_1, 2, UNIT_STAND_FLAGS_UNTRACKABLE); } } @@ -5456,7 +5456,7 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo { if (apply) { - Unit* caster = triggeredSpellInfo->IsRequiringSelectedTarget() ? GetCaster() : target; + Unit* caster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? GetCaster() : target; if (!caster) return; @@ -5468,13 +5468,13 @@ void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, boo } else { - uint64 casterGUID = triggeredSpellInfo->IsRequiringSelectedTarget() ? GetCasterGUID() : target->GetGUID(); + uint64 casterGUID = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? GetCasterGUID() : target->GetGUID(); target->RemoveAura(triggeredSpellId, casterGUID, 0, aurApp->GetRemoveMode()); } } else if (mode & AURA_EFFECT_HANDLE_REAPPLY && apply) { - uint64 casterGUID = triggeredSpellInfo->IsRequiringSelectedTarget() ? GetCasterGUID() : target->GetGUID(); + uint64 casterGUID = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? GetCasterGUID() : target->GetGUID(); // change the stack amount to be equal to stack amount of our aura if (Aura* triggeredAura = target->GetAura(triggeredSpellId, casterGUID)) triggeredAura->ModStackAmount(GetBase()->GetStackAmount() - triggeredAura->GetStackAmount()); @@ -6118,7 +6118,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) if (triggeredSpellInfo) { - if (Unit* triggerCaster = triggeredSpellInfo->IsRequiringSelectedTarget() ? caster : target) + if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? caster : target) { triggerCaster->CastSpell(target, triggeredSpellInfo, true, NULL, this); sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "AuraEffect::HandlePeriodicTriggerSpellAuraTick: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id); @@ -6138,7 +6138,7 @@ void AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* uint32 triggerSpellId = GetSpellInfo()->Effects[m_effIndex].TriggerSpell; if (SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId)) { - if (Unit* triggerCaster = triggeredSpellInfo->IsRequiringSelectedTarget() ? caster : target) + if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? caster : target) { int32 basepoints0 = GetAmount(); triggerCaster->CastCustomSpell(target, triggerSpellId, &basepoints0, 0, 0, true, 0, this); @@ -6661,7 +6661,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons target->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f, GetSpellInfo()); } -void AuraEffect::HandlePeriodicPowerBurnManaAuraTick(Unit* target, Unit* caster) const +void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const { Powers powerType = Powers(GetMiscValue()); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 86bb325aa3c..bdaeefa71c2 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -290,7 +290,7 @@ class AuraEffect void HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) const; void HandleObsModPowerAuraTick(Unit* target, Unit* caster) const; void HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) const; - void HandlePeriodicPowerBurnManaAuraTick(Unit* target, Unit* caster) const; + void HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const; // aura effect proc handlers void HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index bff4f222895..e3dd1e83105 100755 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1831,7 +1831,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const case SPELL_AURA_PERIODIC_ENERGIZE: case SPELL_AURA_PERIODIC_MANA_LEECH: case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_POWER_BURN_MANA: + case SPELL_AURA_POWER_BURN: case SPELL_AURA_OBS_MOD_POWER: case SPELL_AURA_OBS_MOD_HEALTH: case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: @@ -2319,7 +2319,7 @@ void UnitAura::FillTargetMap(std::map<Unit *, uint8> & targets, Unit* caster) if (!GetUnitOwner()->HasUnitState(UNIT_STAT_ISOLATED)) { - switch(GetSpellInfo()->Effects[effIndex].Effect) + switch (GetSpellInfo()->Effects[effIndex].Effect) { case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: targetList.push_back(GetUnitOwner()); diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 8192325af90..1c22a31e791 100755 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -175,9 +175,9 @@ class Aura // Helpers for targets ApplicationMap const & GetApplicationMap() {return m_applications;} void GetApplicationList(std::list<AuraApplication*> & applicationList) const; - const AuraApplication * GetApplicationOfTarget (uint64 const guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } - AuraApplication * GetApplicationOfTarget (uint64 const guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } - bool IsAppliedOnTarget(uint64 const guid) const { return m_applications.find(guid) != m_applications.end(); } + const AuraApplication * GetApplicationOfTarget (uint64 guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } + AuraApplication * GetApplicationOfTarget (uint64 guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } + bool IsAppliedOnTarget(uint64 guid) const { return m_applications.find(guid) != m_applications.end(); } void SetNeedClientUpdateForTargets() const; void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 15e0c1a9edf..f58bd72914d 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -58,13 +58,10 @@ extern pEffect SpellEffects[TOTAL_SPELL_EFFECTS]; SpellCastTargets::SpellCastTargets() : m_elevation(0), m_speed(0) { - m_unitTarget = NULL; + m_objectTarget = NULL; m_itemTarget = NULL; - m_GOTarget = NULL; - m_unitTargetGUID = 0; - m_GOTargetGUID = 0; - m_CorpseTargetGUID = 0; + m_objectTargetGUID = 0; m_itemTargetGUID = 0; m_itemTargetEntry = 0; @@ -82,56 +79,19 @@ SpellCastTargets::~SpellCastTargets() { } -SpellCastTargets& SpellCastTargets::operator=(const SpellCastTargets &target) -{ - m_unitTarget = target.m_unitTarget; - m_itemTarget = target.m_itemTarget; - m_GOTarget = target.m_GOTarget; - - m_unitTargetGUID = target.m_unitTargetGUID; - m_GOTargetGUID = target.m_GOTargetGUID; - m_CorpseTargetGUID = target.m_CorpseTargetGUID; - m_itemTargetGUID = target.m_itemTargetGUID; - - m_itemTargetEntry = target.m_itemTargetEntry; - - m_srcTransGUID = target.m_srcTransGUID; - m_srcTransOffset = target.m_srcTransOffset; - m_srcPos = target.m_srcPos; - - m_dstTransGUID = target.m_dstTransGUID; - m_dstTransOffset = target.m_dstTransOffset; - m_dstPos = target.m_dstPos; - - m_elevation = target.m_elevation; - m_speed = target.m_speed; - - m_strTarget = target.m_strTarget; - - m_targetMask = target.m_targetMask; - - return *this; -} - void SpellCastTargets::Read(ByteBuffer& data, Unit* caster) { data >> m_targetMask; - if (m_targetMask == TARGET_FLAG_SELF) + if (m_targetMask == TARGET_FLAG_NONE) return; - if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET)) - data.readPackGUID(m_unitTargetGUID); - - if (m_targetMask & (TARGET_FLAG_GAMEOBJECT)) - data.readPackGUID(m_GOTargetGUID); + if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_CORPSE_ALLY)) + data.readPackGUID(m_objectTargetGUID); if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM)) data.readPackGUID(m_itemTargetGUID); - if (m_targetMask & (TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_CORPSE_ALLY)) - data.readPackGUID(m_CorpseTargetGUID); - if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION) { data.readPackGUID(m_srcTransGUID); @@ -177,26 +137,7 @@ void SpellCastTargets::Write(ByteBuffer& data) data << uint32(m_targetMask); if (m_targetMask & (TARGET_FLAG_UNIT | TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_MINIPET)) - { - if (m_targetMask & TARGET_FLAG_UNIT) - { - if (m_unitTarget) - data.append(m_unitTarget->GetPackGUID()); - else - data << uint8(0); - } - else if (m_targetMask & TARGET_FLAG_GAMEOBJECT) - { - if (m_GOTarget) - data.append(m_GOTarget->GetPackGUID()); - else - data << uint8(0); - } - else if (m_targetMask & (TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY)) - data.appendPackGUID(m_CorpseTargetGUID); - else - data << uint8(0); - } + data.appendPackGUID(m_objectTargetGUID); if (m_targetMask & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM)) { @@ -228,16 +169,132 @@ void SpellCastTargets::Write(ByteBuffer& data) data << m_strTarget; } +uint64 SpellCastTargets::GetUnitTargetGUID() const +{ + switch (GUID_HIPART(m_objectTargetGUID)) + { + case HIGHGUID_PLAYER: + case HIGHGUID_VEHICLE: + case HIGHGUID_UNIT: + case HIGHGUID_PET: + return m_objectTargetGUID; + default: + return 0LL; + } +} + +Unit* SpellCastTargets::GetUnitTarget() const +{ + if (m_objectTarget) + return m_objectTarget->ToUnit(); + return NULL; +} + void SpellCastTargets::SetUnitTarget(Unit* target) { if (!target) return; - m_unitTarget = target; - m_unitTargetGUID = target->GetGUID(); + m_objectTarget = target; + m_objectTargetGUID = target->GetGUID(); m_targetMask |= TARGET_FLAG_UNIT; } +uint64 SpellCastTargets::GetGOTargetGUID() const +{ + switch (GUID_HIPART(m_objectTargetGUID)) + { + case HIGHGUID_TRANSPORT: + case HIGHGUID_MO_TRANSPORT: + case HIGHGUID_GAMEOBJECT: + return m_objectTargetGUID; + default: + return 0LL; + } +} + +GameObject* SpellCastTargets::GetGOTarget() const +{ + if (m_objectTarget) + return m_objectTarget->ToGameObject(); + return NULL; +} + + +void SpellCastTargets::SetGOTarget(GameObject* target) +{ + if (!target) + return; + + m_objectTarget = target; + m_objectTargetGUID = target->GetGUID(); + m_targetMask |= TARGET_FLAG_GAMEOBJECT; +} + +uint64 SpellCastTargets::GetCorpseTargetGUID() const +{ + switch (GUID_HIPART(m_objectTargetGUID)) + { + case HIGHGUID_CORPSE: + return m_objectTargetGUID; + default: + return 0LL; + } +} + +Corpse* SpellCastTargets::GetCorpseTarget() const +{ + if (m_objectTarget) + return m_objectTarget->ToCorpse(); + return NULL; +} + +WorldObject* SpellCastTargets::GetObjectTarget() const +{ + return m_objectTarget; +} + +uint64 SpellCastTargets::GetObjectTargetGUID() const +{ + return m_objectTargetGUID; +} + +void SpellCastTargets::RemoveObjectTarget() +{ + m_objectTarget = NULL; + m_objectTargetGUID = 0LL; + m_targetMask &= ~(TARGET_FLAG_UNIT_MASK | TARGET_FLAG_CORPSE_MASK | TARGET_FLAG_GAMEOBJECT_MASK); +} + +void SpellCastTargets::SetItemTarget(Item* item) +{ + if (!item) + return; + + m_itemTarget = item; + m_itemTargetGUID = item->GetGUID(); + m_itemTargetEntry = item->GetEntry(); + m_targetMask |= TARGET_FLAG_ITEM; +} + +void SpellCastTargets::SetTradeItemTarget(Player* caster) +{ + m_itemTargetGUID = uint64(TRADE_SLOT_NONTRADED); + m_itemTargetEntry = 0; + m_targetMask |= TARGET_FLAG_TRADE_ITEM; + + Update(caster); +} + +void SpellCastTargets::UpdateTradeSlotItem() +{ + if (m_itemTarget && (m_targetMask & TARGET_FLAG_TRADE_ITEM)) + { + m_itemTargetGUID = m_itemTarget->GetGUID(); + m_itemTargetEntry = m_itemTarget->GetEntry(); + } +} + Position const* SpellCastTargets::GetSrc() const { return &m_srcPos; @@ -279,6 +336,11 @@ void SpellCastTargets::ModSrc(Position const& pos) m_srcPos.Relocate(pos); } +void SpellCastTargets::RemoveSrc() +{ + m_targetMask &= ~(TARGET_FLAG_SOURCE_LOCATION); +} + WorldLocation const* SpellCastTargets::GetDst() const { return &m_dstPos; @@ -311,10 +373,10 @@ void SpellCastTargets::SetDst(WorldObject const& wObj) void SpellCastTargets::SetDst(SpellCastTargets const& spellTargets) { - m_dstTransGUID = spellTargets.m_dstTransGUID; - m_dstTransOffset.Relocate(spellTargets.m_dstTransOffset); - m_dstPos.Relocate(spellTargets.m_dstPos); - m_targetMask |= TARGET_FLAG_DEST_LOCATION; + m_dstTransGUID = spellTargets.m_dstTransGUID; + m_dstTransOffset.Relocate(spellTargets.m_dstTransOffset); + m_dstPos.Relocate(spellTargets.m_dstPos); + m_targetMask |= TARGET_FLAG_DEST_LOCATION; } void SpellCastTargets::ModDst(Position const& pos) @@ -330,51 +392,14 @@ void SpellCastTargets::ModDst(Position const& pos) m_dstPos.Relocate(pos); } -void SpellCastTargets::SetGOTarget(GameObject* target) -{ - m_GOTarget = target; - m_GOTargetGUID = target->GetGUID(); - m_targetMask |= TARGET_FLAG_GAMEOBJECT; -} - -void SpellCastTargets::SetItemTarget(Item* item) -{ - if (!item) - return; - - m_itemTarget = item; - m_itemTargetGUID = item->GetGUID(); - m_itemTargetEntry = item->GetEntry(); - m_targetMask |= TARGET_FLAG_ITEM; -} - -void SpellCastTargets::SetTradeItemTarget(Player* caster) -{ - m_itemTargetGUID = uint64(TRADE_SLOT_NONTRADED); - m_itemTargetEntry = 0; - m_targetMask |= TARGET_FLAG_TRADE_ITEM; - - Update(caster); -} - -void SpellCastTargets::UpdateTradeSlotItem() -{ - if (m_itemTarget && (m_targetMask & TARGET_FLAG_TRADE_ITEM)) - { - m_itemTargetGUID = m_itemTarget->GetGUID(); - m_itemTargetEntry = m_itemTarget->GetEntry(); - } -} - -void SpellCastTargets::SetCorpseTarget(Corpse* corpse) +void SpellCastTargets::RemoveDst() { - m_CorpseTargetGUID = corpse->GetGUID(); + m_targetMask &= ~(TARGET_FLAG_DEST_LOCATION); } void SpellCastTargets::Update(Unit* caster) { - m_GOTarget = m_GOTargetGUID ? caster->GetMap()->GetGameObject(m_GOTargetGUID) : NULL; - m_unitTarget = m_unitTargetGUID ? (m_unitTargetGUID == caster->GetGUID() ? caster : ObjectAccessor::GetUnit(*caster, m_unitTargetGUID)) : NULL; + m_objectTarget = m_objectTargetGUID ? ((m_objectTargetGUID == caster->GetGUID()) ? caster : ObjectAccessor::GetWorldObject(*caster, m_objectTargetGUID)) : NULL; m_itemTarget = NULL; if (caster->GetTypeId() == TYPEID_PLAYER) @@ -414,28 +439,21 @@ void SpellCastTargets::Update(Unit* caster) void SpellCastTargets::OutDebug() const { if (!m_targetMask) - sLog->outString("TARGET_FLAG_SELF"); - - if (m_targetMask & TARGET_FLAG_UNIT) - sLog->outString("TARGET_FLAG_UNIT: " UI64FMTD, m_unitTargetGUID); - if (m_targetMask & TARGET_FLAG_UNIT_MINIPET) - sLog->outString("TARGET_FLAG_UNIT_MINIPET: " UI64FMTD, m_unitTargetGUID); - if (m_targetMask & TARGET_FLAG_GAMEOBJECT) - sLog->outString("TARGET_FLAG_GAMEOBJECT: " UI64FMTD, m_GOTargetGUID); - if (m_targetMask & TARGET_FLAG_CORPSE_ENEMY) - sLog->outString("TARGET_FLAG_CORPSE_ENEMY: " UI64FMTD, m_CorpseTargetGUID); - if (m_targetMask & TARGET_FLAG_CORPSE_ALLY) - sLog->outString("TARGET_FLAG_CORPSE_ALLY: " UI64FMTD, m_CorpseTargetGUID); + sLog->outString("No targets"); + + sLog->outString("target mask: %u", m_targetMask); + if (m_targetMask & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_CORPSE_MASK | TARGET_FLAG_GAMEOBJECT_MASK)) + sLog->outString("Object target: " UI64FMTD, m_objectTargetGUID); if (m_targetMask & TARGET_FLAG_ITEM) - sLog->outString("TARGET_FLAG_ITEM: " UI64FMTD, m_itemTargetGUID); + sLog->outString("Item target: " UI64FMTD, m_itemTargetGUID); if (m_targetMask & TARGET_FLAG_TRADE_ITEM) - sLog->outString("TARGET_FLAG_TRADE_ITEM: " UI64FMTD, m_itemTargetGUID); + sLog->outString("Trade item target: " UI64FMTD, m_itemTargetGUID); if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION) - sLog->outString("TARGET_FLAG_SOURCE_LOCATION: transport guid:" UI64FMTD " trans offset: %s position: %s", m_srcTransGUID, m_srcTransOffset.ToString().c_str(), m_srcPos.ToString().c_str()); + sLog->outString("Source location: transport guid:" UI64FMTD " trans offset: %s position: %s", m_srcTransGUID, m_srcTransOffset.ToString().c_str(), m_srcPos.ToString().c_str()); if (m_targetMask & TARGET_FLAG_DEST_LOCATION) - sLog->outString("TARGET_FLAG_DEST_LOCATION: transport guid:" UI64FMTD " trans offset: %s position: %s", m_dstTransGUID, m_dstTransOffset.ToString().c_str(), m_dstPos.ToString().c_str()); + sLog->outString("Destination location: transport guid:" UI64FMTD " trans offset: %s position: %s", m_dstTransGUID, m_dstTransOffset.ToString().c_str(), m_dstPos.ToString().c_str()); if (m_targetMask & TARGET_FLAG_STRING) - sLog->outString("TARGET_FLAG_STRING: %s", m_strTarget.c_str()); + sLog->outString("String: %s", m_strTarget.c_str()); sLog->outString("speed: %f", m_speed); sLog->outString("elevation: %f", m_elevation); } @@ -533,8 +551,8 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme m_autoRepeat = m_spellInfo->IsAutoRepeatRangedSpell(); m_runesState = 0; - m_powerCost = 0; // setup to correct value in Spell::prepare, don't must be used before. - m_casttime = 0; // setup to correct value in Spell::prepare, don't must be used before. + m_powerCost = 0; // setup to correct value in Spell::prepare, must not be used before. + m_casttime = 0; // setup to correct value in Spell::prepare, must not be used before. m_timer = 0; // will set to castime in prepare m_channelTargetEffectMask = 0; @@ -603,6 +621,74 @@ WorldObject* Spell::FindCorpseUsing() return result; } +void Spell::InitExplicitTargets(SpellCastTargets const& targets) +{ + m_targets = targets; + // this function tries to correct spell explicit targets for spell + // client doesn't send explicit targets correctly sometimes - we need to fix such spells serverside + // this also makes sure that we correctly send explicit targets to client (removes redundant data) + uint32 neededTargets = m_spellInfo->GetExplicitTargetMask(); + + if (WorldObject* target = m_targets.GetObjectTarget()) + { + // check if object target is valid with needed target flags + // for unit case allow corpse target mask because player with not released corpse is a unit target + if ((target->ToUnit() && !(neededTargets & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_CORPSE_MASK))) + || (target->ToGameObject() && !(neededTargets & TARGET_FLAG_GAMEOBJECT_MASK)) + || (target->ToCorpse() && !(neededTargets & TARGET_FLAG_CORPSE_MASK))) + m_targets.RemoveObjectTarget(); + } + else + { + // try to select correct unit target if not provided by client or by serverside cast + if (neededTargets & (TARGET_FLAG_UNIT_MASK)) + { + Unit* target = NULL; + // try to use player selection as a target + if (Player* playerCaster = m_caster->ToPlayer()) + { + // selection has to be found and to be valid target for the spell + if (Unit* selectedUnit = ObjectAccessor::GetUnit(*m_caster, playerCaster->GetSelection())) + if (m_spellInfo->CheckExplicitTarget(m_caster, selectedUnit) == SPELL_CAST_OK) + target = selectedUnit; + } + // try to use attacked unit as a target + else if ((m_caster->GetTypeId() == TYPEID_UNIT) && neededTargets & (TARGET_FLAG_UNIT_ENEMY | TARGET_FLAG_UNIT)) + target = m_caster->getVictim(); + // didn't find anything - let's use self as target + if (!target && neededTargets & (TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY | TARGET_FLAG_UNIT_ALLY | TARGET_FLAG_UNIT)) + target = m_caster; + + m_targets.SetUnitTarget(target); + } + } + + // check if spell needs dst target + if (neededTargets & TARGET_FLAG_DEST_LOCATION) + { + // and target isn't set + if (!m_targets.HasDst()) + { + // try to use unit target if provided + if (WorldObject* target = targets.GetObjectTarget()) + m_targets.SetDst(*target); + // or use self if not available + else + m_targets.SetDst(*m_caster); + } + } + else + m_targets.RemoveDst(); + + if (neededTargets & TARGET_FLAG_SOURCE_LOCATION) + { + if (!targets.HasSrc()) + m_targets.SetSrc(*m_caster); + } + else + m_targets.RemoveSrc(); +} + void Spell::SelectSpellTargets() { for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) @@ -612,6 +698,13 @@ void Spell::SelectSpellTargets() if (!m_spellInfo->Effects[i].Effect) continue; + // set expected type of implicit targets to be sent to client + uint32 implicitTargetMask = GetTargetFlagMask(m_spellInfo->Effects[i].TargetA.GetObjectType()) | GetTargetFlagMask(m_spellInfo->Effects[i].TargetB.GetObjectType()); + if (implicitTargetMask & TARGET_FLAG_UNIT) + m_targets.SetTargetFlag(TARGET_FLAG_UNIT); + if (implicitTargetMask & (TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_GAMEOBJECT_ITEM)) + m_targets.SetTargetFlag(TARGET_FLAG_GAMEOBJECT); + uint32 effectTargetType = m_spellInfo->Effects[i].GetRequiredTargetType(); // is it possible that areaaura is not applied to caster? @@ -682,15 +775,15 @@ void Spell::SelectSpellTargets() AddUnitTarget(target, i, false); } break; + case SPELL_EFFECT_SKIN_PLAYER_CORPSE: case SPELL_EFFECT_RESURRECT_NEW: - if (m_targets.GetUnitTarget()) - AddUnitTarget(m_targets.GetUnitTarget(), i, false); - if (m_targets.GetCorpseTargetGUID()) + if (WorldObject* target = m_targets.GetObjectTarget()) { - Corpse *corpse = ObjectAccessor::GetCorpse(*m_caster, m_targets.GetCorpseTargetGUID()); - if (corpse) + if (Unit* unitTarget = target->ToUnit()) + AddUnitTarget(unitTarget, i, false); + else if (Corpse* corpseTarget = target->ToCorpse()) { - Player* owner = ObjectAccessor::FindPlayer(corpse->GetOwnerGUID()); + Player* owner = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()); if (owner) AddUnitTarget(owner, i, false); } @@ -722,20 +815,6 @@ void Spell::SelectSpellTargets() break; } break; - case SPELL_EFFECT_SKIN_PLAYER_CORPSE: - if (m_targets.GetUnitTarget()) - AddUnitTarget(m_targets.GetUnitTarget(), i, false); - else if (m_targets.GetCorpseTargetGUID()) - { - Corpse *corpse = ObjectAccessor::GetCorpse(*m_caster, m_targets.GetCorpseTargetGUID()); - if (corpse) - { - Player* owner = ObjectAccessor::FindPlayer(corpse->GetOwnerGUID()); - if (owner) - AddUnitTarget(owner, i, false); - } - } - break; default: AddUnitTarget(m_caster, i, false); break; @@ -1158,18 +1237,16 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) } // Do not take combo points on dodge and miss - if (m_needComboPoints && m_targets.GetUnitTargetGUID() == target->targetGUID) - if (missInfo != SPELL_MISS_NONE) - { - m_needComboPoints = false; - // Restore spell mods for a miss/dodge/parry Cold Blood - // TODO: check how broad this rule should be - if (m_caster->GetTypeId() == TYPEID_PLAYER) - if ((missInfo == SPELL_MISS_MISS) || - (missInfo == SPELL_MISS_DODGE) || - (missInfo == SPELL_MISS_PARRY)) - m_caster->ToPlayer()->RestoreSpellMods(this, 14177); - } + if (missInfo != SPELL_MISS_NONE && m_needComboPoints && + m_targets.GetUnitTargetGUID() == target->targetGUID) + { + m_needComboPoints = false; + // Restore spell mods for a miss/dodge/parry Cold Blood + // TODO: check how broad this rule should be + if (m_caster->GetTypeId() == TYPEID_PLAYER && (missInfo == SPELL_MISS_MISS || + missInfo == SPELL_MISS_DODGE || missInfo == SPELL_MISS_PARRY)) + m_caster->ToPlayer()->RestoreSpellMods(this, 14177); + } // Trigger info was not filled in spell::preparedatafortriggersystem - we do it now if (canEffectTrigger && !procAttacker && !procVictim) @@ -1467,8 +1544,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool ((UnitAura*)m_spellAura)->SetDiminishGroup(m_diminishGroup); bool positive = m_spellAura->GetSpellInfo()->IsPositive(); - AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID()); - if (aurApp) + if (AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID())) positive = aurApp->IsPositive(); duration = m_originalCaster->ModSpellDuration(aurSpellInfo, unit, duration, positive); @@ -2031,12 +2107,10 @@ void Spell::SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur) case TARGET_UNIT_TARGET_RAID: case TARGET_UNIT_TARGET_PARTY: case TARGET_UNIT_TARGET_MINIPET: - if (IsValidSingleTargetSpell(target)) - AddUnitTarget(target, i, false); + AddUnitTarget(target, i, false); break; case TARGET_UNIT_TARGET_PASSENGER: - if (target->IsOnVehicle(m_caster)) - AddUnitTarget(target, i, false); + AddUnitTarget(target, i, false); break; case TARGET_UNIT_LASTTARGET_AREA_PARTY: case TARGET_UNIT_TARGET_AREA_RAID_CLASS: @@ -2497,7 +2571,6 @@ void Spell::SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur) // Search for ghoul if our ghoul or dead body not valid unit target if (!(m_targets.GetUnitTarget() && ((m_targets.GetUnitTarget()->GetEntry() == 26125 && m_targets.GetUnitTarget()->GetOwnerGUID() == m_caster->GetGUID()) || (m_targets.GetUnitTarget()->getDeathState() == CORPSE - && m_targets.GetUnitTarget()->GetDisplayId() == m_targets.GetUnitTarget()->GetNativeDisplayId() && m_targets.GetUnitTarget()->GetTypeId() == TYPEID_UNIT && !(m_targets.GetUnitTarget()->GetCreatureTypeMask() & CREATURE_TYPEMASK_MECHANICAL_OR_ELEMENTAL) && m_targets.GetUnitTarget()->GetDisplayId() == m_targets.GetUnitTarget()->GetNativeDisplayId())))) @@ -2777,25 +2850,8 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered else m_castItemGUID = 0; - m_targets = *targets; + InitExplicitTargets(*targets); - if (!m_targets.GetUnitTargetGUID() && m_spellInfo->Targets & TARGET_FLAG_UNIT) - { - Unit* target = NULL; - if (m_caster->GetTypeId() == TYPEID_UNIT) - target = m_caster->getVictim(); - else - target = ObjectAccessor::GetUnit(*m_caster, m_caster->ToPlayer()->GetSelection()); - - if (target && IsValidSingleTargetSpell(target)) - m_targets.SetUnitTarget(target); - else - { - SendCastResult(SPELL_FAILED_BAD_TARGETS); - finish(false); - return; - } - } if (Player* plrCaster = m_caster->GetCharmerOrOwnerPlayerOrPlayerItself()) { //check for special spell conditions @@ -2809,29 +2865,6 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered return; } } - if (!m_targets.HasSrc() && m_spellInfo->Targets & TARGET_FLAG_SOURCE_LOCATION) - m_targets.SetSrc(*m_caster); - - if (!m_targets.HasDst() && m_spellInfo->Targets & TARGET_FLAG_DEST_LOCATION) - { - Unit* target = m_targets.GetUnitTarget(); - if (!target) - { - if (m_caster->GetTypeId() == TYPEID_UNIT) - target = m_caster->getVictim(); - else - target = ObjectAccessor::GetUnit(*m_caster, m_caster->ToPlayer()->GetSelection()); - } - - if (target) - m_targets.SetDst(*target); - else - { - SendCastResult(SPELL_FAILED_BAD_TARGETS); - finish(false); - return; - } - } // Fill aura scaling information if (m_caster->IsControlledByPlayer() && !m_spellInfo->IsPassive() && m_spellInfo->SpellLevel && !m_spellInfo->IsChanneled() && !(_triggeredCastFlags & TRIGGERED_IGNORE_AURA_SCALING)) @@ -2893,7 +2926,11 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered SpellCastResult result = CheckCast(true); if (result != SPELL_CAST_OK && !IsAutoRepeat()) //always cast autorepeat dummy for triggering { - if (triggeredByAura && triggeredByAura->GetSpellInfo()->IsChanneled()) + // Periodic auras should be interrupted when aura triggers a spell which can't be cast + // for example bladestorm aura should be removed on disarm as of patch 3.3.5 + // channeled periodic spells should be affected by this (arcane missiles, penance, etc) + // a possible alternative sollution for those would be validating aura target on unit state change + if (triggeredByAura && triggeredByAura->IsPeriodic() && !triggeredByAura->GetBase()->IsPassive()) { SendChannelUpdate(0); triggeredByAura->GetBase()->SetDuration(0); @@ -3835,15 +3872,6 @@ void Spell::SendSpellGo() data << uint32(castFlags); // cast flags data << uint32(getMSTime()); // timestamp - /* - // statement below seems to be wrong - i've seen spells with both unit and dest target - // Can't have TARGET_FLAG_UNIT when *_LOCATION is present - it breaks missile visuals - if (m_targets.GetTargetMask() & (TARGET_FLAG_SOURCE_LOCATION | TARGET_FLAG_DEST_LOCATION)) - m_targets.setTargetMask(m_targets.GetTargetMask() & ~TARGET_FLAG_UNIT); - else if (m_targets.getIntTargetFlags() & FLAG_INT_UNIT) - m_targets.setTargetMask(m_targets.GetTargetMask() | TARGET_FLAG_UNIT); - */ - WriteSpellGoTargets(&data); m_targets.Write(data); @@ -4152,13 +4180,7 @@ void Spell::SendChannelUpdate(uint32 time) void Spell::SendChannelStart(uint32 duration) { - uint64 channelTarget = 0; - if (m_targets.GetUnitTargetGUID()) - channelTarget = m_targets.GetUnitTargetGUID(); - else if (m_targets.GetGOTargetGUID()) - channelTarget = m_targets.GetGOTargetGUID(); - else if (m_targets.GetCorpseTargetGUID()) - channelTarget = m_targets.GetCorpseTargetGUID(); + uint64 channelTarget = m_targets.GetObjectTargetGUID(); WorldPacket data(MSG_CHANNEL_START, (8+4+4)); data.append(m_caster->GetPackGUID()); @@ -4552,7 +4574,7 @@ void Spell::HandleEffects(Unit *pUnitTarget, Item *pItemTarget, GameObject *pGOT SpellCastResult Spell::CheckCast(bool strict) { // check death state - if (!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !(m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD)) + if (!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !((m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell))) return SPELL_FAILED_CASTER_DEAD; // check cooldowns to prevent cheating @@ -4694,19 +4716,17 @@ SpellCastResult Spell::CheckCast(bool strict) return SPELL_FAILED_DONT_REPORT; } - Unit* target = m_targets.GetUnitTarget(); - // In pure self-cast spells, the client won't send any unit target - if (!target && (m_targets.GetTargetMask() == TARGET_FLAG_SELF || m_targets.GetTargetMask() & TARGET_FLAG_UNIT_ALLY)) // TARGET_FLAG_SELF == 0, remember! - target = m_caster; + { + SpellCastResult castResult = m_spellInfo->CheckExplicitTarget(m_caster, m_targets.GetObjectTarget()); + if (castResult != SPELL_CAST_OK) + return castResult; + } - if (target) + if (Unit* target = m_targets.GetUnitTarget()) { - if (target != m_caster && m_spellInfo->IsRequiringSelectedTarget()) - { - SpellCastResult castResult = m_spellInfo->CheckTarget(m_caster, target, false); - if (castResult != SPELL_CAST_OK) - return castResult; - } + SpellCastResult castResult = m_spellInfo->CheckTarget(m_caster, target, false); + if (castResult != SPELL_CAST_OK) + return castResult; if (target != m_caster) { @@ -4725,18 +4745,6 @@ SpellCastResult Spell::CheckCast(bool strict) { if (m_caster->GetTypeId() == TYPEID_PLAYER) // Target - is player caster { - // Additional check for some spells - // If 0 spell effect empty - client not send target data (need use selection) - // TODO: check it on next client version - if (m_targets.GetTargetMask() == TARGET_FLAG_SELF && - m_spellInfo->Effects[1].TargetA.GetTarget() == TARGET_UNIT_TARGET_ENEMY) - { - target = m_caster->GetUnit(*m_caster, m_caster->ToPlayer()->GetSelection()); - if (target) - m_targets.SetUnitTarget(target); - else - return SPELL_FAILED_BAD_TARGETS; - } // Lay on Hands - cannot be self-cast on paladin with Forbearance or after using Avenging Wrath if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags[0] & 0x0008000) if (target->HasAura(61988)) // Immunity shield marker @@ -5453,15 +5461,6 @@ SpellCastResult Spell::CheckPetCast(Unit* target) } } - Unit* _target = m_targets.GetUnitTarget(); - - // for target dead/target not valid - if (_target) - { - if (!IsValidSingleTargetSpell(_target)) - return SPELL_FAILED_BAD_TARGETS; - } - // cooldown if (Creature const* creatureCaster = m_caster->ToCreature()) if (creatureCaster->HasSpellCooldown(m_spellInfo->Id)) @@ -6374,7 +6373,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const break; } - if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) + if (IsTriggered() || m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) return true; // todo: shit below shouldn't be here, but it's temporary @@ -6570,45 +6569,6 @@ bool SpellEvent::IsDeletable() const return m_Spell->IsDeletable(); } -bool Spell::IsValidSingleTargetEffect(Unit const* target, Targets type) const -{ - switch (type) - { - case TARGET_UNIT_TARGET_ENEMY: - return !m_caster->IsFriendlyTo(target); - case TARGET_UNIT_TARGET_ALLY: - case TARGET_UNIT_LASTTARGET_AREA_PARTY: - return m_caster->IsFriendlyTo(target); - case TARGET_UNIT_TARGET_PARTY: - return m_caster != target && m_caster->IsInPartyWith(target); - case TARGET_UNIT_TARGET_RAID: - return m_caster->IsInRaidWith(target); - case TARGET_UNIT_TARGET_MINIPET: - return target->GetGUID() == m_caster->GetCritterGUID(); - default: - break; - } - return true; -} - -bool Spell::IsValidSingleTargetSpell(Unit const* target) const -{ - if (target->GetMapId() == MAPID_INVALID) - { - sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell::IsValidSingleTargetSpell - a spell was cast on '%s' (GUIDLow: %u), but they have an invalid map id!", target->GetName(), target->GetGUIDLow()); - return false; - } - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { - if (!IsValidSingleTargetEffect(target, m_spellInfo->Effects[i].TargetA.GetTarget())) - return false; - // Need to check B? - //if (!IsValidSingleTargetEffect(m_spellInfo->Effects[i].TargetB, target) - // return false; - } - return true; -} - bool Spell::IsValidDeadOrAliveTarget(Unit const* target) const { if (target->isAlive()) diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index bec2de1a8f7..74198aa0dfd 100755 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -35,33 +35,6 @@ class ByteBuffer; #define SPELL_CHANNEL_UPDATE_INTERVAL (1 * IN_MILLISECONDS) -enum SpellCastTargetFlags -{ - TARGET_FLAG_SELF = 0x00000000, - TARGET_FLAG_UNUSED_1 = 0x00000001, // not used - TARGET_FLAG_UNIT = 0x00000002, // pguid - TARGET_FLAG_UNIT_RAID = 0x00000004, // not sent, used to validate target (if raid member) - TARGET_FLAG_UNIT_PARTY = 0x00000008, // not sent, used to validate target (if party member) - TARGET_FLAG_ITEM = 0x00000010, // pguid - TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // pguid, 3 float - TARGET_FLAG_DEST_LOCATION = 0x00000040, // pguid, 3 float - TARGET_FLAG_UNIT_ENEMY = 0x00000080, // not sent, used to validate target (if enemy) - TARGET_FLAG_UNIT_ALLY = 0x00000100, // not sent, used to validate target (if ally) - TARGET_FLAG_CORPSE_ENEMY = 0x00000200, // pguid - TARGET_FLAG_UNIT_DEAD = 0x00000400, // not sent, used to validate target (if dead creature) - TARGET_FLAG_GAMEOBJECT = 0x00000800, // pguid, used with TARGET_GAMEOBJECT_TARGET - TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid - TARGET_FLAG_STRING = 0x00002000, // string - TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM_TARGET - TARGET_FLAG_CORPSE_ALLY = 0x00008000, // pguid - TARGET_FLAG_UNIT_MINIPET = 0x00010000, // pguid, used to validate target (if non combat pet) - TARGET_FLAG_GLYPH_SLOT = 0x00020000, // used in glyph spells - TARGET_FLAG_UNK19 = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell) - TARGET_FLAG_UNUSED20 = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far - TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger) -}; -#define MAX_TARGET_FLAGS 21 - enum SpellCastFlags { CAST_FLAG_NONE = 0x00000000, @@ -125,23 +98,42 @@ class SpellCastTargets SpellCastTargets(); ~SpellCastTargets(); - SpellCastTargets& operator=(const SpellCastTargets &target); - void Read(ByteBuffer& data, Unit* caster); void Write(ByteBuffer& data); uint32 GetTargetMask() const { return m_targetMask; } void SetTargetMask(uint32 newMask) { m_targetMask = newMask; } - uint64 GetUnitTargetGUID() const { return m_unitTargetGUID; } - Unit* GetUnitTarget() const { return m_unitTarget; } + void SetTargetFlag(SpellCastTargetFlags flag) { m_targetMask |= flag; } + + uint64 GetUnitTargetGUID() const; + Unit* GetUnitTarget() const; void SetUnitTarget(Unit* target); + uint64 GetGOTargetGUID() const; + GameObject* GetGOTarget() const; + void SetGOTarget(GameObject* target); + + uint64 GetCorpseTargetGUID() const; + Corpse* GetCorpseTarget() const; + + WorldObject* GetObjectTarget() const; + uint64 GetObjectTargetGUID() const; + void RemoveObjectTarget(); + + uint64 GetItemTargetGUID() const { return m_itemTargetGUID; } + Item* GetItemTarget() const { return m_itemTarget; } + uint32 GetItemTargetEntry() const { return m_itemTargetEntry; } + void SetItemTarget(Item* item); + void SetTradeItemTarget(Player* caster); + void UpdateTradeSlotItem(); + Position const* GetSrc() const; void SetSrc(float x, float y, float z); void SetSrc(Position const& pos); void SetSrc(WorldObject const& wObj); void ModSrc(Position const& pos); + void RemoveSrc(); WorldLocation const* GetDst() const; void SetDst(float x, float y, float z, float orientation, uint32 mapId = MAPID_INVALID); @@ -149,22 +141,8 @@ class SpellCastTargets void SetDst(WorldObject const& wObj); void SetDst(SpellCastTargets const& spellTargets); void ModDst(Position const& pos); + void RemoveDst(); - uint64 GetGOTargetGUID() const { return m_GOTargetGUID; } - GameObject* GetGOTarget() const { return m_GOTarget; } - void SetGOTarget(GameObject* target); - - uint64 GetCorpseTargetGUID() const { return m_CorpseTargetGUID; } - void SetCorpseTarget(Corpse* corpse); - - uint64 GetItemTargetGUID() const { return m_itemTargetGUID; } - Item* GetItemTarget() const { return m_itemTarget; } - uint32 GetItemTargetEntry() const { return m_itemTargetEntry; } - void SetItemTarget(Item* item); - void SetTradeItemTarget(Player* caster); - void UpdateTradeSlotItem(); - - bool IsEmpty() const { return m_GOTargetGUID == 0 && m_unitTargetGUID == 0 && m_itemTarget == 0 && m_CorpseTargetGUID == 0; } bool HasSrc() const { return GetTargetMask() & TARGET_FLAG_SOURCE_LOCATION; } bool HasDst() const { return GetTargetMask() & TARGET_FLAG_DEST_LOCATION; } bool HasTraj() const { return m_speed != 0; } @@ -184,15 +162,12 @@ class SpellCastTargets private: uint32 m_targetMask; - // objects (can be used at spell creating and after Update at casting - Unit* m_unitTarget; - GameObject* m_GOTarget; + // objects (can be used at spell creating and after Update at casting) + WorldObject* m_objectTarget; Item* m_itemTarget; // object GUID/etc, can be used always - uint64 m_unitTargetGUID; - uint64 m_GOTargetGUID; - uint64 m_CorpseTargetGUID; + uint64 m_objectTargetGUID; uint64 m_itemTargetGUID; uint32 m_itemTargetEntry; @@ -423,6 +398,7 @@ class Spell void WriteSpellGoTargets(WorldPacket * data); void WriteAmmoToPacket(WorldPacket * data); + void InitExplicitTargets(SpellCastTargets const& targets); void SelectSpellTargets(); void SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur); void SelectTrajTargets(); @@ -626,8 +602,6 @@ class Spell void SearchGOAreaTarget(std::list<GameObject*> &gobjectList, float radius, SpellNotifyPushType type, SpellTargets TargetType, uint32 entry = 0); void SearchChainTarget(std::list<Unit*> &unitList, float radius, uint32 unMaxTargets, SpellTargets TargetType); WorldObject* SearchNearbyTarget(float range, SpellTargets TargetType, SpellEffIndex effIndex); - bool IsValidSingleTargetEffect(Unit const* target, Targets type) const; - bool IsValidSingleTargetSpell(Unit const* target) const; bool IsValidDeadOrAliveTarget(Unit const* target) const; void CalculateDamageDoneForAllTargets(); int32 CalculateDamageDone(Unit *unit, const uint32 effectMask, float *multiplier); @@ -730,6 +704,8 @@ namespace Trinity // can't be checked in SpellInfo::CheckTarget - needs more research if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE)) continue; + if (target->HasUnitState(UNIT_STAT_UNATTACKABLE)) + continue; if (i_source->IsControlledByPlayer()) { if (i_source->IsFriendlyTo(target)) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 825c8c4fb14..3a15516dc63 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -999,7 +999,7 @@ void Spell::EffectDummy(SpellEffIndex effIndex) } case 47170: // Impale Leviroth { - if (!unitTarget && unitTarget->GetEntry() != 26452 && unitTarget->HealthAbovePct(95)) + if (!unitTarget || (unitTarget->GetEntry() != 26452 && unitTarget->HealthAbovePct(95))) return; m_caster->DealDamage(unitTarget, unitTarget->CountPctFromMaxHealth(93)); @@ -1545,7 +1545,7 @@ void Spell::EffectTriggerSpellWithValue(SpellEffIndex effIndex) int32 bp = damage; - Unit* caster = spellInfo->IsRequiringSelectedTarget() ? m_caster : unitTarget; + Unit* caster = spellInfo->NeedsToBeTriggeredByCaster() ? m_caster : unitTarget; caster->CastCustomSpell(unitTarget, triggered_spell_id, &bp, &bp, &bp, true); } @@ -1600,14 +1600,6 @@ void Spell::EffectForceCast(SpellEffIndex effIndex) break; } } - - // temphack - if (m_spellInfo->Id == 51888) - { - unitTarget->CastSpell(unitTarget, spellInfo->Id, true, NULL, NULL, m_originalCasterGUID); - return; - } - unitTarget->CastSpell(m_caster, spellInfo, true); } @@ -1778,7 +1770,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) // Note: not exist spells with weapon req. and IsSpellHaveCasterSourceTargets == true // so this just for speedup places in else - Unit* caster = spellInfo->IsRequiringSelectedTarget() ? m_caster : unitTarget; + Unit* caster = spellInfo->NeedsToBeTriggeredByCaster() ? m_caster : unitTarget; caster->CastSpell(unitTarget, spellInfo, true, 0, 0, (originalCaster ? originalCaster->GetGUID() : 0)); } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 8b660d36a8d..04e90d2083b 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -21,6 +21,30 @@ #include "Spell.h" #include "DBCStores.h" +uint32 GetTargetFlagMask(SpellTargetObjectTypes objType) +{ + switch (objType) + { + case TARGET_OBJECT_TYPE_DEST: + return TARGET_FLAG_DEST_LOCATION; + case TARGET_OBJECT_TYPE_UNIT_AND_DEST: + return TARGET_FLAG_DEST_LOCATION | TARGET_FLAG_UNIT; + case TARGET_OBJECT_TYPE_CORPSE: + case TARGET_OBJECT_TYPE_UNIT: + return TARGET_FLAG_UNIT; + case TARGET_OBJECT_TYPE_GOBJ: + return TARGET_FLAG_GAMEOBJECT; + case TARGET_OBJECT_TYPE_GOBJ_ITEM: + return TARGET_FLAG_GAMEOBJECT_ITEM; + case TARGET_OBJECT_TYPE_ITEM: + return TARGET_FLAG_ITEM; + case TARGET_OBJECT_TYPE_SRC: + return TARGET_FLAG_SOURCE_LOCATION; + default: + return TARGET_FLAG_NONE; + } +} + SpellImplicitTargetInfo::SpellImplicitTargetInfo(uint32 target) { _target = Targets(target); @@ -93,6 +117,88 @@ Targets SpellImplicitTargetInfo::GetTarget() const return _target; } +uint32 SpellImplicitTargetInfo::GetExplicitTargetMask(bool& srcSet, bool& dstSet) const +{ + uint32 targetMask = 0; + if (GetTarget() == TARGET_DEST_TRAJ) + { + if (!srcSet) + targetMask = TARGET_FLAG_SOURCE_LOCATION; + if (!dstSet) + targetMask |= TARGET_FLAG_DEST_LOCATION; + } + else + { + switch (GetReferenceType()) + { + case TARGET_REFERENCE_TYPE_SRC: + if (srcSet) + break; + targetMask = TARGET_FLAG_SOURCE_LOCATION; + break; + case TARGET_REFERENCE_TYPE_DEST: + if (dstSet) + break; + targetMask = TARGET_FLAG_DEST_LOCATION; + break; + case TARGET_REFERENCE_TYPE_TARGET: + switch (GetObjectType()) + { + case TARGET_OBJECT_TYPE_GOBJ: + targetMask = TARGET_FLAG_GAMEOBJECT; + break; + case TARGET_OBJECT_TYPE_GOBJ_ITEM: + targetMask = TARGET_FLAG_GAMEOBJECT_ITEM; + break; + case TARGET_OBJECT_TYPE_UNIT_AND_DEST: + case TARGET_OBJECT_TYPE_UNIT: + case TARGET_OBJECT_TYPE_DEST: + switch (GetSelectionCheckType()) + { + case TARGET_SELECT_CHECK_ENEMY: + targetMask = TARGET_FLAG_UNIT_ENEMY; + break; + case TARGET_SELECT_CHECK_ALLY: + targetMask = TARGET_FLAG_UNIT_ALLY; + break; + case TARGET_SELECT_CHECK_PARTY: + targetMask = TARGET_FLAG_UNIT_PARTY; + break; + case TARGET_SELECT_CHECK_RAID: + targetMask = TARGET_FLAG_UNIT_RAID; + break; + case TARGET_SELECT_CHECK_PASSENGER: + targetMask = TARGET_FLAG_UNIT_PASSENGER; + break; + default: + targetMask = TARGET_FLAG_UNIT; + break; + } + break; + default: + break; + } + break; + default: + break; + } + } + + switch (GetObjectType()) + { + case TARGET_OBJECT_TYPE_SRC: + srcSet = true; + break; + case TARGET_OBJECT_TYPE_DEST: + case TARGET_OBJECT_TYPE_UNIT_AND_DEST: + dstSet = true; + break; + default: + break; + } + return targetMask; +} + bool SpellImplicitTargetInfo::IsPosition(uint32 targetType) { switch (SpellImplicitTargetInfo::Type[targetType]) @@ -881,10 +987,11 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry) SpellFamilyFlags = spellEntry->SpellFamilyFlags; DmgClass = spellEntry->DmgClass; PreventionType = spellEntry->PreventionType; - AreaGroupId = spellEntry->AreaGroupId; + AreaGroupId = spellEntry->AreaGroupId; SchoolMask = spellEntry->SchoolMask; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) Effects[i] = SpellEffectInfo(spellEntry, this, i); + ExplicitTargetMask = _GetExplicitTargetMask(); ChainEntry = NULL; } @@ -1019,17 +1126,23 @@ bool SpellInfo::IsAOE() const return false; } -bool SpellInfo::IsRequiringSelectedTarget() const +bool SpellInfo::NeedsExplicitUnitTarget() const { - for (uint8 i = 0 ; i < MAX_SPELL_EFFECTS; ++i) + return GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK; +} + +bool SpellInfo::NeedsToBeTriggeredByCaster() const +{ + if (NeedsExplicitUnitTarget()) + return true; + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { - if (Effects[i].TargetA.GetType() == TARGET_TYPE_UNIT_TARGET - || Effects[i].TargetB.GetType() == TARGET_TYPE_UNIT_TARGET - || Effects[i].TargetA.GetType() == TARGET_TYPE_CHANNEL - || Effects[i].TargetB.GetType() == TARGET_TYPE_CHANNEL - || Effects[i].TargetA.GetType() == TARGET_TYPE_DEST_TARGET - || Effects[i].TargetB.GetType() == TARGET_TYPE_DEST_TARGET) - return true; + if (Effects[i].IsEffect()) + { + if (Effects[i].TargetA.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL + || Effects[i].TargetB.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL) + return true; + } } return false; } @@ -1535,15 +1648,15 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, Unit const* target, b } // check UNIT_FLAG_NON_ATTACKABLE flag - a player can cast spells on his pet (or other controlled unit) though in any state - if (target != caster && target->GetCharmerOrOwnerGUID() != caster->GetGUID()) + if (!IsPositive() && target != caster && target->GetCharmerOrOwnerGUID() != caster->GetGUID()) { // any unattackable target skipped if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return SPELL_FAILED_BAD_TARGETS; } - // check GM mode and GM invisibility - only for player casts (npc casts are controlled by AI) - if (target != caster && caster->IsControlledByPlayer() && target->GetTypeId() == TYPEID_PLAYER) + // check GM mode and GM invisibility - only for player casts (npc casts are controlled by AI) and negative spells + if (target != caster && (caster->IsControlledByPlayer() || !IsPositive()) && target->GetTypeId() == TYPEID_PLAYER) { if (!target->ToPlayer()->IsVisible()) return SPELL_FAILED_BAD_TARGETS; @@ -1608,6 +1721,44 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, Unit const* target, b return SPELL_CAST_OK; } +SpellCastResult SpellInfo::CheckExplicitTarget(Unit const* caster, WorldObject const* target) const +{ + uint32 neededTargets = GetExplicitTargetMask(); + if (!target) + { + if (neededTargets & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_GAMEOBJECT_MASK | TARGET_FLAG_CORPSE_MASK)) + return SPELL_FAILED_BAD_TARGETS; + return SPELL_CAST_OK; + } + + if (Unit const* unitTarget = target->ToUnit()) + { + if (neededTargets & (TARGET_FLAG_UNIT_ENEMY | TARGET_FLAG_UNIT_ALLY | TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_UNIT_PASSENGER)) + { + if (neededTargets & TARGET_FLAG_UNIT_ENEMY) + if (!caster->IsFriendlyTo(unitTarget)) + return SPELL_CAST_OK; + if (neededTargets & TARGET_FLAG_UNIT_ALLY) + if (caster->IsFriendlyTo(unitTarget)) + return SPELL_CAST_OK; + if (neededTargets & TARGET_FLAG_UNIT_PARTY) + if (caster->IsInPartyWith(unitTarget)) + return SPELL_CAST_OK; + if (neededTargets & TARGET_FLAG_UNIT_RAID) + if (caster->IsInRaidWith(unitTarget)) + return SPELL_CAST_OK; + if (neededTargets & TARGET_FLAG_UNIT_MINIPET) + if (unitTarget->GetGUID() == caster->GetCritterGUID()) + return SPELL_CAST_OK; + if (neededTargets & TARGET_FLAG_UNIT_PASSENGER) + if (unitTarget->IsOnVehicle(caster)) + return SPELL_CAST_OK; + return SPELL_FAILED_BAD_TARGETS; + } + } + return SPELL_CAST_OK; +} + bool SpellInfo::CheckTargetCreatureType(Unit const* target) const { // Curse of Doom & Exorcism: not find another way to fix spell target check :/ @@ -1672,6 +1823,11 @@ uint32 SpellInfo::GetDispelMask(DispelType type) return uint32(1 << type); } +uint32 SpellInfo::GetExplicitTargetMask() const +{ + return ExplicitTargetMask; +} + AuraStateType SpellInfo::GetAuraState() const { // Seals @@ -2119,6 +2275,81 @@ bool SpellInfo::IsHighRankOf(SpellInfo const* spellInfo) const return false; } +uint32 SpellInfo::_GetExplicitTargetMask() const +{ + bool srcSet = false; + bool dstSet = false; + uint32 targetMask = Targets; + // prepare target mask using effect target entries + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + if (!Effects[i].IsEffect()) + continue; + targetMask |= Effects[i].TargetA.GetExplicitTargetMask(srcSet, dstSet); + targetMask |= Effects[i].TargetB.GetExplicitTargetMask(srcSet, dstSet); + } + // spells with range may need explicit targets, even if target entries not set + // for example many SPELL_EFFECT_LEARN_SPELL spells need to have unit target + if (GetMaxRange(true) > 0.0f || GetMaxRange(false) > 0.0f) + { + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + if (!Effects[i].IsEffect()) + continue; + + uint32 effImplicitTargetMask = GetTargetFlagMask(Effects[i].GetImplicitTargetObjectType()); + uint32 providedTargetMask = GetTargetFlagMask(Effects[i].TargetA.GetObjectType()) | GetTargetFlagMask(Effects[i].TargetB.GetObjectType()) | targetMask; + + // check if valid targets already present, prevent adding redundant flags + switch (Effects[i].GetImplicitTargetObjectType()) + { + case TARGET_OBJECT_TYPE_UNIT_AND_DEST: + if (providedTargetMask & TARGET_FLAG_UNIT_MASK) + effImplicitTargetMask &= ~(TARGET_FLAG_UNIT_MASK); + if (dstSet || providedTargetMask & TARGET_FLAG_DEST_LOCATION) + effImplicitTargetMask &= ~(TARGET_FLAG_DEST_LOCATION); + if (!effImplicitTargetMask) + continue; + break; + case TARGET_OBJECT_TYPE_SRC: + if (srcSet || providedTargetMask & TARGET_FLAG_SOURCE_LOCATION) + continue; + break; + case TARGET_OBJECT_TYPE_DEST: + if (dstSet || providedTargetMask & TARGET_FLAG_DEST_LOCATION) + continue; + break; + case TARGET_OBJECT_TYPE_UNIT: + if (providedTargetMask & TARGET_FLAG_UNIT_MASK) + continue; + break; + case TARGET_OBJECT_TYPE_CORPSE: + if (providedTargetMask & (TARGET_FLAG_CORPSE_MASK | TARGET_FLAG_UNIT_MASK)) + continue; + break; + case TARGET_OBJECT_TYPE_ITEM: + if (providedTargetMask & (TARGET_FLAG_GAMEOBJECT_ITEM | TARGET_FLAG_ITEM)) + continue; + break; + case TARGET_OBJECT_TYPE_GOBJ: + if (providedTargetMask & TARGET_FLAG_GAMEOBJECT_MASK) + continue; + break; + case TARGET_OBJECT_TYPE_GOBJ_ITEM: + if (providedTargetMask & (TARGET_FLAG_GAMEOBJECT_ITEM | TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_ITEM)) + continue; + break; + default: + continue; + } + + // extend explicit target mask only if valid targets for effect could not be provided by target types + targetMask |= effImplicitTargetMask &~(providedTargetMask); + } + } + return targetMask; +} + bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const { // not found a single positive spell with this attribute diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index b4fafa39b81..69f160cbb0f 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -35,6 +35,37 @@ struct SpellRadiusEntry; struct SpellEntry; struct SpellCastTimesEntry; +enum SpellCastTargetFlags +{ + TARGET_FLAG_NONE = 0x00000000, + TARGET_FLAG_UNUSED_1 = 0x00000001, // not used + TARGET_FLAG_UNIT = 0x00000002, // pguid + TARGET_FLAG_UNIT_RAID = 0x00000004, // not sent, used to validate target (if raid member) + TARGET_FLAG_UNIT_PARTY = 0x00000008, // not sent, used to validate target (if party member) + TARGET_FLAG_ITEM = 0x00000010, // pguid + TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // pguid, 3 float + TARGET_FLAG_DEST_LOCATION = 0x00000040, // pguid, 3 float + TARGET_FLAG_UNIT_ENEMY = 0x00000080, // not sent, used to validate target (if enemy) + TARGET_FLAG_UNIT_ALLY = 0x00000100, // not sent, used to validate target (if ally) + TARGET_FLAG_CORPSE_ENEMY = 0x00000200, // pguid + TARGET_FLAG_UNIT_DEAD = 0x00000400, // not sent, used to validate target (if dead creature) + TARGET_FLAG_GAMEOBJECT = 0x00000800, // pguid, used with TARGET_GAMEOBJECT_TARGET + TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid + TARGET_FLAG_STRING = 0x00002000, // string + TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM_TARGET + TARGET_FLAG_CORPSE_ALLY = 0x00008000, // pguid + TARGET_FLAG_UNIT_MINIPET = 0x00010000, // pguid, used to validate target (if non combat pet) + TARGET_FLAG_GLYPH_SLOT = 0x00020000, // used in glyph spells + TARGET_FLAG_DEST_TARGET = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell) + TARGET_FLAG_UNUSED20 = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far + TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger) + + TARGET_FLAG_UNIT_MASK = TARGET_FLAG_UNIT | TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY + | TARGET_FLAG_UNIT_ENEMY | TARGET_FLAG_UNIT_ALLY | TARGET_FLAG_UNIT_DEAD | TARGET_FLAG_UNIT_MINIPET | TARGET_FLAG_UNIT_PASSENGER, + TARGET_FLAG_GAMEOBJECT_MASK = TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_GAMEOBJECT_ITEM, + TARGET_FLAG_CORPSE_MASK = TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY, +}; + enum SpellEffectTargetTypes { SPELL_REQUIRE_NONE, @@ -171,6 +202,8 @@ enum SpellCustomAttributes SPELL_ATTR0_CU_NEGATIVE = SPELL_ATTR0_CU_NEGATIVE_EFF0 | SPELL_ATTR0_CU_NEGATIVE_EFF1 | SPELL_ATTR0_CU_NEGATIVE_EFF2, }; +uint32 GetTargetFlagMask(SpellTargetObjectTypes objType); + class SpellImplicitTargetInfo { private: @@ -189,6 +222,7 @@ public: float CalcDirectionAngle() const; Targets GetTarget() const; + uint32 GetExplicitTargetMask(bool& srcSet, bool& dstSet) const; // temporarily avalible to public static bool IsPosition(uint32 targetType); @@ -354,6 +388,7 @@ public: int32 AreaGroupId; uint32 SchoolMask; SpellEffectInfo Effects[MAX_SPELL_EFFECTS]; + uint32 ExplicitTargetMask; SpellChainNode const* ChainEntry; SpellInfo(SpellEntry const* spellEntry); @@ -373,7 +408,8 @@ public: bool IsAbilityOfSkillType(uint32 skillType) const; bool IsAOE() const; - bool IsRequiringSelectedTarget() const; + bool NeedsExplicitUnitTarget() const; + bool NeedsToBeTriggeredByCaster() const; bool IsPassive() const; bool IsAutocastable() const; @@ -406,6 +442,7 @@ public: SpellCastResult CheckShapeshift(uint32 form) const; SpellCastResult CheckLocation(uint32 map_id, uint32 zone_id, uint32 area_id, Player const* player = NULL) const; SpellCastResult CheckTarget(Unit const* caster, Unit const* target, bool implicit = true) const; + SpellCastResult CheckExplicitTarget(Unit const* caster, WorldObject const* target) const; bool CheckTargetCreatureType(Unit const* target) const; SpellSchoolMask GetSchoolMask() const; @@ -414,6 +451,7 @@ public: Mechanics GetEffectMechanic(uint8 effIndex) const; uint32 GetDispelMask() const; static uint32 GetDispelMask(DispelType type); + uint32 GetExplicitTargetMask() const; AuraStateType GetAuraState() const; SpellSpecificType GetSpellSpecific() const; @@ -441,6 +479,7 @@ public: bool IsHighRankOf(SpellInfo const* spellInfo) const; // loading helpers + uint32 _GetExplicitTargetMask() const; bool _IsPositiveEffect(uint8 effIndex, bool deep) const; bool _IsPositiveSpell() const; static bool _IsPositiveTarget(uint32 targetA, uint32 targetB); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index fbaf603b822..3b546a94bfa 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -101,8 +101,11 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, } case SPELLFAMILY_WARRIOR: { + // Hamstring - limit duration to 10s in PvP + if (spellproto->SpellFamilyFlags[0] & 0x2) + return DIMINISHING_LIMITONLY; // Improved Hamstring - if (spellproto->AttributesEx3 & 0x80000 && spellproto->SpellIconID == 23) + else if (spellproto->AttributesEx3 & 0x80000 && spellproto->SpellIconID == 23) return DIMINISHING_ROOT; // Charge Stun (own diminishing) else if (spellproto->SpellFamilyFlags[0] & 0x01000000) @@ -114,6 +117,9 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, // Death Coil if (spellproto->SpellFamilyFlags[0] & 0x80000) return DIMINISHING_HORROR; + // Curses/etc + else if ((spellproto->SpellFamilyFlags[0] & 0x80000000) || (spellproto->SpellFamilyFlags[1] & 0x200)) + return DIMINISHING_LIMITONLY; // Seduction else if (spellproto->SpellFamilyFlags[1] & 0x10000000) return DIMINISHING_FEAR; @@ -138,6 +144,9 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, // Nature's Grasp else if (spellproto->SpellFamilyFlags[0] & 0x00000200) return DIMINISHING_CONTROLLED_ROOT; + // Faerie Fire + else if (spellproto->SpellFamilyFlags[0] & 0x400) + return DIMINISHING_LIMITONLY; break; } case SPELLFAMILY_ROGUE: @@ -151,12 +160,18 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, // Cheap Shot else if (spellproto->SpellFamilyFlags[0] & 0x400) return DIMINISHING_OPENING_STUN; + // Crippling poison - Limit to 10 seconds in PvP (No SpellFamilyFlags) + else if (spellproto->SpellIconID == 163) + return DIMINISHING_LIMITONLY; break; } case SPELLFAMILY_HUNTER: { + // Hunter's mark + if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538) + return DIMINISHING_LIMITONLY; // Scatter Shot (own diminishing) - if ((spellproto->SpellFamilyFlags[0] & 0x40000) && spellproto->SpellIconID == 132) + else if ((spellproto->SpellFamilyFlags[0] & 0x40000) && spellproto->SpellIconID == 132) return DIMINISHING_SCATTER_SHOT; // Entrapment (own diminishing) else if (spellproto->SpellVisual[0] == 7484 && spellproto->SpellIconID == 20) @@ -171,8 +186,11 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, } case SPELLFAMILY_PALADIN: { + // Judgement of Justice - limit duration to 10s in PvP + if (spellproto->SpellFamilyFlags[0] & 0x100000) + return DIMINISHING_LIMITONLY; // Turn Evil - if ((spellproto->SpellFamilyFlags[1] & 0x804000) && spellproto->SpellIconID == 309) + else if ((spellproto->SpellFamilyFlags[1] & 0x804000) && spellproto->SpellIconID == 309) return DIMINISHING_FEAR; break; } @@ -181,6 +199,9 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, // Hungering Cold (no flags) if (spellproto->SpellIconID == 2797) return DIMINISHING_DISORIENT; + // Mark of Blood + else if ((spellproto->SpellFamilyFlags[0] & 0x10000000) && spellproto->SpellIconID == 2285) + return DIMINISHING_LIMITONLY; break; } default: @@ -225,6 +246,9 @@ DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group) case DIMINISHING_CYCLONE: case DIMINISHING_CHARGE: return DRTYPE_ALL; + case DIMINISHING_LIMITONLY: + case DIMINISHING_NONE: + return DRTYPE_NONE; default: return DRTYPE_PLAYER; } @@ -1275,7 +1299,7 @@ void SpellMgr::LoadSpellLearnSkills() // search auto-learned skills and add its to map also for use in unlearn spells/talents uint32 dbc_count = 0; - for (uint32 spell = 0; spell < sSpellMgr->GetSpellInfoStoreSize(); ++spell) + for (uint32 spell = 0; spell < GetSpellInfoStoreSize(); ++spell) { SpellInfo const* entry = GetSpellInfo(spell); @@ -2611,6 +2635,7 @@ void SpellMgr::LoadSpellCustomAttr() spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC; break; } + switch (spellInfo->Effects[j].Effect) { case SPELL_EFFECT_SCHOOL_DAMAGE: @@ -2646,7 +2671,7 @@ void SpellMgr::LoadSpellCustomAttr() if (enchant->type[s] != ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL) continue; - SpellInfo* procInfo = (SpellInfo*)sSpellMgr->GetSpellInfo(enchant->spellid[s]); + SpellInfo* procInfo = (SpellInfo*)GetSpellInfo(enchant->spellid[s]); if (!procInfo) continue; @@ -2789,8 +2814,6 @@ void SpellMgr::LoadSpellCustomAttr() case 67860: // Impale case 69293: // Wing Buffet case 74439: // Machine Gun - spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR; - break; case 63278: // Mark of the Faceless (General Vezax) spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR; break; @@ -2798,6 +2821,8 @@ void SpellMgr::LoadSpellCustomAttr() spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE; spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR; break; + default: + break; } switch (spellInfo->SpellFamilyName) @@ -2852,16 +2877,6 @@ void SpellMgr::LoadDbcDataCorrections() spellInfo->Effect[j] = SPELL_EFFECT_TRIGGER_MISSILE; break; } - - switch (SpellImplicitTargetInfo::Type[spellInfo->EffectImplicitTargetA[j]]) - { - case TARGET_TYPE_UNIT_TARGET: - case TARGET_TYPE_DEST_TARGET: - spellInfo->Targets |= TARGET_FLAG_UNIT; - break; - default: - break; - } } if (spellInfo->activeIconID == 2158) // flight @@ -3079,7 +3094,7 @@ void SpellMgr::LoadDbcDataCorrections() spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; spellInfo->SpellFamilyFlags[2] = 0x10; break; - case 41013: // Parasitic Shadowfiend Passive + case 41913: // Parasitic Shadowfiend Passive spellInfo->EffectApplyAuraName[0] = 4; // proc debuff, and summon infinite fiends break; case 27892: // To Anchor 1 @@ -3308,15 +3323,11 @@ void SpellMgr::LoadDbcDataCorrections() // Starfall Target Selection if (spellInfo->SpellFamilyFlags[2] & 0x100) spellInfo->MaxAffectedTargets = 2; - else - break; break; case SPELLFAMILY_PALADIN: // Seals of the Pure should affect Seal of Righteousness if (spellInfo->SpellIconID == 25 && spellInfo->Attributes & SPELL_ATTR0_PASSIVE) spellInfo->EffectSpellClassMask[0][1] |= 0x20000000; - else - break; break; case SPELLFAMILY_DEATHKNIGHT: // Icy Touch - extend FamilyFlags (unused value) for Sigil of the Frozen Conscience to use diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index da96f5df537..85ee259fcc9 100755 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -84,10 +84,10 @@ public: bool IsClosed() const { return _closedBy; } bool IsCompleted() const { return _completed; } - bool IsFromPlayer(const uint64 guid) const { return guid == _playerGuid; } + bool IsFromPlayer(uint64 guid) const { return guid == _playerGuid; } bool IsAssigned() const { return _assignedTo != 0; } - bool IsAssignedTo(const uint64 guid) const { return guid == _assignedTo; } - bool IsAssignedNotTo(const uint64 guid) const { return IsAssigned() && !IsAssignedTo(guid); } + bool IsAssignedTo(uint64 guid) const { return guid == _assignedTo; } + bool IsAssignedNotTo(uint64 guid) const { return IsAssigned() && !IsAssignedTo(guid); } uint32 GetId() const { return _id; } Player* GetPlayer() const { return ObjectAccessor::FindPlayer(_playerGuid); } @@ -108,7 +108,7 @@ public: GMTicketEscalationStatus GetEscalatedStatus() const { return _escalatedStatus; } void SetEscalatedStatus(GMTicketEscalationStatus escalatedStatus) { _escalatedStatus = escalatedStatus; } - void SetAssignedTo(const uint64 guid, bool isAdmin) + void SetAssignedTo(uint64 guid, bool isAdmin) { _assignedTo = guid; if (isAdmin && _escalatedStatus == TICKET_IN_ESCALATION_QUEUE) @@ -178,7 +178,7 @@ public: return NULL; } - GmTicket* GetTicketByPlayer(const uint64 playerGuid) + GmTicket* GetTicketByPlayer(uint64 playerGuid) { for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end(); ++itr) if (itr->second && itr->second->IsFromPlayer(playerGuid) && !itr->second->IsClosed()) diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 4c464f92606..7961c705d5b 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -176,7 +176,7 @@ bool changeGuid(std::string &str, int n, std::map<uint32, uint32> &guidMap, uint return true; // not an error uint32 newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); - snprintf(chritem, 20, "%d", newGuid); + snprintf(chritem, 20, "%u", newGuid); return changenth(str, n, chritem, false, nonzero); } @@ -189,7 +189,7 @@ bool changetokGuid(std::string &str, int n, std::map<uint32, uint32> &guidMap, u return true; // not an error uint32 newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); - snprintf(chritem, 20, "%d", newGuid); + snprintf(chritem, 20, "%u", newGuid); return changetoknth(str, n, chritem, false, nonzero); } @@ -421,9 +421,9 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s // name encoded or empty - snprintf(newguid, 20, "%d", guid); - snprintf(chraccount, 20, "%d", account); - snprintf(newpetid, 20, "%d", sObjectMgr->GeneratePetNumber()); + snprintf(newguid, 20, "%u", guid); + snprintf(chraccount, 20, "%u", account); + snprintf(newpetid, 20, "%u", sObjectMgr->GeneratePetNumber()); snprintf(lastpetid, 20, "%s", ""); std::map<uint32, uint32> items; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 639af40fa1d..aa4ce9444ae 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1754,7 +1754,7 @@ void World::DetectDBCLang() uint8 default_locale = TOTAL_LOCALES; for (uint8 i = default_locale-1; i < TOTAL_LOCALES; --i) // -1 will be 255 due to uint8 { - if (strlen(race->name[i]) > 0) // check by race names + if (race->name[i][0] != '\0') // check by race names { default_locale = i; m_availableDbcLocaleMask |= (1 << i); diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index c63e47fbc50..17bc0daec5b 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -282,11 +282,7 @@ public: return false; } - std::string password_old = old_pass; - std::string password_new = new_pass; - std::string password_new_c = new_pass_c; - - if (!sAccountMgr->CheckPassword(handler->GetSession()->GetAccountId(), password_old)) + if (!sAccountMgr->CheckPassword(handler->GetSession()->GetAccountId(), std::string(old_pass))) { handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD); handler->SetSentErrorMessage(true); @@ -300,7 +296,7 @@ public: return false; } - AccountOpResult result = sAccountMgr->ChangePassword(handler->GetSession()->GetAccountId(), password_new); + AccountOpResult result = sAccountMgr->ChangePassword(handler->GetSession()->GetAccountId(), std::string(new_pass)); switch(result) { case AOR_OK: diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index a3e862c0812..55b85a888d2 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -261,15 +261,58 @@ public: if (ifs.bad()) return false; + // remove comments from file + std::stringstream parsedStream; + while (!ifs.eof()) + { + char commentToken[2]; + ifs.get(commentToken[0]); + if (commentToken[0] == '/' && !ifs.eof()) + { + ifs.get(commentToken[1]); + // /* comment + if (commentToken[1] == '*') + { + while (!ifs.eof()) + { + ifs.get(commentToken[0]); + if (commentToken[0] == '*' && !ifs.eof()) + { + ifs.get(commentToken[1]); + if (commentToken[1] == '/') + break; + else + ifs.putback(commentToken[1]); + } + } + continue; + } + // line comment + else if (commentToken[1] == '/') + { + std::string str; + getline(ifs,str); + continue; + } + // regular data + else + { + ifs.putback(commentToken[1]); + } + } + parsedStream.put(commentToken[0]); + } + ifs.close(); + uint32 opcode; - ifs >> opcode; + parsedStream >> opcode; WorldPacket data(opcode, 0); - while (!ifs.eof()) + while (!parsedStream.eof()) { std::string type; - ifs >> type; + parsedStream >> type; if (type == "") break; @@ -277,37 +320,37 @@ public: if (type == "uint8") { uint16 val1; - ifs >> val1; + parsedStream >> val1; data << uint8(val1); } else if (type == "uint16") { uint16 val2; - ifs >> val2; + parsedStream >> val2; data << val2; } else if (type == "uint32") { uint32 val3; - ifs >> val3; + parsedStream >> val3; data << val3; } else if (type == "uint64") { uint64 val4; - ifs >> val4; + parsedStream >> val4; data << val4; } else if (type == "float") { float val5; - ifs >> val5; + parsedStream >> val5; data << val5; } else if (type == "string") { std::string val6; - ifs >> val6; + parsedStream >> val6; data << val6; } else if (type == "appitsguid") @@ -350,7 +393,7 @@ public: { data << uint64(unit->GetGUID()); } - else if (type == "pos") + else if (type == "itspos") { data << unit->GetPositionX(); data << unit->GetPositionY(); @@ -368,7 +411,6 @@ public: break; } } - ifs.close(); sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending opcode %u", data.GetOpcode()); data.hexlike(); player->GetSession()->SendPacket(&data); @@ -1012,20 +1054,19 @@ public: handler->PSendSysMessage(LANG_TOO_BIG_INDEX, Opcode, GUID_LOPART(guid), target->GetValuesCount()); return false; } - uint32 iValue; - float fValue; + bool isint32 = true; if (pz) isint32 = (bool)atoi(pz); if (isint32) { - iValue = (uint32)atoi(py); + uint32 iValue = (uint32)atoi(py); target->SetUInt32Value(Opcode , iValue); handler->PSendSysMessage(LANG_SET_UINT_FIELD, GUID_LOPART(guid), Opcode, iValue); } else { - fValue = (float)atof(py); + float fValue = (float)atof(py); target->SetFloatValue(Opcode , fValue); handler->PSendSysMessage(LANG_SET_FLOAT_FIELD, GUID_LOPART(guid), Opcode, fValue); } @@ -1060,20 +1101,19 @@ public: handler->PSendSysMessage(LANG_TOO_BIG_INDEX, Opcode, GUID_LOPART(guid), target->GetValuesCount()); return false; } - uint32 iValue; - float fValue; + bool isint32 = true; if (pz) isint32 = (bool)atoi(pz); if (isint32) { - iValue = target->GetUInt32Value(Opcode); + uint32 iValue = target->GetUInt32Value(Opcode); handler->PSendSysMessage(LANG_GET_UINT_FIELD, GUID_LOPART(guid), Opcode, iValue); } else { - fValue = target->GetFloatValue(Opcode); + float fValue = target->GetFloatValue(Opcode); handler->PSendSysMessage(LANG_GET_FLOAT_FIELD, GUID_LOPART(guid), Opcode, fValue); } diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 4dbc47de4ce..184e24c1488 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -199,7 +199,7 @@ public: } static bool HandleWpUnLoadCommand(ChatHandler* handler, const char* /*args*/) { - uint32 guidlow = 0; + Creature* target = handler->getSelectedCreature(); if (!target) @@ -208,11 +208,13 @@ public: return true; } + uint32 guidlow = target->GetDBTableGUIDLow(); + if (target->GetCreatureAddon()) { if (target->GetCreatureAddon()->path_id != 0) { - WorldDatabase.PExecute("DELETE FROM creature_addon WHERE guid = %u", target->GetGUIDLow()); + WorldDatabase.PExecute("DELETE FROM creature_addon WHERE guid = %u", guidlow); target->UpdateWaypointID(0); WorldDatabase.PExecute("UPDATE creature SET MovementType = '%u' WHERE guid = '%u'", IDLE_MOTION_TYPE, guidlow); target->LoadPath(0); @@ -373,8 +375,6 @@ public: return true; } - float coord; - if (arg_str_2 == "setid") { uint32 newid = atoi(arg_3); @@ -394,33 +394,29 @@ public: if (arg_str_2 == "posx") { - coord = (float)(atof(arg_3)); WorldDatabase.PExecute("UPDATE waypoint_scripts SET x='%f' WHERE guid='%u'", - coord, id); + (float)(atof(arg_3)), id); handler->PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff %u|r|cff00ff00 position_x updated.|r", id); return true; } else if (arg_str_2 == "posy") { - coord = (float)(atof(arg_3)); WorldDatabase.PExecute("UPDATE waypoint_scripts SET y='%f' WHERE guid='%u'", - coord, id); + (float)(atof(arg_3)), id); handler->PSendSysMessage("|cff00ff00Waypoint script: %u position_y updated.|r", id); return true; } else if (arg_str_2 == "posz") { - coord = (float)(atof(arg_3)); WorldDatabase.PExecute("UPDATE waypoint_scripts SET z='%f' WHERE guid='%u'", - coord, id); + (float)(atof(arg_3)), id); handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 position_z updated.|r", id); return true; } else if (arg_str_2 == "orientation") { - coord = (float)(atof(arg_3)); WorldDatabase.PExecute("UPDATE waypoint_scripts SET o='%f' WHERE guid='%u'", - coord, id); + (float)(atof(arg_3)), id); handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 orientation updated.|r", id); return true; } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index dfa28111935..c8a38164126 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -189,7 +189,7 @@ public: std::vector<Unit*> targets; std::list<HostileReference *> t_list = me->getThreatManager().getThreatList(); - if (!t_list.size()) + if (t_list.empty()) return; //store the threat list in a different container diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 493e4b8f28e..7faa8df44bf 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -297,7 +297,7 @@ public: uint64 prisonerGUID; - void SetGUID(const uint64 guid, int32 /*id*/) + void SetGUID(uint64 guid, int32 /*id*/) { if (!prisonerGUID) prisonerGUID = guid; @@ -883,7 +883,7 @@ public: uint64 minerGUID; - void SetGUID(const uint64 guid, int32 /*id*/) + void SetGUID(uint64 guid, int32 /*id*/) { minerGUID = guid; } diff --git a/src/server/scripts/Kalimdor/the_barrens.cpp b/src/server/scripts/Kalimdor/the_barrens.cpp index f341e47c5e8..4fb76c9c610 100644 --- a/src/server/scripts/Kalimdor/the_barrens.cpp +++ b/src/server/scripts/Kalimdor/the_barrens.cpp @@ -490,7 +490,7 @@ public: if (Wave_Timer <= diff) { - if (AffrayChallenger[Wave] && Wave < 6 && !EventBigWill) + if (Wave < 6 && AffrayChallenger[Wave] && !EventBigWill) { DoScriptText(SAY_TWIGGY_FLATHEAD_FRAY, me); Creature* creature = Unit::GetCreature((*me), AffrayChallenger[Wave]); diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp index a4ded3f65b0..e3f6bbbfdd0 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp @@ -195,7 +195,7 @@ public: case NORMAL: if (uiBloodthirstTimer <= diff) { - DoCast(me->getVictim(), SPELL_BLOODTHIRST); + DoCast(me, SPELL_BLOODTHIRST); uiBloodthirstTimer = 10*IN_MILLISECONDS; } else uiBloodthirstTimer -= diff; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index f8aaf0ee363..c34528530bd 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -204,12 +204,11 @@ class mob_corrupted_soul_fragment : public CreatureScript if (type != TARGETED_MOTION_TYPE) return; - uint64 BronjahmGUID = 0; if (instance) { if (TempSummon* summ = me->ToTempSummon()) { - BronjahmGUID = instance->GetData64(DATA_BRONJAHM); + uint64 BronjahmGUID = instance->GetData64(DATA_BRONJAHM); if (GUID_LOPART(BronjahmGUID) != id) return; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index fcee11c8774..7a6aefe90fb 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -318,7 +318,7 @@ class boss_rimefang : public CreatureScript _EnterEvadeMode(); } - void SetGUID(const uint64 guid, int32 type) + void SetGUID(uint64 guid, int32 type) { if (type == GUID_HOARFROST) { @@ -384,7 +384,7 @@ class player_overlord_brandAI : public PlayerAI tyrannus = NULL; } - void SetGUID(const uint64 guid, int32 /*type*/) + void SetGUID(uint64 guid, int32 /*type*/) { tyrannus = ObjectAccessor::GetCreature(*me, guid); if (!tyrannus) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 411f9cc7d04..35c2d40494a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -425,6 +425,9 @@ class boss_prince_keleseth_icc : public CreatureScript void JustDied(Unit* /*killer*/) { + events.Reset(); + summons.DespawnAll(); + Talk(SAY_KELESETH_DEATH); instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me); } @@ -646,6 +649,9 @@ class boss_prince_taldaram_icc : public CreatureScript void JustDied(Unit* /*killer*/) { + events.Reset(); + summons.DespawnAll(); + Talk(EMOTE_TALDARAM_DEATH); instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me); } @@ -866,6 +872,9 @@ class boss_prince_valanar_icc : public CreatureScript void JustDied(Unit* /*killer*/) { + events.Reset(); + summons.DespawnAll(); + Talk(SAY_VALANAR_DEATH); instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me); } @@ -1176,7 +1185,7 @@ class npc_ball_of_flame : public CreatureScript } } - void SetGUID(uint64 const guid, int32 /*type*/) + void SetGUID(uint64 guid, int32 /*type*/) { _chaseGUID = guid; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 1954e18bafd..25c804f2eed 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -81,6 +81,7 @@ uint32 const vampireAuras[3][MAX_DIFFICULTY] = #define ESSENCE_OF_BLOOD_QUEEN RAID_MODE<uint32>(70867, 71473, 71532, 71533) #define ESSENCE_OF_BLOOD_QUEEN_PLR RAID_MODE<uint32>(70879, 71525, 71530, 71531) #define FRENZIED_BLOODTHIRST RAID_MODE<uint32>(70877, 71474, 70877, 71474) +#define DELIRIOUS_SLASH RAID_MODE<uint32>(71623, 71624, 71625, 71626) enum Events { @@ -185,7 +186,7 @@ class boss_blood_queen_lana_thel : public CreatureScript instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_DAMAGE); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_VISUAL); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_DUMMY); - instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DELIRIOUS_SLASH); + instance->DoRemoveAurasDueToSpellOnPlayers(DELIRIOUS_SLASH); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PACT_OF_THE_DARKFALLEN); // Blah, credit the quest if (_creditBloodQuickening) @@ -257,7 +258,7 @@ class boss_blood_queen_lana_thel : public CreatureScript Talk(SAY_KILL); } - void SetGUID(uint64 const guid, int32 type = 0) + void SetGUID(uint64 guid, int32 type = 0) { switch (type) { @@ -355,6 +356,7 @@ class boss_blood_queen_lana_thel : public CreatureScript _offtank = newOfftank; if (_offtank) { + // both spells have SPELL_ATTR5_SINGLE_TARGET_SPELL, no manual removal needed _offtank->CastSpell(me->getVictim(), SPELL_BLOOD_MIRROR_DAMAGE, true); me->getVictim()->CastSpell(_offtank, SPELL_BLOOD_MIRROR_DUMMY, true); DoCastVictim(SPELL_BLOOD_MIRROR_VISUAL); @@ -416,7 +418,7 @@ class boss_blood_queen_lana_thel : public CreatureScript case EVENT_AIR_PHASE: DoStopAttack(); me->SetReactState(REACT_PASSIVE); - events.DelayEvents(7000, EVENT_GROUP_NORMAL); + events.DelayEvents(10000, EVENT_GROUP_NORMAL); events.CancelEventGroup(EVENT_GROUP_CANCELLABLE); me->GetMotionMaster()->MovePoint(POINT_CENTER, centerPos); break; @@ -655,21 +657,24 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader void FilterTargets(std::list<Unit*>& targets) { - uint32 targetCount = targets.size() / 3 + 1; + uint32 targetCount = (targets.size() + 2) / 3; targets.remove_if(BloodboltHitCheck(static_cast<LanaThelAI*>(GetCaster()->GetAI()))); Trinity::RandomResizeList(targets, targetCount); + // mark targets now, effect hook has missile travel time delay (might cast next in that time) + for (std::list<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) + GetCaster()->GetAI()->SetGUID((*itr)->GetGUID(), GUID_BLOODBOLT); } - void HandleDummy() + void HandleScript(SpellEffIndex effIndex) { + PreventHitDefaultEffect(effIndex); GetCaster()->CastSpell(GetHitUnit(), SPELL_TWILIGHT_BLOODBOLT, true); - GetCaster()->GetAI()->SetGUID(GetHitUnit()->GetGUID(), GUID_BLOODBOLT); } void Register() { - OnUnitTargetSelect += SpellUnitTargetFn(spell_blood_queen_bloodbolt_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - AfterHit += SpellHitFn(spell_blood_queen_bloodbolt_SpellScript::HandleDummy); + OnUnitTargetSelect += SpellUnitTargetFn(spell_blood_queen_bloodbolt_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffect += SpellEffectFn(spell_blood_queen_bloodbolt_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; @@ -679,20 +684,6 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader } }; -class PactOfTheDarkfallenCheck -{ - public: - PactOfTheDarkfallenCheck(bool hasPact) : _hasPact(hasPact) { } - - bool operator() (Unit* unit) - { - return unit->HasAura(SPELL_PACT_OF_THE_DARKFALLEN) == _hasPact; - } - - private: - bool _hasPact; -}; - class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader { public: @@ -704,7 +695,7 @@ class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader void FilterTargets(std::list<Unit*>& unitList) { - unitList.remove_if(PactOfTheDarkfallenCheck(false)); + unitList.remove_if(Trinity::UnitAuraCheck(false, SPELL_PACT_OF_THE_DARKFALLEN)); bool remove = true; std::list<Unit*>::const_iterator itrEnd = unitList.end(), itr, itr2; @@ -790,7 +781,7 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg_target : public SpellScriptLo void FilterTargets(std::list<Unit*>& unitList) { - unitList.remove_if(PactOfTheDarkfallenCheck(true)); + unitList.remove_if(Trinity::UnitAuraCheck(true, SPELL_PACT_OF_THE_DARKFALLEN)); unitList.push_back(GetCaster()); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 89869040e6d..56613d59e99 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -549,7 +549,7 @@ class boss_lady_deathwhisper : public CreatureScript summon->AI()->DoCast(summon, SPELL_TELEPORT_VISUAL); } - void SetGUID(uint64 const guid, int32 id/* = 0*/) + void SetGUID(uint64 guid, int32 id/* = 0*/) { if (id != GUID_CULTIST) return; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 1898fa253f6..f418726aedf 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -77,6 +77,8 @@ enum MovementPoints POINT_TARGET_COLDFLAME = 36672631, }; +#define DATA_COLDFLAME_GUID 0 + class boss_lord_marrowgar : public CreatureScript { public: @@ -165,8 +167,9 @@ class boss_lord_marrowgar : public CreatureScript break; case EVENT_COLDFLAME: _coldflameLastPos.Relocate(me); + _coldflameTarget = 0LL; if (!me->HasAura(SPELL_BONE_STORM)) - me->CastCustomSpell(SPELL_COLDFLAME_NORMAL, SPELLVALUE_MAX_TARGETS, 1, me); + DoCastAOE(SPELL_COLDFLAME_NORMAL); else DoCast(me, SPELL_COLDFLAME_BONE_STORM); events.ScheduleEvent(EVENT_COLDFLAME, 5000, EVENT_GROUP_SPECIAL); @@ -242,8 +245,24 @@ class boss_lord_marrowgar : public CreatureScript return &_coldflameLastPos; } + uint64 GetGUID(int32 type/* = 0 */) + { + if (type == DATA_COLDFLAME_GUID) + return _coldflameTarget; + return 0LL; + } + + void SetGUID(uint64 guid, int32 type/* = 0 */) + { + if (type != DATA_COLDFLAME_GUID) + return; + + _coldflameTarget = guid; + } + private: Position _coldflameLastPos; + uint64 _coldflameTarget; uint32 _boneStormDuration; float _baseSpeed; bool _introDone; @@ -277,22 +296,7 @@ class npc_coldflame : public CreatureScript Creature* creOwner = owner->ToCreature(); Position pos; // random target case - if (!owner->HasAura(SPELL_BONE_STORM)) - { - // select any unit but not the tank (by owners threatlist) - Unit* target = creOwner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -owner->GetObjectSize(), true, -SPELL_IMPALED); - if (!target) - target = creOwner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); // or the tank if its solo - if (!target) - { - me->DespawnOrUnsummon(); - return; - } - - me->SetOrientation(me->GetAngle(target)); - owner->GetNearPosition(pos, owner->GetObjectSize() / 2.0f, 0.0f); - } - else + if (owner->HasAura(SPELL_BONE_STORM)) { if (MarrowgarAI* marrowgarAI = CAST_AI(MarrowgarAI, creOwner->AI())) { @@ -303,6 +307,18 @@ class npc_coldflame : public CreatureScript owner->GetNearPosition(pos, 2.5f, 0.0f); } } + else + { + Player* target = ObjectAccessor::GetPlayer(*owner, owner->GetAI()->GetGUID(DATA_COLDFLAME_GUID)); + if (!target) + { + me->DespawnOrUnsummon(); + return; + } + + me->SetOrientation(owner->GetAngle(target)); + owner->GetNearPosition(pos, owner->GetObjectSize() / 2.0f, 0.0f); + } me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), me->GetPositionZ(), me->GetOrientation()); _events.ScheduleEvent(EVENT_COLDFLAME_TRIGGER, 450); @@ -399,16 +415,53 @@ class spell_marrowgar_coldflame : public SpellScriptLoader { PrepareSpellScript(spell_marrowgar_coldflame_SpellScript); + void SelectTarget(std::list<Unit*>& targets) + { + targets.clear(); + // select any unit but not the tank (by owners threatlist) + Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -GetCaster()->GetObjectSize(), true, -SPELL_IMPALED); + if (!target) + target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); // or the tank if its solo + if (!target) + return; + + GetCaster()->GetAI()->SetGUID(target->GetGUID(), DATA_COLDFLAME_GUID); + targets.push_back(target); + } + void HandleScriptEffect(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); - Unit* caster = GetCaster(); - uint8 count = 1; - if (GetSpellInfo()->Id == 72705) - count = 4; + GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); + } - for (uint8 i = 0; i < count; ++i) - caster->CastSpell(caster, uint32(GetEffectValue() + i), true); + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_marrowgar_coldflame_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); + OnEffect += SpellEffectFn(spell_marrowgar_coldflame_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_marrowgar_coldflame_SpellScript(); + } +}; + +class spell_marrowgar_coldflame_bonestorm : public SpellScriptLoader +{ + public: + spell_marrowgar_coldflame_bonestorm() : SpellScriptLoader("spell_marrowgar_coldflame_bonestorm") { } + + class spell_marrowgar_coldflame_SpellScript : public SpellScript + { + PrepareSpellScript(spell_marrowgar_coldflame_SpellScript); + + void HandleScriptEffect(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + for (uint8 i = 0; i < 4; ++i) + GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue() + i), true); } void Register() @@ -534,6 +587,7 @@ void AddSC_boss_lord_marrowgar() new npc_coldflame(); new npc_bone_spike(); new spell_marrowgar_coldflame(); + new spell_marrowgar_coldflame_bonestorm(); new spell_marrowgar_coldflame_damage(); new spell_marrowgar_bone_spike_graveyard(); new spell_marrowgar_bone_storm(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 92431629872..b5bcd93d257 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -68,8 +68,8 @@ enum Spells SPELL_GUZZLE_POTIONS = 71893, SPELL_OOZE_TANK_PROTECTION = 71770, // protects the tank SPELL_CHOKING_GAS_BOMB = 71255, - SPELL_OOZE_VARIABLE = 70352, - SPELL_GAS_VARIABLE = 70353, + SPELL_OOZE_VARIABLE = 74118, + SPELL_GAS_VARIABLE = 74119, SPELL_UNBOUND_PLAGUE = 70911, SPELL_UNBOUND_PLAGUE_SEARCHER = 70917, SPELL_PLAGUE_SICKNESS = 70953, @@ -256,14 +256,14 @@ class boss_professor_putricide : public CreatureScript break; case NPC_GAS_CLOUD: // no possible aura seen in sniff adding the aurastate - summon->SetFlag(UNIT_FIELD_AURASTATE, 1 << (AURA_STATE_UNKNOWN22 - 1)); + summon->ModifyAuraState(AURA_STATE_UNKNOWN22, true); summon->CastSpell(summon, SPELL_GASEOUS_BLOAT_PROC, true); summon->CastCustomSpell(SPELL_GASEOUS_BLOAT, SPELLVALUE_AURA_STACK, 10, summon, false); summon->SetReactState(REACT_PASSIVE); return; case NPC_VOLATILE_OOZE: // no possible aura seen in sniff adding the aurastate - summon->SetFlag(UNIT_FIELD_AURASTATE, 1 << (AURA_STATE_UNKNOWN19 - 1)); + summon->ModifyAuraState(AURA_STATE_UNKNOWN19, true); summon->CastSpell(summon, SPELL_OOZE_ERUPTION_SEARCH_PERIODIC, true); summon->CastSpell(summon, SPELL_VOLATILE_OOZE_ADHESIVE, false); summon->SetReactState(REACT_PASSIVE); @@ -450,13 +450,13 @@ class boss_professor_putricide : public CreatureScript while (half < targetList.size()) { std::list<Unit*>::iterator itr = targetList.begin(); - advance(itr, urand(0, targetList.size()-1)); - DoCast(*itr, SPELL_OOZE_VARIABLE); + advance(itr, urand(0, targetList.size() - 1)); + (*itr)->CastSpell(*itr, SPELL_OOZE_VARIABLE, true); targetList.erase(itr); } // and half gets gas for (std::list<Unit*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr) - DoCast(*itr, SPELL_GAS_VARIABLE); + (*itr)->CastSpell(*itr, SPELL_GAS_VARIABLE, true); } me->GetMotionMaster()->MovePoint(POINT_TABLE, tablePos); } @@ -570,6 +570,8 @@ class boss_professor_putricide : public CreatureScript // remove Tear Gas instance->DoRemoveAurasDueToSpellOnPlayers(71615); instance->DoRemoveAurasDueToSpellOnPlayers(71618); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAS_VARIABLE); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_OOZE_VARIABLE); break; case EVENT_MALLEABLE_GOO: if (Is25ManRaid()) @@ -738,20 +740,6 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader } }; -class BeamProtectionCheck -{ - public: - explicit BeamProtectionCheck(uint32 excludeAura) : _excludeAura(excludeAura) { } - - bool operator()(Unit* unit) - { - return unit->HasAura(_excludeAura); - } - - private: - uint32 _excludeAura; -}; - class spell_putricide_ooze_channel : public SpellScriptLoader { public: @@ -780,7 +768,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader void SelectTarget(std::list<Unit*>& targetList) { - targetList.remove_if(BeamProtectionCheck(GetSpellInfo()->ExcludeTargetAuraSpell)); if (targetList.empty()) { FinishCast(SPELL_FAILED_NO_VALID_TARGETS); @@ -826,59 +813,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader } }; -class spell_putricide_expunged_gas : public SpellScriptLoader -{ - public: - spell_putricide_expunged_gas() : SpellScriptLoader("spell_putricide_expunged_gas") { } - - class spell_putricide_expunged_gas_SpellScript : public SpellScript - { - PrepareSpellScript(spell_putricide_expunged_gas_SpellScript); - - bool Load() - { - return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->GetInstanceScript(); - } - - void CalcDamage(SpellEffIndex /*effIndex*/) - { - // checked in script loading, cant be NULL here - InstanceScript* instance = GetCaster()->GetInstanceScript(); - Creature* professor = Unit::GetCreature(*GetCaster(), instance->GetData64(DATA_PROFESSOR_PUTRICIDE)); - if (!professor) - return; - - int32 dmg = 0; - uint32 bloatId = sSpellMgr->GetSpellIdForDifficulty(SPELL_GASEOUS_BLOAT, GetCaster()); - if (Aura* gasBloat = GetTargetUnit()->GetAura(bloatId)) - { - uint32 stack = gasBloat->GetStackAmount(); - int32 const mod = (GetCaster()->GetMap()->GetSpawnMode() & 1) ? 1500 : 1250; - for (uint8 i = 1; i < stack; ++i) - dmg += mod * stack; - } - - SetHitDamage(dmg); - } - - void DespawnAfterCast() - { - GetCaster()->ToCreature()->DespawnOrUnsummon(100); - } - - void Register() - { - OnEffect += SpellEffectFn(spell_putricide_expunged_gas_SpellScript::CalcDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - AfterHit += SpellHitFn(spell_putricide_expunged_gas_SpellScript::DespawnAfterCast); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_putricide_expunged_gas_SpellScript(); - } -}; - class spell_putricide_slime_puddle : public SpellScriptLoader { public: @@ -1384,11 +1318,11 @@ class spell_putricide_mutated_transformation : public SpellScriptLoader if (!caster) return; - InstanceScript* instance = GetTargetUnit()->GetInstanceScript(); + InstanceScript* instance = caster->GetInstanceScript(); if (!instance) return; - Creature* putricide = ObjectAccessor::GetCreature(*GetTargetUnit(), instance->GetData64(DATA_PROFESSOR_PUTRICIDE)); + Creature* putricide = ObjectAccessor::GetCreature(*caster, instance->GetData64(DATA_PROFESSOR_PUTRICIDE)); if (!putricide) return; @@ -1432,29 +1366,29 @@ class spell_putricide_mutated_transformation : public SpellScriptLoader class spell_putricide_mutated_transformation_dmg : public SpellScriptLoader { -public: - spell_putricide_mutated_transformation_dmg() : SpellScriptLoader("spell_putricide_mutated_transformation_dmg") { } - - class spell_putricide_mutated_transformation_dmg_SpellScript : public SpellScript - { - PrepareSpellScript(spell_putricide_mutated_transformation_dmg_SpellScript); + public: + spell_putricide_mutated_transformation_dmg() : SpellScriptLoader("spell_putricide_mutated_transformation_dmg") { } - void FilterTargetsInitial(std::list<Unit*>& unitList) + class spell_putricide_mutated_transformation_dmg_SpellScript : public SpellScript { - if (Unit* owner = ObjectAccessor::GetUnit(*GetCaster(), GetCaster()->GetCreatorGUID())) - unitList.remove(owner); - } + PrepareSpellScript(spell_putricide_mutated_transformation_dmg_SpellScript); - void Register() + void FilterTargetsInitial(std::list<Unit*>& unitList) + { + if (Unit* owner = ObjectAccessor::GetUnit(*GetCaster(), GetCaster()->GetCreatorGUID())) + unitList.remove(owner); + } + + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_putricide_mutated_transformation_dmg_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + } + }; + + SpellScript* GetSpellScript() const { - OnUnitTargetSelect += SpellUnitTargetFn(spell_putricide_mutated_transformation_dmg_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + return new spell_putricide_mutated_transformation_dmg_SpellScript(); } - }; - - SpellScript* GetSpellScript() const - { - return new spell_putricide_mutated_transformation_dmg_SpellScript(); - } }; class spell_putricide_regurgitated_ooze : public SpellScriptLoader @@ -1522,7 +1456,6 @@ void AddSC_boss_professor_putricide() new npc_volatile_ooze(); new spell_putricide_gaseous_bloat(); new spell_putricide_ooze_channel(); - new spell_putricide_expunged_gas(); new spell_putricide_slime_puddle(); new spell_putricide_slime_puddle_aura(); new spell_putricide_unstable_experiment(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index b341a87c176..dd645562501 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -125,6 +125,7 @@ class boss_rotface : public CreatureScript { _JustDied(); Talk(SAY_DEATH); + instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION); if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->DoAction(ACTION_ROTFACE_DEATH); } @@ -191,18 +192,9 @@ class boss_rotface : public CreatureScript } break; case EVENT_MUTATED_INFECTION: - { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -MUTATED_INFECTION); - if (!target) - target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -MUTATED_INFECTION); - if (target) - { - me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, target, false); - Talk(EMOTE_MUTATED_INFECTION, target->GetGUID()); - } + me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, NULL, false); events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown); break; - } default: break; } @@ -478,6 +470,68 @@ class spell_rotface_ooze_flood : public SpellScriptLoader } }; +class spell_rotface_mutated_infection : public SpellScriptLoader +{ + public: + spell_rotface_mutated_infection() : SpellScriptLoader("spell_rotface_mutated_infection") { } + + class spell_rotface_mutated_infection_SpellScript : public SpellScript + { + PrepareSpellScript(spell_rotface_mutated_infection_SpellScript); + + bool Load() + { + _target = NULL; + return true; + } + + void FilterTargets(std::list<Unit*>& targets) + { + // remove targets with this aura already + // tank is not on this list + targets.remove_if(Trinity::UnitAuraCheck(true, GetSpellInfo()->Id)); + if (targets.empty()) + return; + + std::list<Unit*>::iterator itr = targets.begin(); + std::advance(itr, urand(0, targets.size() - 1)); + Unit* target = *itr; + targets.clear(); + targets.push_back(target); + _target = target; + } + + void ReplaceTargets(std::list<Unit*>& targets) + { + targets.clear(); + if (_target) + targets.push_back(_target); + } + + void NotifyTargets() + { + if (Creature* caster = GetCaster()->ToCreature()) + if (Unit* target = GetHitUnit()) + caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target->GetGUID()); + } + + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnUnitTargetSelect += SpellUnitTargetFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); + OnUnitTargetSelect += SpellUnitTargetFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY); + AfterHit += SpellHitFn(spell_rotface_mutated_infection_SpellScript::NotifyTargets); + } + + Unit* _target; + }; + + SpellScript* GetSpellScript() const + { + return new spell_rotface_mutated_infection_SpellScript(); + } +}; + class spell_rotface_little_ooze_combine : public SpellScriptLoader { public: @@ -659,15 +713,17 @@ class spell_rotface_unstable_ooze_explosion : public SpellScriptLoader void CheckTarget(SpellEffIndex effIndex) { PreventHitDefaultEffect(EFFECT_0); - if (!GetTargetUnit()) + if (!GetTargetDest()) return; uint32 triggered_spell_id = GetSpellInfo()->Effects[effIndex].TriggerSpell; + float x, y, z; + GetTargetDest()->GetPosition(x, y, z); // let Rotface handle the cast - caster dies before this executes - if (InstanceScript* script = GetTargetUnit()->GetInstanceScript()) + if (InstanceScript* script = GetCaster()->GetInstanceScript()) if (Creature* rotface = script->instance->GetCreature(script->GetData64(DATA_ROTFACE))) - rotface->CastSpell(GetTargetUnit(), triggered_spell_id, true, NULL, NULL, GetCaster()->GetGUID()); + rotface->CastSpell(x, y, z, triggered_spell_id, true, NULL, NULL, GetCaster()->GetGUID()); } void Register() @@ -722,6 +778,7 @@ void AddSC_boss_rotface() new npc_big_ooze(); new npc_precious_icc(); new spell_rotface_ooze_flood(); + new spell_rotface_mutated_infection(); new spell_rotface_little_ooze_combine(); new spell_rotface_large_ooze_combine(); new spell_rotface_large_ooze_buff_combine(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 0c2d1e8fe00..e0b8afdbfd5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -523,7 +523,7 @@ class npc_ice_tomb : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void SetGUID(uint64 const guid, int32 type/* = 0 */) + void SetGUID(uint64 guid, int32 type/* = 0 */) { if (type == DATA_TRAPPED_PLAYER) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index a237f239386..c167dfc8e95 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -212,15 +212,6 @@ class AuraRemoveEvent : public BasicEvent uint32 _spellId; }; -class SummonTargetSelector -{ - public: - bool operator()(Unit* unit) const - { - return unit->HasAura(SPELL_RECENTLY_SPAWNED); - } -}; - class ValithriaDespawner : public BasicEvent { public: @@ -249,6 +240,7 @@ class ValithriaDespawner : public BasicEvent case NPC_GLUTTONOUS_ABOMINATION: case NPC_MANA_VOID: case NPC_COLUMN_OF_FROST: + case NPC_ROT_WORM: creature->DespawnOrUnsummon(); return; case NPC_RISEN_ARCHMAGE: @@ -310,6 +302,8 @@ class boss_valithria_dreamwalker : public CreatureScript // immune to percent heals me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_OBS_MOD_HEALTH, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_HEAL_PCT, true); + // Glyph of Dispel Magic - not a percent heal by effect, its cast with custom basepoints + me->ApplySpellImmune(0, IMMUNITY_ID, 56131, true); _instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me); _missedPortals = 0; _under25PercentTalkDone = false; @@ -506,8 +500,15 @@ class npc_green_dragon_combat_trigger : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void EnterCombat(Unit* /*target*/) + void EnterCombat(Unit* target) { + if (!instance->CheckRequiredBosses(DATA_VALITHRIA_DREAMWALKER, target->ToPlayer())) + { + EnterEvadeMode(); + instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT); + return; + } + me->setActive(true); DoZoneInCombat(); instance->SetBossState(DATA_VALITHRIA_DREAMWALKER, IN_PROGRESS); @@ -1177,7 +1178,7 @@ class spell_dreamwalker_summoner : public SpellScriptLoader void FilterTargets(std::list<Unit*>& targets) { - targets.remove_if(SummonTargetSelector()); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED)); if (targets.empty()) return; @@ -1218,7 +1219,7 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader std::list<Creature*> summoners; GetCreatureListWithEntryInGrid(summoners, caster, 22515, 100.0f); - summoners.remove_if(SummonTargetSelector()); + summoners.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED)); Trinity::RandomResizeList(summoners, 2); if (summoners.empty()) return; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 56c42f4f285..1e061c38c08 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -971,7 +971,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void SetGUID(uint64 const guid, int32 type/* = 0*/) + void SetGUID(uint64 guid, int32 type/* = 0*/) { if (type == ACTION_VRYKUL_DEATH) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 7a1ab3e4f19..f5973fc0c8c 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -228,6 +228,7 @@ enum CreaturesIds NPC_GLUTTONOUS_ABOMINATION = 37886, NPC_MANA_VOID = 38068, NPC_COLUMN_OF_FROST = 37918, + NPC_ROT_WORM = 37907, NPC_THE_LICH_KING_VALITHRIA = 16980, NPC_DREAM_PORTAL_PRE_EFFECT = 38186, NPC_NIGHTMARE_PORTAL_PRE_EFFECT = 38429, diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 2122e4d9179..9384eb04bc8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -163,7 +163,7 @@ public: uint64 victimGUID; - void SetGUID(const uint64 guid, int32 /*param*/) + void SetGUID(uint64 guid, int32 /*param*/) { victimGUID = guid; if (me->m_spells[0] && victimGUID) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index cd742b11d58..cf653284e6a 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -157,7 +157,7 @@ public: } } - void SetGUID(uint64 const guid, int32 id/* = 0 */) + void SetGUID(uint64 guid, int32 id/* = 0 */) { if (id == DATA_INTENSE_COLD) intenseColdList.push_back(guid); diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp index e7dffae5c9d..748de08f5e0 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp @@ -78,6 +78,7 @@ class instance_ulduar : public InstanceMapScript // Miscellaneous uint32 TeamInInstance; uint32 HodirRareCacheData; + uint32 ColossusData; uint8 elderCount; bool conSpeedAtory; @@ -117,6 +118,7 @@ class instance_ulduar : public InstanceMapScript ArchivumDoorGUID = 0; TeamInInstance = 0; HodirRareCacheData = 0; + ColossusData = 0; elderCount = 0; conSpeedAtory = false; @@ -473,7 +475,7 @@ class instance_ulduar : public InstanceMapScript switch (type) { case DATA_COLOSSUS: - Encounter[DATA_COLOSSUS] = data; + ColossusData = data; if (data == 2) { if (Creature* Leviathan = instance->GetCreature(LeviathanGUID)) @@ -589,7 +591,7 @@ class instance_ulduar : public InstanceMapScript switch (type) { case DATA_COLOSSUS: - return Encounter[type]; + return ColossusData; case DATA_HODIR_RARE_CACHE: return HodirRareCacheData; default: diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index aa08e4230ab..205dcdb5347 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -2431,7 +2431,7 @@ public: uiEventPhase = 1; } - void SetGUID(const uint64 uiGuid, int32 /*iId*/) + void SetGUID(uint64 uiGuid, int32 /*iId*/) { uiPlayerGUID = uiGuid; } diff --git a/src/server/scripts/Northrend/zuldrak.cpp b/src/server/scripts/Northrend/zuldrak.cpp index b8e0d31d49b..16567be9636 100644 --- a/src/server/scripts/Northrend/zuldrak.cpp +++ b/src/server/scripts/Northrend/zuldrak.cpp @@ -361,7 +361,7 @@ public: bRemoveFlag = false; } - void SetGUID(const uint64 guid, int32 /*id*/) + void SetGUID(uint64 guid, int32 /*id*/) { uiPlayerGUID = guid; } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index d827533610d..d4f9803b800 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -132,7 +132,7 @@ class boss_void_reaver : public CreatureScript target = NULL; } - if (target_list.size()) + if (!target_list.empty()) target = *(target_list.begin()+rand()%target_list.size()); else target = me->getVictim(); diff --git a/src/server/scripts/Outland/nagrand.cpp b/src/server/scripts/Outland/nagrand.cpp index a18f16fbf2c..21265a1b7f2 100644 --- a/src/server/scripts/Outland/nagrand.cpp +++ b/src/server/scripts/Outland/nagrand.cpp @@ -26,7 +26,6 @@ EndScriptData */ /* ContentData mob_shattered_rumbler mob_lump -mob_sunspring_villager npc_altruis_the_sufferer npc_greatmother_geyah npc_lantresor_of_the_blade @@ -243,44 +242,6 @@ public: }; -/*#### -# mob_sunspring_villager - should be done with ACID -####*/ - -class mob_sunspring_villager : public CreatureScript -{ -public: - mob_sunspring_villager() : CreatureScript("mob_sunspring_villager") { } - - CreatureAI* GetAI(Creature* creature) const - { - return new mob_sunspring_villagerAI (creature); - } - - struct mob_sunspring_villagerAI : public ScriptedAI - { - mob_sunspring_villagerAI(Creature* c) : ScriptedAI(c) {} - - void Reset() - { - me->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); - me->SetStandState(UNIT_STAND_STATE_DEAD); - } - - void EnterCombat(Unit* /*who*/) {} - - void SpellHit(Unit* /*caster*/, const SpellInfo *spell) - { - if (spell->Id == 32146) - { - me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); - me->RemoveCorpse(); - } - } - }; - -}; - /*###### ## npc_altruis_the_sufferer ######*/ @@ -1013,7 +974,6 @@ void AddSC_nagrand() { new mob_shattered_rumbler(); new mob_lump(); - new mob_sunspring_villager(); new npc_altruis_the_sufferer(); new npc_greatmother_geyah(); new npc_lantresor_of_the_blade(); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 0a81b13ed64..16d147a4000 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -39,6 +39,58 @@ enum HunterSpells HUNTER_SPELL_CHIMERA_SHOT_SERPENT = 53353, HUNTER_SPELL_CHIMERA_SHOT_VIPER = 53358, HUNTER_SPELL_CHIMERA_SHOT_SCORPID = 53359, + HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET = 61669, +}; + +// 13161 Aspect of the Beast +class spell_hun_aspect_of_the_beast : public SpellScriptLoader +{ +public: + spell_hun_aspect_of_the_beast() : SpellScriptLoader("spell_hun_aspect_of_the_beast") { } + + class spell_hun_aspect_of_the_beast_AuraScript : public AuraScript + { + PrepareAuraScript(spell_hun_aspect_of_the_beast_AuraScript) + bool Validate(SpellInfo const* /*entry*/) + { + if (!sSpellMgr->GetSpellInfo(HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET)) + return false; + return true; + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (!GetCaster()) + return; + + Unit* caster = GetCaster(); + if (caster->ToPlayer()) + if (Pet* pet = caster->ToPlayer()->GetPet()) + pet->RemoveAurasDueToSpell(HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET); + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (!GetCaster()) + return; + + Unit* caster = GetCaster(); + if (caster->ToPlayer()) + if (Pet* pet = caster->ToPlayer()->GetPet()) + caster->CastSpell(caster, HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET, true); + } + + void Register() + { + AfterEffectApply += AuraEffectApplyFn(spell_hun_aspect_of_the_beast_AuraScript::OnApply, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_hun_aspect_of_the_beast_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript *GetAuraScript() const + { + return new spell_hun_aspect_of_the_beast_AuraScript(); + } }; // 53209 Chimera Shot @@ -376,7 +428,7 @@ public: if (!target->HasAura(spellId)) { SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(spellId); - Unit* triggerCaster = triggeredSpellInfo->IsRequiringSelectedTarget() ? caster : target; + Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster() ? caster : target; triggerCaster->CastSpell(target, triggeredSpellInfo, true, 0, aurEff); } } @@ -512,6 +564,7 @@ public: void AddSC_hunter_spell_scripts() { + new spell_hun_aspect_of_the_beast(); new spell_hun_chimera_shot(); new spell_hun_invigoration(); new spell_hun_last_stand_pet(); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index e2f37912931..5300849d0ec 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1088,7 +1088,7 @@ class spell_magic_eater_food : public SpellScriptLoader { PrepareAuraScript(spell_magic_eater_food_AuraScript); - void HandleTriggerSpell(AuraEffect const* aurEff) + void HandleTriggerSpell(AuraEffect const* /*aurEff*/) { PreventDefaultAction(); Unit* target = GetTarget(); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 623bfe0a5da..77048d6ea29 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -23,6 +23,7 @@ #include "ScriptPCH.h" #include "SpellAuraEffects.h" +#include "GridNotifiers.h" enum PriestSpells { @@ -130,7 +131,7 @@ class spell_pri_mind_sear : public SpellScriptLoader void FilterTargets(std::list<Unit*>& unitList) { - unitList.remove(GetTargetUnit()); + unitList.remove_if(Trinity::ObjectGUIDCheck(GetCaster()->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT))); } void Register() diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index c7a174ff3d5..ae8069747e3 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -857,6 +857,88 @@ public: }; }; +enum StoppingTheSpread +{ + NPC_VILLAGER_KILL_CREDIT = 18240, + SPELL_FLAMES = 39199, +}; + +class spell_q9874_liquid_fire : public SpellScriptLoader +{ + public: + spell_q9874_liquid_fire() : SpellScriptLoader("spell_q9874_liquid_fire") + { + } + + class spell_q9874_liquid_fire_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q9874_liquid_fire_SpellScript); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Player* caster = GetCaster()->ToPlayer(); + Creature* target = GetHitUnit()->ToCreature(); + if (!caster || !target || (target && target->HasAura(SPELL_FLAMES))) + return; + + caster->KilledMonsterCredit(NPC_VILLAGER_KILL_CREDIT, 0); + target->CastSpell(target, SPELL_FLAMES, true); + target->DespawnOrUnsummon(60000); + } + + void Register() + { + OnEffect += SpellEffectFn(spell_q9874_liquid_fire_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q9874_liquid_fire_SpellScript(); + }; +}; + + +enum SalvagingLifesStength +{ + NPC_SHARD_KILL_CREDIT = 29303, +}; + +class spell_q12805_lifeblood_dummy : public SpellScriptLoader +{ + public: + spell_q12805_lifeblood_dummy() : SpellScriptLoader("spell_q12805_lifeblood_dummy") + { + } + + class spell_q12805_lifeblood_dummy_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q12805_lifeblood_dummy_SpellScript); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Player* caster = GetCaster()->ToPlayer(); + Creature* target = GetHitUnit()->ToCreature(); + if (!caster || !target) + return; + + caster->KilledMonsterCredit(NPC_SHARD_KILL_CREDIT, 0); + target->CastSpell(target, uint32(GetEffectValue()), true); + target->DespawnOrUnsummon(2000); + } + + void Register() + { + OnEffect += SpellEffectFn(spell_q12805_lifeblood_dummy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q12805_lifeblood_dummy_SpellScript(); + }; +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -877,4 +959,6 @@ void AddSC_quest_spell_scripts() new spell_q10041_q10040_who_are_they(); new spell_symbol_of_life_dummy(); new spell_q12659_ahunaes_knife(); + new spell_q9874_liquid_fire(); + new spell_q12805_lifeblood_dummy(); } diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index a9d31f28180..db09c12da0b 100755 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -231,6 +231,32 @@ public: } }; +class achievement_bg_sa_defense_of_ancients : public AchievementCriteriaScript +{ + public: + achievement_bg_sa_defense_of_ancients() : AchievementCriteriaScript("achievement_bg_sa_defense_of_ancients") + { + } + + bool OnCheck(Player* player, Unit* /*target*/) + { + if (!player) + return false; + + Battleground* battleground = player->GetBattleground(); + if (!battleground) + return false; + + if (player->GetTeamId() == static_cast<BattlegroundSA*>(battleground)->Attackers) + return false; + + if (!static_cast<BattlegroundSA*>(battleground)->gateDestroyed) + return true; + + return false; + } +}; + void AddSC_achievement_scripts() { new achievement_storm_glory(); @@ -246,4 +272,5 @@ void AddSC_achievement_scripts() new achievement_arena_kills("achievement_arena_2v2_kills", ARENA_TYPE_2v2); new achievement_arena_kills("achievement_arena_3v3_kills", ARENA_TYPE_3v3); new achievement_arena_kills("achievement_arena_5v5_kills", ARENA_TYPE_5v5); + new achievement_bg_sa_defense_of_ancients(); } |