aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt2
-rw-r--r--cmake/macros/FindMySQL.cmake7
-rw-r--r--dep/acelite/ace/CMakeLists.txt2
-rw-r--r--dep/g3dlite/CMakeLists.txt2
-rw-r--r--dep/g3dlite/source/Log.cpp14
-rw-r--r--dep/gsoap/CMakeLists.txt2
-rw-r--r--dep/mysqllite/CMakeLists.txt2
-rw-r--r--dep/zlib/CMakeLists.txt2
-rw-r--r--sql/old/3.3.5a/2011_08_27_00_world_version.sql (renamed from sql/updates/world/2011_08_27_00_world_version.sql)0
-rw-r--r--sql/old/3.3.5a/2011_08_27_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_27_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_08_28_00_world_instance_misc.sql (renamed from sql/updates/world/2011_08_28_00_world_instance_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_08_29_00_world_instance_misc.sql (renamed from sql/updates/world/2011_08_29_00_world_instance_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_08_30_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_08_30_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_01_00_world_disables.sql (renamed from sql/updates/world/2011_09_01_00_world_disables.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_02_00_world_misc.sql (renamed from sql/updates/world/2011_09_02_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_02_02_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_02_02_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_03_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_01_world_conditions.sql (renamed from sql/updates/world/2011_09_03_01_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_02_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_03_02_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_03_world_creature_template.sql (renamed from sql/updates/world/2011_09_03_03_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_04_world_misc.sql (renamed from sql/updates/world/2011_09_03_04_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_05_world_gossip_menu_option.sql (renamed from sql/updates/world/2011_09_03_05_world_gossip_menu_option.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_06_world_spell_threat.sql (renamed from sql/updates/world/2011_09_03_06_world_spell_threat.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_07_world_achievement_criteria_data.sql (renamed from sql/updates/world/2011_09_03_07_world_achievement_criteria_data.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_08_world_spell_dbc.sql (renamed from sql/updates/world/2011_09_03_08_world_spell_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_09_world_spell_dbc.sql (renamed from sql/updates/world/2011_09_03_09_world_spell_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_03_10_world_spell_dbc.sql (renamed from sql/updates/world/2011_09_03_10_world_spell_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_04_00_world_quest_template.sql (renamed from sql/updates/world/2011_09_04_00_world_quest_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_04_01_world_trinity_string.sql (renamed from sql/updates/world/2011_09_04_01_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_04_02_world_trinity_string.sql (renamed from sql/updates/world/2011_09_04_02_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_05_00_characters_character_quest_status.sql (renamed from sql/updates/characters/2011_09_05_00_characters_character_quest_status.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_05_00_world_spell_target_position.sql (renamed from sql/updates/world/2011_09_05_00_world_spell_target_position.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_05_01_world_gossip.sql (renamed from sql/updates/world/2011_09_05_01_world_gossip.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_06_00_world_sai.sql (renamed from sql/updates/world/2011_09_06_00_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_06_01_world_misc.sql (renamed from sql/updates/world/2011_09_06_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_07_00_world_spell_linked_spell.sql (renamed from sql/updates/world/2011_09_07_00_world_spell_linked_spell.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_07_01_world_sai.sql (renamed from sql/updates/world/2011_09_07_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_08_00_world_conditions.sql (renamed from sql/updates/world/2011_09_08_00_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_08_01_world_spell_target_position.sql (renamed from sql/updates/world/2011_09_08_01_world_spell_target_position.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_08_02_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_08_02_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_08_03_world_item_template.sql (renamed from sql/updates/world/2011_09_08_03_world_item_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_10_00_world_spell_linked_spell.sql (renamed from sql/updates/world/2011_09_10_00_world_spell_linked_spell.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_00_world_creature_template.sql (renamed from sql/updates/world/2011_09_11_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_01_world_sai.sql (renamed from sql/updates/world/2011_09_11_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_02_world_creature_template.sql (renamed from sql/updates/world/2011_09_11_02_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_03_world_gameobject.sql (renamed from sql/updates/world/2011_09_11_03_world_gameobject.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_04_world_spell_linked_spell.sql (renamed from sql/updates/world/2011_09_11_04_world_spell_linked_spell.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_05_world_misc.sql (renamed from sql/updates/world/2011_09_11_05_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_06_world_spell_conditions.sql (renamed from sql/updates/world/2011_09_11_06_world_spell_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_07_world_sai.sql (renamed from sql/updates/world/2011_09_11_07_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_08_world_creature.sql (renamed from sql/updates/world/2011_09_11_08_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_11_09_world_script_texts.sql (renamed from sql/updates/world/2011_09_11_09_world_script_texts.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_00_world_misc.sql (renamed from sql/updates/world/2011_09_12_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_01_world_misc.sql (renamed from sql/updates/world/2011_09_12_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_02_world_instance_template.sql (renamed from sql/updates/world/2011_09_12_02_world_instance_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_03_world_conditions.sql (renamed from sql/updates/world/2011_09_12_03_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_04_world_creature_template.sql (renamed from sql/updates/world/2011_09_12_04_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_05_world_misc.sql (renamed from sql/updates/world/2011_09_12_05_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_06_world_event_scripts.sql (renamed from sql/updates/world/2011_09_12_06_world_event_scripts.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_12_07_world_creature.sql (renamed from sql/updates/world/2011_09_12_07_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_13_00_world_spells.sql (renamed from sql/updates/world/2011_09_13_00_world_spells.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_00_world_spawns.sql (renamed from sql/updates/world/2011_09_14_00_world_spawns.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_01_world_quest.sql (renamed from sql/updates/world/2011_09_14_01_world_quest.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_02_world_gossip_menu_option.sql (renamed from sql/updates/world/2011_09_14_02_world_gossip_menu_option.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_03_world_script_texts.sql (renamed from sql/updates/world/2011_09_14_03_world_script_texts.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_04_world_creature.sql (renamed from sql/updates/world/2011_09_14_04_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_05_world_creature_text.sql (renamed from sql/updates/world/2011_09_14_05_world_creature_text.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_14_06_world_creature_template.sql (renamed from sql/updates/world/2011_09_14_06_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_15_00_world_creature.sql (renamed from sql/updates/world/2011_09_15_00_world_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_15_01_world_creature_template.sql (renamed from sql/updates/world/2011_09_15_01_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_15_02_world_misc.sql (renamed from sql/updates/world/2011_09_15_02_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_15_03_world_creature_template.sql (renamed from sql/updates/world/2011_09_15_03_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_15_04_world_misc.sql (renamed from sql/updates/world/2011_09_15_04_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_15_05_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_15_05_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_16_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_16_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_19_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_19_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_21_00_world_misc.sql (renamed from sql/updates/world/2011_09_21_00_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_21_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_21_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_21_02_world_command.sql (renamed from sql/updates/world/2011_09_21_02_world_command.sql)6
-rw-r--r--sql/old/3.3.5a/2011_09_21_02_world_trinity_string.sql (renamed from sql/updates/world/2011_09_21_02_world_trinity_string.sql)8
-rw-r--r--sql/old/3.3.5a/2011_09_22_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_22_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_24_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_24_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_24_01_world_sai.sql (renamed from sql/updates/world/2011_09_24_01_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_25_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_25_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_26_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_09_26_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_28_00_characters_characters.sql (renamed from sql/updates/characters/2011_09_28_00_characters_characters.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_28_00_world_achievement_reward.sql (renamed from sql/updates/world/2011_09_28_00_world_achievement_reward.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_28_01_world_spell_dbc.sql (renamed from sql/updates/world/2011_09_28_01_world_spell_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_09_28_02_world_game_event.sql (renamed from sql/updates/world/2011_09_28_02_world_game_event.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_00_world_creature_template.sql (renamed from sql/updates/world/2011_10_01_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_01_world_gameobject_template.sql (renamed from sql/updates/world/2011_10_01_01_world_gameobject_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_02_world_game_event_creature.sql (renamed from sql/updates/world/2011_10_01_02_world_game_event_creature.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_03_world_conditions.sql (renamed from sql/updates/world/2011_10_01_03_world_conditions.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_04_world_sai.sql (renamed from sql/updates/world/2011_10_01_04_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_05_world_sai.sql (renamed from sql/updates/world/2011_10_01_05_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_06_world_misc.sql (renamed from sql/updates/world/2011_10_01_06_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_07_world_sai.sql (renamed from sql/updates/world/2011_10_01_07_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_08_world_sai.sql (renamed from sql/updates/world/2011_10_01_08_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_09_world_creatures.sql (renamed from sql/updates/world/2011_10_01_09_world_creatures.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_10_world_questrelation.sql (renamed from sql/updates/world/2011_10_01_10_world_questrelation.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_11_world_loot.sql (renamed from sql/updates/world/2011_10_01_11_world_loot.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_12_world_creatures.sql (renamed from sql/updates/world/2011_10_01_12_world_creatures.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_01_13_world_dbc.sql (renamed from sql/updates/world/2011_10_01_13_world_dbc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_00_world_creature_template.sql (renamed from sql/updates/world/2011_10_02_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_01_world_factionchange.sql (renamed from sql/updates/world/2011_10_02_01_world_factionchange.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_03_world_sai.sql (renamed from sql/updates/world/2011_10_02_03_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_04_world_sai.sql (renamed from sql/updates/world/2011_10_02_04_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_05_world_sai.sql (renamed from sql/updates/world/2011_10_02_05_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_06_world_misc.sql (renamed from sql/updates/world/2011_10_02_06_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_07_world_sai.sql (renamed from sql/updates/world/2011_10_02_07_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_08_world_sai.sql (renamed from sql/updates/world/2011_10_02_08_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_09_world_creatures.sql (renamed from sql/updates/world/2011_10_02_09_world_creatures.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_10_world_sai.sql (renamed from sql/updates/world/2011_10_02_10_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_11_world_sai.sql (renamed from sql/updates/world/2011_10_02_11_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_12_world_sai.sql (renamed from sql/updates/world/2011_10_02_12_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_13_world_sai.sql (renamed from sql/updates/world/2011_10_02_13_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_14_world_sai.sql (renamed from sql/updates/world/2011_10_02_14_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_02_15_world_sai.sql (renamed from sql/updates/world/2011_10_02_15_world_sai.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_04_00_world_creature_loot_template.sql (renamed from sql/updates/world/2011_10_04_00_world_creature_loot_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_05_00_world_spell_linked_spell.sql (renamed from sql/updates/world/2011_10_05_00_world_spell_linked_spell.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_05_01_world_instance_misc.sql (renamed from sql/updates/world/2011_10_05_01_world_instance_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_05_01_world_scriptname.sql (renamed from sql/updates/world/2011_10_05_01_world_scriptname.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_05_01_world_spell_script_names.sql (renamed from sql/updates/world/2011_10_05_01_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_06_00_world_creature_template.sql (renamed from sql/updates/world/2011_10_06_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_06_01_world_misc.sql (renamed from sql/updates/world/2011_10_06_01_world_misc.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_07_00_world_spell_script_names.sql (renamed from sql/updates/world/2011_10_07_00_world_spell_script_names.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_07_01_world_command.sql (renamed from sql/updates/world/2011_10_07_01_world_command.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_07_02_world_trinity_string.sql (renamed from sql/updates/world/2011_10_07_02_world_trinity_string.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_08_00_world_page_text.sql (renamed from sql/updates/world/2011_10_08_00_world_page_text.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_09_00_characters_character_aura.sql1
-rw-r--r--sql/old/3.3.5a/2011_10_11_00_world_creature_template.sql (renamed from sql/updates/world/2011_10_11_00_world_creature_template.sql)0
-rw-r--r--sql/old/3.3.5a/2011_10_12_00_world_spell_script_names.sql6
-rw-r--r--sql/old/3.3.5a/2011_10_15_00_world_waypoint_data.sql1
-rw-r--r--sql/old/3.3.5a/2011_10_18_00_world_spell_group.sql9
-rw-r--r--sql/old/3.3.5a/2011_10_18_01_world_spell_group_stack_rules.sql3
-rw-r--r--sql/old/3.3.5a/2011_10_19_00_world_spell_script_names.sql3
-rw-r--r--sql/old/3.3.5a/2011_10_21_00_world_creature_template_addon.sql3
-rw-r--r--sql/old/3.3.5a/2011_10_22_00_world_sai.sql44
-rw-r--r--sql/old/3.3.5a/2011_10_22_01_world_quest_relation.sql36
-rw-r--r--sql/old/3.3.5a/2011_10_22_02_world_gameobject_template.sql4
-rw-r--r--sql/old/3.3.5a/2011_10_22_03_world_sai.sql69
-rw-r--r--sql/old/3.3.5a/2011_10_22_04_world_sai.sql145
-rw-r--r--sql/old/3.3.5a/2011_10_22_05_world_misc.sql14
-rw-r--r--sql/old/3.3.5a/2011_10_22_06_world_sai.sql19
-rw-r--r--sql/old/3.3.5a/2011_10_22_07_world_sai.sql51
-rw-r--r--sql/old/3.3.5a/2011_10_22_08_world_sai.sql108
-rw-r--r--sql/old/3.3.5a/2011_10_22_09_world_sai.sql47
-rw-r--r--sql/old/3.3.5a/2011_10_22_10_world_sai.sql28
-rw-r--r--sql/old/3.3.5a/2011_10_22_11_world_sai.sql17
-rw-r--r--sql/old/3.3.5a/2011_10_22_12_world_sai.sql21
-rw-r--r--sql/old/3.3.5a/2011_10_22_13_world_sai.sql62
-rw-r--r--sql/old/3.3.5a/2011_10_22_14_world_sai.sql56
-rw-r--r--sql/old/3.3.5a/2011_10_22_15_world_core_script_support.sql36
-rw-r--r--sql/old/3.3.5a/2011_10_22_16_world_core_script_support.sql10
-rw-r--r--sql/old/3.3.5a/2011_10_22_17_world_conditions.sql5
-rw-r--r--sql/old/3.3.5a/2011_10_22_18_world_misc.sql104
-rw-r--r--sql/old/3.3.5a/2011_10_22_19_world_sai.sql20
-rw-r--r--sql/old/3.3.5a/2011_10_23_00_world_sai.sql57
-rw-r--r--sql/old/3.3.5a/2011_10_23_01_world_sai.sql8
-rw-r--r--sql/old/3.3.5a/2011_10_23_02_world_sai.sql9
-rw-r--r--sql/old/3.3.5a/2011_10_23_03_world_sai.sql159
-rw-r--r--sql/old/3.3.5a/2011_10_23_04_world_sai.sql50
-rw-r--r--sql/old/3.3.5a/2011_10_23_05_world_misc.sql16
-rw-r--r--sql/old/3.3.5a/2011_10_23_06_world_sai.sql44
-rw-r--r--sql/old/3.3.5a/2011_10_23_07_world_creature_templates.sql98
-rw-r--r--sql/old/3.3.5a/2011_10_23_07_world_sai.sql53
-rw-r--r--sql/old/3.3.5a/2011_10_23_08_world_sai.sql175
-rw-r--r--sql/old/3.3.5a/2011_10_24_00_world_sai.sql20
-rw-r--r--sql/old/3.3.5a/2011_10_24_01_world_creature_text.sql9
-rw-r--r--sql/old/3.3.5a/2011_10_24_02_world_core_script_support.sql22
-rw-r--r--sql/old/3.3.5a/2011_10_28_00_world_version.sql1
-rw-r--r--sql/old/3.3.5a/2011_10_29_00_world_version.sql1
-rw-r--r--sql/old/3.3.5a/2011_10_29_01_world_gameobject_template.sql9
-rw-r--r--sql/old/3.3.5a/2011_10_29_02_world_gameobject_template.sql1
-rw-r--r--sql/old/3.3.5a/2011_10_29_03_world_gameobject_template.sql5
-rw-r--r--sql/old/3.3.5a/2011_10_29_04_world_linked_respawn.sql7
-rw-r--r--sql/old/3.3.5a/2011_10_29_05_world_sai.sql26
-rw-r--r--sql/old/3.3.5a/2011_10_29_06_world_misc.sql11
-rw-r--r--sql/old/3.3.5a/2011_10_29_06_world_sai.sql6
-rw-r--r--sql/old/3.3.5a/2011_10_29_07_world_gameobjects.sql13
-rw-r--r--sql/old/3.3.5a/2011_10_30_00_world_misc.sql20
-rw-r--r--sql/old/3.3.5a/2011_10_30_01_world_misc.sql54
-rw-r--r--sql/old/3.3.5a/2011_10_30_02_world_creature_template.sql33
-rw-r--r--sql/old/3.3.5a/2011_10_30_02_world_player_factionchange_achievement.sql63
-rw-r--r--sql/old/3.3.5a/2011_11_01_00_world_sai.sql9
-rw-r--r--sql/old/3.3.5a/2011_11_07_00_world_player_factionchange_items.sql7
-rw-r--r--sql/old/3.3.5a/2011_11_07_01_world_areatrigger_teleport.sql3
-rw-r--r--sql/old/3.3.5a/2011_11_07_02_world_misc.sql10
-rw-r--r--sql/old/3.3.5a/2011_11_07_03_world_misc.sql6
-rw-r--r--sql/old/3.3.5a/2011_11_11_00_world_spell_proc_event.sql1
-rw-r--r--sql/old/3.3.5a/2011_11_11_01_world_misc.sql14
-rw-r--r--sql/old/3.3.5a/2011_11_13_00_world_spell_proc_event.sql4
-rw-r--r--sql/old/3.3.5a/2011_11_13_01_world_sai.sql38
-rw-r--r--sql/old/3.3.5a/2011_11_13_02_world_pool_template.sql6095
-rw-r--r--sql/old/3.3.5a/2011_11_13_03_world_npc_trainer.sql5
-rw-r--r--sql/old/3.3.5a/2011_11_13_04_world_creature_loot_template.sql4
-rw-r--r--sql/old/3.3.5a/2011_11_13_05_world_creature_loot_template.sql4
-rw-r--r--sql/old/3.3.5a/2011_11_13_06_world_reference_loot_template.sql9
-rw-r--r--sql/old/3.3.5a/2011_11_13_07_world_creature_loot_template.sql5
-rw-r--r--sql/old/3.3.5a/2011_11_13_08_world_creature_loot_template.sql2
-rw-r--r--sql/old/3.3.5a/2011_11_13_09_world_creature_loot_template.sql2
-rw-r--r--sql/old/3.3.5a/2011_11_13_10_world_creature_loot_template.sql2
-rw-r--r--sql/old/3.3.5a/2011_11_13_11_world_creature_loot_template.sql6
-rw-r--r--sql/old/3.3.5a/2011_11_13_12_world_creature_loot_template.sql4
-rw-r--r--sql/old/3.3.5a/2011_11_20_00_world_command.sql1
-rw-r--r--sql/old/3.3.5a/2011_11_20_01_world_sai.sql45
-rw-r--r--sql/old/3.3.5a/2011_11_20_02_world_sai.sql45
-rw-r--r--sql/old/3.3.5a/2011_11_20_03_world_sai.sql49
-rw-r--r--sql/old/3.3.5a/2011_11_20_04_world_sai.sql24
-rw-r--r--sql/old/3.3.5a/2011_11_20_05_world_sai.sql78
-rw-r--r--sql/old/3.3.5a/2011_11_20_06_world_sai.sql57
-rw-r--r--sql/old/3.3.5a/2011_11_20_07_world_sai.sql212
-rw-r--r--sql/old/3.3.5a/2011_11_20_08_world_achievement_criteria_data.sql5
-rw-r--r--sql/old/3.3.5a/2011_11_20_09_world_sai.sql35
-rw-r--r--sql/old/3.3.5a/2011_11_20_10_world_sai.sql55
-rw-r--r--sql/old/3.3.5a/2011_11_20_11_world_sai.sql9
-rw-r--r--sql/old/3.3.5a/2011_11_20_12_world_sai.sql30
-rw-r--r--sql/old/3.3.5a/2011_11_20_13_world_sai.sql15
-rw-r--r--sql/old/3.3.5a/2011_11_20_14_world_revert.sql4
-rw-r--r--sql/old/3.3.5a/2011_11_20_15_world_sai.sql41
-rw-r--r--sql/old/3.3.5a/2011_11_21_00_world_db_errors.sql11
-rw-r--r--sql/old/3.3.5a/2011_11_21_01_pilgrim_achievement_reward.sql1
-rw-r--r--sql/old/3.3.5a/2011_11_21_02_pilgrim_achievement_criteria_data.sql11
-rw-r--r--sql/old/3.3.5a/2011_11_21_03_pilgrim_misc.sql145
-rw-r--r--sql/old/3.3.5a/2011_11_21_04_pilgrim_misc.sql109
-rw-r--r--sql/old/3.3.5a/2011_11_21_05_pilgrim_tables.sql52
-rw-r--r--sql/updates/characters/2012_01_04_00_characters_character_queststatus_seasonal.sql8
-rw-r--r--sql/updates/world/2011_11_24_00_world_version.sql1
-rw-r--r--sql/updates/world/2011_11_25_00_world_quest_template.sql38
-rw-r--r--sql/updates/world/2011_11_25_01_world_quest_template.sql1
-rw-r--r--sql/updates/world/2011_11_25_02_world_creature.sql4
-rw-r--r--sql/updates/world/2011_11_26_00_world_quest_template.sql177
-rw-r--r--sql/updates/world/2011_11_26_01_world_quest_template.sql1
-rw-r--r--sql/updates/world/2011_11_26_02_world_spell_group.sql7
-rw-r--r--sql/updates/world/2011_11_26_03_world_spell_proc_event.sql2
-rw-r--r--sql/updates/world/2011_11_26_04_world_achievement_criteria_data.sql3
-rw-r--r--sql/updates/world/2011_11_26_04_world_disables.sql1
-rw-r--r--sql/updates/world/2011_11_26_05_world_ulduar_gameobject.sql2
-rw-r--r--sql/updates/world/2011_11_26_06_world_sai.sql18
-rw-r--r--sql/updates/world/2011_11_27_00_world_creature_template.sql4
-rw-r--r--sql/updates/world/2011_11_27_00_world_spell_script.sql6
-rw-r--r--sql/updates/world/2011_11_28_00_world_achievement_criteria_data.sql3
-rw-r--r--sql/updates/world/2011_11_29_00_world_spell_script.sql4
-rw-r--r--sql/updates/world/2011_12_03_00_world_gameobject.sql4
-rw-r--r--sql/updates/world/2011_12_08_00_world_gossip.sql12
-rw-r--r--sql/updates/world/2011_12_08_00_world_player_factionchange_achievement.sql71
-rw-r--r--sql/updates/world/2011_12_08_01_world_creature_template_addon.sql11
-rw-r--r--sql/updates/world/2011_12_10_00_world_spell_proc_event.sql2
-rw-r--r--sql/updates/world/2011_12_10_01_world_achievement_criteria_data.sql23
-rw-r--r--sql/updates/world/2011_12_12_00_world_spell_bonus_data.sql3
-rw-r--r--sql/updates/world/2011_12_13_00_world_misc.sql6
-rw-r--r--sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql12
-rw-r--r--sql/updates/world/2011_12_13_02_world_creature_template_addon.sql2
-rw-r--r--sql/updates/world/2011_12_14_00_world_command.sql4
-rw-r--r--sql/updates/world/2011_12_14_01_world_gameobject_template.sql1
-rw-r--r--sql/updates/world/2011_12_16_00_world_creature_template.sql4
-rw-r--r--sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql5
-rw-r--r--sql/updates/world/2011_12_17_00_world_creature.sql974
-rw-r--r--sql/updates/world/2011_12_17_00_world_gameobject.sql384
-rw-r--r--sql/updates/world/2011_12_18_00_world_creature_addon.sql2
-rw-r--r--sql/updates/world/2011_12_18_01_world_gossip.sql42
-rw-r--r--sql/updates/world/2011_12_18_02_world_spell_script_names.sql3
-rw-r--r--sql/updates/world/2011_12_18_03_world_trinity_string.sql3
-rw-r--r--sql/updates/world/2011_12_18_04_world_misc.sql87
-rw-r--r--sql/updates/world/2011_12_18_05_world_misc.sql94
-rw-r--r--sql/updates/world/2011_12_18_06_world_sai.sql14
-rw-r--r--sql/updates/world/2011_12_18_07_world_conditions.sql17
-rw-r--r--sql/updates/world/2011_12_19_00_world_conditions.sql7
-rw-r--r--sql/updates/world/2011_12_19_01_world_quest_template.sql2
-rw-r--r--sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql11
-rw-r--r--sql/updates/world/2011_12_24_00_world_misc.sql10
-rw-r--r--sql/updates/world/2011_12_24_00_world_spell_proc_event.sql1
-rw-r--r--sql/updates/world/2011_12_24_01_world_mail_loot_template.sql41
-rw-r--r--sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql3
-rw-r--r--sql/updates/world/2011_12_25_00_world_gameobject_scriptnames.sql1
-rw-r--r--sql/updates/world/2011_12_25_00_world_misc.sql9
-rw-r--r--sql/updates/world/2011_12_25_00_world_sai.sql23
-rw-r--r--sql/updates/world/2011_12_25_00_world_spell_script_names.sql4
-rw-r--r--sql/updates/world/2011_12_25_01_world_areatrigger_scriptnames.sql9
-rw-r--r--sql/updates/world/2011_12_25_01_world_misc.sql3
-rw-r--r--sql/updates/world/2011_12_25_01_world_sai.sql19
-rw-r--r--sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql5
-rw-r--r--sql/updates/world/2011_12_25_02_world_misc.sql89
-rw-r--r--sql/updates/world/2011_12_25_02_world_sai.sql47
-rw-r--r--sql/updates/world/2011_12_25_03_world_misc.sql3
-rw-r--r--sql/updates/world/2011_12_25_03_world_sai.sql52
-rw-r--r--sql/updates/world/2011_12_26_00_world_sai.sql44
-rw-r--r--sql/updates/world/2011_12_26_01_world_sai.sql39
-rw-r--r--sql/updates/world/2011_12_26_02_world_sai.sql58
-rw-r--r--sql/updates/world/2011_12_26_03_world_sai.sql25
-rw-r--r--sql/updates/world/2011_12_26_04_world_sai.sql28
-rw-r--r--sql/updates/world/2011_12_26_05_world_sai.sql25
-rw-r--r--sql/updates/world/2011_12_26_06_world_sai.sql27
-rw-r--r--sql/updates/world/2011_12_26_07_world_sai.sql18
-rw-r--r--sql/updates/world/2011_12_26_08_world_sai.sql19
-rw-r--r--sql/updates/world/2012_01_02_00_world_sai.sql41
-rw-r--r--sql/updates/world/2012_01_02_01_world_game_event.sql4
-rw-r--r--sql/updates/world/2012_01_02_02_world_creature_template.sql21
-rw-r--r--sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql57
-rw-r--r--sql/updates/world/2012_01_03_00_world_gossip_menu.sql17
-rw-r--r--sql/updates/world/2012_01_03_01_world_quest_template.sql1
-rw-r--r--sql/updates/world/2012_01_03_02_world_sai.sql27
-rw-r--r--sql/updates/world/2012_01_03_03_world_creature_template.sql2
-rw-r--r--sql/updates/world/2012_01_03_04_world_gameobject_questrelation.sql8
-rw-r--r--sql/updates/world/2012_01_03_05_world_creature.sql180
-rw-r--r--sql/updates/world/2012_01_03_06_world_sai.sql82
-rw-r--r--sql/updates/world/2012_01_03_07_world_creature.sql46
-rw-r--r--sql/updates/world/2012_01_04_00_world_gossip_menu.sql70
-rw-r--r--sql/updates/world/2012_01_04_01_world_game_event_seasonal_questrelation.sql386
-rw-r--r--sql/updates/world/2012_01_04_02_world_achievements.sql29
-rw-r--r--src/genrev/CMakeLists.txt2
-rw-r--r--src/server/authserver/Authentication/AuthCodes.cpp17
-rwxr-xr-xsrc/server/authserver/Authentication/AuthCodes.h2
-rw-r--r--src/server/authserver/CMakeLists.txt2
-rwxr-xr-xsrc/server/authserver/Main.cpp2
-rwxr-xr-xsrc/server/authserver/Realms/RealmList.cpp4
-rwxr-xr-xsrc/server/authserver/Realms/RealmList.h2
-rwxr-xr-xsrc/server/authserver/Server/AuthSocket.cpp35
-rwxr-xr-xsrc/server/authserver/Server/AuthSocket.h2
-rwxr-xr-xsrc/server/authserver/Server/RealmAcceptor.h2
-rwxr-xr-xsrc/server/authserver/Server/RealmSocket.cpp2
-rwxr-xr-xsrc/server/authserver/Server/RealmSocket.h2
-rwxr-xr-xsrc/server/authserver/authserver.rc2
-rwxr-xr-xsrc/server/collision/BoundingIntervalHierarchy.cpp2
-rwxr-xr-xsrc/server/collision/BoundingIntervalHierarchy.h3
-rw-r--r--src/server/collision/CMakeLists.txt2
-rwxr-xr-xsrc/server/collision/Management/IVMapManager.h2
-rwxr-xr-xsrc/server/collision/Management/VMapFactory.cpp2
-rwxr-xr-xsrc/server/collision/Management/VMapFactory.h2
-rw-r--r--src/server/collision/Management/VMapManager2.cpp8
-rwxr-xr-xsrc/server/collision/Management/VMapManager2.h5
-rw-r--r--src/server/collision/Maps/MapTree.cpp2
-rwxr-xr-xsrc/server/collision/Maps/MapTree.h2
-rw-r--r--src/server/collision/Maps/TileAssembler.cpp10
-rwxr-xr-xsrc/server/collision/Maps/TileAssembler.h2
-rw-r--r--src/server/collision/Models/ModelInstance.cpp2
-rwxr-xr-xsrc/server/collision/Models/ModelInstance.h2
-rw-r--r--src/server/collision/Models/WorldModel.cpp5
-rwxr-xr-xsrc/server/collision/Models/WorldModel.h2
-rw-r--r--src/server/collision/VMapDefinitions.h2
-rwxr-xr-xsrc/server/collision/VMapTools.h2
-rwxr-xr-xsrc/server/game/AI/CoreAI/CombatAI.cpp2
-rwxr-xr-xsrc/server/game/AI/CoreAI/CombatAI.h2
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.cpp2
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h3
-rwxr-xr-xsrc/server/game/AI/CoreAI/GuardAI.cpp2
-rwxr-xr-xsrc/server/game/AI/CoreAI/GuardAI.h2
-rwxr-xr-xsrc/server/game/AI/CoreAI/PassiveAI.cpp2
-rwxr-xr-xsrc/server/game/AI/CoreAI/PassiveAI.h2
-rwxr-xr-xsrc/server/game/AI/CoreAI/PetAI.cpp8
-rwxr-xr-xsrc/server/game/AI/CoreAI/PetAI.h4
-rwxr-xr-xsrc/server/game/AI/CoreAI/ReactorAI.cpp2
-rwxr-xr-xsrc/server/game/AI/CoreAI/ReactorAI.h2
-rwxr-xr-xsrc/server/game/AI/CoreAI/TotemAI.cpp2
-rwxr-xr-xsrc/server/game/AI/CoreAI/TotemAI.h2
-rwxr-xr-xsrc/server/game/AI/CoreAI/UnitAI.cpp2
-rwxr-xr-xsrc/server/game/AI/CoreAI/UnitAI.h3
-rwxr-xr-xsrc/server/game/AI/CreatureAI.cpp6
-rwxr-xr-xsrc/server/game/AI/CreatureAI.h2
-rwxr-xr-xsrc/server/game/AI/CreatureAIFactory.h2
-rwxr-xr-xsrc/server/game/AI/CreatureAIImpl.h2
-rwxr-xr-xsrc/server/game/AI/CreatureAIRegistry.cpp2
-rwxr-xr-xsrc/server/game/AI/CreatureAIRegistry.h2
-rwxr-xr-xsrc/server/game/AI/CreatureAISelector.cpp2
-rwxr-xr-xsrc/server/game/AI/CreatureAISelector.h2
-rwxr-xr-xsrc/server/game/AI/EventAI/CreatureEventAI.cpp17
-rwxr-xr-xsrc/server/game/AI/EventAI/CreatureEventAI.h4
-rwxr-xr-xsrc/server/game/AI/EventAI/CreatureEventAIMgr.cpp2
-rwxr-xr-xsrc/server/game/AI/EventAI/CreatureEventAIMgr.h2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp5
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp3
-rwxr-xr-xsrc/server/game/AI/ScriptedAI/ScriptedSimpleAI.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp46
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h4
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp183
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.h20
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp89
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h44
-rwxr-xr-xsrc/server/game/Accounts/AccountMgr.cpp33
-rwxr-xr-xsrc/server/game/Accounts/AccountMgr.h2
-rwxr-xr-xsrc/server/game/Achievements/AchievementMgr.cpp81
-rwxr-xr-xsrc/server/game/Achievements/AchievementMgr.h6
-rwxr-xr-xsrc/server/game/Addons/AddonMgr.cpp11
-rwxr-xr-xsrc/server/game/Addons/AddonMgr.h2
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp12
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h2
-rwxr-xr-xsrc/server/game/Battlegrounds/ArenaTeam.cpp56
-rwxr-xr-xsrc/server/game/Battlegrounds/ArenaTeam.h8
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.cpp2
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.h2
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.cpp297
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.h14
-rwxr-xr-xsrc/server/game/Battlegrounds/BattlegroundMgr.cpp52
-rwxr-xr-xsrc/server/game/Battlegrounds/BattlegroundMgr.h10
-rwxr-xr-xsrc/server/game/Battlegrounds/BattlegroundQueue.cpp156
-rwxr-xr-xsrc/server/game/Battlegrounds/BattlegroundQueue.h4
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAA.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAA.h6
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAB.cpp18
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAB.h6
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAV.cpp42
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAV.h6
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundBE.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundBE.h8
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundDS.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundDS.h8
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundEY.cpp52
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundEY.h6
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundIC.cpp320
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundIC.h11
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundNA.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundNA.h8
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRB.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRB.h6
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRL.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRL.h8
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRV.cpp10
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRV.h8
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.cpp78
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.h8
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundWS.cpp38
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundWS.h6
-rw-r--r--src/server/game/CMakeLists.txt2
-rwxr-xr-xsrc/server/game/Calendar/Calendar.cpp2
-rwxr-xr-xsrc/server/game/Calendar/Calendar.h2
-rwxr-xr-xsrc/server/game/Chat/Channels/Channel.cpp108
-rwxr-xr-xsrc/server/game/Chat/Channels/Channel.h2
-rwxr-xr-xsrc/server/game/Chat/Channels/ChannelMgr.cpp2
-rwxr-xr-xsrc/server/game/Chat/Channels/ChannelMgr.h2
-rwxr-xr-xsrc/server/game/Chat/Chat.cpp67
-rwxr-xr-xsrc/server/game/Chat/Chat.h16
-rw-r--r--src/server/game/Chat/ChatLink.cpp2
-rw-r--r--src/server/game/Chat/ChatLink.h2
-rwxr-xr-xsrc/server/game/Chat/Commands/Level0.cpp15
-rwxr-xr-xsrc/server/game/Chat/Commands/Level1.cpp30
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp176
-rwxr-xr-xsrc/server/game/Chat/Commands/Level3.cpp149
-rwxr-xr-xsrc/server/game/Chat/Commands/TicketCommands.cpp63
-rwxr-xr-xsrc/server/game/Combat/HostileRefManager.cpp2
-rwxr-xr-xsrc/server/game/Combat/HostileRefManager.h2
-rwxr-xr-xsrc/server/game/Combat/ThreatManager.cpp2
-rwxr-xr-xsrc/server/game/Combat/ThreatManager.h2
-rwxr-xr-xsrc/server/game/Combat/UnitEvents.h2
-rwxr-xr-xsrc/server/game/Conditions/ConditionMgr.cpp7
-rwxr-xr-xsrc/server/game/Conditions/ConditionMgr.h2
-rwxr-xr-xsrc/server/game/Conditions/DisableMgr.cpp19
-rwxr-xr-xsrc/server/game/Conditions/DisableMgr.h2
-rwxr-xr-xsrc/server/game/DataStores/DBCEnums.h25
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.cpp4
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.h3
-rwxr-xr-xsrc/server/game/DataStores/DBCStructure.h31
-rwxr-xr-xsrc/server/game/DataStores/DBCfmt.h5
-rwxr-xr-xsrc/server/game/DungeonFinding/LFG.h2
-rw-r--r--src/server/game/DungeonFinding/LFGGroupData.cpp2
-rw-r--r--src/server/game/DungeonFinding/LFGGroupData.h2
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.cpp234
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.h14
-rw-r--r--src/server/game/DungeonFinding/LFGPlayerData.cpp2
-rw-r--r--src/server/game/DungeonFinding/LFGPlayerData.h2
-rw-r--r--src/server/game/DungeonFinding/LFGScripts.cpp27
-rw-r--r--src/server/game/DungeonFinding/LFGScripts.h2
-rwxr-xr-xsrc/server/game/Entities/Corpse/Corpse.cpp24
-rwxr-xr-xsrc/server/game/Entities/Corpse/Corpse.h10
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.cpp74
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.h22
-rwxr-xr-xsrc/server/game/Entities/Creature/CreatureGroups.cpp25
-rwxr-xr-xsrc/server/game/Entities/Creature/CreatureGroups.h2
-rwxr-xr-xsrc/server/game/Entities/Creature/GossipDef.cpp80
-rwxr-xr-xsrc/server/game/Entities/Creature/GossipDef.h2
-rwxr-xr-xsrc/server/game/Entities/Creature/TemporarySummon.cpp12
-rwxr-xr-xsrc/server/game/Entities/Creature/TemporarySummon.h8
-rwxr-xr-xsrc/server/game/Entities/DynamicObject/DynamicObject.cpp13
-rwxr-xr-xsrc/server/game/Entities/DynamicObject/DynamicObject.h6
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp129
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.h10
-rwxr-xr-xsrc/server/game/Entities/Item/Container/Bag.cpp2
-rwxr-xr-xsrc/server/game/Entities/Item/Container/Bag.h2
-rwxr-xr-xsrc/server/game/Entities/Item/Item.cpp65
-rwxr-xr-xsrc/server/game/Entities/Item/Item.h5
-rwxr-xr-xsrc/server/game/Entities/Item/ItemEnchantmentMgr.cpp2
-rwxr-xr-xsrc/server/game/Entities/Item/ItemEnchantmentMgr.h2
-rwxr-xr-xsrc/server/game/Entities/Item/ItemPrototype.h3
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp153
-rwxr-xr-xsrc/server/game/Entities/Object/Object.h59
-rwxr-xr-xsrc/server/game/Entities/Object/ObjectDefines.h2
-rwxr-xr-xsrc/server/game/Entities/Object/ObjectPosSelector.cpp24
-rwxr-xr-xsrc/server/game/Entities/Object/ObjectPosSelector.h6
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateData.cpp2
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateData.h2
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateFields.h2
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateMask.h5
-rwxr-xr-xsrc/server/game/Entities/Pet/Pet.cpp50
-rwxr-xr-xsrc/server/game/Entities/Pet/Pet.h4
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp1455
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h122
-rwxr-xr-xsrc/server/game/Entities/Player/SocialMgr.cpp78
-rwxr-xr-xsrc/server/game/Entities/Player/SocialMgr.h6
-rwxr-xr-xsrc/server/game/Entities/Totem/Totem.cpp9
-rwxr-xr-xsrc/server/game/Entities/Totem/Totem.h2
-rwxr-xr-xsrc/server/game/Entities/Transport/Transport.cpp52
-rwxr-xr-xsrc/server/game/Entities/Transport/Transport.h2
-rwxr-xr-xsrc/server/game/Entities/Unit/StatSystem.cpp71
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp902
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h66
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.cpp10
-rwxr-xr-xsrc/server/game/Entities/Vehicle/Vehicle.h2
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h2
-rwxr-xr-xsrc/server/game/Events/GameEventMgr.cpp97
-rwxr-xr-xsrc/server/game/Events/GameEventMgr.h7
-rwxr-xr-xsrc/server/game/Globals/ObjectAccessor.cpp72
-rwxr-xr-xsrc/server/game/Globals/ObjectAccessor.h75
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp650
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.h21
-rwxr-xr-xsrc/server/game/Grids/Cells/Cell.h105
-rw-r--r--[-rwxr-xr-x]src/server/game/Grids/Cells/CellImpl.h198
-rwxr-xr-xsrc/server/game/Grids/Grid.h58
-rw-r--r--[-rwxr-xr-x]src/server/game/Grids/GridDefines.h95
-rwxr-xr-xsrc/server/game/Grids/GridLoader.h15
-rwxr-xr-xsrc/server/game/Grids/GridRefManager.h2
-rwxr-xr-xsrc/server/game/Grids/GridReference.h2
-rwxr-xr-xsrc/server/game/Grids/GridStates.cpp29
-rwxr-xr-xsrc/server/game/Grids/GridStates.h16
-rwxr-xr-xsrc/server/game/Grids/NGrid.h75
-rwxr-xr-xsrc/server/game/Grids/Notifiers/GridNotifiers.cpp61
-rwxr-xr-xsrc/server/game/Grids/Notifiers/GridNotifiers.h16
-rwxr-xr-xsrc/server/game/Grids/Notifiers/GridNotifiersImpl.h8
-rwxr-xr-xsrc/server/game/Grids/ObjectGridLoader.cpp174
-rwxr-xr-xsrc/server/game/Grids/ObjectGridLoader.h79
-rwxr-xr-xsrc/server/game/Groups/Group.cpp236
-rwxr-xr-xsrc/server/game/Groups/Group.h18
-rw-r--r--src/server/game/Groups/GroupMgr.cpp2
-rw-r--r--src/server/game/Groups/GroupMgr.h2
-rwxr-xr-xsrc/server/game/Groups/GroupRefManager.h2
-rwxr-xr-xsrc/server/game/Groups/GroupReference.cpp2
-rwxr-xr-xsrc/server/game/Groups/GroupReference.h2
-rwxr-xr-xsrc/server/game/Guilds/Guild.cpp75
-rwxr-xr-xsrc/server/game/Guilds/Guild.h10
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp2
-rw-r--r--src/server/game/Guilds/GuildMgr.h2
-rwxr-xr-xsrc/server/game/Instances/InstanceSaveMgr.cpp35
-rwxr-xr-xsrc/server/game/Instances/InstanceSaveMgr.h8
-rwxr-xr-xsrc/server/game/Instances/InstanceScript.cpp21
-rwxr-xr-xsrc/server/game/Instances/InstanceScript.h2
-rwxr-xr-xsrc/server/game/Loot/LootMgr.cpp36
-rwxr-xr-xsrc/server/game/Loot/LootMgr.h4
-rwxr-xr-xsrc/server/game/Mails/Mail.cpp16
-rwxr-xr-xsrc/server/game/Mails/Mail.h2
-rwxr-xr-xsrc/server/game/Maps/Map.cpp571
-rwxr-xr-xsrc/server/game/Maps/Map.h93
-rwxr-xr-xsrc/server/game/Maps/MapInstanced.cpp28
-rwxr-xr-xsrc/server/game/Maps/MapInstanced.h25
-rwxr-xr-xsrc/server/game/Maps/MapManager.cpp45
-rwxr-xr-xsrc/server/game/Maps/MapManager.h23
-rwxr-xr-xsrc/server/game/Maps/MapRefManager.h2
-rwxr-xr-xsrc/server/game/Maps/MapReference.h2
-rw-r--r--src/server/game/Maps/MapUpdater.cpp6
-rwxr-xr-xsrc/server/game/Maps/ZoneScript.h4
-rwxr-xr-xsrc/server/game/Miscellaneous/Formulas.h8
-rwxr-xr-xsrc/server/game/Miscellaneous/Language.h9
-rwxr-xr-xsrc/server/game/Miscellaneous/SharedDefines.h85
-rwxr-xr-xsrc/server/game/Movement/DestinationHolder.cpp2
-rwxr-xr-xsrc/server/game/Movement/DestinationHolder.h2
-rwxr-xr-xsrc/server/game/Movement/DestinationHolderImp.h2
-rwxr-xr-xsrc/server/game/Movement/FollowerRefManager.h2
-rwxr-xr-xsrc/server/game/Movement/FollowerReference.cpp2
-rwxr-xr-xsrc/server/game/Movement/FollowerReference.h2
-rwxr-xr-xsrc/server/game/Movement/MotionMaster.cpp2
-rwxr-xr-xsrc/server/game/Movement/MotionMaster.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerator.cpp2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGeneratorImpl.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp33
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/HomeMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/IdleMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp6
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/PointMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp5
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/RandomMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp12
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h2
-rwxr-xr-xsrc/server/game/Movement/Traveller.h2
-rwxr-xr-xsrc/server/game/Movement/Waypoints/Path.h2
-rwxr-xr-xsrc/server/game/Movement/Waypoints/WaypointManager.cpp26
-rwxr-xr-xsrc/server/game/Movement/Waypoints/WaypointManager.h4
-rwxr-xr-xsrc/server/game/OutdoorPvP/OutdoorPvP.cpp82
-rwxr-xr-xsrc/server/game/OutdoorPvP/OutdoorPvP.h44
-rwxr-xr-xsrc/server/game/OutdoorPvP/OutdoorPvPMgr.cpp40
-rwxr-xr-xsrc/server/game/OutdoorPvP/OutdoorPvPMgr.h14
-rwxr-xr-xsrc/server/game/Pools/PoolMgr.cpp24
-rwxr-xr-xsrc/server/game/Pools/PoolMgr.h2
-rwxr-xr-xsrc/server/game/Quests/QuestDef.cpp217
-rwxr-xr-xsrc/server/game/Quests/QuestDef.h183
-rwxr-xr-xsrc/server/game/Reputation/ReputationMgr.cpp4
-rwxr-xr-xsrc/server/game/Reputation/ReputationMgr.h2
-rwxr-xr-xsrc/server/game/Scripting/MapScripts.cpp47
-rwxr-xr-xsrc/server/game/Scripting/ScriptLoader.cpp2
-rwxr-xr-xsrc/server/game/Scripting/ScriptMgr.cpp3
-rwxr-xr-xsrc/server/game/Scripting/ScriptMgr.h2
-rwxr-xr-xsrc/server/game/Scripting/ScriptSystem.cpp21
-rw-r--r--src/server/game/Scripting/ScriptSystem.h1
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/AddonHandler.cpp8
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/AddonHandler.h2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ArenaTeamHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp79
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/AuthHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/CalendarHandler.cpp77
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ChannelHandler.cpp2
-rw-r--r--[-rwxr-xr-x]src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp303
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ChatHandler.cpp9
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/CombatHandler.cpp25
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/DuelHandler.cpp16
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/GroupHandler.cpp16
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/GuildHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ItemHandler.cpp6
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/LFGHandler.cpp26
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/LootHandler.cpp6
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MailHandler.cpp170
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MiscHandler.cpp84
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MovementHandler.cpp12
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/NPCHandler.cpp105
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/NPCHandler.h2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/PetHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp103
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/QueryHandler.cpp9
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/QuestHandler.cpp4
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/SkillHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/SpellHandler.cpp49
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/TaxiHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/TicketHandler.cpp8
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/TradeHandler.cpp2
-rw-r--r--src/server/game/Server/Protocol/Handlers/VehicleHandler.cpp22
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/VoiceChatHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.cpp4
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h2
-rwxr-xr-xsrc/server/game/Server/Protocol/WorldLog.cpp6
-rwxr-xr-xsrc/server/game/Server/Protocol/WorldLog.h2
-rwxr-xr-xsrc/server/game/Server/WorldSession.cpp88
-rwxr-xr-xsrc/server/game/Server/WorldSession.h210
-rwxr-xr-xsrc/server/game/Server/WorldSocket.cpp25
-rwxr-xr-xsrc/server/game/Server/WorldSocket.h2
-rw-r--r--src/server/game/Server/WorldSocketAcceptor.h2
-rwxr-xr-xsrc/server/game/Server/WorldSocketMgr.cpp8
-rwxr-xr-xsrc/server/game/Server/WorldSocketMgr.h2
-rwxr-xr-xsrc/server/game/Skills/SkillDiscovery.cpp2
-rwxr-xr-xsrc/server/game/Skills/SkillDiscovery.h2
-rwxr-xr-xsrc/server/game/Skills/SkillExtraItems.cpp2
-rwxr-xr-xsrc/server/game/Skills/SkillExtraItems.h2
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraDefines.h2
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp159
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h3
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.cpp14
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.h2
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp229
-rwxr-xr-xsrc/server/game/Spells/Spell.h11
-rwxr-xr-xsrc/server/game/Spells/SpellEffects.cpp337
-rw-r--r--src/server/game/Spells/SpellInfo.cpp26
-rw-r--r--src/server/game/Spells/SpellInfo.h3
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.cpp195
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.h71
-rwxr-xr-xsrc/server/game/Spells/SpellScript.cpp17
-rwxr-xr-xsrc/server/game/Spells/SpellScript.h44
-rwxr-xr-xsrc/server/game/Texts/CreatureTextMgr.cpp12
-rwxr-xr-xsrc/server/game/Texts/CreatureTextMgr.h2
-rwxr-xr-xsrc/server/game/Tickets/TicketMgr.cpp11
-rwxr-xr-xsrc/server/game/Tickets/TicketMgr.h2
-rw-r--r--src/server/game/Tools/CharacterDatabaseCleaner.cpp2
-rw-r--r--src/server/game/Tools/CharacterDatabaseCleaner.h2
-rw-r--r--src/server/game/Tools/PlayerDump.cpp15
-rwxr-xr-xsrc/server/game/Tools/PlayerDump.h2
-rwxr-xr-xsrc/server/game/Weather/Weather.cpp2
-rwxr-xr-xsrc/server/game/Weather/Weather.h2
-rwxr-xr-xsrc/server/game/Weather/WeatherMgr.cpp2
-rwxr-xr-xsrc/server/game/Weather/WeatherMgr.h2
-rwxr-xr-xsrc/server/game/World/World.cpp128
-rwxr-xr-xsrc/server/game/World/World.h20
-rw-r--r--src/server/scripts/CMakeLists.txt2
-rw-r--r--src/server/scripts/Commands/cs_account.cpp74
-rw-r--r--src/server/scripts/Commands/cs_achievement.cpp2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Commands/cs_event.cpp2
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp6
-rw-r--r--src/server/scripts/Commands/cs_go.cpp2
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp6
-rw-r--r--src/server/scripts/Commands/cs_gps.cpp88
-rw-r--r--src/server/scripts/Commands/cs_honor.cpp13
-rw-r--r--src/server/scripts/Commands/cs_learn.cpp126
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp2
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp9
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp129
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp18
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp2
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp59
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp2
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp315
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp78
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp38
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp64
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp64
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp54
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp216
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.h2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_ambassador_flamelash.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_anubshiah.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_general_angerforge.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_gorosh_the_dervish.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_grizzle.cpp20
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_high_interrogator_gerstahn.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_magmus.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_moira_bronzebeard.cpp25
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/boss_tomb_of_seven.cpp43
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockDepths/instance_blackrock_depths.cpp139
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_drakkisath.cpp18
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_halycon.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_highlord_omokk.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_mother_smolderweb.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_overlord_wyrmthalak.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_quartermaster_zigris.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_the_beast.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_warmaster_voone.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp34
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_broodlord_lashlayer.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_chromaggus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_ebonroc.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_firemaw.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_razorgore.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_vaelastrasz.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_victor_nefarius.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/instance_blackwing_lair.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/deadmines.h2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.h2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp7
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_baron_geddon.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_garr.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_gehennas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_golemagg.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_lucifron.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_magmadar.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_majordomo_executus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_ragnaros.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_shazzrah.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/boss_sulfuron_harbinger.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/instance_molten_core.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/molten_core.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MoltenCore/molten_core.h2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp13
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h2
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/stratholme.h2
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp7
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/uldaman.h2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp19
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp17
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp39
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.h2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp16
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp14
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp12
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h2
-rw-r--r--src/server/scripts/EasternKingdoms/alterac_mountains.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/arathi_highlands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/blasted_lands.cpp17
-rw-r--r--src/server/scripts/EasternKingdoms/boss_kruul.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/burning_steppes.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/duskwood.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/eastern_plaguelands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/eversong_woods.cpp94
-rw-r--r--src/server/scripts/EasternKingdoms/ghostlands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/hinterlands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ironforge.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/loch_modan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/redridge_mountains.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/searing_gorge.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/silvermoon_city.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/silverpine_forest.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/stormwind_city.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/stranglethorn_vale.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/tirisfal_glades.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/undercity.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/western_plaguelands.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/westfall.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/wetlands.cpp2
-rw-r--r--src/server/scripts/Examples/example_commandscript.cpp2
-rw-r--r--src/server/scripts/Examples/example_creature.cpp2
-rw-r--r--src/server/scripts/Examples/example_escort.cpp2
-rw-r--r--src/server/scripts/Examples/example_gossip_codebox.cpp2
-rw-r--r--src/server/scripts/Examples/example_misc.cpp2
-rw-r--r--src/server/scripts/Examples/example_spell.cpp40
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp2
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h2
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp2
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp2
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp2
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp12
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp35
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp18
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_aeonus.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_chrono_lord_deja.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_temporus.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.h2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/instance_dark_portal.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp10
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp8
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp4
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h2
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp2
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp2
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp2
-rw-r--r--src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp2
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp2
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp2
-rw-r--r--src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp4
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp22
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp10
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp14
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp16
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp24
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp28
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp10
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp16
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp2
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h2
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp2
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp2
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h2
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp2
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp2
-rw-r--r--src/server/scripts/Kalimdor/ashenvale.cpp2
-rw-r--r--src/server/scripts/Kalimdor/azshara.cpp2
-rw-r--r--src/server/scripts/Kalimdor/azuremyst_isle.cpp6
-rw-r--r--src/server/scripts/Kalimdor/bloodmyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/boss_azuregos.cpp18
-rw-r--r--src/server/scripts/Kalimdor/darkshore.cpp2
-rw-r--r--src/server/scripts/Kalimdor/desolace.cpp57
-rw-r--r--src/server/scripts/Kalimdor/durotar.cpp6
-rw-r--r--src/server/scripts/Kalimdor/dustwallow_marsh.cpp2
-rw-r--r--src/server/scripts/Kalimdor/felwood.cpp2
-rw-r--r--src/server/scripts/Kalimdor/feralas.cpp2
-rw-r--r--src/server/scripts/Kalimdor/moonglade.cpp2
-rw-r--r--src/server/scripts/Kalimdor/mulgore.cpp2
-rw-r--r--src/server/scripts/Kalimdor/orgrimmar.cpp2
-rw-r--r--src/server/scripts/Kalimdor/silithus.cpp2
-rw-r--r--src/server/scripts/Kalimdor/stonetalon_mountains.cpp2
-rw-r--r--src/server/scripts/Kalimdor/tanaris.cpp2
-rw-r--r--src/server/scripts/Kalimdor/teldrassil.cpp2
-rw-r--r--src/server/scripts/Kalimdor/the_barrens.cpp2
-rw-r--r--src/server/scripts/Kalimdor/thousand_needles.cpp2
-rw-r--r--src/server/scripts/Kalimdor/thunder_bluff.cpp2
-rw-r--r--src/server/scripts/Kalimdor/ungoro_crater.cpp2
-rw-r--r--src/server/scripts/Kalimdor/winterspring.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp (renamed from src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp)2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp210
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp4
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp2
-rw-r--r--src/server/scripts/Northrend/CMakeLists.txt48
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp10
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp7
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp23
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h2
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp6
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp11
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp8
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp5
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp3
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp6
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h3
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h2
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_eck.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp60
-rw-r--r--src/server/scripts/Northrend/Gundrak/gundrak.h2
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp39
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp6
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp10
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp46
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp9
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp21
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp8
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp8
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp10
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp8
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp22
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp214
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp26
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/commander_kolurg.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/nexus.h2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp3
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp4
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp8
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp39
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.h5
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp32
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp18
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp16
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp)4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp)26
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp)5
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp)86
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_mimiron.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/boss_yoggsaron.cpp)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp)8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h (renamed from src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h)2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp (renamed from src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp)2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp10
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_pinnacle.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_erekem.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_moragg.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.h2
-rw-r--r--src/server/scripts/Northrend/borean_tundra.cpp4
-rw-r--r--src/server/scripts/Northrend/crystalsong_forest.cpp2
-rw-r--r--src/server/scripts/Northrend/dalaran.cpp7
-rw-r--r--src/server/scripts/Northrend/dragonblight.cpp2
-rw-r--r--src/server/scripts/Northrend/grizzly_hills.cpp2
-rw-r--r--src/server/scripts/Northrend/howling_fjord.cpp2
-rw-r--r--src/server/scripts/Northrend/icecrown.cpp2
-rw-r--r--src/server/scripts/Northrend/isle_of_conquest.cpp2
-rw-r--r--src/server/scripts/Northrend/sholazar_basin.cpp5
-rw-r--r--src/server/scripts/Northrend/storm_peaks.cpp2
-rw-r--r--src/server/scripts/Northrend/zuldrak.cpp6
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPEP.h2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPHP.h2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp4
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPNA.h2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp29
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPSI.h2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPTF.h2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp2
-rwxr-xr-xsrc/server/scripts/OutdoorPvP/OutdoorPvPZM.h2
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp6
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp12
-rw-r--r--src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp10
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp10
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp6
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp6
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp8
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h2
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.h2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp273
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp8
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_supremus.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp10
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/illidari_council.cpp16
-rw-r--r--src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp10
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp2
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/underbog/boss_the_black_stalker.cpp2
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp4
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp12
-rw-r--r--src/server/scripts/Outland/GruulsLair/gruuls_lair.h2
-rw-r--r--src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp16
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp6
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp2
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/the_eye.h2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp6
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp16
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp24
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h2
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h2
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp2
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp10
-rw-r--r--src/server/scripts/Outland/blades_edge_mountains.cpp27
-rw-r--r--src/server/scripts/Outland/boss_doomlord_kazzak.cpp2
-rw-r--r--src/server/scripts/Outland/boss_doomwalker.cpp2
-rw-r--r--src/server/scripts/Outland/hellfire_peninsula.cpp2
-rw-r--r--src/server/scripts/Outland/nagrand.cpp732
-rw-r--r--src/server/scripts/Outland/netherstorm.cpp34
-rw-r--r--src/server/scripts/Outland/shadowmoon_valley.cpp30
-rw-r--r--src/server/scripts/Outland/shattrath_city.cpp4
-rw-r--r--src/server/scripts/Outland/terokkar_forest.cpp2
-rw-r--r--src/server/scripts/Outland/zangarmarsh.cpp2
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp2
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp116
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp2
-rw-r--r--src/server/scripts/Spells/spell_item.cpp2
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp2
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp2
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp2
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp102
-rw-r--r--src/server/scripts/Spells/spell_rogue.cpp2
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp32
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp2
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp62
-rwxr-xr-xsrc/server/scripts/World/achievement_scripts.cpp34
-rw-r--r--src/server/scripts/World/areatrigger_scripts.cpp282
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp2
-rwxr-xr-xsrc/server/scripts/World/chat_log.cpp2
-rw-r--r--src/server/scripts/World/go_scripts.cpp169
-rw-r--r--src/server/scripts/World/guards.cpp2
-rw-r--r--src/server/scripts/World/item_scripts.cpp43
-rw-r--r--src/server/scripts/World/mob_generic_creature.cpp2
-rw-r--r--src/server/scripts/World/npc_innkeeper.cpp2
-rw-r--r--src/server/scripts/World/npc_professions.cpp6
-rw-r--r--src/server/scripts/World/npc_taxi.cpp2
-rw-r--r--src/server/scripts/World/npcs_special.cpp191
-rw-r--r--src/server/shared/CMakeLists.txt2
-rwxr-xr-xsrc/server/shared/Common.cpp2
-rwxr-xr-xsrc/server/shared/Common.h27
-rwxr-xr-xsrc/server/shared/CompilerDefs.h2
-rwxr-xr-xsrc/server/shared/Configuration/Config.cpp2
-rwxr-xr-xsrc/server/shared/Configuration/Config.h2
-rwxr-xr-xsrc/server/shared/Cryptography/ARC4.cpp2
-rwxr-xr-xsrc/server/shared/Cryptography/ARC4.h4
-rwxr-xr-xsrc/server/shared/Cryptography/Authentication/AuthCrypt.cpp5
-rwxr-xr-xsrc/server/shared/Cryptography/Authentication/AuthCrypt.h3
-rwxr-xr-xsrc/server/shared/Cryptography/BigNumber.cpp25
-rwxr-xr-xsrc/server/shared/Cryptography/BigNumber.h4
-rwxr-xr-xsrc/server/shared/Cryptography/HMACSHA1.cpp2
-rwxr-xr-xsrc/server/shared/Cryptography/HMACSHA1.h5
-rwxr-xr-xsrc/server/shared/Cryptography/SHA1.cpp2
-rwxr-xr-xsrc/server/shared/Cryptography/SHA1.h6
-rwxr-xr-xsrc/server/shared/DataStores/DBCFileLoader.cpp2
-rwxr-xr-xsrc/server/shared/DataStores/DBCFileLoader.h2
-rwxr-xr-xsrc/server/shared/DataStores/DBCStore.h2
-rwxr-xr-xsrc/server/shared/Database/AdhocStatement.cpp2
-rwxr-xr-xsrc/server/shared/Database/AdhocStatement.h2
-rwxr-xr-xsrc/server/shared/Database/DatabaseEnv.h2
-rw-r--r--src/server/shared/Database/DatabaseWorker.cpp2
-rwxr-xr-xsrc/server/shared/Database/DatabaseWorker.h2
-rwxr-xr-xsrc/server/shared/Database/DatabaseWorkerPool.h11
-rwxr-xr-xsrc/server/shared/Database/Field.cpp2
-rwxr-xr-xsrc/server/shared/Database/Field.h2
-rw-r--r--[-rwxr-xr-x]src/server/shared/Database/Implementation/CharacterDatabase.cpp407
-rw-r--r--[-rwxr-xr-x]src/server/shared/Database/Implementation/CharacterDatabase.h397
-rwxr-xr-xsrc/server/shared/Database/Implementation/LoginDatabase.cpp65
-rwxr-xr-xsrc/server/shared/Database/Implementation/LoginDatabase.h67
-rwxr-xr-xsrc/server/shared/Database/Implementation/WorldDatabase.cpp44
-rwxr-xr-xsrc/server/shared/Database/Implementation/WorldDatabase.h46
-rwxr-xr-xsrc/server/shared/Database/MySQLConnection.cpp9
-rwxr-xr-xsrc/server/shared/Database/MySQLConnection.h3
-rwxr-xr-xsrc/server/shared/Database/MySQLThreading.h2
-rwxr-xr-xsrc/server/shared/Database/PreparedStatement.cpp2
-rwxr-xr-xsrc/server/shared/Database/PreparedStatement.h2
-rwxr-xr-xsrc/server/shared/Database/QueryHolder.cpp2
-rwxr-xr-xsrc/server/shared/Database/QueryHolder.h2
-rwxr-xr-xsrc/server/shared/Database/QueryResult.cpp2
-rwxr-xr-xsrc/server/shared/Database/QueryResult.h2
-rwxr-xr-xsrc/server/shared/Database/SQLOperation.h2
-rwxr-xr-xsrc/server/shared/Database/Transaction.cpp2
-rwxr-xr-xsrc/server/shared/Database/Transaction.h2
-rwxr-xr-xsrc/server/shared/Debugging/Errors.h5
-rwxr-xr-xsrc/server/shared/Define.h2
-rwxr-xr-xsrc/server/shared/Dynamic/FactoryHolder.h2
-rwxr-xr-xsrc/server/shared/Dynamic/LinkedList.h2
-rwxr-xr-xsrc/server/shared/Dynamic/LinkedReference/RefManager.h2
-rwxr-xr-xsrc/server/shared/Dynamic/LinkedReference/Reference.h2
-rwxr-xr-xsrc/server/shared/Dynamic/ObjectRegistry.h2
-rwxr-xr-xsrc/server/shared/Dynamic/TypeContainer.h12
-rwxr-xr-xsrc/server/shared/Dynamic/TypeContainerFunctions.h53
-rwxr-xr-xsrc/server/shared/Dynamic/TypeContainerFunctionsPtr.h2
-rwxr-xr-xsrc/server/shared/Dynamic/TypeContainerVisitor.h2
-rwxr-xr-xsrc/server/shared/Dynamic/TypeList.h2
-rwxr-xr-xsrc/server/shared/Dynamic/UnorderedMap.h3
-rwxr-xr-xsrc/server/shared/Logging/Log.cpp82
-rwxr-xr-xsrc/server/shared/Logging/Log.h8
-rwxr-xr-xsrc/server/shared/Packets/ByteBuffer.h2
-rwxr-xr-xsrc/server/shared/Packets/WorldPacket.h2
-rwxr-xr-xsrc/server/shared/SystemConfig.h2
-rwxr-xr-xsrc/server/shared/Threading/Callback.h123
-rwxr-xr-xsrc/server/shared/Threading/LockedQueue.h9
-rwxr-xr-xsrc/server/shared/Threading/Threading.cpp2
-rwxr-xr-xsrc/server/shared/Threading/Threading.h2
-rwxr-xr-xsrc/server/shared/Utilities/ByteConverter.h2
-rwxr-xr-xsrc/server/shared/Utilities/EventProcessor.cpp2
-rwxr-xr-xsrc/server/shared/Utilities/EventProcessor.h2
-rwxr-xr-xsrc/server/shared/Utilities/ServiceWin32.cpp2
-rwxr-xr-xsrc/server/shared/Utilities/ServiceWin32.h2
-rwxr-xr-xsrc/server/shared/Utilities/SignalHandler.h2
-rwxr-xr-xsrc/server/shared/Utilities/Timer.h2
-rwxr-xr-xsrc/server/shared/Utilities/Util.cpp34
-rwxr-xr-xsrc/server/shared/Utilities/Util.h5
-rw-r--r--src/server/worldserver/CMakeLists.txt2
-rwxr-xr-xsrc/server/worldserver/CommandLine/CliRunnable.cpp47
-rwxr-xr-xsrc/server/worldserver/CommandLine/CliRunnable.h2
-rwxr-xr-xsrc/server/worldserver/Main.cpp2
-rwxr-xr-xsrc/server/worldserver/Master.cpp7
-rwxr-xr-xsrc/server/worldserver/Master.h2
-rw-r--r--src/server/worldserver/RemoteAccess/RARunnable.cpp13
-rw-r--r--src/server/worldserver/RemoteAccess/RARunnable.h2
-rwxr-xr-xsrc/server/worldserver/RemoteAccess/RASocket.cpp4
-rwxr-xr-xsrc/server/worldserver/RemoteAccess/RASocket.h2
-rwxr-xr-xsrc/server/worldserver/TCSoap/TCSoap.cpp2
-rwxr-xr-xsrc/server/worldserver/TCSoap/TCSoap.h2
-rwxr-xr-xsrc/server/worldserver/WorldThread/WorldRunnable.cpp2
-rwxr-xr-xsrc/server/worldserver/WorldThread/WorldRunnable.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist3
-rwxr-xr-xsrc/server/worldserver/worldserver.rc2
1408 files changed, 25139 insertions, 10236 deletions
diff --git a/.gitignore b/.gitignore
index 02609aebbe7..5bceef179b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-build/
+build*/
.directory
.mailmap
*.orig
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dfa648867a5..49f0c31b15e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/cmake/macros/FindMySQL.cmake b/cmake/macros/FindMySQL.cmake
index 5c05fdb884d..d42dc5caf74 100644
--- a/cmake/macros/FindMySQL.cmake
+++ b/cmake/macros/FindMySQL.cmake
@@ -75,13 +75,16 @@ find_path(MYSQL_INCLUDE_DIR
"C:/Program Files/MySQL/include"
"C:/Program Files/MySQL/MySQL Server 5.0/include"
"C:/Program Files/MySQL/MySQL Server 5.1/include"
+ "C:/Program Files/MySQL/MySQL Server 5.6/include"
"C:/MySQL/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/include"
"$ENV{ProgramFiles}/MySQL/*/include"
"$ENV{SystemDrive}/MySQL/*/include"
"c:/msys/local/include"
@@ -115,13 +118,17 @@ if( WIN32 )
"C:/Program Files/MySQL/lib"
"C:/Program Files/MySQL/MySQL Server 5.0/lib/opt"
"C:/Program Files/MySQL/MySQL Server 5.1/lib/opt"
+ "C:/Program Files/MySQL/MySQL Server 5.6/lib/opt"
"C:/MySQL/lib/debug"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/lib/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/lib/opt"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/lib"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/lib/opt"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/lib"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/lib"
"$ENV{ProgramFiles}/MySQL/*/lib/opt"
"$ENV{SystemDrive}/MySQL/*/lib/opt"
"c:/msys/local/include"
diff --git a/dep/acelite/ace/CMakeLists.txt b/dep/acelite/ace/CMakeLists.txt
index 332972da061..6b5d3d84b40 100644
--- a/dep/acelite/ace/CMakeLists.txt
+++ b/dep/acelite/ace/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/dep/g3dlite/CMakeLists.txt b/dep/g3dlite/CMakeLists.txt
index 62b21fc81e0..a2446fbbffa 100644
--- a/dep/g3dlite/CMakeLists.txt
+++ b/dep/g3dlite/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/dep/g3dlite/source/Log.cpp b/dep/g3dlite/source/Log.cpp
index f437351cfbd..d44d88d0242 100644
--- a/dep/g3dlite/source/Log.cpp
+++ b/dep/g3dlite/source/Log.cpp
@@ -23,23 +23,23 @@
namespace G3D {
void logPrintf(const char* fmt, ...) {
- va_list arg_list;
- va_start(arg_list, fmt);
+ va_list arg_list;
+ va_start(arg_list, fmt);
Log::common()->vprintf(fmt, arg_list);
va_end(arg_list);
}
void logLazyPrintf(const char* fmt, ...) {
- va_list arg_list;
- va_start(arg_list, fmt);
+ va_list arg_list;
+ va_start(arg_list, fmt);
Log::common()->lazyvprintf(fmt, arg_list);
va_end(arg_list);
}
Log* Log::commonLog = NULL;
-Log::Log(const std::string& filename, int stripFromStackBottom) :
+Log::Log(const std::string& filename, int stripFromStackBottom) :
stripFromStackBottom(stripFromStackBottom) {
this->filename = filename;
@@ -50,7 +50,7 @@ Log::Log(const std::string& filename, int stripFromStackBottom) :
std::string drive, base, ext;
Array<std::string> path;
parseFilename(filename, drive, path, base, ext);
- std::string logName = base + ((ext != "") ? ("." + ext) : "");
+ std::string logName = base + ((ext != "") ? ("." + ext) : "");
// Write time is greater than 1ms. This may be a network drive.... try another file.
#ifdef G3D_WIN32
@@ -80,7 +80,7 @@ Log::Log(const std::string& filename, int stripFromStackBottom) :
Log::~Log() {
section("Shutdown");
println("Closing log file");
-
+
// Make sure we don't leave a dangling pointer
if (Log::commonLog == this) {
Log::commonLog = NULL;
diff --git a/dep/gsoap/CMakeLists.txt b/dep/gsoap/CMakeLists.txt
index 387d46e07da..1eb692270fb 100644
--- a/dep/gsoap/CMakeLists.txt
+++ b/dep/gsoap/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/dep/mysqllite/CMakeLists.txt b/dep/mysqllite/CMakeLists.txt
index be943f9c002..4bd48e0dfec 100644
--- a/dep/mysqllite/CMakeLists.txt
+++ b/dep/mysqllite/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2006 MySQL AB
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/dep/zlib/CMakeLists.txt b/dep/zlib/CMakeLists.txt
index 6f303b446b6..2e718667be6 100644
--- a/dep/zlib/CMakeLists.txt
+++ b/dep/zlib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/sql/updates/world/2011_08_27_00_world_version.sql b/sql/old/3.3.5a/2011_08_27_00_world_version.sql
index 47acc763681..47acc763681 100644
--- a/sql/updates/world/2011_08_27_00_world_version.sql
+++ b/sql/old/3.3.5a/2011_08_27_00_world_version.sql
diff --git a/sql/updates/world/2011_08_27_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_27_01_world_spell_script_names.sql
index 7ca3c9f4d64..7ca3c9f4d64 100644
--- a/sql/updates/world/2011_08_27_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_08_27_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_08_28_00_world_instance_misc.sql b/sql/old/3.3.5a/2011_08_28_00_world_instance_misc.sql
index 751321d1187..751321d1187 100644
--- a/sql/updates/world/2011_08_28_00_world_instance_misc.sql
+++ b/sql/old/3.3.5a/2011_08_28_00_world_instance_misc.sql
diff --git a/sql/updates/world/2011_08_29_00_world_instance_misc.sql b/sql/old/3.3.5a/2011_08_29_00_world_instance_misc.sql
index 51a5e651d74..51a5e651d74 100644
--- a/sql/updates/world/2011_08_29_00_world_instance_misc.sql
+++ b/sql/old/3.3.5a/2011_08_29_00_world_instance_misc.sql
diff --git a/sql/updates/world/2011_08_30_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_08_30_00_world_spell_script_names.sql
index ebfc8f0cc6e..ebfc8f0cc6e 100644
--- a/sql/updates/world/2011_08_30_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_08_30_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_01_00_world_disables.sql b/sql/old/3.3.5a/2011_09_01_00_world_disables.sql
index ee952215204..ee952215204 100644
--- a/sql/updates/world/2011_09_01_00_world_disables.sql
+++ b/sql/old/3.3.5a/2011_09_01_00_world_disables.sql
diff --git a/sql/updates/world/2011_09_02_00_world_misc.sql b/sql/old/3.3.5a/2011_09_02_00_world_misc.sql
index fa5c2a7ba7b..fa5c2a7ba7b 100644
--- a/sql/updates/world/2011_09_02_00_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_02_00_world_misc.sql
diff --git a/sql/updates/world/2011_09_02_02_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_02_02_world_spell_script_names.sql
index b95cd2c17d6..b95cd2c17d6 100644
--- a/sql/updates/world/2011_09_02_02_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_02_02_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_03_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_03_00_world_spell_script_names.sql
index 6cec12b63fd..6cec12b63fd 100644
--- a/sql/updates/world/2011_09_03_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_03_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_03_01_world_conditions.sql b/sql/old/3.3.5a/2011_09_03_01_world_conditions.sql
index c830d3ad18e..c830d3ad18e 100644
--- a/sql/updates/world/2011_09_03_01_world_conditions.sql
+++ b/sql/old/3.3.5a/2011_09_03_01_world_conditions.sql
diff --git a/sql/updates/world/2011_09_03_02_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_03_02_world_spell_script_names.sql
index b7b6907b7f1..b7b6907b7f1 100644
--- a/sql/updates/world/2011_09_03_02_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_03_02_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_03_03_world_creature_template.sql b/sql/old/3.3.5a/2011_09_03_03_world_creature_template.sql
index 73bd1687ef6..73bd1687ef6 100644
--- a/sql/updates/world/2011_09_03_03_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_03_03_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_03_04_world_misc.sql b/sql/old/3.3.5a/2011_09_03_04_world_misc.sql
index f35cebe2014..f35cebe2014 100644
--- a/sql/updates/world/2011_09_03_04_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_03_04_world_misc.sql
diff --git a/sql/updates/world/2011_09_03_05_world_gossip_menu_option.sql b/sql/old/3.3.5a/2011_09_03_05_world_gossip_menu_option.sql
index 53bc3104c50..53bc3104c50 100644
--- a/sql/updates/world/2011_09_03_05_world_gossip_menu_option.sql
+++ b/sql/old/3.3.5a/2011_09_03_05_world_gossip_menu_option.sql
diff --git a/sql/updates/world/2011_09_03_06_world_spell_threat.sql b/sql/old/3.3.5a/2011_09_03_06_world_spell_threat.sql
index a59a7739350..a59a7739350 100644
--- a/sql/updates/world/2011_09_03_06_world_spell_threat.sql
+++ b/sql/old/3.3.5a/2011_09_03_06_world_spell_threat.sql
diff --git a/sql/updates/world/2011_09_03_07_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_09_03_07_world_achievement_criteria_data.sql
index 7ae27745be6..7ae27745be6 100644
--- a/sql/updates/world/2011_09_03_07_world_achievement_criteria_data.sql
+++ b/sql/old/3.3.5a/2011_09_03_07_world_achievement_criteria_data.sql
diff --git a/sql/updates/world/2011_09_03_08_world_spell_dbc.sql b/sql/old/3.3.5a/2011_09_03_08_world_spell_dbc.sql
index 4d57e320822..4d57e320822 100644
--- a/sql/updates/world/2011_09_03_08_world_spell_dbc.sql
+++ b/sql/old/3.3.5a/2011_09_03_08_world_spell_dbc.sql
diff --git a/sql/updates/world/2011_09_03_09_world_spell_dbc.sql b/sql/old/3.3.5a/2011_09_03_09_world_spell_dbc.sql
index 31d4b19b1ca..31d4b19b1ca 100644
--- a/sql/updates/world/2011_09_03_09_world_spell_dbc.sql
+++ b/sql/old/3.3.5a/2011_09_03_09_world_spell_dbc.sql
diff --git a/sql/updates/world/2011_09_03_10_world_spell_dbc.sql b/sql/old/3.3.5a/2011_09_03_10_world_spell_dbc.sql
index 119bf863a8b..119bf863a8b 100644
--- a/sql/updates/world/2011_09_03_10_world_spell_dbc.sql
+++ b/sql/old/3.3.5a/2011_09_03_10_world_spell_dbc.sql
diff --git a/sql/updates/world/2011_09_04_00_world_quest_template.sql b/sql/old/3.3.5a/2011_09_04_00_world_quest_template.sql
index 4ff774b65b4..4ff774b65b4 100644
--- a/sql/updates/world/2011_09_04_00_world_quest_template.sql
+++ b/sql/old/3.3.5a/2011_09_04_00_world_quest_template.sql
diff --git a/sql/updates/world/2011_09_04_01_world_trinity_string.sql b/sql/old/3.3.5a/2011_09_04_01_world_trinity_string.sql
index 0f36a362db9..0f36a362db9 100644
--- a/sql/updates/world/2011_09_04_01_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2011_09_04_01_world_trinity_string.sql
diff --git a/sql/updates/world/2011_09_04_02_world_trinity_string.sql b/sql/old/3.3.5a/2011_09_04_02_world_trinity_string.sql
index 36722947feb..36722947feb 100644
--- a/sql/updates/world/2011_09_04_02_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2011_09_04_02_world_trinity_string.sql
diff --git a/sql/updates/characters/2011_09_05_00_characters_character_quest_status.sql b/sql/old/3.3.5a/2011_09_05_00_characters_character_quest_status.sql
index 08ee801c9d1..08ee801c9d1 100644
--- a/sql/updates/characters/2011_09_05_00_characters_character_quest_status.sql
+++ b/sql/old/3.3.5a/2011_09_05_00_characters_character_quest_status.sql
diff --git a/sql/updates/world/2011_09_05_00_world_spell_target_position.sql b/sql/old/3.3.5a/2011_09_05_00_world_spell_target_position.sql
index ae0a69c6e99..ae0a69c6e99 100644
--- a/sql/updates/world/2011_09_05_00_world_spell_target_position.sql
+++ b/sql/old/3.3.5a/2011_09_05_00_world_spell_target_position.sql
diff --git a/sql/updates/world/2011_09_05_01_world_gossip.sql b/sql/old/3.3.5a/2011_09_05_01_world_gossip.sql
index 0d7a193eb95..0d7a193eb95 100644
--- a/sql/updates/world/2011_09_05_01_world_gossip.sql
+++ b/sql/old/3.3.5a/2011_09_05_01_world_gossip.sql
diff --git a/sql/updates/world/2011_09_06_00_world_sai.sql b/sql/old/3.3.5a/2011_09_06_00_world_sai.sql
index fdc77bea6bb..fdc77bea6bb 100644
--- a/sql/updates/world/2011_09_06_00_world_sai.sql
+++ b/sql/old/3.3.5a/2011_09_06_00_world_sai.sql
diff --git a/sql/updates/world/2011_09_06_01_world_misc.sql b/sql/old/3.3.5a/2011_09_06_01_world_misc.sql
index 45ba8556ddc..45ba8556ddc 100644
--- a/sql/updates/world/2011_09_06_01_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_06_01_world_misc.sql
diff --git a/sql/updates/world/2011_09_07_00_world_spell_linked_spell.sql b/sql/old/3.3.5a/2011_09_07_00_world_spell_linked_spell.sql
index 584ef63c4ad..584ef63c4ad 100644
--- a/sql/updates/world/2011_09_07_00_world_spell_linked_spell.sql
+++ b/sql/old/3.3.5a/2011_09_07_00_world_spell_linked_spell.sql
diff --git a/sql/updates/world/2011_09_07_01_world_sai.sql b/sql/old/3.3.5a/2011_09_07_01_world_sai.sql
index aba3bdfe578..aba3bdfe578 100644
--- a/sql/updates/world/2011_09_07_01_world_sai.sql
+++ b/sql/old/3.3.5a/2011_09_07_01_world_sai.sql
diff --git a/sql/updates/world/2011_09_08_00_world_conditions.sql b/sql/old/3.3.5a/2011_09_08_00_world_conditions.sql
index 07eebd56c7e..07eebd56c7e 100644
--- a/sql/updates/world/2011_09_08_00_world_conditions.sql
+++ b/sql/old/3.3.5a/2011_09_08_00_world_conditions.sql
diff --git a/sql/updates/world/2011_09_08_01_world_spell_target_position.sql b/sql/old/3.3.5a/2011_09_08_01_world_spell_target_position.sql
index 5b9fb09d14c..5b9fb09d14c 100644
--- a/sql/updates/world/2011_09_08_01_world_spell_target_position.sql
+++ b/sql/old/3.3.5a/2011_09_08_01_world_spell_target_position.sql
diff --git a/sql/updates/world/2011_09_08_02_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_08_02_world_spell_script_names.sql
index b97a1ef299a..b97a1ef299a 100644
--- a/sql/updates/world/2011_09_08_02_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_08_02_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_08_03_world_item_template.sql b/sql/old/3.3.5a/2011_09_08_03_world_item_template.sql
index c5809d798fa..c5809d798fa 100644
--- a/sql/updates/world/2011_09_08_03_world_item_template.sql
+++ b/sql/old/3.3.5a/2011_09_08_03_world_item_template.sql
diff --git a/sql/updates/world/2011_09_10_00_world_spell_linked_spell.sql b/sql/old/3.3.5a/2011_09_10_00_world_spell_linked_spell.sql
index 93365589b44..93365589b44 100644
--- a/sql/updates/world/2011_09_10_00_world_spell_linked_spell.sql
+++ b/sql/old/3.3.5a/2011_09_10_00_world_spell_linked_spell.sql
diff --git a/sql/updates/world/2011_09_11_00_world_creature_template.sql b/sql/old/3.3.5a/2011_09_11_00_world_creature_template.sql
index a4bf485350b..a4bf485350b 100644
--- a/sql/updates/world/2011_09_11_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_11_00_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_11_01_world_sai.sql b/sql/old/3.3.5a/2011_09_11_01_world_sai.sql
index 453acf60dd9..453acf60dd9 100644
--- a/sql/updates/world/2011_09_11_01_world_sai.sql
+++ b/sql/old/3.3.5a/2011_09_11_01_world_sai.sql
diff --git a/sql/updates/world/2011_09_11_02_world_creature_template.sql b/sql/old/3.3.5a/2011_09_11_02_world_creature_template.sql
index 1784e983832..1784e983832 100644
--- a/sql/updates/world/2011_09_11_02_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_11_02_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_11_03_world_gameobject.sql b/sql/old/3.3.5a/2011_09_11_03_world_gameobject.sql
index b72898ba8a9..b72898ba8a9 100644
--- a/sql/updates/world/2011_09_11_03_world_gameobject.sql
+++ b/sql/old/3.3.5a/2011_09_11_03_world_gameobject.sql
diff --git a/sql/updates/world/2011_09_11_04_world_spell_linked_spell.sql b/sql/old/3.3.5a/2011_09_11_04_world_spell_linked_spell.sql
index 120378bd3e2..120378bd3e2 100644
--- a/sql/updates/world/2011_09_11_04_world_spell_linked_spell.sql
+++ b/sql/old/3.3.5a/2011_09_11_04_world_spell_linked_spell.sql
diff --git a/sql/updates/world/2011_09_11_05_world_misc.sql b/sql/old/3.3.5a/2011_09_11_05_world_misc.sql
index 7357d9acda6..7357d9acda6 100644
--- a/sql/updates/world/2011_09_11_05_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_11_05_world_misc.sql
diff --git a/sql/updates/world/2011_09_11_06_world_spell_conditions.sql b/sql/old/3.3.5a/2011_09_11_06_world_spell_conditions.sql
index a4608599452..a4608599452 100644
--- a/sql/updates/world/2011_09_11_06_world_spell_conditions.sql
+++ b/sql/old/3.3.5a/2011_09_11_06_world_spell_conditions.sql
diff --git a/sql/updates/world/2011_09_11_07_world_sai.sql b/sql/old/3.3.5a/2011_09_11_07_world_sai.sql
index 02a593eb9b4..02a593eb9b4 100644
--- a/sql/updates/world/2011_09_11_07_world_sai.sql
+++ b/sql/old/3.3.5a/2011_09_11_07_world_sai.sql
diff --git a/sql/updates/world/2011_09_11_08_world_creature.sql b/sql/old/3.3.5a/2011_09_11_08_world_creature.sql
index de608e7cdff..de608e7cdff 100644
--- a/sql/updates/world/2011_09_11_08_world_creature.sql
+++ b/sql/old/3.3.5a/2011_09_11_08_world_creature.sql
diff --git a/sql/updates/world/2011_09_11_09_world_script_texts.sql b/sql/old/3.3.5a/2011_09_11_09_world_script_texts.sql
index 49bbca06877..49bbca06877 100644
--- a/sql/updates/world/2011_09_11_09_world_script_texts.sql
+++ b/sql/old/3.3.5a/2011_09_11_09_world_script_texts.sql
diff --git a/sql/updates/world/2011_09_12_00_world_misc.sql b/sql/old/3.3.5a/2011_09_12_00_world_misc.sql
index 18ead48b821..18ead48b821 100644
--- a/sql/updates/world/2011_09_12_00_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_12_00_world_misc.sql
diff --git a/sql/updates/world/2011_09_12_01_world_misc.sql b/sql/old/3.3.5a/2011_09_12_01_world_misc.sql
index f2fa54b1b17..f2fa54b1b17 100644
--- a/sql/updates/world/2011_09_12_01_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_12_01_world_misc.sql
diff --git a/sql/updates/world/2011_09_12_02_world_instance_template.sql b/sql/old/3.3.5a/2011_09_12_02_world_instance_template.sql
index 2fe38236e28..2fe38236e28 100644
--- a/sql/updates/world/2011_09_12_02_world_instance_template.sql
+++ b/sql/old/3.3.5a/2011_09_12_02_world_instance_template.sql
diff --git a/sql/updates/world/2011_09_12_03_world_conditions.sql b/sql/old/3.3.5a/2011_09_12_03_world_conditions.sql
index 757bdbf255e..757bdbf255e 100644
--- a/sql/updates/world/2011_09_12_03_world_conditions.sql
+++ b/sql/old/3.3.5a/2011_09_12_03_world_conditions.sql
diff --git a/sql/updates/world/2011_09_12_04_world_creature_template.sql b/sql/old/3.3.5a/2011_09_12_04_world_creature_template.sql
index 6b5a124540d..6b5a124540d 100644
--- a/sql/updates/world/2011_09_12_04_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_12_04_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_12_05_world_misc.sql b/sql/old/3.3.5a/2011_09_12_05_world_misc.sql
index ffb183b31e4..ffb183b31e4 100644
--- a/sql/updates/world/2011_09_12_05_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_12_05_world_misc.sql
diff --git a/sql/updates/world/2011_09_12_06_world_event_scripts.sql b/sql/old/3.3.5a/2011_09_12_06_world_event_scripts.sql
index eb6b26bc8a0..eb6b26bc8a0 100644
--- a/sql/updates/world/2011_09_12_06_world_event_scripts.sql
+++ b/sql/old/3.3.5a/2011_09_12_06_world_event_scripts.sql
diff --git a/sql/updates/world/2011_09_12_07_world_creature.sql b/sql/old/3.3.5a/2011_09_12_07_world_creature.sql
index d2496cb1eab..d2496cb1eab 100644
--- a/sql/updates/world/2011_09_12_07_world_creature.sql
+++ b/sql/old/3.3.5a/2011_09_12_07_world_creature.sql
diff --git a/sql/updates/world/2011_09_13_00_world_spells.sql b/sql/old/3.3.5a/2011_09_13_00_world_spells.sql
index 63e7b295831..63e7b295831 100644
--- a/sql/updates/world/2011_09_13_00_world_spells.sql
+++ b/sql/old/3.3.5a/2011_09_13_00_world_spells.sql
diff --git a/sql/updates/world/2011_09_14_00_world_spawns.sql b/sql/old/3.3.5a/2011_09_14_00_world_spawns.sql
index 4933af1b735..4933af1b735 100644
--- a/sql/updates/world/2011_09_14_00_world_spawns.sql
+++ b/sql/old/3.3.5a/2011_09_14_00_world_spawns.sql
diff --git a/sql/updates/world/2011_09_14_01_world_quest.sql b/sql/old/3.3.5a/2011_09_14_01_world_quest.sql
index 1b6c53f7d9d..1b6c53f7d9d 100644
--- a/sql/updates/world/2011_09_14_01_world_quest.sql
+++ b/sql/old/3.3.5a/2011_09_14_01_world_quest.sql
diff --git a/sql/updates/world/2011_09_14_02_world_gossip_menu_option.sql b/sql/old/3.3.5a/2011_09_14_02_world_gossip_menu_option.sql
index cb150388ffb..cb150388ffb 100644
--- a/sql/updates/world/2011_09_14_02_world_gossip_menu_option.sql
+++ b/sql/old/3.3.5a/2011_09_14_02_world_gossip_menu_option.sql
diff --git a/sql/updates/world/2011_09_14_03_world_script_texts.sql b/sql/old/3.3.5a/2011_09_14_03_world_script_texts.sql
index 8640b403a9a..8640b403a9a 100644
--- a/sql/updates/world/2011_09_14_03_world_script_texts.sql
+++ b/sql/old/3.3.5a/2011_09_14_03_world_script_texts.sql
diff --git a/sql/updates/world/2011_09_14_04_world_creature.sql b/sql/old/3.3.5a/2011_09_14_04_world_creature.sql
index 10ef4b7dbb3..10ef4b7dbb3 100644
--- a/sql/updates/world/2011_09_14_04_world_creature.sql
+++ b/sql/old/3.3.5a/2011_09_14_04_world_creature.sql
diff --git a/sql/updates/world/2011_09_14_05_world_creature_text.sql b/sql/old/3.3.5a/2011_09_14_05_world_creature_text.sql
index 9d91056d8db..9d91056d8db 100644
--- a/sql/updates/world/2011_09_14_05_world_creature_text.sql
+++ b/sql/old/3.3.5a/2011_09_14_05_world_creature_text.sql
diff --git a/sql/updates/world/2011_09_14_06_world_creature_template.sql b/sql/old/3.3.5a/2011_09_14_06_world_creature_template.sql
index 4c7474895ad..4c7474895ad 100644
--- a/sql/updates/world/2011_09_14_06_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_14_06_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_15_00_world_creature.sql b/sql/old/3.3.5a/2011_09_15_00_world_creature.sql
index 12269e4744d..12269e4744d 100644
--- a/sql/updates/world/2011_09_15_00_world_creature.sql
+++ b/sql/old/3.3.5a/2011_09_15_00_world_creature.sql
diff --git a/sql/updates/world/2011_09_15_01_world_creature_template.sql b/sql/old/3.3.5a/2011_09_15_01_world_creature_template.sql
index 97303fcbe50..97303fcbe50 100644
--- a/sql/updates/world/2011_09_15_01_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_15_01_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_15_02_world_misc.sql b/sql/old/3.3.5a/2011_09_15_02_world_misc.sql
index 5d482feba80..5d482feba80 100644
--- a/sql/updates/world/2011_09_15_02_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_15_02_world_misc.sql
diff --git a/sql/updates/world/2011_09_15_03_world_creature_template.sql b/sql/old/3.3.5a/2011_09_15_03_world_creature_template.sql
index 82f6138f17a..82f6138f17a 100644
--- a/sql/updates/world/2011_09_15_03_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_09_15_03_world_creature_template.sql
diff --git a/sql/updates/world/2011_09_15_04_world_misc.sql b/sql/old/3.3.5a/2011_09_15_04_world_misc.sql
index 125bd7626f0..125bd7626f0 100644
--- a/sql/updates/world/2011_09_15_04_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_15_04_world_misc.sql
diff --git a/sql/updates/world/2011_09_15_05_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_15_05_world_spell_script_names.sql
index 418c05a4438..418c05a4438 100644
--- a/sql/updates/world/2011_09_15_05_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_15_05_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_16_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_16_00_world_spell_script_names.sql
index 98f268ec74f..98f268ec74f 100644
--- a/sql/updates/world/2011_09_16_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_16_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_19_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_19_00_world_spell_script_names.sql
index 5360210cef1..5360210cef1 100644
--- a/sql/updates/world/2011_09_19_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_19_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_21_00_world_misc.sql b/sql/old/3.3.5a/2011_09_21_00_world_misc.sql
index 730e27fb2b2..730e27fb2b2 100644
--- a/sql/updates/world/2011_09_21_00_world_misc.sql
+++ b/sql/old/3.3.5a/2011_09_21_00_world_misc.sql
diff --git a/sql/updates/world/2011_09_21_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_21_01_world_spell_script_names.sql
index d3c16bec947..d3c16bec947 100644
--- a/sql/updates/world/2011_09_21_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_21_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_21_02_world_command.sql b/sql/old/3.3.5a/2011_09_21_02_world_command.sql
index 629f0c9ab32..8b21f3434cc 100644
--- a/sql/updates/world/2011_09_21_02_world_command.sql
+++ b/sql/old/3.3.5a/2011_09_21_02_world_command.sql
@@ -1,3 +1,3 @@
-DELETE FROM command WHERE name = 'dev';
-INSERT INTO command VALUES
-('dev', 3, 'Syntax: .dev [on/off]\r\n\r\nEnable or Disable in game Dev tag or show current state if on/off not provided.');
+DELETE FROM command WHERE name = 'dev';
+INSERT INTO command VALUES
+('dev', 3, 'Syntax: .dev [on/off]\r\n\r\nEnable or Disable in game Dev tag or show current state if on/off not provided.');
diff --git a/sql/updates/world/2011_09_21_02_world_trinity_string.sql b/sql/old/3.3.5a/2011_09_21_02_world_trinity_string.sql
index 954c4a7eded..01795ebb916 100644
--- a/sql/updates/world/2011_09_21_02_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2011_09_21_02_world_trinity_string.sql
@@ -1,4 +1,4 @@
-DELETE FROM trinity_string WHERE entry IN (1137, 1138);
-INSERT INTO trinity_string (`entry`,`content_default`) VALUES
-(1137, 'Dev mode is ON'),
-(1138, 'Dev mode is OFF');
+DELETE FROM trinity_string WHERE entry IN (1137, 1138);
+INSERT INTO trinity_string (`entry`,`content_default`) VALUES
+(1137, 'Dev mode is ON'),
+(1138, 'Dev mode is OFF');
diff --git a/sql/updates/world/2011_09_22_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_22_00_world_spell_script_names.sql
index af75822087e..af75822087e 100644
--- a/sql/updates/world/2011_09_22_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_22_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_24_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_24_00_world_spell_script_names.sql
index d0f5b286739..d0f5b286739 100644
--- a/sql/updates/world/2011_09_24_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_24_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_24_01_world_sai.sql b/sql/old/3.3.5a/2011_09_24_01_world_sai.sql
index 7f4c79d5c74..7f4c79d5c74 100644
--- a/sql/updates/world/2011_09_24_01_world_sai.sql
+++ b/sql/old/3.3.5a/2011_09_24_01_world_sai.sql
diff --git a/sql/updates/world/2011_09_25_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_25_00_world_spell_script_names.sql
index a7c65ac75dd..a7c65ac75dd 100644
--- a/sql/updates/world/2011_09_25_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_25_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_09_26_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_09_26_00_world_spell_script_names.sql
index 4896990bb5b..4896990bb5b 100644
--- a/sql/updates/world/2011_09_26_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_09_26_00_world_spell_script_names.sql
diff --git a/sql/updates/characters/2011_09_28_00_characters_characters.sql b/sql/old/3.3.5a/2011_09_28_00_characters_characters.sql
index 800afc60622..800afc60622 100644
--- a/sql/updates/characters/2011_09_28_00_characters_characters.sql
+++ b/sql/old/3.3.5a/2011_09_28_00_characters_characters.sql
diff --git a/sql/updates/world/2011_09_28_00_world_achievement_reward.sql b/sql/old/3.3.5a/2011_09_28_00_world_achievement_reward.sql
index da170d86672..da170d86672 100644
--- a/sql/updates/world/2011_09_28_00_world_achievement_reward.sql
+++ b/sql/old/3.3.5a/2011_09_28_00_world_achievement_reward.sql
diff --git a/sql/updates/world/2011_09_28_01_world_spell_dbc.sql b/sql/old/3.3.5a/2011_09_28_01_world_spell_dbc.sql
index 3c0f9f38324..3c0f9f38324 100644
--- a/sql/updates/world/2011_09_28_01_world_spell_dbc.sql
+++ b/sql/old/3.3.5a/2011_09_28_01_world_spell_dbc.sql
diff --git a/sql/updates/world/2011_09_28_02_world_game_event.sql b/sql/old/3.3.5a/2011_09_28_02_world_game_event.sql
index 3e211e26119..3e211e26119 100644
--- a/sql/updates/world/2011_09_28_02_world_game_event.sql
+++ b/sql/old/3.3.5a/2011_09_28_02_world_game_event.sql
diff --git a/sql/updates/world/2011_10_01_00_world_creature_template.sql b/sql/old/3.3.5a/2011_10_01_00_world_creature_template.sql
index 14fe26ba476..14fe26ba476 100644
--- a/sql/updates/world/2011_10_01_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_10_01_00_world_creature_template.sql
diff --git a/sql/updates/world/2011_10_01_01_world_gameobject_template.sql b/sql/old/3.3.5a/2011_10_01_01_world_gameobject_template.sql
index 2df109e25e8..2df109e25e8 100644
--- a/sql/updates/world/2011_10_01_01_world_gameobject_template.sql
+++ b/sql/old/3.3.5a/2011_10_01_01_world_gameobject_template.sql
diff --git a/sql/updates/world/2011_10_01_02_world_game_event_creature.sql b/sql/old/3.3.5a/2011_10_01_02_world_game_event_creature.sql
index 9c332ccc3b2..9c332ccc3b2 100644
--- a/sql/updates/world/2011_10_01_02_world_game_event_creature.sql
+++ b/sql/old/3.3.5a/2011_10_01_02_world_game_event_creature.sql
diff --git a/sql/updates/world/2011_10_01_03_world_conditions.sql b/sql/old/3.3.5a/2011_10_01_03_world_conditions.sql
index 832a1d9bdf9..832a1d9bdf9 100644
--- a/sql/updates/world/2011_10_01_03_world_conditions.sql
+++ b/sql/old/3.3.5a/2011_10_01_03_world_conditions.sql
diff --git a/sql/updates/world/2011_10_01_04_world_sai.sql b/sql/old/3.3.5a/2011_10_01_04_world_sai.sql
index f16e846d2c5..f16e846d2c5 100644
--- a/sql/updates/world/2011_10_01_04_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_01_04_world_sai.sql
diff --git a/sql/updates/world/2011_10_01_05_world_sai.sql b/sql/old/3.3.5a/2011_10_01_05_world_sai.sql
index a6380f6c991..a6380f6c991 100644
--- a/sql/updates/world/2011_10_01_05_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_01_05_world_sai.sql
diff --git a/sql/updates/world/2011_10_01_06_world_misc.sql b/sql/old/3.3.5a/2011_10_01_06_world_misc.sql
index 8bc5e09605e..8bc5e09605e 100644
--- a/sql/updates/world/2011_10_01_06_world_misc.sql
+++ b/sql/old/3.3.5a/2011_10_01_06_world_misc.sql
diff --git a/sql/updates/world/2011_10_01_07_world_sai.sql b/sql/old/3.3.5a/2011_10_01_07_world_sai.sql
index 59ab0e98d1b..59ab0e98d1b 100644
--- a/sql/updates/world/2011_10_01_07_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_01_07_world_sai.sql
diff --git a/sql/updates/world/2011_10_01_08_world_sai.sql b/sql/old/3.3.5a/2011_10_01_08_world_sai.sql
index 0f524b7b0c0..0f524b7b0c0 100644
--- a/sql/updates/world/2011_10_01_08_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_01_08_world_sai.sql
diff --git a/sql/updates/world/2011_10_01_09_world_creatures.sql b/sql/old/3.3.5a/2011_10_01_09_world_creatures.sql
index 6c6c5eb577b..6c6c5eb577b 100644
--- a/sql/updates/world/2011_10_01_09_world_creatures.sql
+++ b/sql/old/3.3.5a/2011_10_01_09_world_creatures.sql
diff --git a/sql/updates/world/2011_10_01_10_world_questrelation.sql b/sql/old/3.3.5a/2011_10_01_10_world_questrelation.sql
index 089471f193e..089471f193e 100644
--- a/sql/updates/world/2011_10_01_10_world_questrelation.sql
+++ b/sql/old/3.3.5a/2011_10_01_10_world_questrelation.sql
diff --git a/sql/updates/world/2011_10_01_11_world_loot.sql b/sql/old/3.3.5a/2011_10_01_11_world_loot.sql
index 533d6714cf8..533d6714cf8 100644
--- a/sql/updates/world/2011_10_01_11_world_loot.sql
+++ b/sql/old/3.3.5a/2011_10_01_11_world_loot.sql
diff --git a/sql/updates/world/2011_10_01_12_world_creatures.sql b/sql/old/3.3.5a/2011_10_01_12_world_creatures.sql
index c6e63c19595..c6e63c19595 100644
--- a/sql/updates/world/2011_10_01_12_world_creatures.sql
+++ b/sql/old/3.3.5a/2011_10_01_12_world_creatures.sql
diff --git a/sql/updates/world/2011_10_01_13_world_dbc.sql b/sql/old/3.3.5a/2011_10_01_13_world_dbc.sql
index 96c34eced1c..96c34eced1c 100644
--- a/sql/updates/world/2011_10_01_13_world_dbc.sql
+++ b/sql/old/3.3.5a/2011_10_01_13_world_dbc.sql
diff --git a/sql/updates/world/2011_10_02_00_world_creature_template.sql b/sql/old/3.3.5a/2011_10_02_00_world_creature_template.sql
index f9f20f3b593..f9f20f3b593 100644
--- a/sql/updates/world/2011_10_02_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_10_02_00_world_creature_template.sql
diff --git a/sql/updates/world/2011_10_02_01_world_factionchange.sql b/sql/old/3.3.5a/2011_10_02_01_world_factionchange.sql
index b25622e1441..b25622e1441 100644
--- a/sql/updates/world/2011_10_02_01_world_factionchange.sql
+++ b/sql/old/3.3.5a/2011_10_02_01_world_factionchange.sql
diff --git a/sql/updates/world/2011_10_02_03_world_sai.sql b/sql/old/3.3.5a/2011_10_02_03_world_sai.sql
index 9ccda8d5403..9ccda8d5403 100644
--- a/sql/updates/world/2011_10_02_03_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_03_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_04_world_sai.sql b/sql/old/3.3.5a/2011_10_02_04_world_sai.sql
index fbec8e12b55..fbec8e12b55 100644
--- a/sql/updates/world/2011_10_02_04_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_04_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_05_world_sai.sql b/sql/old/3.3.5a/2011_10_02_05_world_sai.sql
index 042b59626d0..042b59626d0 100644
--- a/sql/updates/world/2011_10_02_05_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_05_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_06_world_misc.sql b/sql/old/3.3.5a/2011_10_02_06_world_misc.sql
index 03a2bf96b7d..03a2bf96b7d 100644
--- a/sql/updates/world/2011_10_02_06_world_misc.sql
+++ b/sql/old/3.3.5a/2011_10_02_06_world_misc.sql
diff --git a/sql/updates/world/2011_10_02_07_world_sai.sql b/sql/old/3.3.5a/2011_10_02_07_world_sai.sql
index bbbfb3f233a..bbbfb3f233a 100644
--- a/sql/updates/world/2011_10_02_07_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_07_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_08_world_sai.sql b/sql/old/3.3.5a/2011_10_02_08_world_sai.sql
index fc49cd24425..fc49cd24425 100644
--- a/sql/updates/world/2011_10_02_08_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_08_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_09_world_creatures.sql b/sql/old/3.3.5a/2011_10_02_09_world_creatures.sql
index 5287fc45ab3..5287fc45ab3 100644
--- a/sql/updates/world/2011_10_02_09_world_creatures.sql
+++ b/sql/old/3.3.5a/2011_10_02_09_world_creatures.sql
diff --git a/sql/updates/world/2011_10_02_10_world_sai.sql b/sql/old/3.3.5a/2011_10_02_10_world_sai.sql
index 3880699aa69..3880699aa69 100644
--- a/sql/updates/world/2011_10_02_10_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_10_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_11_world_sai.sql b/sql/old/3.3.5a/2011_10_02_11_world_sai.sql
index 6ed9fcf83c6..6ed9fcf83c6 100644
--- a/sql/updates/world/2011_10_02_11_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_11_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_12_world_sai.sql b/sql/old/3.3.5a/2011_10_02_12_world_sai.sql
index 93779a01172..93779a01172 100644
--- a/sql/updates/world/2011_10_02_12_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_12_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_13_world_sai.sql b/sql/old/3.3.5a/2011_10_02_13_world_sai.sql
index c8736f5284a..c8736f5284a 100644
--- a/sql/updates/world/2011_10_02_13_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_13_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_14_world_sai.sql b/sql/old/3.3.5a/2011_10_02_14_world_sai.sql
index d4c48dde3cc..d4c48dde3cc 100644
--- a/sql/updates/world/2011_10_02_14_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_14_world_sai.sql
diff --git a/sql/updates/world/2011_10_02_15_world_sai.sql b/sql/old/3.3.5a/2011_10_02_15_world_sai.sql
index 980874c8eea..980874c8eea 100644
--- a/sql/updates/world/2011_10_02_15_world_sai.sql
+++ b/sql/old/3.3.5a/2011_10_02_15_world_sai.sql
diff --git a/sql/updates/world/2011_10_04_00_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_10_04_00_world_creature_loot_template.sql
index 0a6cfc1073f..0a6cfc1073f 100644
--- a/sql/updates/world/2011_10_04_00_world_creature_loot_template.sql
+++ b/sql/old/3.3.5a/2011_10_04_00_world_creature_loot_template.sql
diff --git a/sql/updates/world/2011_10_05_00_world_spell_linked_spell.sql b/sql/old/3.3.5a/2011_10_05_00_world_spell_linked_spell.sql
index 762a07620f9..762a07620f9 100644
--- a/sql/updates/world/2011_10_05_00_world_spell_linked_spell.sql
+++ b/sql/old/3.3.5a/2011_10_05_00_world_spell_linked_spell.sql
diff --git a/sql/updates/world/2011_10_05_01_world_instance_misc.sql b/sql/old/3.3.5a/2011_10_05_01_world_instance_misc.sql
index 656cdd575d2..656cdd575d2 100644
--- a/sql/updates/world/2011_10_05_01_world_instance_misc.sql
+++ b/sql/old/3.3.5a/2011_10_05_01_world_instance_misc.sql
diff --git a/sql/updates/world/2011_10_05_01_world_scriptname.sql b/sql/old/3.3.5a/2011_10_05_01_world_scriptname.sql
index 742d74f4029..742d74f4029 100644
--- a/sql/updates/world/2011_10_05_01_world_scriptname.sql
+++ b/sql/old/3.3.5a/2011_10_05_01_world_scriptname.sql
diff --git a/sql/updates/world/2011_10_05_01_world_spell_script_names.sql b/sql/old/3.3.5a/2011_10_05_01_world_spell_script_names.sql
index 03d4b649e78..03d4b649e78 100644
--- a/sql/updates/world/2011_10_05_01_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_10_05_01_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_10_06_00_world_creature_template.sql b/sql/old/3.3.5a/2011_10_06_00_world_creature_template.sql
index a17b7bc3c7c..a17b7bc3c7c 100644
--- a/sql/updates/world/2011_10_06_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_10_06_00_world_creature_template.sql
diff --git a/sql/updates/world/2011_10_06_01_world_misc.sql b/sql/old/3.3.5a/2011_10_06_01_world_misc.sql
index 3fccce79f7b..3fccce79f7b 100644
--- a/sql/updates/world/2011_10_06_01_world_misc.sql
+++ b/sql/old/3.3.5a/2011_10_06_01_world_misc.sql
diff --git a/sql/updates/world/2011_10_07_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_10_07_00_world_spell_script_names.sql
index 94d4f1fd8fc..94d4f1fd8fc 100644
--- a/sql/updates/world/2011_10_07_00_world_spell_script_names.sql
+++ b/sql/old/3.3.5a/2011_10_07_00_world_spell_script_names.sql
diff --git a/sql/updates/world/2011_10_07_01_world_command.sql b/sql/old/3.3.5a/2011_10_07_01_world_command.sql
index c3767c7dc00..c3767c7dc00 100644
--- a/sql/updates/world/2011_10_07_01_world_command.sql
+++ b/sql/old/3.3.5a/2011_10_07_01_world_command.sql
diff --git a/sql/updates/world/2011_10_07_02_world_trinity_string.sql b/sql/old/3.3.5a/2011_10_07_02_world_trinity_string.sql
index 2dff16050e4..2dff16050e4 100644
--- a/sql/updates/world/2011_10_07_02_world_trinity_string.sql
+++ b/sql/old/3.3.5a/2011_10_07_02_world_trinity_string.sql
diff --git a/sql/updates/world/2011_10_08_00_world_page_text.sql b/sql/old/3.3.5a/2011_10_08_00_world_page_text.sql
index aa9aeee6ba4..aa9aeee6ba4 100644
--- a/sql/updates/world/2011_10_08_00_world_page_text.sql
+++ b/sql/old/3.3.5a/2011_10_08_00_world_page_text.sql
diff --git a/sql/old/3.3.5a/2011_10_09_00_characters_character_aura.sql b/sql/old/3.3.5a/2011_10_09_00_characters_character_aura.sql
new file mode 100644
index 00000000000..a8223fa06d6
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_09_00_characters_character_aura.sql
@@ -0,0 +1 @@
+DELETE FROM `character_aura` WHERE `spell` = 73001;
diff --git a/sql/updates/world/2011_10_11_00_world_creature_template.sql b/sql/old/3.3.5a/2011_10_11_00_world_creature_template.sql
index a86e5e53ea5..a86e5e53ea5 100644
--- a/sql/updates/world/2011_10_11_00_world_creature_template.sql
+++ b/sql/old/3.3.5a/2011_10_11_00_world_creature_template.sql
diff --git a/sql/old/3.3.5a/2011_10_12_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_10_12_00_world_spell_script_names.sql
new file mode 100644
index 00000000000..cf2ea31306d
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_12_00_world_spell_script_names.sql
@@ -0,0 +1,6 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_putricide_slime_puddle';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(70346,'spell_putricide_slime_puddle'),
+(72456,'spell_putricide_slime_puddle'),
+(72868,'spell_putricide_slime_puddle'),
+(72869,'spell_putricide_slime_puddle');
diff --git a/sql/old/3.3.5a/2011_10_15_00_world_waypoint_data.sql b/sql/old/3.3.5a/2011_10_15_00_world_waypoint_data.sql
new file mode 100644
index 00000000000..de8445b630c
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_15_00_world_waypoint_data.sql
@@ -0,0 +1 @@
+ALTER TABLE `waypoint_data` ADD `orientation` float NOT NULL DEFAULT '0' AFTER `position_z`;
diff --git a/sql/old/3.3.5a/2011_10_18_00_world_spell_group.sql b/sql/old/3.3.5a/2011_10_18_00_world_spell_group.sql
new file mode 100644
index 00000000000..fc11e3f365b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_18_00_world_spell_group.sql
@@ -0,0 +1,9 @@
+DELETE FROM `spell_group` WHERE `id` = 1114;
+INSERT INTO `spell_group` (`id`, `spell_id`) VALUES
+(1114,1490),
+(1114,60431),
+(1114,60432),
+(1114,60433),
+(1114,51726),
+(1114,51734),
+(1114,51735);
diff --git a/sql/old/3.3.5a/2011_10_18_01_world_spell_group_stack_rules.sql b/sql/old/3.3.5a/2011_10_18_01_world_spell_group_stack_rules.sql
new file mode 100644
index 00000000000..20044aa6241
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_18_01_world_spell_group_stack_rules.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_group_stack_rules` WHERE `group_id` = 1114;
+INSERT INTO `spell_group_stack_rules` (`group_id`, `stack_rule`) VALUES
+(1114,3);
diff --git a/sql/old/3.3.5a/2011_10_19_00_world_spell_script_names.sql b/sql/old/3.3.5a/2011_10_19_00_world_spell_script_names.sql
new file mode 100644
index 00000000000..900d26c4e84
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_19_00_world_spell_script_names.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_shadowfiend';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(34433,'spell_pri_shadowfiend');
diff --git a/sql/old/3.3.5a/2011_10_21_00_world_creature_template_addon.sql b/sql/old/3.3.5a/2011_10_21_00_world_creature_template_addon.sql
new file mode 100644
index 00000000000..fed232a29d2
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_21_00_world_creature_template_addon.sql
@@ -0,0 +1,3 @@
+-- Move Shadowfiend's Mana Leech Aura from spellscript to creature addon.
+DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_pri_shadowfiend';
+UPDATE `creature_template_addon` SET `auras`= '28305' WHERE `entry`=19668;
diff --git a/sql/old/3.3.5a/2011_10_22_00_world_sai.sql b/sql/old/3.3.5a/2011_10_22_00_world_sai.sql
new file mode 100644
index 00000000000..534e57297ef
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_00_world_sai.sql
@@ -0,0 +1,44 @@
+-- [Q] A Taste of Flame
+
+-- Cyrus Therepentous SAI
+SET @ENTRY := 9459;
+SET @GOSSIP := 40060;
+UPDATE `creature_template` SET `AIName`='SmartAI',`gossip_menu_id`=@GOSSIP WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,62,0,100,0,@GOSSIP,0,0,0,12,9461,1,360000,0,0,0,8,0,0,0,-7656.939941,-3009.474121,133.205612,4.830283,"Cyrus Therepentous - On Gossip Select - Summon Frenzied Black Drake"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Cyrus Therepentous - On Gossip Select (Link) - Close Gossip");
+
+-- Actual gossip option and text for Cyrus Therepentous
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP AND `text_id`=2494;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP,2494);
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`) VALUES
+(@GOSSIP,0,0,"I present you with proof...",1,1,0,0,0,0,NULL);
+
+-- Frenzied Black Drake SAI
+SET @ENTRY := 9461;
+SET @SPELL_FRENZY := 8269;
+SET @SPELL_DECIMATE := 13459;
+SET @SPELL_FLAME_BREATH := 9573;
+SET @SPELL_FLAME_BUFFET := 9574;
+UPDATE `creature_template` SET `AIName`='SmartAI',`mechanic_immune_mask`=1104 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,2300,2900,19500,46300,11,@SPELL_FLAME_BREATH,0,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzied Black Drake - In Combat - Cast Flame Breath"),
+(@ENTRY,0,1,0,0,0,100,0,1100,3800,2300,6100,11,@SPELL_FLAME_BUFFET,0,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzied Black Drake - In Combat - Cast Flame Buffet"),
+(@ENTRY,0,2,0,0,0,100,0,28500,31600,70100,74400,11,@SPELL_DECIMATE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzied Black Drake - In Combat - Cast Decimate"),
+(@ENTRY,0,3,4,2,0,100,1,0,30,0,0,11,@SPELL_FRENZY,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzied Black Drake - At 30% HP - Cast Frenzy"),
+(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Frenzied Black Drake - At 30% HP - Emote Line 0");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s goes into a frenzy!",16,0,100,0,0,0,"Frenzied Black Drake");
+
+-- Conditions for the gossip option
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`Comment`) VALUES
+(15,@GOSSIP,0,0,9,4022, 'Show gossip if on quest A Taste of Flame (1) OR'),
+(15,@GOSSIP,0,1,9,4023, 'Show gossip if on quest A Taste of Flame (2) OR'),
+(15,@GOSSIP,0,2,9,4024, 'Show gossip if on quest A Taste of Flame (3) OR');
diff --git a/sql/old/3.3.5a/2011_10_22_01_world_quest_relation.sql b/sql/old/3.3.5a/2011_10_22_01_world_quest_relation.sql
new file mode 100644
index 00000000000..f0d15832b98
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_01_world_quest_relation.sql
@@ -0,0 +1,36 @@
+-- corrected quests in creature_involvedrelation and creature_questrelation
+-- Horde npcs 14726 Rashona Straglash
+UPDATE `creature_involvedrelation` SET `quest` = 7824 WHERE `id` =14726 AND `quest` =7836;
+UPDATE `creature_questrelation` SET `quest` = 7824 WHERE `id` =14726 AND `quest` =7836;
+UPDATE `creature_involvedrelation` SET `quest` = 7832 WHERE `id` =14726 AND `quest` =7837;
+UPDATE `creature_questrelation` SET `quest` = 7832 WHERE `id` =14726 AND `quest` =7837;
+
+-- NPC 14727 Vehena
+UPDATE `creature_involvedrelation` SET `quest` = 7836 WHERE `id` =14727 AND `quest` =7832;
+UPDATE `creature_questrelation` SET `quest` = 7836 WHERE `id` =14727 AND `quest` =7832;
+UPDATE `creature_involvedrelation` SET `quest` = 7837 WHERE `id` =14727 AND `quest` =7824;
+UPDATE `creature_questrelation` SET `quest` = 7837 WHERE `id` =14727 AND `quest` =7824;
+
+-- Alliance npcs 14725 Raedon Dustriker
+UPDATE `creature_involvedrelation` SET `quest` = 10352 WHERE `id` =14725 AND `quest` =7792;
+UPDATE `creature_questrelation` SET `quest` = 10352 WHERE `id` =14725 AND `quest` =7792;
+UPDATE `creature_involvedrelation` SET `quest` = 10354 WHERE `id` =14725 AND `quest` =7798;
+UPDATE `creature_questrelation` SET `quest` = 10354 WHERE `id` =14725 AND `quest` =7798;
+
+-- NPC 20604 Dugiru
+UPDATE `creature_involvedrelation` SET `quest` = 7792 WHERE `id` =20604 AND `quest` =10352;
+UPDATE `creature_questrelation` SET `quest` = 7792 WHERE `id` =20604 AND `quest` =10352;
+UPDATE `creature_involvedrelation` SET `quest` = 7798 WHERE `id` =20604 AND `quest` =10354;
+UPDATE `creature_questrelation` SET `quest` = 7798 WHERE `id` =20604 AND `quest` =10354;
+
+-- NPC 14723 Mistina Steelshield
+UPDATE `creature_involvedrelation` SET `quest` = 7802 WHERE `id` =14723 AND `quest` =7807;
+UPDATE `creature_questrelation` SET `quest` = 7802 WHERE `id` =14723 AND `quest` =7807;
+UPDATE `creature_involvedrelation` SET `quest` = 7803 WHERE `id` =14723 AND `quest` =7808;
+UPDATE `creature_questrelation` SET `quest` = 7803 WHERE `id` =14723 AND `quest` =7808;
+
+-- NPC 14724 Bublo Acerbus
+UPDATE `creature_involvedrelation` SET `quest` = 7807 WHERE `id` =14724 AND `quest` =7802;
+UPDATE `creature_questrelation` SET `quest` = 7807 WHERE `id` =14724 AND `quest` =7802;
+UPDATE `creature_involvedrelation` SET `quest` = 7808 WHERE `id` =14724 AND `quest` =7803;
+UPDATE `creature_questrelation` SET `quest` = 7808 WHERE `id` =14724 AND `quest` =7803;
diff --git a/sql/old/3.3.5a/2011_10_22_02_world_gameobject_template.sql b/sql/old/3.3.5a/2011_10_22_02_world_gameobject_template.sql
new file mode 100644
index 00000000000..8effad58ca6
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_02_world_gameobject_template.sql
@@ -0,0 +1,4 @@
+DELETE FROM `gameobject_template` WHERE `entry` IN (180211,180213);
+INSERT INTO `gameobject_template`(`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `faction`, `flags`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `AIName`, `ScriptName`, `WDBVerified`) VALUES
+(180211,5,6314,'Uther''s Gnome Tribute','','','',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','',12340),
+(180213,5,6315,'Uther''s Night Elf Tribute','','','',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','',12340);
diff --git a/sql/old/3.3.5a/2011_10_22_03_world_sai.sql b/sql/old/3.3.5a/2011_10_22_03_world_sai.sql
new file mode 100644
index 00000000000..6003e1d365b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_03_world_sai.sql
@@ -0,0 +1,69 @@
+-- [Q] A Meeting With The Magister
+-- [Q] An Audience With The Arcanist
+SET @ENTRY_HATHOREL := 36670;
+SET @ENTRY_TYBALIN := 36669;
+SET @QUEST_A := 20439;
+SET @QUEST_H := 24451;
+SET @GOSSIP_A := 10857;
+SET @GOSSIP_H := 10858;
+SET @SPELL_SUNREAVER_DISGUISE := 70973;
+SET @SPELL_COVENANT_DISGUISE := 70971;
+SET @SPELL_CREATE_BLADES := 69722;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@ENTRY_HATHOREL,@ENTRY_TYBALIN);
+UPDATE `quest_template` SET `OfferRewardText`="Excellent work. Now that this is in our hands, we must get it to Caladis Brightspear as soon as possible. We can't risk the book falling back into Sunreaver hands.$BI'll ensure that Shandy Glossgleam gets his tabard back without incident, along with a healthy reward for his help",`RequestItemsText`="Have you recovered that book?" WHERE `entry`=@QUEST_A;
+UPDATE `quest_template` SET `OfferRewardText`="Excellent work. Now that this is in our hands, we must get it to Myralion Sunblaze as soon as possible. We can't risk the Silver Covenant taking the book from us again.$BI'll get that tabard back to Shandy and see that he's well compensated for his assistance. Once the book is in Myralion's hands, the Silver Covenant won't be a threat anymore.",`RequestItemsText`="Have you recovered that book?" WHERE `entry`=@QUEST_H;
+DELETE FROM `creature` WHERE `guid`=150186 AND `id`=@ENTRY_HATHOREL; -- Double-spawned Hathorel
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY_HATHOREL,@ENTRY_HATHOREL*100,@ENTRY_TYBALIN,@ENTRY_TYBALIN*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY_TYBALIN,0,0,0,19,0,100,0,@QUEST_A,0,0,0,11,@SPELL_SUNREAVER_DISGUISE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Quest Accept - Cast Sunreaver Disguise"),
+(@ENTRY_TYBALIN,0,1,0,20,0,100,0,@QUEST_A,0,0,0,28,@SPELL_SUNREAVER_DISGUISE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Quest Reward - Remove Aura Sunreaver Disguise"),
+(@ENTRY_TYBALIN,0,2,3,62,0,100,0,@GOSSIP_A,1,0,0,11,@SPELL_SUNREAVER_DISGUISE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Quest Accept - Cast Sunreaver Disguise"),
+(@ENTRY_TYBALIN,0,3,0,61,0,100,0,@GOSSIP_A,1,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Gossip Select - Close Gossip"),
+(@ENTRY_TYBALIN,0,4,0,62,0,100,0,@GOSSIP_H,0,0,0,80,@ENTRY_TYBALIN*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Arcanist Tybalin - On Gossip Select - Run Script"),
+(@ENTRY_TYBALIN*100,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Script - Close Gossip"),
+(@ENTRY_TYBALIN*100,9,1,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Script - Say text 0"),
+(@ENTRY_TYBALIN*100,9,2,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Script - Say text 1"),
+(@ENTRY_TYBALIN*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_CREATE_BLADES,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Script - Cast Create Ancient Dragonforged Blades"),
+(@ENTRY_TYBALIN*100,9,4,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Arcanist Tybalin - On Script - Say text 2"),
+
+(@ENTRY_HATHOREL,0,0,0,19,0,100,0,@QUEST_H,0,0,0,11,@SPELL_COVENANT_DISGUISE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Quest Accept - Cast Covenant Disguise"),
+(@ENTRY_HATHOREL,0,1,0,20,0,100,0,@QUEST_H,0,0,0,28,@SPELL_COVENANT_DISGUISE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Quest Reward - Remove Aura Covenant Disguise"),
+(@ENTRY_HATHOREL,0,2,3,62,0,100,0,@GOSSIP_H,1,0,0,11,@SPELL_COVENANT_DISGUISE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Quest Accept - Cast Covenant Disguise"),
+(@ENTRY_HATHOREL,0,3,0,61,0,100,0,@GOSSIP_H,1,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Gossip Select - Close Gossip"),
+(@ENTRY_HATHOREL,0,4,0,62,0,100,0,@GOSSIP_A,0,0,0,80,@ENTRY_HATHOREL*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magister Hathorel - On Gossip Select - Run Script"),
+(@ENTRY_HATHOREL*100,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Script - Close Gossip"),
+(@ENTRY_HATHOREL*100,9,1,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Script - Say text 0"),
+(@ENTRY_HATHOREL*100,9,2,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Script - Say text 1"),
+(@ENTRY_HATHOREL*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_CREATE_BLADES,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Script - Cast Create Ancient Dragonforged Blades"),
+(@ENTRY_HATHOREL*100,9,4,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Magister Hathorel - On Script - Say text 2");
+
+-- Actual gossip option
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (@GOSSIP_A,@GOSSIP_H);
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES
+(@GOSSIP_A,0,0,"I'm ready to deliver the tome, Magister Hathorel.",1,1,0,0,0,0,NULL),
+(@GOSSIP_A,1,0,"Would you renew my Sunreaver disguise?",1,1,0,0,0,0,NULL),
+(@GOSSIP_H,0,0,"I'm ready to deliver the tome, Arcanist Tybalin.",1,1,0,0,0,0,NULL),
+(@GOSSIP_H,1,0,"Would you renew my Covenant disguise?",1,1,0,0,0,0,NULL);
+
+-- Magister Hathorel
+DELETE FROM `creature_text` WHERE `entry` IN (@ENTRY_HATHOREL,@ENTRY_TYBALIN);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY_HATHOREL,0,0,"You're late, courier. No, I don't want any excuses; this errand is far too important.",12,0,100,1,0,0,"Magister Hathorel"),
+(@ENTRY_HATHOREL,1,0,"Here's the tome our representative brought from Wyrmrest. Get this to Myralion Sunblaze immediately.",12,0,100,1,0,0,"Magister Hathorel"),
+(@ENTRY_HATHOREL,2,0,"Watch your back, courier. I needn't remind you of the value of the book, nor the fact that the Silver Covenant will stop at nothing to take it from us.",12,0,100,1,0,0,"Magister Hathorel"),
+-- Arcanist Tybalin
+(@ENTRY_TYBALIN,0,0,"It's good to finally see you, courier. Krasus has entrusted us with one of the few remaining copies of Ancient Dragonforged Blades.",12,0,100,1,0,0,"Arcanist Tybalin"),
+(@ENTRY_TYBALIN,1,0,"Here is the book. You must ensure it gets to Caladis Brightspear in Icecrown before the Sunreavers realize what is happening.",12,0,100,1,0,0,"Arcanist Tybalin"),
+(@ENTRY_TYBALIN,2,0,"Travel quickly! The Sunreavers will not waste any time once they realize that we have the information they seek.",12,0,100,1,0,0,"Arcanist Tybalin");
+
+-- Conditions for the gossip options
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (@GOSSIP_A,@GOSSIP_H);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionValue1`) VALUES
+(15,@GOSSIP_A,0,9,@QUEST_A),
+(15,@GOSSIP_H,0,9,@QUEST_H),
+
+(15,@GOSSIP_A,1,11,@SPELL_COVENANT_DISGUISE),
+(15,@GOSSIP_H,1,11,@SPELL_SUNREAVER_DISGUISE),
+
+(15,@GOSSIP_A,1,9,@QUEST_A),
+(15,@GOSSIP_H,1,9,@QUEST_H);
diff --git a/sql/old/3.3.5a/2011_10_22_04_world_sai.sql b/sql/old/3.3.5a/2011_10_22_04_world_sai.sql
new file mode 100644
index 00000000000..71aac7a302b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_04_world_sai.sql
@@ -0,0 +1,145 @@
+-- [Q] Still At It
+-- "Tipsy" McManus SAI
+SET @ENTRY := 28566;
+SET @GOSSIP := 9713;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100+0,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3,@ENTRY*100+4,@ENTRY*100+5,@ENTRY*100+6,@ENTRY*100+7,@ENTRY*100+8);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,62,0,100,0,@GOSSIP,0,0,0,80,@ENTRY*100+0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - On gossip option select - Run script"),
+(@ENTRY,0,1,0,1,1,100,0,5000,5000,11000,11000,88,@ENTRY*100+1,@ENTRY*100+5,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - After 5 Sec - Run Random Script"),
+(@ENTRY,0,2,0,38,1,100,0,1,1,0,0,80,@ENTRY*100+6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - On Data Set 1 1 - Run Completion Script"),
+(@ENTRY,0,3,0,1,1,100,1,103900,103900,0,0,80,@ENTRY*100+8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Call Script Quest successful (phase 1) after some time (104s=9tasks)"),
+(@ENTRY,0,4,0,1,2,100,1,0,0,0,0,80,@ENTRY*100+7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Timed - Run Failure Script"),
+(@ENTRY,0,5,0,1,4,100,1,8000,8000,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Timed - Set Back Gossip & Quest Flags"),
+(@ENTRY,0,6,0,1,4,100,1,8010,8010,0,0,78,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Timed - Reset script"),
+-- Start Script
+(@ENTRY*100+0,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Tipsy McManus - Script 0 - Close Gossip"),
+(@ENTRY*100+0,9,1,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 0 - Turn of Gossip & Questgiver flags"),
+(@ENTRY*100+0,9,2,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 0 - Say Text 0"),
+(@ENTRY*100+0,9,3,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 0 - Set Phase 1"),
+-- Wants Orange
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 1 - Say Text 1"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,12,28535,1,10000,0,0,0,8,0,0,0,5549.62354,5769.51367,-73.42824,2.75762,"Tipsy McManus - Script 1 - Summon Wants Orange"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,10000,10000,10000,10000,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 1 - set phase 2"),
+-- Wants Papaya
+(@ENTRY*100+2,9,0,0,0,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 2 - Say Text 2"),
+(@ENTRY*100+2,9,1,0,0,0,100,0,0,0,0,0,12,28536,1,10000,0,0,0,8,0,0,0,5549.62354,5769.51367,-73.42824,2.75762,"Tipsy McManus - Script 2 - Summon Wants Papaya"),
+(@ENTRY*100+2,9,2,0,0,0,100,0,10000,10000,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 2 - set phase 2"),
+-- Wants Bananas
+(@ENTRY*100+3,9,0,0,0,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 3 - Say Text 3"),
+(@ENTRY*100+3,9,1,0,0,0,100,0,0,0,0,0,12,28537,1,10000,0,0,0,8,0,0,0,5549.62354,5769.51367,-73.42824,2.75762,"Tipsy McManus - Script 3 - Summon Wants Bananas"),
+(@ENTRY*100+3,9,2,0,0,0,100,0,10000,10000,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 3 - set phase 2"),
+-- Steaming Valve
+(@ENTRY*100+4,9,0,0,0,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 4 - Say Text 4"),
+(@ENTRY*100+4,9,1,0,0,0,100,0,0,0,0,0,12,28539,1,10000,0,0,0,8,0,0,0,5548.1,5767.4,-76.2673,-2.1293,"Tipsy McManus - Script 4 - Summon Steaming Valve"),
+(@ENTRY*100+4,9,2,0,0,0,100,0,10000,10000,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 4 - set phase 2"),
+-- Wants Fire
+(@ENTRY*100+5,9,0,0,0,0,100,0,0,0,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 5 - Say Text 5"),
+(@ENTRY*100+5,9,1,0,0,0,100,0,0,0,0,0,12,28540,1,10000,0,0,0,8,0,0,0,5552.58,5765.66,-78.0212,-3.00195,"Tipsy McManus - Script 5 - Summon Wants Fire"),
+(@ENTRY*100+5,9,2,0,0,0,100,0,10000,10000,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 5 - Set Phase 2"),
+-- Task successful
+(@ENTRY*100+6,9,0,0,0,0,100,0,0,0,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 6 - Say Text 6"),
+-- End failure
+(@ENTRY*100+7,9,0,0,0,0,100,0,0,0,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 7 - Say Text 7"),
+(@ENTRY*100+7,9,1,0,0,0,100,0,0,0,0,0,22,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 7 - Set Phase 4"),
+-- Completion script
+(@ENTRY*100+8,9,0,0,0,0,100,0,0,0,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 8 - Say Text 8"),
+(@ENTRY*100+8,9,1,0,0,0,100,0,0,0,0,0,50,190643,30000,0,0,0,0,8,0,0,0,5547.13525,5767.09961,-78.025856,2.25147343,"Tipsy McManus - Script 8 - Summon Thunderbrew's Jungle Punch"),
+(@ENTRY*100+8,9,2,0,0,0,100,0,0,0,0,0,22,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 8 - Set Phase 4");
+
+
+-- NPC talk text for "Tipsy" McManus
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Beginning the distillation in 5 seconds.",12,0,100,0,0,0,"Tipsy McManus"),
+(@ENTRY,1,0,"Add another orange, quickly!",12,0,100,25,0,0,"Tipsy McManus"),
+(@ENTRY,2,0,"Put a papaya in the still!",12,0,100,25,0,0,"Tipsy McManus"),
+(@ENTRY,3,0,"Add bananas!",12,0,100,25,0,0,"Tipsy McManus"),
+(@ENTRY,4,0,"Pressure's too high! Open the pressure valve!",12,0,100,5,0,0,"Tipsy McManus"),
+(@ENTRY,5,0,"The still needs heat! Light the brazier!",12,0,100,5,0,0,"Tipsy McManus"),
+(@ENTRY,6,0,"Good job! Keep your eyes open, now.",12,0,100,4,0,0,"Tipsy McManus"),
+(@ENTRY,6,1,"That'll do. Never know what it'll need next...",12,0,100,4,0,0,"Tipsy McManus"),
+(@ENTRY,6,2,"Nicely handled! Stay on your toes!",12,0,100,4,0,0,"Tipsy McManus"),
+(@ENTRY,6,3,"Well done! Be ready for anything!",12,0,100,4,0,0,"Tipsy McManus"),
+(@ENTRY,7,0,"It's no good! I'm shutting it down...",12,0,100,0,0,0,"Tipsy McManus"),
+(@ENTRY,8,0,"We've done it! Come get the cask.",12,0,100,0,0,0,"Tipsy McManus");
+
+-- Add Gossip option
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`) VALUES
+(@GOSSIP,0,0,"I'm ready to start the distillation, uh, Tipsy.",1,1);
+
+-- Add gossip_menu_option condition
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionValue1`) VALUES
+(15,@GOSSIP,0,9,12644); -- Quest "Still At It" Has to be active and incomplete
+
+-- Update creature_template for Wants XX targets
+UPDATE `creature_template` SET `minlevel`=70,`maxlevel`=70,`exp`=2,`unit_class`=2,`unit_flags`=`unit_flags`|33554432,`flags_extra`=`flags_extra`|128,`InhabitType`=4,`family`=23,`type`=3 WHERE `entry` IN (28535,28536,28537,28539,28540);
+
+-- Wants Orange SAI
+SET @ENTRY := 28535;
+SET @SPELL_ORANGE := 51931;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_ORANGE,0,0,0,45,1,1,0,0,0,0,19,28566,0,0,0,0,0,0,"Wants Orange - On Spellhit - Set Data McManus");
+
+-- Wants Papaya SAI
+SET @ENTRY := 28536;
+SET @SPELL_PAPAYA := 51933;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_PAPAYA,0,0,0,45,1,1,0,0,0,0,19,28566,0,0,0,0,0,0,"Wants Papaya - On Spellhit - Set Data McManus");
+
+-- Wants Bananas SAI
+SET @ENTRY := 28537;
+SET @SPELL_BANANAS := 51932;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_BANANAS,0,0,0,45,1,1,0,0,0,0,19,28566,0,0,0,0,0,0,"Wants Bananas - On Spellhit - Set Data McManus");
+
+-- Steam Valve SAI
+SET @ENTRY := 28539;
+SET @SPELL_STEAM_BLAST := 51920;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,@SPELL_STEAM_BLAST,0,0,0,0,0,1,0,0,0,0,0,0,0,"Steam Valve - Out Of Combat - Cast Cosmetic Steam Blast"),
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,28566,0,0,0,0,0,0,"Steam Valve - On Death - Set Data McManus");
+
+-- Pressure Valve SAI
+SET @ENTRY := 190635;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,1,0,0,64,0,100,0,500,500,0,0,51,0,0,0,0,0,0,19,28539,0,0,0,0,0,0,"Pressure Valve - On Gossip Hello - Kill Steam Valve");
+
+-- Wants Fire SAI
+SET @ENTRY := 28540;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,28566,0,0,0,0,0,0,"Wants Fire - On Death - Set Data McManus");
+
+-- Brazier SAI
+SET @ENTRY := 190636;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,1,0,0,64,0,100,0,500,500,0,0,51,0,0,0,0,0,0,19,28540,0,0,0,0,0,0,"Brazier - On Gossip Hello - Kill Wants Fire");
+
+-- Add Spell Targets
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (51931,51932,51933);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`) VALUES
+(13,51931,18,1,28535), -- Toss Orange requires target Wants Orange
+(13,51931,18,1,28536), -- Toss Orange requires target Wants Papaya
+(13,51931,18,1,28537), -- Toss Orange requires target Wants Bananas
+(13,51933,18,1,28535), -- Toss Papaya requires target Wants Orange
+(13,51933,18,1,28536), -- Toss Papaya requires target Wants Papaya
+(13,51933,18,1,28537), -- Toss Papaya requires target Wants Bananas
+(13,51932,18,1,28535), -- Toss Bananas requires target Wants Orange
+(13,51932,18,1,28536), -- Toss Bananas requires target Wants Papaya
+(13,51932,18,1,28537); -- Toss Bananas requires target Wants Bananas
diff --git a/sql/old/3.3.5a/2011_10_22_05_world_misc.sql b/sql/old/3.3.5a/2011_10_22_05_world_misc.sql
new file mode 100644
index 00000000000..57e4f740530
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_05_world_misc.sql
@@ -0,0 +1,14 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_q14112_14145_chum_the_water';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(66741,'spell_q14112_14145_chum_the_water');
+
+-- Template updates for creature 35071 (North Sea Mako)
+UPDATE `creature_template` SET `faction_A`=14,`faction_H`=14,`baseattacktime`=2000,`InhabitType`=`InhabitType`&~1 WHERE `entry` IN (35071,35060,35061); -- North Sea * (Last 2 entries guessed)
+UPDATE `creature_template` SET `faction_A`=1885,`faction_H`=1885,`baseattacktime`=2000 WHERE `entry`=35072; -- Angry Kvaldir
+-- Addon data for creature 35071 (North Sea Mako)
+DELETE FROM `creature_template_addon` WHERE `entry` IN (35071,35072,35060,35061);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(35071,0,0,1,0, NULL), -- North Sea Mako
+(35060,0,0,1,0, NULL), -- North Sea Thresher - guessed
+(35061,0,0,1,0, NULL), -- North Sea Blue Shark - guessed
+(35072,0,0,1,0, NULL); -- Angry Kvaldir
diff --git a/sql/old/3.3.5a/2011_10_22_06_world_sai.sql b/sql/old/3.3.5a/2011_10_22_06_world_sai.sql
new file mode 100644
index 00000000000..433252f4e2d
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_06_world_sai.sql
@@ -0,0 +1,19 @@
+-- Snowblind Follower SAI
+SET @ENTRY := 29618;
+SET @SPELL_NET := 66474;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL_NET,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Snowblind Follower - On Spellhit - Say Line 0 (random)"),
+(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,33,34899,0,0,0,0,0,7,0,0,0,0,0,0,0,"Snowblind Follower - On Spellhit (Link) - Quest Credit"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Snowblind Follower - On Spellhit (Link) - Forced Despawn");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Grrrrr!",12,0,100,0,0,0,"Snowblind Follower"),
+(@ENTRY,0,1,"Me not afraid!",12,0,100,0,0,0,"Snowblind Follower"),
+(@ENTRY,0,2,"Net not stop me! No... net stop me.",12,0,100,0,0,0,"Snowblind Follower"),
+(@ENTRY,0,3,"No kill me!",12,0,100,0,0,0,"Snowblind Follower"),
+(@ENTRY,0,4,"No!",12,0,100,0,0,0,"Snowblind Follower"),
+(@ENTRY,0,5,"You no take... me!",12,0,100,0,0,0,"Snowblind Follower");
diff --git a/sql/old/3.3.5a/2011_10_22_07_world_sai.sql b/sql/old/3.3.5a/2011_10_22_07_world_sai.sql
new file mode 100644
index 00000000000..8e85d719cf8
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_07_world_sai.sql
@@ -0,0 +1,51 @@
+-- Hooked Net SHOULD hit this hard, fyi!
+-- Sunreaver Agent SAI
+SET @ENTRY := 36776;
+SET @SPELL_HOOKED_NET := 59260;
+SET @SPELL_SINISTER_STRIKE := 60195;
+SET @SPELL_VANISH := 71400; -- Why is this called Vanish?... It teleports caster behind target
+SET @SPELL_EVISCERATE := 15691;
+SET @SPELL_BACKSTAB := 71410;
+UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|2,`unit_class`=4 WHERE `entry`=@ENTRY; -- Civilian according to video
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sunreaver Agent - On Aggro - Say Line 0 (random)"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,11,@SPELL_HOOKED_NET,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Agent - On Aggro - Cast Hooked Net"),
+(@ENTRY,0,2,0,67,0,100,0,1000,3000,0,0,11,@SPELL_BACKSTAB,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Agent - Behind Target - Cast Backstab"),
+(@ENTRY,0,3,0,0,0,100,0,1000,1500,3000,3000,11,@SPELL_SINISTER_STRIKE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Agent - In Combat - Cast Sinister Strike"),
+(@ENTRY,0,4,0,0,0,100,1,4000,6000,0,0,11,@SPELL_VANISH,1,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Agent - In Combat - Cast Vanish"),
+(@ENTRY,0,5,0,0,0,100,0,9000,13000,20000,20000,11,@SPELL_EVISCERATE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Agent - In Combat - Cast Eviscerate");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Did you think you would escape with your life?",12,0,100,1,0,0,"Sunreaver Agent"),
+(@ENTRY,0,1,"You'll never run us out of the city, Silver Covenant thug!",12,0,100,1,0,0,"Sunreaver Agent");
+
+-- Silver Covenant Agent SAI
+SET @ENTRY := 36774;
+SET @SPELL_HOOKED_NET := 59260;
+SET @SPELL_SINISTER_STRIKE := 60195;
+SET @SPELL_VANISH := 71400; -- Why is this called Vanish?... It teleports caster behind target
+SET @SPELL_EVISCERATE := 15691;
+SET @SPELL_BACKSTAB := 71410;
+UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|2,`unit_class`=4 WHERE `entry`=@ENTRY; -- Civilian according to video
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silver Covenant Agent - On Aggro - Say Line 0 (random)"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,11,@SPELL_HOOKED_NET,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Agent - On Aggro - Cast Hooked Net"),
+(@ENTRY,0,2,0,67,0,100,0,1000,3000,0,0,11,@SPELL_BACKSTAB,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Agent - Behind Target - Cast Backstab"),
+(@ENTRY,0,3,0,0,0,100,0,1000,1500,3000,3000,11,@SPELL_SINISTER_STRIKE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Agent - In Combat - Cast Sinister Strike"),
+(@ENTRY,0,4,0,0,0,100,1,4000,6000,0,0,11,@SPELL_VANISH,1,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Agent - In Combat - Cast Vanish"),
+(@ENTRY,0,5,0,0,0,100,0,9000,13000,20000,20000,11,@SPELL_EVISCERATE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Agent - In Combat - Cast Eviscerate");
+
+-- Texts by
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"You Sunreaver lackeys are all the same.",12,0,100,1,0,0,"Silver Covenant Agent"),
+(@ENTRY,0,1,"You won't escape from us so easily!",12,0,100,1,0,0,"Silver Covenant Agent");
+
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=30438; -- Sunreaver Agent
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=30310; -- Silver Covenant Agent
diff --git a/sql/old/3.3.5a/2011_10_22_08_world_sai.sql b/sql/old/3.3.5a/2011_10_22_08_world_sai.sql
new file mode 100644
index 00000000000..779f659f9af
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_08_world_sai.sql
@@ -0,0 +1,108 @@
+-- [Q] Tails Up
+-- Apparently it won't fall asleep due to evading. We are evading because the gossip won't show if we are in combat.. -_-
+
+-- Frost Leopard SAI
+SET @ENTRY := 29327;
+SET @QUEST := 13549;
+SET @GOSSIP := 54000;
+SET @SPELL_RAKE := 54668;
+SET @SPELL_BLOWGUN := 62105;
+SET @SPELL_SLEEP := 52742;
+UPDATE `creature_template` SET `AIName`='SmartAI',`npcflag`=0,`gossip_menu_id`=@GOSSIP,`faction_A`=1990,`faction_H`=1990,`unit_flags`=`unit_flags`|0 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,8000,11000,11,@SPELL_RAKE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Frost Leopard - In Combat - Cast Rake"),
+(@ENTRY,0,1,0,25,0,100,0,0,0,0,0,2,1990,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Reset - Set Faction Back"),
+(@ENTRY,0,2,0,8,0,100,1,@SPELL_BLOWGUN,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEP,2,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script - Cast Sleep"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script - Set Faction Friendly"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script - Set npc_flag Gossip"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script - Evade"), -- The gossip only shows out of combat..
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script - Stop Auto Attack"),
+
+(@ENTRY,0,3,0,62,0,100,0,@GOSSIP,0,0,0,88,@ENTRY*100+1,@ENTRY*100+3,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Gossip Select - Run Random Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,36,33007,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script 1 - Update Template Male"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Frost Leopard - Script 1 - Say Line 0"),
+(@ENTRY*100+2,9,0,0,0,0,100,0,0,0,0,0,36,33010,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script 2 - Update Template Female"),
+(@ENTRY*100+2,9,1,0,0,0,100,0,0,0,0,0,33,33005,0,0,0,0,0,7,0,0,0,0,0,0,0,"Frost Leopard - On Script 2 - Quest Credit"),
+(@ENTRY*100+2,9,2,0,0,0,100,0,0,0,0,0,29,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Frost Leopard - On Script 2 - Follow Player"), -- Apparently crediting doesn't work through this action
+(@ENTRY*100+3,9,0,0,0,0,100,0,0,0,0,0,36,33007,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frost Leopard - On Script 3 - Update Template Male"),
+(@ENTRY*100+3,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Frost Leopard - Script 3 - Say Line 0");
+
+-- Insert gossip and static text
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP AND `text_id`=14266;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP,14266);
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(@GOSSIP,0,0,"Lift the frost leopard's tail to check if it's a male or a female.",1,1,0);
+
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"It's an angry male!",42,0,100,0,0,0,"Male Frost Leopard");
+
+-- Male Frost Leopard SAI
+SET @ENTRY := 33007;
+SET @SPELL_RAKE := 54668;
+UPDATE `creature_template` SET `AIName`='SmartAI',`faction_A`=1990,`faction_H`=1990,`unit_flags`=`unit_flags`|0 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,3000,4000,9000,11000,11,@SPELL_RAKE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Male Frost Leopard - In Combat - Cast Rake");
+
+-- Icepaw Bear SAI
+SET @ENTRY := 29319;
+SET @QUEST := 13549;
+SET @GOSSIP := 55000;
+SET @SPELL_CLAWS_OF_ICE := 54632;
+SET @SPELL_BLOWGUN := 62105;
+SET @SPELL_SLEEP := 52742;
+UPDATE `creature_template` SET `AIName`='SmartAI',`npcflag`=0,`gossip_menu_id`=@GOSSIP,`faction_A`=1990,`faction_H`=1990,`unit_flags`=`unit_flags`|0 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,8000,11000,11,@SPELL_CLAWS_OF_ICE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Icepaw Bear - In Combat - Cast Claws of Ice"),
+(@ENTRY,0,1,0,25,0,100,0,0,0,0,0,2,1990,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Reset - Set Faction Back"),
+(@ENTRY,0,2,0,8,0,100,1,@SPELL_BLOWGUN,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEP,2,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script - Cast Sleep"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script - Set Faction Friendly"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script - Set npc_flag Gossip"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script - Evade"), -- The gossip only shows out of combat..
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script - Stop Auto Attack"),
+
+(@ENTRY,0,3,0,62,0,100,0,@GOSSIP,0,0,0,88,@ENTRY*100+1,@ENTRY*100+3,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Gossip Select - Run Random Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,36,33008,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script 1 - Update Template Male"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Icepaw Bear - Script 1 - Say Line 0"),
+(@ENTRY*100+2,9,0,0,0,0,100,0,0,0,0,0,36,33011,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script 2 - Update Template Female"),
+(@ENTRY*100+2,9,1,0,0,0,100,0,0,0,0,0,33,33006,0,0,0,0,0,7,0,0,0,0,0,0,0,"Icepaw Bear - On Script 2 - Quest Credit"),
+(@ENTRY*100+2,9,2,0,0,0,100,0,0,0,0,0,29,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Icepaw Bear - On Script 2 - Follow Player"), -- Apparently crediting doesn't work through this action
+(@ENTRY*100+3,9,0,0,0,0,100,0,0,0,0,0,36,33008,0,0,0,0,0,1,0,0,0,0,0,0,0,"Icepaw Bear - On Script 3 - Update Template Male"),
+(@ENTRY*100+3,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Icepaw Bear - Script 3 - Say Line 0");
+
+-- Insert gossip and static text
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP AND `text_id`=14267;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP,14267);
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(@GOSSIP,0,0,"Lift the icepaw bear's tail to check if it's a male or a female.",1,1,0);
+
+-- Male Icepaw Bear SAI
+SET @ENTRY := 33008;
+SET @SPELL_CLAWS_OF_ICE := 54632;
+UPDATE `creature_template` SET `AIName`='SmartAI',`faction_A`=1990,`faction_H`=1990,`unit_flags`=`unit_flags`|0 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,3000,4000,9000,11000,11,@SPELL_CLAWS_OF_ICE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Male Icepaw Bear - In Combat - Cast Claws of Ice");
+
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"It's an angry male!",42,0,100,0,0,0,"Male Icepaw Bear");
+
+-- Only show first gossip if player is on quest Tails Up
+DELETE FROM `conditions` WHERE `SourceGroup`=@GOSSIP AND `ConditionValue1`=@QUEST;
+DELETE FROM `conditions` WHERE `SourceEntry` IN (@SPELL_BLOWGUN) AND `ConditionValue1` IN (29327,29319);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@GOSSIP,0,0,9,@QUEST,0,0,0,'',"Only show gossip if player is on quest Tails Up"),
+(17,0,@SPELL_BLOWGUN,0,19,29327,0,0,0,'',"Spell To'kini's Blowgun can only be cast at Frost Leopard"),
+(17,0,@SPELL_BLOWGUN,1,19,29319,0,0,0,'',"Spell To'kini's Blowgun can only be cast at Icepaw Bear");
diff --git a/sql/old/3.3.5a/2011_10_22_09_world_sai.sql b/sql/old/3.3.5a/2011_10_22_09_world_sai.sql
new file mode 100644
index 00000000000..2bf96f951c6
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_09_world_sai.sql
@@ -0,0 +1,47 @@
+-- Talbuk Doe SAI
+SET @ENTRY := 20610; -- Talbuk Doe
+SET @SPELL_GORE := 32019; -- Gore
+SET @SPELL_TAG := 35771; -- Tag Subbued Talbuk
+SET @SPELL_TAG_CREDIT := 40347; -- Talbuk Tagging Credit
+SET @SPELL_SLEEPING := 42648; -- Sleeping Sleep
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Aggro - Say text 0"),
+(@ENTRY,0,1,0,0,0,100,0,1000,1000,8000,11000,11,@SPELL_GORE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Talbuk Doe - In Combat - Cast Gore"),
+(@ENTRY,0,2,0,2,0,100,1,0,20,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - At 20% HP - Say Text 1"),
+(@ENTRY,0,3,0,8,0,100,0,@SPELL_TAG,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Spellhit - Run Script"),
+(@ENTRY,0,4,0,11,0,100,0,0,0,0,0,19,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Respawn - Remove Unit Flag"),
+(@ENTRY*100,9,0,0,0,0,100,1,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Evade"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,33,20982,0,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Doe - Script - Give Quest Credit"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,18,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Set Unit Flag"),-- Make it un-attackable in any way
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEPING,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Cast Sleeping Sleep");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s calls for the aid of a nearby male!",16,0,100,0,0,0,"Talbuk Doe"),
+(@ENTRY,1,0,"%s seems to have weakened.",16,0,100,0,0,0,"Talbuk Doe");
+
+-- Talbuk Sire SAI
+SET @ENTRY := 20777; -- Talbuk Sire
+SET @SPELL_STOMP := 32023; -- Hoof Stomp
+SET @SPELL_TAG := 35771; -- Tag Subbued Talbuk
+SET @SPELL_SLEEPING := 42648; -- Sleeping Sleep
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,8000,11000,11,@SPELL_STOMP,0,0,0,0,0,2,0,0,0,0,0,0,0,"Talbuk Sire - In Combat - Cast Hoof Stomp"),
+(@ENTRY,0,1,0,2,0,100,1,0,20,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - At 20% HP - Say Text 0"),
+(@ENTRY,0,2,0,8,0,100,0,@SPELL_TAG,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - On Spellhit - Run Script"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,19,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - On Respawn - Remove Unit Flag"),
+(@ENTRY*100,9,0,0,0,0,100,1,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ancient Orc Ancestor - Script - Evade"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,11,@SPELL_TAG_CREDIT,2,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Sire - Script - Give Killcredit"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,33,20982,0,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Sire - Script - Give Quest Credit"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,18,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Set Unit Flag"),-- Make it un-attackable in any way
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEPING,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Cast Sleeping Sleep");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s seems to have weakened.",16,0,100,0,0,0,"Talbuk Sir");
diff --git a/sql/old/3.3.5a/2011_10_22_10_world_sai.sql b/sql/old/3.3.5a/2011_10_22_10_world_sai.sql
new file mode 100644
index 00000000000..3e53d2a3757
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_10_world_sai.sql
@@ -0,0 +1,28 @@
+-- Farahlon Lasher SAI
+SET @ENTRY := 20774;
+SET @SPELL_ENTANGLING_ROOTS := 12747;
+SET @SPELL_FRENZY := 3019;
+SET @SPELL_FLANKING_GROWTH := 36604;
+SET @SPELL_ENERGY_FIELD_MODULATOR := 35772;
+UPDATE `creature_template` SET `AIName`='SmartAI',`dmgschool`=3 WHERE `entry`=@ENTRY;
+DELETE FROM `creature` WHERE `id` IN (21331,20983); -- Those are supposed to be summoned
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,@SPELL_FLANKING_GROWTH,0,0,0,0,0,2,0,0,0,0,0,0,0,"Farahlon Lasher - On Aggro - Cast Flanking Growth"),
+(@ENTRY,0,1,0,0,0,100,0,20000,20000,25000,25000,11,@SPELL_ENTANGLING_ROOTS,0,0,0,0,0,2,0,0,0,0,0,0,0,"Farahlon Lasher - In Combat - Cast Entanglin Roots"),
+(@ENTRY,0,2,0,8,0,100,0,@SPELL_ENERGY_FIELD_MODULATOR,0,0,0,36,20983,0,0,0,0,0,1,0,0,0,0,0,0,0,"Farahlon Lasher - On Spellhit - Change Entry To Mutated"),
+(@ENTRY,0,3,0,2,0,100,1,0,30,0,0,11,@SPELL_FRENZY,1,0,0,0,0,1,0,0,0,0,0,0,0,"Farahlon Lasher - At 30% HP - Cast Frenzy"),
+(@ENTRY,0,4,0,2,0,100,1,0,30,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Farahlon Lasher - At 30% HP - Say Line 0");
+-- Text
+DELETE FROM `creature_text` WHERE `entry` IN (@ENTRY,20983);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s goes into a frenzy!",16,0,100,0,0,0,"Farahlon Lasher"),
+(20983,0,0,"%s goes into a frenzy!",16,0,100,0,0,0,"Mutated Farahlon Lasher");
+
+-- To prevent being able to use the quest item more than once per creature
+-- Removing previous entry which didn't work
+DELETE FROM `conditions` WHERE `SourceEntry`=35772 AND `ConditionValue2`=20774;
+DELETE FROM `conditions` WHERE `SourceEntry`=29818 AND `ConditionValue2`=20774;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(18,0,29818,0,24,1,20774,0,0,'',"Item Energy Field Modulator can only be used if target is Farahlon Lasher");
diff --git a/sql/old/3.3.5a/2011_10_22_11_world_sai.sql b/sql/old/3.3.5a/2011_10_22_11_world_sai.sql
new file mode 100644
index 00000000000..dfae9ae383a
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_11_world_sai.sql
@@ -0,0 +1,17 @@
+-- Withered Corpse SAI
+SET @ENTRY := 20561;
+SET @SPELL_PROTECTORATE_IGNITER := 35372;
+UPDATE `creature_template` SET `AIName`='SmartAI',`unit_flags`=`unit_flags`|388 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,0,1,0,"29266"); -- Emote death spell (Permanent Feign Death)
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,0,@SPELL_PROTECTORATE_IGNITER,0,0,0,33,20561,0,0,0,0,0,7,0,0,0,0,0,0,0,"Withered Corpse - On Spellhit - Give Quest Credit"),
+(@ENTRY,0,1,0,8,0,100,0,@SPELL_PROTECTORATE_IGNITER,0,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Withered Corpse - On Spellhit - Die");
+
+-- Protector Igniter can only be used inside Access Shaft Zeon
+-- We are not removing the previous one, just adding an extra check
+DELETE FROM `conditions` WHERE `SourceEntry`=35372 AND `ConditionValue1`=3880;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(17,0,35372,0,23,3880,0,0,0,'',"Protector Igniter can only be used inside Access Shaft Zeon");
diff --git a/sql/old/3.3.5a/2011_10_22_12_world_sai.sql b/sql/old/3.3.5a/2011_10_22_12_world_sai.sql
new file mode 100644
index 00000000000..c405377f588
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_12_world_sai.sql
@@ -0,0 +1,21 @@
+-- Invis BE Ballista SAI
+SET @ENTRY := 19723;
+SET @SPELL_BURN_BLOOD_ELF := 34526;
+UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|130 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_BURN_BLOOD_ELF,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Invis BE Ballista - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,50,181915,20000,0,0,0,0,1,0,0,0,0,0,0,0,"Invis BE Ballista - Script - Summon Blaze (fire)"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,8,0,0,0,0,0,0,0,"Invis BE Ballista - Script - Despawn");
+
+-- Invis BE Tent SAI
+SET @ENTRY := 19724;
+SET @SPELL_BURN_BLOOD_ELF := 34526;
+UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|130 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_BURN_BLOOD_ELF,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Invis BE Tent - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,50,181915,20000,0,0,0,0,1,0,0,0,0,0,0,0,"Invis BE Tent - Script - Summon Blaze (fire)"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,8,0,0,0,0,0,0,0,"Invis BE Tent - Script - Despawn");
diff --git a/sql/old/3.3.5a/2011_10_22_13_world_sai.sql b/sql/old/3.3.5a/2011_10_22_13_world_sai.sql
new file mode 100644
index 00000000000..17f2efd7b5f
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_13_world_sai.sql
@@ -0,0 +1,62 @@
+-- Windyreed Quest Credit (Hut 01) SAI
+SET @ENTRY := 18142;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `gameobject` WHERE `id`=182146; -- Remove already spawned hut fires
+SET @SPELL_LIVING_FIRE := 31927; -- Living Fire
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_LIVING_FIRE,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Windyreed Quest Credit - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1850.186401,6378.753906,49.132702,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1843.883911,6373.384277,46.005417,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1845.056030,6383.819336,56.662624,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1845.103638,6391.827148,53.700901,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,5,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1831.184937,6391.026855,45.671902,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,6,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,10,60165,17139,0,0,0,0,0,"Windyreed Quest Credit - Script - Kill Creature Inside Burning Hut");
+
+-- Windyreed Quest Credit (Hut 02) SAI
+SET @ENTRY := 18143;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+SET @SPELL_LIVING_FIRE := 31927; -- Living Fire
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_LIVING_FIRE,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Windyreed Quest Credit - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1915.344116,6350.488770,52.229897,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1907.135986,6353.901367,48.899532,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1911.698730,6354.161133,58.254566,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1926.308350,6360.901855,57.298611,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,5,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1921.458862,6367.373047,59.892593,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,6,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,10,60159,17139,0,0,0,0,0,"Windyreed Quest Credit - Script - Kill Creature Inside Burning Hut");
+
+-- Windyreed Quest Credit (Hut 03) SAI
+SET @ENTRY := 18144;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+SET @SPELL_LIVING_FIRE := 31927; -- Living Fire
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_LIVING_FIRE,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Windyreed Quest Credit - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1969.078369,6278.307129,56.866646,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1977.147461,6277.312988,59.912029,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1974.763306,6269.175781,51.401920,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1970.424805,6273.501953,61.741539,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,5,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,10,60157,17139,0,0,0,0,0,"Windyreed Quest Credit - Script - Kill Creature Inside Burning Hut");
+
+-- Windyreed Quest Credit (Big Hut) SAI
+SET @ENTRY := 18110;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+SET @SPELL_LIVING_FIRE := 31927; -- Living Fire
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_LIVING_FIRE,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Windyreed Quest Credit - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1816.939941,6283.669922,61.357101,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1816.94,6283.67,61.3571,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1819.71,6305.89,63.4012,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1819.55,6298.08,73.4331,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1801.45,6308.03,59.2728,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,5,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1808.88,6307.05,72.4877,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,6,0,0,0,100,0,0,0,0,0,50,182146,20000,0,0,0,0,8,0,0,0,-1794.54,6300.6,71.2263,0,"Windyreed Quest Credit - Script - Summon Hut Fire (Large)"),
+(@ENTRY*100,9,7,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,10,60166,17139,0,0,0,0,0,"Windyreed Quest Credit - Script - Kill Creatures Inside Burning Hut"),
+(@ENTRY*100,9,8,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,10,60167,17139,0,0,0,0,0,"Windyreed Quest Credit - Script - Kill Creatures Inside Burning Hut");
diff --git a/sql/old/3.3.5a/2011_10_22_14_world_sai.sql b/sql/old/3.3.5a/2011_10_22_14_world_sai.sql
new file mode 100644
index 00000000000..e64b76711b8
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_14_world_sai.sql
@@ -0,0 +1,56 @@
+-- Wazat SAI
+SET @ENTRY := 19035;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,0,20000,40000,60000,80000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wazat - OOC - Say Text 0"),
+(@ENTRY,0,1,0,1,0,100,0,60000,80000,80000,110000,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wazat - OOC - Say Text 1"),
+(@ENTRY,0,2,0,1,0,100,0,110000,130000,150000,170000,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wazat - OOC - Say Text 2");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Oh sweet, delicious, spotted eggs - you will be mine...",12,0,100,0,0,0,"Wazat"),
+(@ENTRY,1,1,"If only I could get this blasted machine working!",12,0,100,0,0,0,"Wazat"),
+(@ENTRY,2,2,"They look so delicious...",12,0,100,0,0,0,"Wazat");
+
+-- Wazat pathing: 11365
+SET @GUID := 68343;
+SET @PATH := @GUID * 10;
+UPDATE `creature` SET `MovementType`=2,`position_x`=-2428.169922,`position_y`=6885.750000,`position_z`=4.196100 WHERE `guid`=@GUID;
+DELETE FROM `creature_addon` WHERE `guid`=@GUID;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@GUID,@PATH,1,0,'');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2428.704590,6890.355469,4.297834,20000,0,0,100,0),
+(@PATH,2,-2434.878418,6889.507813,4.266439,20000,0,0,100,0),
+(@PATH,3,-2428.169922,6885.750000,4.196100,20000,0,0,100,0);
+
+-- Windroc Matriarch SAI
+SET @ENTRY := 19055;
+SET @SPELL_EAGLE_CLAW := 30285; -- Eagle Claw
+SET @SPELL_WING_BUFFET := 32914; -- Wing Buffet
+UPDATE `creature_template` SET `AIName`='SmartAI',`InhabitType`=4,`spell1`=0 WHERE `entry`=@ENTRY; -- Always in air, of course - really? Albino Snake as mind control ability?
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,53,0,@ENTRY,1,0,0,0,1,0,0,0,0,0,0,0, 'Windroc Matriarch - Start WP movement'),
+(@ENTRY,0,1,0,1,0,100,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Windroc Matriarch - On Spawn - Emote Text 0"),
+(@ENTRY,0,2,0,40,0,100,0,3,@ENTRY,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Windroc Matriarch - Load script 1 at WP 3"),
+(@ENTRY,0,3,0,0,0,100,0,4000,4000,6000,6000,11,@SPELL_EAGLE_CLAW,0,0,0,0,0,2,0,0,0,0,0,0,0,"Windroc Matriarch - In Combat - Cast Eagle Claw"),
+(@ENTRY,0,4,0,0,0,100,0,7000,8000,11000,14000,11,@SPELL_WING_BUFFET,0,0,0,0,0,2,0,0,0,0,0,0,0,"Windroc Matriarch - In Combat - Cast Wing Buffet"),
+-- Script 1
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,54,1000000000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Windroc Matriarch - Script - Pause Path'),
+(@ENTRY*100,9,1,0,0,0,100,1,0,0,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Windroc Matriarch - On Script - Set Faction Aggressive"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0,'Windroc Matriarch - Script - Remove unit_flag OOC_NOT_ATTACKABLE'),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,20,1,0,0,0,0,0,21,0,0,0,0,0,0,0,'Windroc Matriarch - Script - Attack Nearest Player');
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Emote blabla",16,0,100,0,0,0,"Windroc Matriarch");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,-2422.512695,6910.643555,20.124718,'Windroc Matriarch WP 1'),
+(@ENTRY,2,-2420.722168,6901.208008,15.225160,'Windroc Matriarch WP 2'),
+(@ENTRY,3,-2400.643066,6887.521973,-1.384245,'Windroc Matriarch WP 3');
diff --git a/sql/old/3.3.5a/2011_10_22_15_world_core_script_support.sql b/sql/old/3.3.5a/2011_10_22_15_world_core_script_support.sql
new file mode 100644
index 00000000000..1d1c59c69d0
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_15_world_core_script_support.sql
@@ -0,0 +1,36 @@
+-- Kurenai Captive
+UPDATE `creature_template` SET `ScriptName`='npc_kurenai_captive' WHERE `entry`=18209;
+DELETE FROM `creature_template_addon` WHERE `entry`=18209;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (18209,0,0,8,0,0,''); -- Kneel
+DELETE FROM `script_waypoint` WHERE `entry`=18209;
+INSERT INTO `script_waypoint` (`entry`,`pointid`,`location_x`,`location_y`,`location_z`,`waittime`,`point_comment`) VALUES
+(18209,1,-1518.593872,8469.956055,-4.101756,0,''),
+(18209,2,-1511.784546,8480.531250,-4.033919,0,''),
+(18209,3,-1513.447754,8509.764698,-0.109888,0,''),
+(18209,4,-1498.857788,8508.805664,0.844676,0,''),
+(18209,5,-1454.215088,8495.808594,4.912439,0,''),
+(18209,6,-1437.483521,8504.165039,6.879123,0,''),
+(18209,7,-1382.29,8539.87,11.139,7500,''),
+(18209,8,-1361.22,8521.44,11.144,0,''),
+(18209,9,-1324.8,8510.69,13.05,0,''),
+(18209,10,-1312.08,8492.71,14.235,0,'');
+
+DELETE FROM `script_texts` WHERE `entry` BETWEEN -1000482 AND -1000488;
+DELETE FROM `creature_text` WHERE `entry` IN (18209,18210);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+-- Maghar Captive
+(18210,0,0,"Look out!",12,0,100,0,0,0,"Maghar Captive"),
+(18210,1,0,"Don't let them escape! Kill the strong one first!",12,0,100,0,0,0,"Maghar Captive"),
+(18210,2,0,"More of them are coming! Watch out!",12,0,100,0,0,0,"Maghar Captive"),
+(18210,3,0,"Where do you think you're going? Kill them all!",12,0,100,0,0,0,"Maghar Captive"),
+(18210,4,0,"Ride the lightning, filth!",12,0,100,0,0,0,"Maghar Captive"),
+(18210,5,0,"FROST SHOCK!",14,0,100,0,0,0,"Maghar Captive"),
+(18210,6,0,"It is best that we split up now, in case they send more after us. Hopefully one of us will make it back to Garrosh. Farewell, stranger.",12,0,100,0,0,0,"Maghar Captive"),
+-- Kurenai Captive
+(18209,0,0,"Look out!",12,0,100,0,0,0,"Kurenai Captive"),
+(18209,1,0,"Don't let them escape! Kill the strong one first!",12,0,100,0,0,0,"Kurenai Captive"),
+(18209,2,0,"More of them are coming! Watch out!",12,0,100,0,0,0,"Kurenai Captive"),
+(18209,3,0,"Where do you think you're going? Kill them all!",12,0,100,0,0,0,"Kurenai Captive"),
+(18209,4,0,"Ride the lightning, filth!",12,0,100,0,0,0,"Kurenai Captive"),
+(18209,5,0,"FROST SHOCK!",14,0,100,0,0,0,"Kurenai Captive"),
+(18209,6,0,"Up ahead is the road to Telaar. We will split up when we reach the fork as they will surely send more Murkblood after us. Hopefully one of us makes it back to Telaar alive.",14,0,100,0,0,0,"Kurenai Captive");
diff --git a/sql/old/3.3.5a/2011_10_22_16_world_core_script_support.sql b/sql/old/3.3.5a/2011_10_22_16_world_core_script_support.sql
new file mode 100644
index 00000000000..c6049d49e19
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_16_world_core_script_support.sql
@@ -0,0 +1,10 @@
+SET @ENTRY := 18428;
+UPDATE `gameobject_template` SET `ScriptName`='go_warmaul_prison' WHERE `entry` IN (182484,182486,182487,182488,182489,182490,182491,182492,182493,182494,182495,182496,182497,182498,182499,182501,182502,182503,182504);
+UPDATE `quest_template` SET `ReqSpellCast1`=0 WHERE `entry`=9948;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Death to the ogres!",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,1,1,"Many thanks, hero!",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,2,2,"One day, a hero will rise and lift the orcs up to their former glory.",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,3,3,"Spirits watch over you, $R!",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,4,4,"Thank you, $R! Your service to the Mag'har will not be forgotten.",12,0,100,0,0,0,"Mag'har Prisoner");
diff --git a/sql/old/3.3.5a/2011_10_22_17_world_conditions.sql b/sql/old/3.3.5a/2011_10_22_17_world_conditions.sql
new file mode 100644
index 00000000000..db824c4ec3f
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_17_world_conditions.sql
@@ -0,0 +1,5 @@
+-- Spell Place Kil'sorrow Banner can not only be cast on Warmaul Ogres
+DELETE FROM `conditions` WHERE `SourceEntry` IN (32314) AND `ConditionValue2` IN (17138,18064);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,0,32314,0,18,1,17138,0,0,'',"Spell Place Kil'sorrow Banner can not only be cast on Warmaul Ogres"), -- Warmaul Reaver
+(13,0,32314,1,18,1,18064,0,0,'',"Spell Place Kil'sorrow Banner can not only be cast on Warmaul Ogres"); -- Warmaul Shaman
diff --git a/sql/old/3.3.5a/2011_10_22_18_world_misc.sql b/sql/old/3.3.5a/2011_10_22_18_world_misc.sql
new file mode 100644
index 00000000000..c0c118eeb78
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_18_world_misc.sql
@@ -0,0 +1,104 @@
+-- Ancient Orc Ancestor SAI
+SET @ENTRY := 18688;
+SET @SPELL_SOUL_MIRROR := 34063; -- Soul Mirror
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,0,@SPELL_SOUL_MIRROR,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Ancient Orc Ancestor - On Spellhit - Run Script"),
+(@ENTRY,0,1,0,0,0,100,0,20000,40000,60000,180000,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ancient Orc Ancestor - Timed - Say Line (random)"),
+(@ENTRY,0,2,0,6,0,100,0,0,0,0,0,12,19480,3,120000,0,0,0,1,0,0,0,0,0,0,0,"Ancient Orc Ancestor - On Death - Summon Darkened Spirit"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Ancient Orc Ancestor - Script - Say Line (random)"),
+(@ENTRY*100,9,1,0,0,0,100,1,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ancient Orc Ancestor - Script - Evade"),
+(@ENTRY*100,9,2,0,0,0,100,1,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ancient Orc Ancestor - Script - Prevent Combat Movement"),
+(@ENTRY*100,9,3,0,0,0,100,0,2000,2000,0,0,37,19480,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ancient Orc Ancestor - Script - Die");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Ancestors watch over you, kind one...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,0,1,"Cease your crying! STOP!",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,0,2,"I remember everything...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,0,3,"It cannot be...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,0,4,"It comes for you...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,0,"The spirits call... I am consumed.",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,1,"Cannot control... It draws me in... The void grows...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,2,"It is dying. It is dying. It is dying.",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,3,"The cold embrace awaits...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,4,"The pain is unbearable.",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,5,"What is happening to me?",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,6,"What is this trickery? I... ARGH...",12,0,100,21,0,0,"Ancient Orc Ancestor"),
+(@ENTRY,1,7,"What will become of us when it falls?",12,0,100,21,0,0,"Ancient Orc Ancestor");
+
+-- Voidwraith SAI
+-- These are somehow summoned but can't find any info on sniffs or google..
+SET @ENTRY := 18659;
+UPDATE `creature_template` SET `AIName`='SmartAI',`faction_A`=91,`faction_H`=91,`dmgschool`=5 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+UPDATE `creature` SET `MovementType`=0,`spawndist`=0 WHERE `id`=18662; -- Ancestors
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,6,0,100,0,0,0,0,0,12,19480,3,120000,0,0,0,1,0,0,0,0,0,0,0,"Voidwraith - On Death - Summon Darkened Spirit");
+
+-- Darkened Spirit SAI
+SET @ENTRY := 19480;
+SET @SPELL_CONSUMING_SHADOWS := 31293; -- Consuming Shadows
+UPDATE `creature_template` SET `AIName`='SmartAI',`faction_A`=91,`faction_H`=91,`dmgschool`=5 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,5000,7000,11000,15000,11,@SPELL_CONSUMING_SHADOWS,0,0,0,0,0,2,0,0,0,0,0,0,0,"Darkened Spirit - In Combat - Cast Consuming Shadows"),
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darkened Spirit - Force Despawn 5 Seconds After Death"),
+(@ENTRY,0,2,0,1,0,100,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Darkened Spirit - Timed - Say Line");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"What... What have I become? Arrrgghhh...",12,0,100,21,0,0,"Darkened Spirit");
+
+-- Spell Soul Mirror can only be cast at Ancient Orc Spectator
+DELETE FROM `conditions` WHERE `SourceEntry`=34063 AND `ConditionValue2`=18688;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,0,34063,0,18,1,18688,0,0,'',"Spell Soul Mirror can only be cast at Ancient Orc Spectator");
+
+-- these still need waypoints and proper aura
+DELETE FROM `creature` WHERE `id`=18688;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES
+(66946,18688,530,1,1,0,0,-2225.73,8586.74,-10.361,0.261799,300,0,0,6542,0,0,0,0,0),
+(66947,18688,530,1,1,0,0,-1452.95,8533.52,12.8692,3.33358,300,0,0,6542,0,0,0,0,0),
+(14337,18688,530,1,1,0,0,-1637.01,8569.54,-12.3352,5.65003,300,0,0,6326,0,0,0,0,0),
+(14338,18688,530,1,1,0,0,-2300.29,8571.08,-22.0957,5.65003,300,0,0,6326,0,0,0,0,0),
+(14339,18688,530,1,1,0,0,-2407.95,8655.04,-19.7505,5.65003,300,0,0,6542,0,0,0,0,0),
+(14340,18688,530,1,1,0,0,-2530.94,8629.31,-25.5884,5.65003,300,0,0,6326,0,0,0,0,0),
+(14341,18688,530,1,1,0,0,-2571.84,8558.23,-33.6043,5.65003,300,0,0,6542,0,0,0,0,0),
+(14342,18688,530,1,1,0,0,-2218.21,8513.48,-17.1368,5.65003,300,0,0,6542,0,0,0,0,0),
+(14343,18688,530,1,1,0,0,-2114.42,8743.48,11.699,5.65003,300,0,0,6326,0,0,0,0,0),
+(14977,18688,530,1,1,0,0,-2017.31,8743.44,19.5169,5.65003,300,0,0,6542,0,0,0,0,0),
+(14978,18688,530,1,1,0,0,-1812.61,8813.18,30.2393,6.13478,300,0,0,6326,0,0,0,0,0),
+(14979,18688,530,1,1,0,0,-1750.87,8877.25,31.67,6.13478,300,0,0,6326,0,0,0,0,0),
+(14980,18688,530,1,1,0,0,-1539.61,8686.33,24.643,6.13478,300,0,0,6326,0,0,0,0,0),
+(14981,18688,530,1,1,0,0,-1653.31,8494.49,-12.8156,6.13478,300,0,0,6542,0,0,0,0,0),
+(14982,18688,530,1,1,0,0,-1579.32,8426.67,-9.33804,6.13478,300,0,0,6326,0,0,0,0,0),
+(14983,18688,530,1,1,0,0,-1040.87,7895.8,22.8202,6.13478,300,0,0,6326,0,0,0,0,0),
+(14984,18688,530,1,1,0,0,-1059.54,7750.35,25.8758,6.13478,300,0,0,6326,0,0,0,0,0),
+(14985,18688,530,1,1,0,0,-908.965,7783.44,40.1036,6.13478,300,0,0,6326,0,0,0,0,0),
+(20556,18688,530,1,1,0,0,-886.413,7824.75,40.0754,6.13478,300,0,0,6542,0,0,0,0,0),
+(21776,18688,530,1,1,0,0,-878.863,7881.25,38.6467,6.13478,300,0,0,6326,0,0,0,0,0),
+(23111,18688,530,1,1,0,0,-1866.27,8098.74,-20.3459,6.13478,300,0,0,6542,0,0,0,0,0),
+(24670,18688,530,1,1,0,0,-2106.82,8191.13,-15.5604,6.13478,300,0,0,6542,0,0,0,0,0),
+(24761,18688,530,1,1,0,0,-2084.75,8286.22,-11.4935,6.13478,300,0,0,6542,0,0,0,0,0),
+(24794,18688,530,1,1,0,0,-2206.14,8306.9,-26.191,6.13478,300,0,0,6542,0,0,0,0,0),
+(25100,18688,530,1,1,0,0,-2256,8478.68,-24.6155,6.13478,300,0,0,6542,0,0,0,0,0),
+(26559,18688,530,1,1,0,0,-2336.12,8477.34,-30.3842,6.13478,300,0,0,6326,0,0,0,0,0),
+(26564,18688,530,1,1,0,0,-2350.53,8641.59,-15.5674,6.13478,300,0,0,6326,0,0,0,0,0),
+(31807,18688,530,1,1,0,0,-2379.14,8531.65,-28.7321,6.13478,300,0,0,6326,0,0,0,0,0),
+(31833,18688,530,1,1,0,0,-2411.61,8492.45,-33.4541,6.13478,300,0,0,6542,0,0,0,0,0),
+(32072,18688,530,1,1,0,0,-2416.02,8330.76,-37.6002,6.13478,300,0,0,6542,0,0,0,0,0),
+(40475,18688,530,1,1,0,0,-2336.04,8288.74,-36.3567,1.72398,300,0,0,6326,0,0,0,0,0),
+(40476,18688,530,1,1,0,0,-2336.11,8225.27,-35.7699,1.72398,300,0,0,6326,0,0,0,0,0),
+(40703,18688,530,1,1,0,0,-2258.45,8221.08,-31.2193,3.93488,300,0,0,6326,0,0,0,0,0),
+(40716,18688,530,1,1,0,0,-2203.79,8149.55,-25.1002,3.93488,300,0,0,6326,0,0,0,0,0),
+(40725,18688,530,1,1,0,0,-2184.8,8029.08,-17.6373,3.93488,300,0,0,6542,0,0,0,0,0),
+(40727,18688,530,1,1,0,0,-2297.12,7848.94,-30.4255,3.93488,300,0,0,6326,0,0,0,0,0),
+(42893,18688,530,1,1,0,0,-2544.55,7818.57,-45.0012,3.93488,300,0,0,6326,0,0,0,0,0),
+(45204,18688,530,1,1,0,0,-2555.36,7930.22,-55.675,3.93488,300,0,0,6542,0,0,0,0,0),
+(46570,18688,530,1,1,0,0,-2622.32,7987.03,-48.9066,3.93488,300,0,0,6542,0,0,0,0,0),
+(46819,18688,530,1,1,0,0,-2126.06,8148.39,-15.8518,3.93488,300,0,0,6326,0,0,0,0,0);
diff --git a/sql/old/3.3.5a/2011_10_22_19_world_sai.sql b/sql/old/3.3.5a/2011_10_22_19_world_sai.sql
new file mode 100644
index 00000000000..bb873c461ea
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_22_19_world_sai.sql
@@ -0,0 +1,20 @@
+-- Quest 12860, 12927 "Data Mining"
+SET @CREDIT := 29752;
+SET @SPELL_CREDIT := 59728;
+SET @SPELL := 55161;
+SET @NPC := 29746;
+
+UPDATE `creature_template` SET `AIName`='SmartAI', `InhabitType`=7 WHERE `entry`=@NPC;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@NPC AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@NPC,0,0,1,8,0,100,0,@SPELL_CREDIT,0,0,0,33,@CREDIT,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Databank Core - On spell Retrieve Data hit - Give kill credit for quest Data Mining'),
+(@NPC,0,1,0,61,0,100,0,0,0,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Databank Core - On spell Retrieve Data hit - Despawn (Linked)');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=@SPELL;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@SPELL;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=@SPELL_CREDIT;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@SPELL_CREDIT;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(17,0,@SPELL,0,29,@NPC,20,0,0, '', 'Spell Retrieve Data will only be cast near Databank'),
+(13,0,@SPELL,0,18,1,@NPC,0,0, '', 'Spell Retrieve Data does only target Databank');
diff --git a/sql/old/3.3.5a/2011_10_23_00_world_sai.sql b/sql/old/3.3.5a/2011_10_23_00_world_sai.sql
new file mode 100644
index 00000000000..0d90c2ac9ce
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_00_world_sai.sql
@@ -0,0 +1,57 @@
+-- Horde
+
+-- Fix quest 8359 "Flexing for Nougat"
+DELETE FROM `smart_scripts` WHERE `entryorguid`=6929 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(6929,0,0,1,62,0,100,0,441,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Gryshka - On gossip option 0 select - Close gossip'),
+(6929,0,1,0,61,0,100,0,0,0,0,0,85,24751,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Gryshka - On gossip option 0 select - Player cast Trick or Treat on self'),
+(6929,0,2,0,22,0,100,0,41,0,0,0,33,6929,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Gryshka - On flex emote - Give kill credit');
+
+-- Fix quest 8358 "Incoming Gundrop"
+UPDATE creature_template SET `AIName`= 'SmartAI' WHERE `entry`=11814;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=11814 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(11814,0,1,0,22,0,100,0,264,0,0,0,33,11814,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Kali Remik - On train emote - Give kill credit');
+
+-- Fix quest 8354 "Chicken Clucking for a Mint"
+DELETE FROM `smart_scripts` WHERE `entryorguid`=6741 and `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(6741,0,0,1,62,0,100,0,348,2,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Norman - On gossip option 2 select - Close gossip'),
+(6741,0,1,0,61,0,100,0,0,0,0,0,85,24751,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Norman - On gossip option 2 select - Player cast Trick or Treat on self'),
+(6741,0,2,0,22,0,100,0,22,0,0,0,33,6741,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Norman - On chicken emote - Give kill credit');
+
+-- Fix quest 8360 "Dancing for Marzipan"
+UPDATE creature_template SET `AIName`= 'SmartAI' WHERE `entry`=6746;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=6746 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(6746,0,1,0,22,0,100,0,34,0,0,0,33,6746,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Pala - On dance emote - Give kill credit');
+
+-- Alliance
+
+-- Fix quest 8356 "Flexing for Nougat"
+DELETE FROM `smart_scripts` WHERE `entryorguid`=6740 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(6740,0,0,1,62,0,100,0,342,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Allison - On gossip option 0 select - Close gossip'),
+(6740,0,1,0,61,0,100,0,0,0,0,0,85,24751,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Innkeeper Allison - On gossip option 0 select - Player cast Trick or Treat on self'),
+(6740,0,2,0,22,0,100,0,41,0,0,0,33,6740,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Allison - On flex emote - Give kill credit');
+
+-- Fix quest 8358 "Incoming Gundrop"
+UPDATE creature_template SET `AIName`= 'SmartAI' WHERE `entry`=6826;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=6826 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(6826,0,1,0,22,0,100,0,264,0,0,0,33,6826,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Talvash del Kissel - On train emote - Give kill credit');
+
+-- Fix quest 8360 "Dancing for Marzipan"
+UPDATE creature_template SET `AIName`= 'SmartAI' WHERE `entry`=6735;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=6735 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(6735,0,0,1,62,0,100,0,1581,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Saelienne - On gossip option 0 select - Close gossip'),
+(6735,0,1,0,61,0,100,0,0,0,0,0,85,24751,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Saelienne - On gossip option 0 select - Player cast Trick or Treat on self'),
+(6735,0,2,0,22,0,100,0,34,0,0,0,33,6735,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Saelienne - On dance emote - Give kill credit');
+
+-- Fix quest 8353 "Chicken Clucking for a Mint"
+DELETE FROM `smart_scripts` WHERE `entryorguid`=5111 and `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(5111,0,0,1,62,0,100,0,345,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Firebrew - On gossip option 0 select - Close gossip'),
+(5111,0,1,0,61,0,100,0,0,0,0,0,85,24751,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Firebrew - On gossip option 0 select - Player cast Trick or Treat on self'),
+(5111,0,2,0,22,0,100,0,22,0,0,0,33,5111,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Innkeeper Firebrew - On chicken emote - Give kill credit');
diff --git a/sql/old/3.3.5a/2011_10_23_01_world_sai.sql b/sql/old/3.3.5a/2011_10_23_01_world_sai.sql
new file mode 100644
index 00000000000..89eba23683a
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_01_world_sai.sql
@@ -0,0 +1,8 @@
+-- Quest 'Ruthless Cunning' exploit fix
+-- Spell Place Kil'sorrow Banner can not only be cast on Warmaul Ogres
+DELETE FROM `conditions` WHERE `SourceEntry` IN (32307) AND `ConditionValue2` IN (17148,17147,17146,18391);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,0,32307,0,18,1,17148,0,0,'',"Spell Place Kil'sorrow Banner can not only be cast on Kil'sorrow mobs"), -- Kil'sorrow Deathsworn
+(13,0,32307,1,18,1,17147,0,0,'',"Spell Place Kil'sorrow Banner can not only be cast on Kil'sorrow mobs"), -- Kil'sorrow Cultist
+(13,0,32307,2,18,1,17146,0,0,'',"Spell Place Kil'sorrow Banner can not only be cast on Kil'sorrow mobs"), -- Kil'sorrow Spellbinder
+(13,0,32307,3,18,1,18391,0,0,'',"Spell Place Kil'sorrow Banner can not only be cast on Kil'sorrow mobs"); -- Giselda the Crone
diff --git a/sql/old/3.3.5a/2011_10_23_02_world_sai.sql b/sql/old/3.3.5a/2011_10_23_02_world_sai.sql
new file mode 100644
index 00000000000..a6a5da03bbb
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_02_world_sai.sql
@@ -0,0 +1,9 @@
+-- Scarlet Onslaught Prisoner SAI
+SET @ENTRY := 27349;
+SET @SPELL_FLASK_OF_BLIGHT := 48188;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL_FLASK_OF_BLIGHT,0,0,0,33,27253,0,0,0,0,0,7,0,0,0,0,0,0,0,"Scarlet Onslaught Prisoner - On Spellhit - Quest Credit"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Onslaught Prisoner - In Combat - Forced Despawn");
diff --git a/sql/old/3.3.5a/2011_10_23_03_world_sai.sql b/sql/old/3.3.5a/2011_10_23_03_world_sai.sql
new file mode 100644
index 00000000000..d38e0a0b4fd
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_03_world_sai.sql
@@ -0,0 +1,159 @@
+-- Shattered Rumbler SAI
+SET @ENTRY := 17157;
+SET @ENTRY_MINION := 18181; -- Minion of Gurok
+SET @SPELL_EARTH_RUMBLE := 33840; -- Earth Rumble
+SET @SPELL_THROW_GORDAWGS_BULDER := 32001; -- Throw Gordawgs Boulder
+UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`=''WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100 AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,8000,9000,11,@SPELL_EARTH_RUMBLE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Shattered Rumbler - In Combat - Cast Earth Rumble"),
+(@ENTRY,0,1,0,8,0,100,1,@SPELL_THROW_GORDAWGS_BULDER,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Shattered Rumbler - On Spellhit - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,12,@ENTRY_MINION,4,20000,0,0,0,1,0,0,0,0,0,0,0,"Shattered Rumbler - Script - Summon Minion of Gurok"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,12,@ENTRY_MINION,4,20000,0,0,0,1,0,0,0,0,0,0,0,"Shattered Rumbler - Script - Summon Minion of Gurok"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,12,@ENTRY_MINION,4,20000,0,0,0,1,0,0,0,0,0,0,0,"Shattered Rumbler - Script - Summon Minion of Gurok"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shattered Rumbler - Script - Die");
+
+-- Minion of Gurok SAI
+SET @ENTRY := 18181;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Minion of Gurok - Out of Combat - Set Random Movement");
+
+-- Spell Throw Gordawgs Boulder can only be cast at Shattered Rumbler
+DELETE FROM `conditions` WHERE `SourceEntry`=24501 AND `ConditionValue2`=17157;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(18,0,24501,0,24,1,17157,0,0,'',"Item Gordawgs Boulder can only be used if target is Shattered Rumbler");
+
+
+-- Lump SAI
+SET @ENTRY := 18351;
+SET @QUEST := 9918;
+SET @GOSSIP := 21289;
+SET @SPELL_SLEEPING_SLEEP := 42648; -- Sleeping Sleep
+SET @SPELL_SHOULDER_CHARGE := 31994; -- Shoulder Charge
+SET @SPELL_SPEAR_THROW := 32248; -- Spear Throw
+UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='',`gossip_menu_id`=@GOSSIP+1,`faction_A`=1711,`faction_H`=1711,`unit_flags`=`unit_flags`|528 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,@SPELL_SLEEPING_SLEEP,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - Out Of Combat - Cast Sleeping Sleep"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Lump - On Aggro - Say Line (random)"),
+(@ENTRY,0,2,0,62,0,100,0,@GOSSIP+4,0,0,0,33,18354,0,0,0,0,0,7,0,0,0,0,0,0,0,"Lump - On Gossip Select - Give Quest Credit"),
+(@ENTRY,0,3,0,2,0,100,1,0,30,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Lump - On 30% HP - Run Script"),
+(@ENTRY*100,9,0,0,2,0,100,1,0,0,0,0,2,1080,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - On Script - Set Faction Friendly"),
+(@ENTRY*100,9,1,0,2,0,100,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - On Script - Say Line 1"),
+(@ENTRY*100,9,2,0,2,0,100,1,1000,1000,0,0,5,447,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - On Script - Emote ONESHOT_FLY_SIT_GROUND_DOWN"), -- He wont sit down, no matter which emote I use - probably due evading
+(@ENTRY*100,9,3,0,2,0,100,1,0,0,0,0,20,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - On Script - Stop auto-attack"),
+(@ENTRY*100,9,4,0,2,0,100,1,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - On Script - Evade"),
+(@ENTRY*100,9,5,0,2,0,100,1,0,0,0,0,28,@SPELL_SLEEPING_SLEEP,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lump - On Script - Remove Aura Sleeping Sleep"), -- Prevent gaining it - were leaving combat!
+(@ENTRY,0,4,0,9,0,100,0,8,25,1500,2000,11,@SPELL_SHOULDER_CHARGE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lump - On Player Range - Cast Shoulder Charge"),
+(@ENTRY,0,5,0,9,0,100,0,5,40,1500,2000,11,@SPELL_SPEAR_THROW,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lump - On Player Range - Cast Spear Throw");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"In Nagrand, food hunt ogre!",12,0,100,0,0,0,"Lump"),
+(@ENTRY,0,1,"You taste good with maybe a little salt and pepper.",12,0,100,0,0,0,"Lump"),
+(@ENTRY,1,2,"OK, OK! Lump give up!",12,0,100,0,0,0,"Lump");
+
+-- Actual story menu
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+1 AND `text_id`=9352;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+1,9352);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+2 AND `text_id`=9353;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+2,9353);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+3 AND `text_id`=9354;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+3,9354);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+4 AND `text_id`=9355;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+4,9355);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+5 AND `text_id`=9356;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+5,9356);
+
+-- Insert option menu
+DELETE FROM `gossip_menu_option` WHERE `menu_id` BETWEEN @GOSSIP+1 AND @GOSSIP+4;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(@GOSSIP+1,0,0,"I need answers, ogre!",1,1,@GOSSIP+2),
+(@GOSSIP+2,1,0,"Why are the Boulderfist out this far? You know that this is Kurenai territory.",1,1,@GOSSIP+3),
+(@GOSSIP+3,2,0,"And you think you can just eat anything you want? You're obviously trying to eat the Broken of Telaar.",1,1,@GOSSIP+4),
+(@GOSSIP+4,3,0,"This means war, Lump! War I say!",1,1,@GOSSIP+5);
+
+-- Only show first gossip if player is on quest Not On My Watch!
+DELETE FROM `conditions` WHERE `SourceGroup`=@GOSSIP+1 AND `ConditionValue1`=@QUEST AND `SourceTypeOrReferenceId`=15;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@GOSSIP+1,0,0,9,@QUEST,0,0,0,'',"Only show first gossip if player is on quest Not On My Watch!");
+
+
+-- Wild Sparrowhawk SAI
+SET @ENTRY := 22979;
+SET @SPELL_SPARROWHAWK_NET := 39810; -- Sparrowhawk Net
+UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='',`InhabitType`=4 WHERE `entry`=@ENTRY; -- Always in air
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_SPARROWHAWK_NET,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Wild Sparrowhawk - On Spellhit - Run Script"),
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,28,@SPELL_SPARROWHAWK_NET,2,0,0,0,0,1,0,0,0,0,0,0,0,"Wild Sparrowhawk - On Death - Remove Aura Sparrowhawk Net"),
+(@ENTRY,0,2,0,6,0,100,0,0,0,0,0,41,10,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wild Sparrowhawk - Force Despawn 8 Seconds After Death'),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wild Sparrowhawk - On Script - Flee For Assist"), -- This is how it should work - there is no flee function in event_scripts, so can't do it blizzlike (event_scripts 39812)
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,28,@SPELL_SPARROWHAWK_NET,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wild Sparrowhawk - On Script - Remove Aura Sparrowhawk Net"), -- Remove it and add it back later
+(@ENTRY*100,9,2,0,0,0,100,0,11000,11000,0,0,56,32320,1,0,0,0,0,7,0,0,0,0,0,0,0,"Wild Sparrowhawk - On Script - Add Item Captured Sparrowhawk"),
+(@ENTRY*100,9,3,0,0,0,100,0,11000,11000,0,0,37,0,1,0,0,0,0,1,0,0,0,0,0,0,0,"Wild Sparrowhawk - On Script - Die");
+
+-- Spell Sparrowhawk Net can only be cast at Wild Sparrowhawk
+DELETE FROM `conditions` WHERE `SourceEntry`=32321 AND `ConditionValue2`=22979 AND `SourceTypeOrReferenceId`=18;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(18,0,32321,0,24,1,22979,0,0,'',"Item Sparrowhawk Net can only be used if target is Wild Sparrowhawk");
+
+
+-- [Q] Diplomatic Measures
+SET @GOSSIP := 21295;
+SET @QUEST_HORDE := 10107;
+SET @QUEST_ALLIANCE := 10108;
+
+-- Lantresor of the Blade SAI
+SET @ENTRY := 18261;
+SET @SPELL_BUNING_BLADE_BLADEMASTER := 32281; -- Burning Blade Blademaster
+UPDATE `creature_template` SET `gossip_menu_id`=@GOSSIP+0,`AIName`='SmartAI',`ScriptName`='' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,11,@SPELL_BUNING_BLADE_BLADEMASTER,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lantrestor of the Blade - Out of Combat - Cast Burning Blade Blademaster"),
+(@ENTRY,0,1,0,62,0,100,0,@GOSSIP+7,0,0,0,26,@QUEST_ALLIANCE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Lantrestor of the Blade - On Gossip Select - Give Quest Credit"),
+(@ENTRY,0,2,0,62,0,100,0,@GOSSIP+7,0,0,0,26,@QUEST_HORDE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Lantrestor of the Blade - On Gossip Select - Give Quest Credit");
+
+-- Make the npc_text entries work properly
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+1 AND `text_id`=9362;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+1,9362);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+2 AND `text_id`=9363;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+2,9363);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+3 AND `text_id`=9364;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+3,9364);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+4 AND `text_id`=9365;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+4,9365);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+5 AND `text_id`=9366;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+5,9366);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+6 AND `text_id`=9367;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+6,9367);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+7 AND `text_id`=9368;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+7,9368);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+8 AND `text_id`=9369;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+8,9369);
+
+-- Insert menu options
+DELETE FROM `gossip_menu_option` WHERE `menu_id` BETWEEN @GOSSIP+0 AND @GOSSIP+7;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(@GOSSIP+0,0,0,"I have killed many of your ogres, Lantresor. I have no fear.",1,1,@GOSSIP+1),
+(@GOSSIP+1,1,0,"Should I know? You look like an orc to me.",1,1,@GOSSIP+2),
+(@GOSSIP+2,2,0,"And the other half?",1,1,@GOSSIP+3),
+(@GOSSIP+3,3,0,"I have heard of your kind, but I never thought to see the day when I would meet a half-breed.",1,1,@GOSSIP+4),
+(@GOSSIP+4,4,0,"My apologies. I did not mean to offend. I am here on behalf of my people.",1,1,@GOSSIP+5),
+(@GOSSIP+5,5,0,"My people ask that you pull back your Boulderfist ogres and cease all attacks on our territories. In return, we will also pull back our forces.",1,1,@GOSSIP+6),
+(@GOSSIP+6,6,0,"We will fight you until the end,then, Lantresor. We will not stand idly by as you pillage our towns and kill our people.",1,1,@GOSSIP+7),
+(@GOSSIP+7,7,0,"What do I need to do?",1,1,@GOSSIP+8);
+
+-- Conditions for gossip menu of quest Diplomatic Measures, they are grouped and thus ONE of them must be met in order for the gossip to become visible
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP+0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@GOSSIP+0,0,0,9,@QUEST_ALLIANCE,0,0,0,'',"Only show first gossip if player is on quest Diplomatic Measures (alliance)"),
+(15,@GOSSIP+0,0,1,9,@QUEST_HORDE,0,0,0,'',"Only show first gossip if player is on quest Diplomatic Measures (horde)");
diff --git a/sql/old/3.3.5a/2011_10_23_04_world_sai.sql b/sql/old/3.3.5a/2011_10_23_04_world_sai.sql
new file mode 100644
index 00000000000..27adf09d51a
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_04_world_sai.sql
@@ -0,0 +1,50 @@
+-- Altruis the Sufferer SAI
+-- [Q] Survey the Land
+-- [Q] Illidan's Pupil
+SET @ENTRY := 18417;
+SET @GOSSIP := 21304;
+SET @QUEST_SURVEY := 9991;
+SET @QUEST_PUPIL := 10646;
+UPDATE `quest_template` SET `SpecialFlags`=`SpecialFlags`|2 WHERE `entry` IN (@QUEST_SURVEY,@QUEST_PUPIL);
+UPDATE `creature_template` SET `gossip_menu_id`=@GOSSIP+0,`AIName`='SmartAI',`ScriptName`='' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+-- Survey the Land
+(@ENTRY,0,0,0,62,0,100,0,@GOSSIP+1,0,0,0,52,532,0,0,0,0,0,7,0,0,0,0,0,0,0,"Altruis the Sufferer - On Gossip Select - Activate Taxi Path"),
+(@ENTRY,0,1,0,62,0,100,0,@GOSSIP+1,0,0,0,26,@QUEST_SURVEY,0,0,0,0,0,7,0,0,0,0,0,0,0,"Altruis the Sufferer - On Gossip Select - Quest Credit"),
+-- Illidan's Pupil
+(@ENTRY,0,2,0,62,0,100,0,@GOSSIP+6,0,0,0,26,@QUEST_PUPIL,0,0,0,0,0,7,0,0,0,0,0,0,0,"Altruis the Sufferer - On Gossip Select - Give Quest Credit");
+
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+0 AND `text_id`=9427;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+1 AND `text_id`=10492;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+2 AND `text_id`=10493;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+3 AND `text_id`=10494;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+4 AND `text_id`=10495;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+5 AND `text_id`=10497;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES
+(@GOSSIP+0,9427), -- Survey the Land
+(@GOSSIP+1,10492), -- Illidan's Pupil
+(@GOSSIP+2,10493), -- Illidan's Pupil
+(@GOSSIP+3,10494), -- Illidan's Pupil
+(@GOSSIP+4,10495), -- Illidan's Pupil
+(@GOSSIP+5,10497); -- Illidan's Pupil
+
+-- Insert menu options
+DELETE FROM `gossip_menu_option` WHERE `menu_id` BETWEEN @GOSSIP+0 AND @GOSSIP+6;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+-- Survey the Land
+(@GOSSIP+0,0,0,"Well?",1,3,@GOSSIP+1),
+(@GOSSIP+1,0,0,"Ok.",1,3,0),
+-- Illidan's Pupil
+(@GOSSIP+0,1,0,"Tell me about the demon hunter training grounds at the Ruins of Karabor.",1,3,@GOSSIP+2),
+(@GOSSIP+2,0,0,"I'm listening.",1,3,@GOSSIP+3),
+(@GOSSIP+3,0,0,"Go on, please.",1,3,@GOSSIP+4),
+(@GOSSIP+4,0,0,"Interesting.",1,3,@GOSSIP+5),
+(@GOSSIP+5,0,0,"That's quite a story.",1,3,@GOSSIP+6),
+(@GOSSIP+6,0,0,"There was something else I wanted to ask you, Altruis.",1,3,@GOSSIP+0); -- Back to first page
+
+-- Conditions for gossip menu of quest Survey the Land
+DELETE FROM `conditions` WHERE `SourceGroup` IN (@GOSSIP+0,@GOSSIP+10) AND `ConditionValue1` IN (@QUEST_SURVEY,@QUEST_PUPIL);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@GOSSIP+0,0,0,9,@QUEST_SURVEY,0,0,0,'',"Only show first gossip if player is on quest Survey the Land"),
+(15,@GOSSIP+0,1,0,9,@QUEST_PUPIL,0,0,0,'',"Only show first gossip if player is on quest Illidans Pupil");
diff --git a/sql/old/3.3.5a/2011_10_23_05_world_misc.sql b/sql/old/3.3.5a/2011_10_23_05_world_misc.sql
new file mode 100644
index 00000000000..5c730c8cd18
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_05_world_misc.sql
@@ -0,0 +1,16 @@
+-- Ethereum Relay SAI
+SET @ENTRY := 20619;
+SET @SPELL_SHADOWFORM := 16592;
+SET @SPELL_ETHEREUM_RELAY := 39596;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,11,@SPELL_SHADOWFORM,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ethereum Relay - Out of Combat - Cast Shadowform"),
+(@ENTRY,0,1,0,1,0,100,1,0,0,0,0,11,@SPELL_ETHEREUM_RELAY,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ethereum Relay - Out of Combat - Cast Ethereum Relay");
+
+-- Re-add what shouldn't be deleted
+SET @Gossip = 21289;
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@Gossip AND `id`=0;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`) VALUES
+(@Gossip, 0, 0, 'I believe in you.', 1, 1);
diff --git a/sql/old/3.3.5a/2011_10_23_06_world_sai.sql b/sql/old/3.3.5a/2011_10_23_06_world_sai.sql
new file mode 100644
index 00000000000..7e0eb7e7e96
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_06_world_sai.sql
@@ -0,0 +1,44 @@
+-- Sundered Rumbler SAI
+SET @ENTRY := 18881;
+SET @SPELL_SUMMON_SUNDERED_SHARD := 35310;
+SET @SPELL_CREATE_ELEMENTAL_POWER := 34525;
+SET @SPELL_ELEMENTAL_POWERDER_EXTRACTOR := 34520;
+UPDATE `creature_template` SET `AIName`='SmartAI',`dmgschool`=3 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,@SPELL_ELEMENTAL_POWERDER_EXTRACTOR,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sundered Rumbler - On Spellhit - Set Phase 1"),
+(@ENTRY,0,1,0,6,1,100,0,0,0,0,0,11,@SPELL_CREATE_ELEMENTAL_POWER,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sundered Rumbler - On Death - Cast Create Elemental Power"),
+(@ENTRY,0,2,0,2,0,100,1,0,10,0,0,11,@SPELL_SUMMON_SUNDERED_SHARD,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sundered Rumbler - At 10% HP - Cast Summon Sundered Shard");
+
+-- Warp Aberration SAI
+SET @ENTRY := 18865;
+SET @SPELL_WARP_STORM := 36577;
+SET @SPELL_ARCANE_SHIELD := 36640;
+SET @SPELL_CREATE_ELEMENTAL_POWER := 34525;
+SET @SPELL_ELEMENTAL_POWERDER_EXTRACTOR := 34520;
+UPDATE `creature_template` SET `AIName`='SmartAI',`dmgschool`=6 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,@SPELL_ARCANE_SHIELD,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warp Aberration - On Aggro - Cast Arcane Shield"),
+(@ENTRY,0,1,0,8,0,100,1,@SPELL_ELEMENTAL_POWERDER_EXTRACTOR,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warp Aberration - On Spellhit - Set Phase 1"),
+(@ENTRY,0,2,0,6,1,100,0,0,0,0,0,11,@SPELL_CREATE_ELEMENTAL_POWER,2,0,0,0,0,1,0,0,0,0,0,0,0,"Warp Aberration - On Death - Cast Create Elemental Power"),
+(@ENTRY,0,3,0,0,0,100,0,2500,5000,30000,35000,11,@SPELL_WARP_STORM,0,0,0,0,0,2,0,0,0,0,0,0,0,"Warp Aberration - In Combat - Cast Warp Storm");
+
+-- Warp Storm SAI
+SET @ENTRY := 21322;
+SET @SPELL_WARP_STORM := 36580;
+UPDATE `creature_template` SET `AIName`='SmartAI',`modelid1`=18402,`unit_flags`=33554822 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,1,1000,1000,1000,1000,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warp Storm - On Just Summoned - Prevent Combat Movement"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,20,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warp Storm - On Aggro - Stop Auto Attack"),
+(@ENTRY,0,2,0,0,0,100,0,1000,2000,3000,5000,11,@SPELL_WARP_STORM,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warp Storm - In Combat - Cast Warp Storm");
+
+-- Conditions for quest item
+DELETE FROM `conditions` WHERE `SourceEntry` IN (28547) AND `ConditionValue2` IN (18881,18865);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(18,0,28547,0,24,1,18881,0,0,"","Item Elemental Power Extractor can only be used if target is Sundered Rumbler"),
+(18,0,28547,0,24,1,18865,0,0,"","Item Elemental Power Extractor can only be used if target is Warp Aberration");
diff --git a/sql/old/3.3.5a/2011_10_23_07_world_creature_templates.sql b/sql/old/3.3.5a/2011_10_23_07_world_creature_templates.sql
new file mode 100644
index 00000000000..08d1d0a0ec1
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_07_world_creature_templates.sql
@@ -0,0 +1,98 @@
+-- Random Stormwind NPC's
+-- Template updates
+UPDATE `creature_template` SET `minlevel`=60,`maxlevel`=60,`unit_flags`=`unit_flags`|33555200,`speed_walk`=1,`speed_run`=1.14286 WHERE `entry`=37574; -- [DND] Shaker - Small
+UPDATE `creature_template` SET `minlevel`=60,`maxlevel`=60,`unit_flags`=`unit_flags`|33555200,`speed_walk`=1,`speed_run`=1.14286 WHERE `entry`=37543; -- [DND] Shaker
+UPDATE `creature_template` SET `speed_run`=1.14286 WHERE `entry`=68; -- Stormwind City Guard
+UPDATE `creature_template` SET `speed_run`=1.14286 WHERE `entry`=4075; -- Rat
+UPDATE `creature_template` SET `unit_flags`=`unit_flags`|32768 WHERE `entry`=29093; -- Ian Drake
+UPDATE `creature_template` SET `npcflag`=`npcflag`|17 WHERE `entry`=11867; -- Woo Ping
+
+-- Model data 1436 (creature 2456 (Newton Burnside))
+UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=0,`gender`=0 WHERE `modelid` IN (1436 -- Newton Burnside
+,1437 -- John Burnside
+,1434 -- Thurman Mullby
+,1431 -- Keldric Boucher
+,5082 -- Morgan Pestle
+,2974 -- Aldwin Laughlin
+,5547 -- Ben Trias
+,3246 -- Elling Trias
+,3167 -- Stormwind City Guard
+,25901 -- Ian Drake
+,5074 -- Renato Gallina
+,7991 -- Auctioneer Chilton
+,7992 -- Auctioneer Fitch
+,5567 -- Melris Malagan
+,1525 -- Crier Goodman
+,1541 -- Thomas Miller
+,5551 -- Harlan Bagley
+,1429 -- Gunther Weller
+,11804 -- Woo Ping
+,1433 -- Roberto Pupellyverbos
+,1427 -- Frederick Stover
+,1438); -- Topper McNabb
+UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=0,`gender`=1 WHERE `modelid` IN (5545 -- Suzetta Gallina
+,5444 -- Innkeeper Allison
+,1446 -- Lina Stover
+,1448 -- Marda Weller
+,1443 -- Julia Gallina
+,1440 -- Edna Mullby
+,1445 -- Lara Moore
+,1439 -- Carla Granger
+,5446 -- Justine Demalier
+,5446 -- Stormwind City Guard
+,15594 -- Auctioneer Jaxon
+,4888 -- Stephanie Turner
+,1450 -- Olivia Burnside
+,5546 -- Elaine Trias
+,3133 -- Rebecca Laughlin
+,1444); -- Kyra Boucher
+UPDATE `creature_model_info` SET `bounding_radius`=0.25,`combat_reach`=0,`gender`=2 WHERE `modelid`=5585; -- Fuzz
+UPDATE `creature_model_info` SET `bounding_radius`=1,`combat_reach`=0,`gender`=2 WHERE `modelid` IN (1141,1418); -- Rat
+UPDATE `creature_model_info` SET `bounding_radius`=0.075,`combat_reach`=0,`gender`=2 WHERE `modelid`=24719; -- [DND] Shaker - Small
+-- Addon data
+UPDATE `creature_template_addon` SET `bytes1`=0,`bytes2`=257,`mount`=0,`emote`=0,`auras`=NULL WHERE `entry` IN
+(2456 -- Newton Burnside
+,2457 -- John Burnside
+,1285 -- Thurman Mullby
+,1286 -- Edna Mullby
+,1257 -- Keldric Boucher
+,1275 -- Kyra Boucher
+,279 -- Morgan Pestle
+,5193 -- Rebecca Laughlin
+,4974 -- Aldwin Laughlin
+,4981 -- Ben Trias
+,2455 -- Olivia Burnside
+,483 -- Elaine Trias
+,482 -- Elling Trias
+,68 -- Stormwind City Guard
+,1432 -- Renato Gallina
+,6174 -- Stephanie Turner
+,8670 -- Auctioneer Chilton
+,15659 -- Auctioneer Jaxon
+,8719 -- Auctioneer Fitch
+,12480 -- Melris Malagan
+,12481 -- Justine Demalier
+,2198 -- Crier Goodman
+,3518 -- Thomas Miller
+,1976 -- Stormwind City Patroller
+,1291 -- Carla Granger
+,1427 -- Harlan Bagley
+,1295 -- Lara Moore
+,1289 -- Gunther Weller
+,11867 -- Woo Ping
+,6740 -- Innkeeper Allison
+,1402 -- Topper McNabb
+,1287 -- Marda Weller
+,1301 -- Julia Gallina
+,277 -- Roberto Pupellyverbos
+,1431); -- Suzetta Gallina
+
+-- Frederick Stover
+-- Lina Stover
+UPDATE `creature_template_addon` SET `bytes1`=0,`bytes2`=258,`mount`=0,`emote`=0,`auras`=NULL WHERE `entry` IN (1297,1298);
+DELETE FROM `creature_template_addon` WHERE `entry` IN (37574,37543,29093,25058);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(37574,0,0,1,0, NULL), -- [DND] Shaker - Small
+(37543,0,0,1,0, NULL), -- [DND] Shaker
+(29093,0,0,257,0, NULL), -- Ian Drake
+(25058,0,3,1,0, NULL); -- Fuzz
diff --git a/sql/old/3.3.5a/2011_10_23_07_world_sai.sql b/sql/old/3.3.5a/2011_10_23_07_world_sai.sql
new file mode 100644
index 00000000000..7853b6eb411
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_07_world_sai.sql
@@ -0,0 +1,53 @@
+-- [Q] The Dwarven Spy
+SET @ENTRY := 15420;
+SET @GOSSIP := 21310;
+
+-- Waypoints
+DELETE FROM `script_waypoint` WHERE `entry`=@ENTRY;
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,9294.78,-6682.51,22.42,'Prospector Anvilward'),
+(@ENTRY,2,9298.27,-6667.99,22.42,'Prospector Anvilward'),
+(@ENTRY,3,9309.63,-6658.84,22.42,'Prospector Anvilward'),
+(@ENTRY,4,9304.43,-6649.31,26.46,'Prospector Anvilward'),
+(@ENTRY,5,9298.83,-6648,28.61,'Prospector Anvilward'),
+(@ENTRY,6,9291.06,-6653.46,31.83,'Prospector Anvilward'),
+(@ENTRY,7,9289.08,-6660.17,31.83,'Prospector Anvilward');
+
+-- Prospector Anvilward SAI
+UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='',`gossip_menu_id`=@GOSSIP WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,62,0,100,0,@GOSSIP+1,0,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,'Prospector Anvilward - On Gossip Select - Start WP'),
+(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Prospector Anvilward - On Gossip Select - Start WP'),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,83,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Prospector Anvilward - On Gossip Select - Remove npcflag'),
+(@ENTRY,0,3,0,40,0,100,0,1,@ENTRY,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Prospector Anvilward - On WP 1 - Say Line 0'),
+(@ENTRY,0,4,5,40,0,100,0,6,@ENTRY,0,0,54,2500,0,0,0,0,0,1,0,0,0,0,0,0,0,'Prospector Anvilward - On WP 6 - Pause Path'),
+(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Prospector Anvilward - On WP 6 - Say Line 1'),
+(@ENTRY,0,6,7,40,0,100,0,7,@ENTRY,0,0,54,15000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Prospector Anvilward - On WP 7 - Pause Path'),
+(@ENTRY,0,7,0,61,0,100,0,0,0,0,0,2,24,0,0,0,0,0,1,0,0,0,0,0,0,0,'Prospector Anvilward - On WP 7 - Set Faction'),
+(@ENTRY,0,8,0,1,0,100,1,10000,10000,24000,29000,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,"Prospector Anvilward - Out of Combat - Say Line 2");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Very well. Let's see what you have to show me, $N.",12,1,100,0,0,0,'Prospector Anvilward'),
+(@ENTRY,1,0,"What manner of trick is this, $r? If you seek to ambush me, I warn you I will not go down quietly!",12,1,100,0,0,0,'Prospector Anvilward'),
+(@ENTRY,2,0,"These arcane sanctums of yours are quite... interesting, Mr. Caidanis. I appreciate the information you have given me today.",12,0,100,1,0,0,'Prospector Anvilward');
+
+-- This one was missing..
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP AND `text_id`=8239;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP,8239);
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP+1 AND `text_id`=8240;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (@GOSSIP+1,8240);
+
+-- Insert menu options
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (@GOSSIP+0,@GOSSIP+1);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(@GOSSIP+0,0,0,"I need a moment of your time, sir.",1,1,@GOSSIP+1),
+(@GOSSIP+1,0,0,"Why... yes, of course. I've something to show you right inside this building, Mr. Anvilward.",1,1,0);
+
+-- Conditions for gossip menu of quest The Dwarven Spy
+DELETE FROM `conditions` WHERE `SourceGroup`=@GOSSIP+0 AND `ConditionValue1`=8483;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@GOSSIP+0,0,0,9,8483,0,0,0,'',"Only show first gossip if player is on quest The Dwarven Spy");
diff --git a/sql/old/3.3.5a/2011_10_23_08_world_sai.sql b/sql/old/3.3.5a/2011_10_23_08_world_sai.sql
new file mode 100644
index 00000000000..911168102ba
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_23_08_world_sai.sql
@@ -0,0 +1,175 @@
+SET @ENTRY := 14354; -- the little bugger Pusillin
+
+SET @SPELL_1 := 14145; -- Fire Blast
+SET @SPELL_2 := 15228; -- Fireball
+SET @SPELL_3 := 22424; -- Blast Wave
+SET @SPELL_4 := 22735; -- Spirit of Runn Tum (reflect magic)
+SET @NPC_WILDSPAWN_IMP := 13276; -- 5 of them summoned by Pusillin during fight
+
+-- Gossip menu's from npc_text
+SET @GOSSIP_1 := 6877;
+SET @GOSSIP_2 := 6878;
+SET @GOSSIP_3 := 6879;
+SET @GOSSIP_4 := 6880;
+SET @GOSSIP_5 := 6881;
+
+-- Gossip menu options
+SET @GOSSIP_OPTION_1 := 6877;
+SET @GOSSIP_OPTION_2 := 6878;
+SET @GOSSIP_OPTION_3 := 6879;
+SET @GOSSIP_OPTION_4 := 6880;
+SET @GOSSIP_OPTION_5 := 6881;
+
+SET @SCRIPT_1 := 1435400; -- gossip
+SET @SCRIPT_2 := 1435401; -- gossip
+SET @SCRIPT_3 := 1435402; -- gossip
+SET @SCRIPT_4 := 1435403; -- gossip
+SET @SCRIPT_5 := 1435404; -- fight
+
+SET @SA_SEND_GOSSIP := 98; -- SMART ACTION_SEND_GOSSIP
+
+-- SmartAI for Pusillin
+UPDATE `creature_template` SET `lootid`=@ENTRY,`gossip_menu_id`=0,`speed_run`=2.14286,`AIName`='SmartAI',`npcflag`=1 WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `MovementType`=1,`spawndist`=3,`spawntimesecs`=300 WHERE `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@SCRIPT_1,@SCRIPT_2,@SCRIPT_3,@SCRIPT_4,@SCRIPT_5) AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Pusillin - On Spawn - Set Phase 1'),
+
+ -- send gossip depending on phase
+ (@ENTRY,0,1,0,64,0,100,0,0,0,0,0,@SA_SEND_GOSSIP,@GOSSIP_1,@GOSSIP_OPTION_1,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Gossip Hello & Phase 1 - Send Gossip'),
+ (@ENTRY,0,2,0,64,1,100,0,0,0,0,0,@SA_SEND_GOSSIP,@GOSSIP_2,@GOSSIP_OPTION_2,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Gossip Hello & Phase 2 - Send Gossip'),
+ (@ENTRY,0,3,0,64,2,100,0,0,0,0,0,@SA_SEND_GOSSIP,@GOSSIP_3,@GOSSIP_OPTION_3,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Gossip Hello & Phase 3 - Send Gossip'),
+ (@ENTRY,0,4,0,64,4,100,0,0,0,0,0,@SA_SEND_GOSSIP,@GOSSIP_4,@GOSSIP_OPTION_4,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Gossip Hello & Phase 4 - Send Gossip'),
+ (@ENTRY,0,5,0,64,8,100,0,0,0,0,0,@SA_SEND_GOSSIP,@GOSSIP_5,@GOSSIP_OPTION_5,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Gossip Hello & Phase 5 - Send Gossip'),
+
+-- run script depending on phase
+(@ENTRY,0,6,0,62,0,100,0,@GOSSIP_OPTION_1,0,0,0,80,@SCRIPT_1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Gossip Select - Run Script 1'),
+(@ENTRY,0,7,0,62,1,100,0,@GOSSIP_OPTION_2,0,0,0,80,@SCRIPT_2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Gossip Select - Run Script 2'),
+(@ENTRY,0,8,0,62,2,100,0,@GOSSIP_OPTION_3,0,0,0,80,@SCRIPT_3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Gossip Select - Run Script 3'),
+(@ENTRY,0,9,0,62,4,100,0,@GOSSIP_OPTION_4,0,0,0,80,@SCRIPT_4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Gossip Select - Run Script 4'),
+(@ENTRY,0,10,0,62,8,100,0,@GOSSIP_OPTION_5,0,0,0,80,@SCRIPT_5,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Gossip Select - Run Script 5'),
+
+ -- Waypoint 3 (chit-chat 1)
+(@ENTRY,0,11,12,40,0,100,0,3,@ENTRY,0,0,55,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP3 - stop'),
+(@ENTRY,0,12,0,61,0,100,0,0,0,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP3 - Turn on Gossip flag'),
+
+-- Waypoint 14 (chit-chat 2)
+(@ENTRY,0,13,14,40,0,100,0,14,@ENTRY*10,0,0,55,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP14 - stop'),
+(@ENTRY,0,14,0,61,0,100,0,0,0,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP14 - Turn on Gossip flag'),
+
+-- Waypoint 12 (chit-chat 3)
+(@ENTRY,0,15,16,40,0,100,0,12,@ENTRY*20,0,0,55,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP12 - stop'),
+(@ENTRY,0,16,0,61,0,100,0,0,0,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP12 - Turn on Gossip flag'),
+
+-- Waypoint 7 (chit-chat 4)
+(@ENTRY,0,17,18,40,0,100,0,7,@ENTRY*30,0,0,55,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP7 - stop'),
+(@ENTRY,0,18,0,61,0,100,0,0,0,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - At WP7 - Turn on Gossip flag'),
+
+-- casts during fight
+(@ENTRY,0,19,0,0,0,100,0,1000,4250,8000,8000,11,@SPELL_1,0,0,0,0,0,2,0,0,0,0,0,0,0,'Pusillin - In Combat - Cast Fire Blast'),
+(@ENTRY,0,20,0,0,0,100,0,1000,1000,4000,4000,11,@SPELL_2,0,0,0,0,0,2,0,0,0,0,0,0,0,'Pusillin - In Combat - Cast Fireball'),
+(@ENTRY,0,21,0,0,0,100,0,2000,10000,10000,17500,11,@SPELL_3,0,0,0,0,0,2,0,0,0,0,0,0,0,'Pusillin - In Combat - Cast Blast Wave'),
+
+-- Script 1
+(@SCRIPT_1,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Script 1 - Close Gossip'),
+(@SCRIPT_1,9,1,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 1 - Turn Off Gossip Flags'),
+(@SCRIPT_1,9,2,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 1 - Say Text 0'),
+(@SCRIPT_1,9,3,0,0,0,100,0,0,0,0,0,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Pusillin - On Script 1 - Set Phase to 2'),
+(@SCRIPT_1,9,4,0,0,0,100,0,0,0,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 1 - Start Waypoint Movement'),
+
+-- Script 2
+(@SCRIPT_2,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Script 2 - Close Gossip'),
+(@SCRIPT_2,9,1,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 2 - Turn Off Gossip Flags'),
+(@SCRIPT_2,9,2,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 2 - Say Text 1'),
+(@SCRIPT_2,9,3,0,0,0,100,0,0,0,0,0,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Pusillin - On Script 2 - Set Phase to 3'),
+(@SCRIPT_2,9,4,0,0,0,100,0,0,0,0,0,53,1,@ENTRY*10,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 2 - Start Waypoint Movement'),
+
+-- Script 3
+(@SCRIPT_3,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Script 3 - Close Gossip'),
+(@SCRIPT_3,9,1,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 3 - Turn Off Gossip Flags'),
+(@SCRIPT_3,9,2,0,0,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 3 - Say Text 2'),
+(@SCRIPT_3,9,3,0,0,0,100,0,0,0,0,0,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Pusillin - On Script 3 - Set Phase to 4'),
+(@SCRIPT_3,9,4,0,0,0,100,0,0,0,0,0,53,1,@ENTRY*20,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 3 - Start Waypoint Movement'),
+
+-- Script 4
+(@SCRIPT_4,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Pusillin - On Script 4 - Close Gossip'),
+(@SCRIPT_4,9,1,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 4 - Turn Off Gossip Flags'),
+(@SCRIPT_4,9,2,0,0,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 4 - Say Text 3'),
+(@SCRIPT_4,9,3,0,0,0,100,0,0,0,0,0,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Pusillin - On Script 4 - Set Phase to 5'),
+(@SCRIPT_4,9,4,0,0,0,100,0,0,0,0,0,53,1,@ENTRY*30,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 4 - Start Waypoint Movement'),
+
+-- Script 5
+(@SCRIPT_5,9,0,0,0,0,100,0,0,0,0,0,55,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 5 - Stop Waypoint Movement'),
+(@SCRIPT_5,9,1,0,0,0,100,0,0,0,0,0,1,4,0,0,0,0,0,9,0,0,0,0,0,0,0,'Pusillin - On script 5 - Say Text 4'),
+(@SCRIPT_5,9,2,0,0,0,100,0,0,0,0,0,2,168,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 5 - Set Faction Enemy'),
+(@SCRIPT_5,9,3,0,0,0,100,0,100,100,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On script 5 - Set React State Hostile'),
+(@SCRIPT_5,9,4,0,0,0,100,0,100,100,0,0,11,@SPELL_4,1,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Script 5 - Aura Self'),
+(@SCRIPT_5,9,5,0,0,0,100,0,0,0,0,0,12,@NPC_WILDSPAWN_IMP,7,0,0,0,0,8,0,0,0,25.1447,-703.067,-12.6426,0,'Pusillin - On Script 5 - Summon Wildspawn Imp'),
+(@SCRIPT_5,9,6,0,0,0,100,0,0,0,0,0,12,@NPC_WILDSPAWN_IMP,7,0,0,0,0,8,0,0,0,13.1924,-709.858,-12.6426,0,'Pusillin - On Script 5 - Summon Wildspawn Imp'),
+(@SCRIPT_5,9,7,0,0,0,100,0,0,0,0,0,12,@NPC_WILDSPAWN_IMP,7,0,0,0,0,8,0,0,0,24.2691,-694.881,-12.6426,0,'Pusillin - On Script 5 - Summon Wildspawn Imp'),
+(@SCRIPT_5,9,8,0,0,0,100,0,0,0,0,0,12,@NPC_WILDSPAWN_IMP,7,0,0,0,0,8,0,0,0,15.6403,-690.705,-12.6426,0,'Pusillin - On Script 5 - Summon Wildspawn Imp'),
+(@SCRIPT_5,9,9,0,0,0,100,0,0,0,0,0,12,@NPC_WILDSPAWN_IMP,7,0,0,0,0,8,0,0,0,19.6062,-677.524,-12.6426,0,'Pusillin - On Script 5 - Summon Wildspawn Imp'),
+(@SCRIPT_5,9,10,0,4,0,100,0,0,0,0,0,20,1,0,0,0,0,0,21,0,0,0,0,0,0,0,'Pusillin - On Aggro - Attack Nearest Player'),
+(@SCRIPT_5,9,11,0,4,0,100,0,0,0,0,0,39,125,0,0,0,0,0,1,0,0,0,0,0,0,0,'Pusillin - On Aggro - Call for help (within 125 yards)');
+
+-- waypoints for Pusillin from sniff
+DELETE FROM `waypoints` WHERE `entry` IN (@ENTRY,@ENTRY*10,@ENTRY*20,@ENTRY*30);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,82.88,-198.508,-4.1331,'Pusillin path'),
+(@ENTRY,2,-159.153,-201.138,-4.15275,'Pusillin path'),
+(@ENTRY,3,-154.512,-276.2,-4.14787,'Pusillin path'),
+(@ENTRY*10,1,-159.64,-320.208,-4.14787,'Pusillin path'),
+(@ENTRY*10,2,-142.923,-344.111,-4.11348,'Pusillin path'),
+(@ENTRY*10,3,-84.2623,-363.37,-4.14729,'Pusillin path'),
+(@ENTRY*10,4,-71.9857,-364.048,-4.14729,'Pusillin path'),
+(@ENTRY*10,5,-53.8684,-348.615,-4.06211,'Pusillin path'),
+(@ENTRY*10,6,-31.2778,-353.235,-4.09911,'Pusillin path'),
+(@ENTRY*10,7,40.8255,-356.709,-4.12891,'Pusillin path'),
+(@ENTRY*10,8,44.4199,-357.733,-4.13713,'Pusillin path'),
+(@ENTRY*10,9,43.8367,-362.318,-4.14879,'Pusillin path'),
+(@ENTRY*10,10,36.4393,-359.959,-4.14924,'Pusillin path'),
+(@ENTRY*10,11,38.3357,-357.051,-4.13201,'Pusillin path'),
+(@ENTRY*10,12,55.7067,-349.754,-4.07173,'Pusillin path'),
+(@ENTRY*10,13,88.4046,-354.125,-4.10444,'Pusillin path'),
+(@ENTRY*10,14,113.54,-372.365,-4.08966,'Pusillin path'),
+(@ENTRY*20,1,111.71,-468.929,-2.71837,'Pusillin path'),
+(@ENTRY*20,2,111.557,-485.672,-6.88627,'Pusillin path'),
+(@ENTRY*20,3,111.29,-514.931,-6.91324,'Pusillin path'),
+(@ENTRY*20,4,111.144,-530.976,-11.0799,'Pusillin path'),
+(@ENTRY*20,5,106.029,-539.906,-11.0803,'Pusillin path'),
+(@ENTRY*20,6,92.632,-544.772,-11.1469,'Pusillin path'),
+(@ENTRY*20,7,78.5392,-545.053,-15.2469,'Pusillin path'),
+(@ENTRY*20,8,67.4856,-547.887,-15.2466,'Pusillin path'),
+(@ENTRY*20,9,54.6709,-557.626,-19.4133,'Pusillin path'),
+(@ENTRY*20,10,50.4845,-565.069,-19.4122,'Pusillin path'),
+(@ENTRY*20,11,49.8745,-586.269,-23.5734,'Pusillin path'),
+(@ENTRY*20,12,49.3262,-636.426,-25.1286,'Pusillin path'),
+(@ENTRY*30,1,39.8513,-677.459,-25.1611,'Pusillin path'),
+(@ENTRY*30,2,11.7509,-698.469,-25.1611,'Pusillin path'),
+(@ENTRY*30,3,4.38368,-694.666,-25.1611,'Pusillin path'),
+(@ENTRY*30,4,4.88613,-671.499,-12.6426,'Pusillin path'),
+(@ENTRY*30,5,8.9517,-667.447,-12.6426,'Pusillin path'),
+(@ENTRY*30,6,13.0878,-672.124,-12.6426,'Pusillin path'),
+(@ENTRY*30,7,16.2925,-701.417,-12.6426,'Pusillin path');
+
+-- add gossip menu option id's
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN(@GOSSIP_OPTION_1,@GOSSIP_OPTION_2,@GOSSIP_OPTION_3,@GOSSIP_OPTION_4,@GOSSIP_OPTION_5) AND `id`=0;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`) VALUES
+(@GOSSIP_OPTION_1,0,0,'Game? Are you crazy?',1,1),
+(@GOSSIP_OPTION_2,0,0,'Why you little...',1,1),
+(@GOSSIP_OPTION_3,0,0,'Mark my words, I will catch you, imp. And when I do!',1,1),
+(@GOSSIP_OPTION_4,0,0,'DIE!',1,1),
+(@GOSSIP_OPTION_5,0,0,'Prepare to meet your maker.',1,1);
+
+-- Pusillin texts
+DELETE FROM `creature_text` WHERE `entry`= @ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,'If you want the key, you''ll have to catch me!',12,0,0,0,0,0,'Pusillin text #1'),
+(@ENTRY,1,0,'Chase me if you dare! I run without a care!',12,0,0,0,0,0,'Pusillin text #2'),
+(@ENTRY,2,0,'Why would you ever want to harm me!? Come. Friends we can be!',12,0,0,0,0,0,'Pusillin text #3'),
+(@ENTRY,3,0,'DIE?! You make Pusillin cry!',12,0,0,0,0,0,'Pusillin text #4'),
+(@ENTRY,4,0,'Say hello to my little friends!',12,0,0,0,0,0,'Pusillin text #5');
+
+-- remove already spawned Wildspawn Imp
+DELETE FROM `creature` WHERE `guid`=56995;
diff --git a/sql/old/3.3.5a/2011_10_24_00_world_sai.sql b/sql/old/3.3.5a/2011_10_24_00_world_sai.sql
new file mode 100644
index 00000000000..30b2d026b6a
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_24_00_world_sai.sql
@@ -0,0 +1,20 @@
+-- Fix sai of Darkspear Scout after recent fixing action 60
+SET @N_DScout = 40416;
+SET @N_Voljin = 40391;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@N_DScout AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@N_DScout*100 AND `source_type`=9;
+INSERT INTO `smart_scripts`(`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`)VALUES
+(@N_DScout,0,0,0,25,0,100,0,0,0,0,0,53,1,@N_DScout,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Start waypath on spawn'),
+(@N_DScout,0,1,0,25,0,100,0,0,0,0,0,60,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Set fly = 1 on spawn'),
+(@N_DScout,0,2,0,40,0,100,0,1,@N_DScout,0,0,60,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Set fly = 0 on waypoint 1'),
+(@N_DScout,0,3,0,40,0,100,0,1,@N_DScout,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Set run = 0 on waypoint 1'),
+(@N_DScout,0,4,0,40,0,100,0,1,@N_DScout,0,0,43,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Unmount on waypoint 1'),
+(@N_DScout,0,5,0,40,0,100,0,6,@N_DScout,0,0,54,15000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Pause waypoint on waypoint 6'),
+(@N_DScout,0,6,0,40,0,100,0,6,@N_DScout,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,0.820305, 'Darkspear Scout: Change orientation on waypoint 6'),
+(@N_DScout,0,7,0,40,0,100,0,6,@N_DScout,0,0,80,@N_DScout*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Run script on waypoint 6'),
+(@N_DScout,0,8,0,40,0,100,0,9,@N_DScout,0,0,41,500,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Despawn on waypoint 9'),
+(@N_DScout*100,9,0,0,0,0,100,0,0,0,0,0,10,1,2,5,66,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Random emote 1,2,5,66'),
+(@N_DScout*100,9,1,0,0,0,50,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Random text'),
+(@N_DScout*100,9,2,0,0,0,50,0,1000,1000,0,0,1,0,0,0,0,0,0,9,@N_Voljin,0,15,0,0,0,0, 'Vol''Jin: Reply to Darkspear Scout'),
+(@N_DScout*100,9,3,0,0,0,100,0,2000,2000,0,0,10,1,2,5,66,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Random emote 1,2,5,66'),
+(@N_DScout*100,9,4,0,0,0,100,0,6000,6000,0,0,10,1,2,5,66,0,0,1,0,0,0,0,0,0,0, 'Darkspear Scout: Random emote 1,2,5,66');
diff --git a/sql/old/3.3.5a/2011_10_24_01_world_creature_text.sql b/sql/old/3.3.5a/2011_10_24_01_world_creature_text.sql
new file mode 100644
index 00000000000..a8d4a2f80db
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_24_01_world_creature_text.sql
@@ -0,0 +1,9 @@
+-- Mag'har Prisoner
+SET @ENTRY := 18428;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Death to the ogres!",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,0,1,"Many thanks, hero!",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,0,2,"One day, a hero will rise and lift the orcs up to their former glory.",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,0,3,"Spirits watch over you, $r!",12,0,100,0,0,0,"Mag'har Prisoner"),
+(@ENTRY,0,4,"Thank you, $r! Your service to the Mag'har will not be forgotten.",12,0,100,0,0,0,"Mag'har Prisoner");
diff --git a/sql/old/3.3.5a/2011_10_24_02_world_core_script_support.sql b/sql/old/3.3.5a/2011_10_24_02_world_core_script_support.sql
new file mode 100644
index 00000000000..c27d788c3f0
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_24_02_world_core_script_support.sql
@@ -0,0 +1,22 @@
+-- [Q] Of Keys and Cages
+UPDATE `gameobject_template` SET `ScriptName`='go_gjalerbron_cage' WHERE `name`='Gjalerbron Cage';
+UPDATE `gameobject_template` SET `ScriptName`='go_large_gjalerbron_cage' WHERE `entry`=186490;
+DELETE FROM `creature_text` WHERE `entry`=24035;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(24035,0,0, "Avenge my friends who have already been sacrificed",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,1, "I don't want to be sacrificed",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,2, "I don't want to be taken down into the catacombs",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,3, "I think I saw a key on one of those Gjalerbron vrykul up top.",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,4, "I think I saw a key on one of those vrykul.",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,5, "Is there no hero to rescue me?",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,6, "My thanks to you, hero",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,7, "Oh, thank you, thank you",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,8, "Please, let me out of here",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,9, "Thank goodness for you",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,10, "Thank you. I will not forget this",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,11, "The key... you have to find the key",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,12, "The vrykul are evil and must be destroyed",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,13, "They're performing unholy rites down in the catacombs, and I'm about to be the sacrifice",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,14, "This is the end.",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,15, "You have to put a stop to this madness before it's too late",12,0,100,0,0,0,"Gjalerbron Prisoner"),
+(24035,0,16, "You saved my life",12,0,100,0,0,0,"Gjalerbron Prisoner");
diff --git a/sql/old/3.3.5a/2011_10_28_00_world_version.sql b/sql/old/3.3.5a/2011_10_28_00_world_version.sql
new file mode 100644
index 00000000000..3d829193d1b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_28_00_world_version.sql
@@ -0,0 +1 @@
+ALTER TABLE `version` DROP `script_version`;
diff --git a/sql/old/3.3.5a/2011_10_29_00_world_version.sql b/sql/old/3.3.5a/2011_10_29_00_world_version.sql
new file mode 100644
index 00000000000..17a94041a33
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_00_world_version.sql
@@ -0,0 +1 @@
+UPDATE `version` SET `db_version`='TDB 335.11.43' LIMIT 1;
diff --git a/sql/old/3.3.5a/2011_10_29_01_world_gameobject_template.sql b/sql/old/3.3.5a/2011_10_29_01_world_gameobject_template.sql
new file mode 100644
index 00000000000..744a549eebd
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_01_world_gameobject_template.sql
@@ -0,0 +1,9 @@
+-- Size adjustment on a hand-made template
+UPDATE `gameobject_template` SET `size`=2, `WDBVerified`=-1 WHERE `entry`=194328;
+-- Add some missing templates, need WDB data (data1/lootId is guessed based on logic sequence, rest is copied based on other templates of the chest)
+DELETE FROM `gameobject_template` WHERE `entry` IN(194326,194329,194330);
+INSERT INTO `gameobject_template` (`entry`,`type`,`displayId`,`name`,`size`,`data0`,`data1`,`data3`,`data11`,`data13`,`data15`,`WDBVerified`) VALUES
+(194326,3,8628,'Freya\'s Gift',2,1634,27080,1,1,1,1,-1),
+(194329,3,8628,'Freya\'s Gift',2,1634,27082,1,1,1,1,-1),
+(194330,3,8628,'Freya\'s Gift',2,1634,27083,1,1,1,1,-1);
+
diff --git a/sql/old/3.3.5a/2011_10_29_02_world_gameobject_template.sql b/sql/old/3.3.5a/2011_10_29_02_world_gameobject_template.sql
new file mode 100644
index 00000000000..9134a66ee2b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_02_world_gameobject_template.sql
@@ -0,0 +1 @@
+UPDATE `gameobject_template` SET `ScriptName`= 'go_massive_seaforium_charge' WHERE `entry` IN (195235,195331);
diff --git a/sql/old/3.3.5a/2011_10_29_03_world_gameobject_template.sql b/sql/old/3.3.5a/2011_10_29_03_world_gameobject_template.sql
new file mode 100644
index 00000000000..6b73da94441
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_03_world_gameobject_template.sql
@@ -0,0 +1,5 @@
+-- 25 man chest loot IDs
+UPDATE `gameobject_template` SET `data1`=26961 WHERE `entry`=194330;
+UPDATE `gameobject_template` SET `data1`=26960 WHERE `entry`=194329;
+UPDATE `gameobject_template` SET `data1`=26959 WHERE `entry`=194328;
+
diff --git a/sql/old/3.3.5a/2011_10_29_04_world_linked_respawn.sql b/sql/old/3.3.5a/2011_10_29_04_world_linked_respawn.sql
new file mode 100644
index 00000000000..94d2c0d730d
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_04_world_linked_respawn.sql
@@ -0,0 +1,7 @@
+DELETE FROM `linked_respawn` WHERE `linkedGuid`=126982 AND `guid` IN (126978,126971,126977,126969,126968);
+INSERT INTO `linked_respawn` (`guid`, `linkedGuid`) VALUES
+(126978, 126982),
+(126971, 126982),
+(126977, 126982),
+(126969, 126982),
+(126968, 126982);
diff --git a/sql/old/3.3.5a/2011_10_29_05_world_sai.sql b/sql/old/3.3.5a/2011_10_29_05_world_sai.sql
new file mode 100644
index 00000000000..fc17ca8a1a7
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_05_world_sai.sql
@@ -0,0 +1,26 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceEntry`=33581; -- item
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (43315,43371); -- spell
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=43315; -- spell2
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+-- (13, 0, 43315, 0, 18, 1, 24238, 5, 0, '', 'Only use Insult on Bjorn Halgurdsson'),
+-- (18, 0, 33581, 0, 24, 1, 24238, 0, 0, '', 'Only use Insult on Bjorn Halgurdsson'),
+(17, 0, 43315, 0, 19, 24238, 0, 0, 63, '', 'Vrykul Insult - Bjorn Halgurdsson'), -- "Invalid Target" trinity_string
+(13, 0, 43371, 0, 18, 1, 0, 0, 0, '', 'Bjorn Kill Credit - Players');
+
+DELETE FROM `creature_text` WHERE `entry`=24238;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
+(24238, 0, 0, 'Drive the invaders out! For Queen Angerboda!', 14, 0, 100, 0, 0, 0, 'Bjorn Halgurdsson - On aggro 1'),
+(24238, 1, 0, 'No one speaks of my mother in that manner!', 14, 0, 100, 0, 0, 0, 'Bjorn Halgurdsson - On aggro 2'),
+(24238, 2, 0, 'Fight without fear and the Val''kyr will reward you!', 14, 0, 100, 0, 0, 0, 'Bjorn Halgurdsson - Random 1'),
+(24238, 2, 1, 'The Winterskorn tribe will prevail!', 14, 0, 100, 0, 0, 0, 'Bjorn Halgurdsson - Random 2');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=24238 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(24238, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 11, 43371, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bjorn Halgurdsson - On death cast Bjorn Kill Credit (Quest: Adding Injury to Insult)'),
+(24238, 0, 1, 0, 0, 0, 100, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bjorn Halgurdsson - In combat (nr) say text 0'),
+(24238, 0, 2, 0, 0, 0, 100, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bjorn Halgurdsson - In combat (nr) say text 1'),
+(24238, 0, 3, 0, 0, 0, 100, 0, 5000, 10000, 10000, 15000, 11, 32736, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Bjorn Halgurdsson - In combat cast Mortal Strike'),
+(24238, 0, 4, 0, 0, 0, 100, 0, 0, 5000, 10000, 15000, 11, 33661, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Bjorn Halgurdsson - In combat cast Crush Armor'),
+(24238, 0, 5, 0, 0, 0, 100, 0, 10000, 150000, 10000, 15000, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 , 0, 0, 'Bjorn Halgurdsson - In combat say text 2');
+
+UPDATE `creature_template` SET `AIName`='SmartAI', `mechanic_immune_mask`=`mechanic_immune_mask`|1|2|8|16|32|64|1024|2048|4096|16384|65536|131072|524288|2097152|8388608|536870912|67108864 WHERE `entry`=24238;
diff --git a/sql/old/3.3.5a/2011_10_29_06_world_misc.sql b/sql/old/3.3.5a/2011_10_29_06_world_misc.sql
new file mode 100644
index 00000000000..7706777b32f
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_06_world_misc.sql
@@ -0,0 +1,11 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (17,13) AND `SourceEntry`=43381; -- had wrong condition target
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceEntry`=33621;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(18, 0, 33621, 0, 24, 1, 24199, 0, 63, '', 'Plague Spray - Plagued Dragonflayer Handler'),
+(18, 0, 33621, 0, 24, 1, 24198, 0, 63, '', 'Plague Spray - Plagued Dragonflayer Rune-Caster'),
+(18, 0, 33621, 0, 24, 1, 23564, 0, 63, '', 'Plague Spray - Plagued Dragonflayer Tribesman'),
+(13, 0, 43385, 0, 18, 1, 0, 0, 0, '', 'Plagued Vrykul Dummy - Players');
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=43385;
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+(43385, 43384, 1, 'Plague Spray'); -- this is not entirely correct
diff --git a/sql/old/3.3.5a/2011_10_29_06_world_sai.sql b/sql/old/3.3.5a/2011_10_29_06_world_sai.sql
new file mode 100644
index 00000000000..a3d1626a8f9
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_06_world_sai.sql
@@ -0,0 +1,6 @@
+SET @ENTRY := 28566; -- "Tipsy" McManus
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100+8 AND `source_type`=9 AND `id`=3;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100+7 AND `source_type`=9 AND `id`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`, `event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY*100+8,9,3,0,0,0,100,0,0,0,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 8 - Set gossip flag"),
+(@ENTRY*100+7,9,2,0,0,0,100,0,0,0,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tipsy McManus - Script 7 - Set gossip flag");
diff --git a/sql/old/3.3.5a/2011_10_29_07_world_gameobjects.sql b/sql/old/3.3.5a/2011_10_29_07_world_gameobjects.sql
new file mode 100644
index 00000000000..541cadd71a0
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_29_07_world_gameobjects.sql
@@ -0,0 +1,13 @@
+-- dummy spell focus gameobject
+DELETE FROM `gameobject_template` WHERE `entry`=300245 AND `type`=8 AND `data0`=1636;
+INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `faction`, `flags`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `AIName`, `ScriptName`, `WDBVerified`) VALUES
+(300245, 8, 0, 'TEMP Forgemaster''s Anvil', '', '', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 1636, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 1);
+
+-- untargetable flag if not in quest
+UPDATE `gameobject_template` SET `flags`=`flags`|4 WHERE `entry`=201592; -- Infused Saronite Bars
+
+-- spawn
+DELETE FROM `gameobject` WHERE `id`=300245;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(207, 300245, 658, 3, 1, 727.988, -121.675, 515.259, 4.29381, 0, 0, 0.838588, -0.544766, 300, 0, 1),
+(215, 300245, 658, 3, 1, 661.331, -121.89, 514.948, 1.34464, 0, 0, 0.622803, 0.782378, 300, 0, 1);
diff --git a/sql/old/3.3.5a/2011_10_30_00_world_misc.sql b/sql/old/3.3.5a/2011_10_30_00_world_misc.sql
new file mode 100644
index 00000000000..912f13f364c
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_30_00_world_misc.sql
@@ -0,0 +1,20 @@
+-- trigger spawn X: 5672.294 Y: 2520.686 Z: 713.4386 O: 0.9599311 (21:01:58)
+-- at 21:04:00 it casts 70663 (Shadownova) (when spellhit by 69922)
+-- at 21:04:00 it casts 69956 (Return Tempered Quel'Delar) at player
+
+UPDATE `creature_template` SET `faction_A`=190,`faction_H`=190,`baseattacktime`=2000,`unit_flags`=`unit_flags`|768,`flags_extra`=`flags_extra`|128,`AIName`='SmartAI' WHERE `entry`=37094; -- Crucible of Souls
+
+UPDATE `creature_model_info` SET `bounding_radius`=1.25,`combat_reach`=2.5,`gender`=2 WHERE `modelid`=30822; -- Crucible of Souls
+
+DELETE FROM `creature_template_addon` WHERE `entry`=37094;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(37094,0,0,1,0, '69859'); -- Crucible of Souls (Crucible of Souls Visual)
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=69922;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,0,69922,0,18,1,37094,0,0,'', 'Temper Quel''Delar - Crucible of Souls');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=37094 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(37094,0,0,1,8,0,0,0,69922,0,0,0,11,70663,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Crucible of Souls - On spellhit by Temper Quel''Delar cast Shadownova'),
+(37094,0,1,0,61,0,0,0,69922,0,0,0,11,69956,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Crucible of Souls - On spellhit by Temper Quel''Delar (link) cast Return Tempered Quel''Delar');
diff --git a/sql/old/3.3.5a/2011_10_30_01_world_misc.sql b/sql/old/3.3.5a/2011_10_30_01_world_misc.sql
new file mode 100644
index 00000000000..9c42045c821
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_30_01_world_misc.sql
@@ -0,0 +1,54 @@
+-- spell target position
+DELETE FROM `spell_target_position` WHERE `id`=60905;
+INSERT INTO `spell_target_position` (`id`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES
+(60905, 571, 6435, 2366.9, 465.7, 0); -- Portal Effect: Naz'anak Exit
+
+-- templates
+UPDATE `gameobject_template` SET `flags`=`flags`|32 WHERE `entry`=193991; -- Altar of the Ebon Depths
+UPDATE `gameobject_template` SET `flags`=0,`AIName`='SmartGameObjectAI' WHERE `entry`=193195; -- Pulsing Crystal
+UPDATE `creature_template` SET `AIName`='SmartAI',`lootid`=`entry` WHERE `entry`=31691; -- Faceless Lurker
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=31237; -- Matthias Lehner
+
+-- addon
+DELETE FROM `creature_template_addon` WHERE `entry` IN (31691,31237);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(31691,0,0,1,0, NULL), -- Faceless Lurker
+(31237,0,0,1,0, '10848'); -- Matthias Lehner (Shroud of Death)
+
+-- model info
+UPDATE `creature_model_info` SET `bounding_radius`=1.3,`combat_reach`=1.3,`gender`=0 WHERE `modelid`=27522; -- Matthias Lehner
+
+-- scripts
+DELETE FROM `smart_scripts` WHERE `entryorguid`=31691 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=31237 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=193195 AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(31691,0,0,0,0,0,100,1,0,0,0,0,11,52342,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Faceless Lurker - On aggro cast Seething Evil'),
+(193195,1,0,0,19,0,100,0,13390,0,0,0,45,1,1,0,0,0,0,10,203360,31237,0,0,0,0,0, 'Pulsing Crystal - On A Voice in the Dark (A) quest accept set data to Matthias Lehner'),
+(193195,1,1,0,19,0,100,0,13271,0,0,0,45,1,1,0,0,0,0,10,203360,31237,0,0,0,0,0, 'Pulsing Crystal - On A Voice in the Dark (H) quest accept set data to Matthias Lehner'),
+(31237,0,0,0,38,0,100,0,1,1,0,0,1,0,0,0,0,0,0,21,60,0,0,0,0,0,0, 'Matthias Lehner - On data set (quest accepted at Pulsing Crystal) say text 0');
+DELETE FROM `creature_text` WHERE `entry`=31237;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(31237,0,0, 'You shouldn''t have done that! He''s not going to like it.',15,0,100,0,0,0, 'Matthias Lehner - On quest accept');
+
+-- loot
+-- WTB ZxBiohazardZx to do lootz
+DELETE FROM `creature_loot_template` WHERE `entry`=31691;
+INSERT INTO `creature_loot_template` (`entry`, `item`, `ChanceOrQuestChance`, `lootmode`, `groupid`, `mincountOrRef`, `maxcount`) VALUES
+(31691,45912,0.1,1,0,1,1), -- Book of Glyph Mastery
+(31691,44001,-60,1,0,1,1), -- Faceless One's Blood
+(31691,35063,100,1,0,-35063,1), -- trash
+(31691,26041,100,1,0,-26041,1); -- frostweave
+
+-- Link some mobs on HoS with Krystallus (by Aokromes) (unrelated)
+DELETE FROM `linked_respawn` WHERE `linkedGuid`=126792 AND `guid` IN (126710,126691,126702,126708,126743);
+INSERT INTO `linked_respawn` (`guid`,`linkedGuid`) VALUES
+(126710,126792),
+(126691,126792),
+(126702,126792),
+(126708,126792),
+(126743,126792);
+
+-- correct db errors recently found
+UPDATE `smart_scripts` SET `target_param1`=40 WHERE `entryorguid`=1435404 AND `source_type`=9 AND `id`=10 AND `link`=0;
+UPDATE `smart_scripts` SET `target_param1`=40 WHERE `entryorguid`=1905500 AND `source_type`=9 AND `id`=03 AND `link`=0;
diff --git a/sql/old/3.3.5a/2011_10_30_02_world_creature_template.sql b/sql/old/3.3.5a/2011_10_30_02_world_creature_template.sql
new file mode 100644
index 00000000000..50fc50e9c14
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_30_02_world_creature_template.sql
@@ -0,0 +1,33 @@
+UPDATE `creature_template` SET `AIName`='',`spell1`=11901 WHERE `entry`=8179; -- Greater Healing Ward
+UPDATE `creature_template` SET `AIName`='',`spell1`=6276 WHERE `entry`=3844; -- Healing Ward IV
+UPDATE `creature_template` SET `AIName`='',`spell1`=4972 WHERE `entry`=2992; -- Healing Ward V
+UPDATE `creature_template` SET `spell1`=31986 WHERE `entry`=18177; -- Tainted Stoneskin Totem
+UPDATE `creature_template` SET `AIName`='',`spell1`=34978 WHERE `entry`=20208; -- Mennu's Healing Ward
+UPDATE `creature_template` SET `AIName`='',`spell1`=52894 WHERE `entry`=29225; -- Anti-Magic Zone
+UPDATE `creature_template` SET `AIName`='',`spell1`=56762 WHERE `entry`=30444; -- The Chieftain's Totem
+UPDATE `creature_template` SET `AIName`='',`spell1`=46373 WHERE `entry`=25987; -- Windsoul Totem
+UPDATE `creature_template` SET `AIName`='',`spell1`=12507 WHERE `entry`=8510; -- Atal'ai Totem
+UPDATE `creature_template` SET `faction_A`=35,`faction_H`=35,`minlevel`=1,`maxlevel`=1,`baseattacktime`=2000,`unit_class`=1,`speed_walk`=1,`speed_run`=1 WHERE `entry`=3968; -- Sentry Totem
+UPDATE `creature_template` SET `minlevel`=1,`maxlevel`=1,`unit_class`=1,`speed_walk`=1,`speed_run`=1 WHERE `entry`=7484; -- Windfury Totem III
+UPDATE `creature_template` SET `minlevel`=1,`maxlevel`=1 WHERE `entry`=15483; -- Fire Nova Totem VII
+UPDATE `creature_template` SET `faction_A`=1759,`faction_H`=1759 WHERE `entry`=19222; -- Magma Flow Totem
+UPDATE `creature_template` SET `faction_A`=74,`faction_H`=74,`speed_walk`=1,`speed_run`=1,`spell1`=33134 WHERE `entry`=18179; -- Corrupted Nova Totem
+UPDATE `creature_template` SET `faction_A`=74,`faction_H`=74,`baseattacktime`=2000,`speed_walk`=1,`speed_run`=1,`spell1`=31982 WHERE `entry`=18176; -- Tainted Earthgrab Totem
+UPDATE `creature_template` SET `minlevel`=1,`maxlevel`=1,`unit_flags`=`unit_flags`|512,`speed_run`=0.99206 WHERE `entry`=20455; -- Terror Totem
+
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=8179; -- Greater Healing Ward
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=3844; -- Healing Ward IV
+DELETE FROM `creature_ai_scripts` WHERE `id`=1817702; -- Tainted Stoneskin Totem
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=20208; -- Mennu's Healing Ward
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=8510; -- Atal'ai Totem
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (3968,7484,15483,19222,24046,24045,18179,18176);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(3968,0,0,1,0, NULL), -- Sentry Totem
+(7484,0,0,1,0, NULL), -- Windfury Totem III
+(15483,0,0,1,0, NULL), -- Fire Nova Totem VII
+(19222,0,0,1,0, NULL), -- Magma Flow Totem
+(24046,0,0,257,0, NULL), -- Fire Spirit Totem
+(24045,0,0,257,0, NULL), -- Water Spirit Totem
+(18179,0,0,1,0, NULL), -- Corrupted Nova Totem
+(18176,0,0,1,0, NULL); -- Tainted Earthgrab Totem
diff --git a/sql/old/3.3.5a/2011_10_30_02_world_player_factionchange_achievement.sql b/sql/old/3.3.5a/2011_10_30_02_world_player_factionchange_achievement.sql
new file mode 100644
index 00000000000..5f7c3bf46f6
--- /dev/null
+++ b/sql/old/3.3.5a/2011_10_30_02_world_player_factionchange_achievement.sql
@@ -0,0 +1,63 @@
+-- World Event
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (2144,1707,2797,1038,1656,1684,1692) AND `horde_id` IN (2145,1693,2798,1039,1657,1683,1691);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(2144,2145), -- What A Long, Strange Trip It's Been
+(1707,1693), -- Fool For Love
+(2797,2798), -- Noble Gardener
+(1038,1039), -- The Flame Warden / Keeper
+(1656,1657), -- Hallowed Be Thy Name
+(1684,1683), -- Brewmaster
+(1692,1691); -- Merrymaker
+
+-- World Event: Hallow's End
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (963,966,969,970,1040) AND `horde_id` IN (971,967,965,968,1041);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(970,971), -- Tricks and Treats of Azeroth
+(966,967), -- Tricks and Treats of Eastern Kingdoms
+(963,965), -- Tricks and Treats of Kalimdor
+(969,968), -- Tricks and Treats of Outland
+(1040,1041); -- Rotten Hallow
+
+-- World Event: Love is in the Air
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (1280,1697) AND `horde_id` IN (1279,1698);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(1280,1279), -- Flirt With Disaster
+(1697,1698); -- Nation of Adoration
+
+-- World Event: Noblegarden
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (2421,2419) AND `horde_id` IN (2420,2497);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(2421,2420), -- Noble Garden
+(2419,2497); -- Spring Fling
+
+-- World Event: Midsummer Fire Festival
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (1035,1028,1029,1030,1022,1023,1024,1034) AND `horde_id` IN (1037,1031,1032,1033,1025,1026,1027,1036);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(1035,1037), -- Desecration of the Alliance / Horde
+(1028,1031), -- Extinguishing Eastern Kingdoms
+(1029,1032), -- Extinguishing Kalimdor
+(1030,1033), -- Extinguishing Outland
+(1022,1025), -- Flame Warden / Keeper of Eastern Kingdoms
+(1023,1026), -- Flame Warden / Keeper of Kalimdor
+(1024,1027), -- Flame Warden / Keeper of Outland
+(1034,1036); -- The Fires of Azeroth
+
+-- World Event: Brewfest
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (1184) AND `horde_id` IN (1203);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(1184,1203); -- Strange Brew
+
+-- World Event: Pilgrim's Bounty
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (3576,3556,3580,3596) AND `horde_id` IN (3577,3557,3581,3597);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(3576,3577), -- Now We're Cookin'
+(3556,3557), -- Pilgrim's Paunch
+(3580,3581), -- Pilgrim's Peril
+(3596,3597); -- Pilgrim's Progress
+
+-- World Event: Feast of Winter Veil
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (4436,1686,1255) AND `horde_id` IN (4437,1685,259);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(4436,4437), -- BB King
+(1686,1685), -- Bros. Before Ho Ho Ho's
+(1255,259); -- Scrooge
diff --git a/sql/old/3.3.5a/2011_11_01_00_world_sai.sql b/sql/old/3.3.5a/2011_11_01_00_world_sai.sql
new file mode 100644
index 00000000000..f4e12082ea9
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_01_00_world_sai.sql
@@ -0,0 +1,9 @@
+-- Fjord Turkey SAI - Cleanup and re-add the old SAI with the new event.
+DELETE FROM `smart_scripts` WHERE `entryorguid`=24746 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(24746,0,0,1,8,0,100,0,44323,0,0,0,11,44327,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Fjord Turkey - On Spellhit - Cast spell on invoker'),
+(24746,0,1,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Fjord Turkey - On Spellhit - Despawn'),
+(24746,0,2,0,6,0,100,0,0,0,0,0,11,25281,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Fjord Turkey - Upon death - Cast Turkey Marker');
+
+UPDATE `creature_template` SET `faction_A`=189,`faction_H`=189 WHERE `entry`=29594; -- Angry Turkey
+UPDATE `smart_scripts` SET `event_type`=1,`event_flags`=1,`action_type`=49,`action_param1`=0,`action_param2`=0,`target_type`=21,`target_param1`=20,`comment`= 'Angry Turkey - On spawn attack summoner' WHERE `entryorguid`=29594 AND `source_type`=0;
diff --git a/sql/old/3.3.5a/2011_11_07_00_world_player_factionchange_items.sql b/sql/old/3.3.5a/2011_11_07_00_world_player_factionchange_items.sql
new file mode 100644
index 00000000000..54a36473fb3
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_07_00_world_player_factionchange_items.sql
@@ -0,0 +1,7 @@
+DELETE FROM `player_factionchange_items` WHERE `alliance_id` IN (48072,48073,48074,48075,48076) AND horde_id IN (48097,48098,48099,48100,48101);
+INSERT INTO `player_factionchange_items` (`race_A`,`alliance_id`,`commentA`,`race_H`,`horde_id`,`commentH`) VALUES
+(0,48076, 'Velen''s Mantle of Conquest',0,48101, 'Zabra''s Mantle of Conquest'),
+(0,48075, 'Velen''s Raiments of Conquest',0,48100, 'Zabra''s Raiments of Conquest'),
+(0,48074, 'Velen''s Pants of Conquest',0,48099, 'Zabra''s Pants of Conquest'),
+(0,48072, 'Velen''s Handwraps of Conquest',0,48097, 'Zabra''s Handwraps of Conquest'),
+(0,48073, 'Velen''s Circlet of Conquest',0,48098, 'Zabra''s Circlet of Conquest');
diff --git a/sql/old/3.3.5a/2011_11_07_01_world_areatrigger_teleport.sql b/sql/old/3.3.5a/2011_11_07_01_world_areatrigger_teleport.sql
new file mode 100644
index 00000000000..2164d24ef5f
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_07_01_world_areatrigger_teleport.sql
@@ -0,0 +1,3 @@
+-- Correct AQ40's areatrigger_teleport orientation
+UPDATE `areatrigger_teleport` SET `target_position_z`=129.330612, `target_orientation`=0.929912 WHERE `id`=4010;
+UPDATE `areatrigger_teleport` SET `target_orientation`=4.030663 WHERE `id`=4012;
diff --git a/sql/old/3.3.5a/2011_11_07_02_world_misc.sql b/sql/old/3.3.5a/2011_11_07_02_world_misc.sql
new file mode 100644
index 00000000000..b40ad4dc7bf
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_07_02_world_misc.sql
@@ -0,0 +1,10 @@
+-- by Aok
+-- Removes save to instance flag from Hellfire Channeler
+UPDATE `creature_template` SET `flags_extra`=`flags_extra` &~ 1 WHERE `entry`=17256;
+
+-- by Nay
+DELETE FROM `spell_dbc` WHERE `Id` IN (12507,31982,33134);
+INSERT INTO `spell_dbc` (`Id`, `Dispel`, `Mechanic`, `Attributes`, `AttributesEx`, `AttributesEx2`, `AttributesEx3`, `AttributesEx4`, `AttributesEx5`, `AttributesEx6`, `AttributesEx7`, `Stances`, `StancesNot`, `Targets`, `CastingTimeIndex`, `AuraInterruptFlags`, `ProcFlags`, `ProcChance`, `ProcCharges`, `MaxLevel`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `RangeIndex`, `StackAmount`, `EquippedItemClass`, `EquippedItemSubClassMask`, `EquippedItemInventoryTypeMask`, `Effect1`, `Effect2`, `Effect3`, `EffectDieSides1`, `EffectDieSides2`, `EffectDieSides3`, `EffectRealPointsPerLevel1`, `EffectRealPointsPerLevel2`, `EffectRealPointsPerLevel3`, `EffectBasePoints1`, `EffectBasePoints2`, `EffectBasePoints3`, `EffectMechanic1`, `EffectMechanic2`, `EffectMechanic3`, `EffectImplicitTargetA1`, `EffectImplicitTargetA2`, `EffectImplicitTargetA3`, `EffectImplicitTargetB1`, `EffectImplicitTargetB2`, `EffectImplicitTargetB3`, `EffectRadiusIndex1`, `EffectRadiusIndex2`, `EffectRadiusIndex3`, `EffectApplyAuraName1`, `EffectApplyAuraName2`, `EffectApplyAuraName3`, `EffectAmplitude1`, `EffectAmplitude2`, `EffectAmplitude3`, `EffectMultipleValue1`, `EffectMultipleValue2`, `EffectMultipleValue3`, `EffectMiscValue1`, `EffectMiscValue2`, `EffectMiscValue3`, `EffectMiscValueB1`, `EffectMiscValueB2`, `EffectMiscValueB3`, `EffectTriggerSpell1`, `EffectTriggerSpell2`, `EffectTriggerSpell3`, `EffectSpellClassMaskA1`, `EffectSpellClassMaskA2`, `EffectSpellClassMaskA3`, `EffectSpellClassMaskB1`, `EffectSpellClassMaskB2`, `EffectSpellClassMaskB3`, `EffectSpellClassMaskC1`, `EffectSpellClassMaskC2`, `EffectSpellClassMaskC3`, `MaxTargetLevel`, `SpellFamilyName`, `SpellFamilyFlags1`, `SpellFamilyFlags2`, `SpellFamilyFlags3`, `MaxAffectedTargets`, `DmgClass`, `PreventionType`, `DmgMultiplier1`, `DmgMultiplier2`, `DmgMultiplier3`, `AreaGroupId`, `SchoolMask`, `Comment`) VALUES
+(12507, 0, 0, 464, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 21, 1, 0, -1, 0, 0, 6, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 'Atal''ai Skeleton Totem'),
+(31982, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 29, 29, 21, 1, 0, -1, -1, 0, 6, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 'Tainted Earthgrab Totem'),
+(33134, 0, 0, 65920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 20, 20, 85, 1, 0, -1, -1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 18000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 'Tainted Nova Totem');
diff --git a/sql/old/3.3.5a/2011_11_07_03_world_misc.sql b/sql/old/3.3.5a/2011_11_07_03_world_misc.sql
new file mode 100644
index 00000000000..97b538237bd
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_07_03_world_misc.sql
@@ -0,0 +1,6 @@
+DELETE FROM `creature_loot_template` WHERE `entry`=11671; -- Core Hounds
+UPDATE `creature_template` SET `lootid`=0 WHERE `entry`=11671;
+
+-- fixing previous sql (2011_11_07_02_world_misc.sql)
+-- Removes save to instance flag from Hellfire Channeler
+UPDATE `creature_template` SET `flags_extra`=`flags_extra` &~ 1 WHERE `entry`=17256; \ No newline at end of file
diff --git a/sql/old/3.3.5a/2011_11_11_00_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_11_11_00_world_spell_proc_event.sql
new file mode 100644
index 00000000000..997ede4a886
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_11_00_world_spell_proc_event.sql
@@ -0,0 +1 @@
+UPDATE `spell_proc_event` SET `procFlags`=0x10 WHERE `entry` IN (20335,20336,20337,53695,53696);
diff --git a/sql/old/3.3.5a/2011_11_11_01_world_misc.sql b/sql/old/3.3.5a/2011_11_11_01_world_misc.sql
new file mode 100644
index 00000000000..f48d3f8200e
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_11_01_world_misc.sql
@@ -0,0 +1,14 @@
+-- Template updates for creature 30560 (The RP-GG)
+UPDATE `creature_template` SET `npcflag`=`npcflag`|16777216 WHERE `entry`=30560; -- The RP-GG
+-- Addon data for creature 30560 (The RP-GG)
+DELETE FROM `creature_template_addon` WHERE `entry`=30560;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(30560,0,0,1,0, NULL); -- The RP-GG
+
+-- Fixing spawntime for creature 30560 (The RP-GG)
+UPDATE `creature` SET `spawntimesecs`=60 WHERE `id`=30560;
+
+-- Spellclick data for creature 30560 (The RP-GG)
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=30560;
+INSERT INTO `npc_spellclick_spells` VALUES
+(30560,57347,0,0,0,1,0,57348,1);
diff --git a/sql/old/3.3.5a/2011_11_13_00_world_spell_proc_event.sql b/sql/old/3.3.5a/2011_11_13_00_world_spell_proc_event.sql
new file mode 100644
index 00000000000..393282c229c
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_00_world_spell_proc_event.sql
@@ -0,0 +1,4 @@
+-- Spell proc cooldown for Item - Hunter T9 4P Bonus
+DELETE FROM `spell_proc_event` WHERE `entry`=67151;
+INSERT INTO `spell_proc_event` (`entry`,`Cooldown`) VALUES
+(67151,45);
diff --git a/sql/old/3.3.5a/2011_11_13_01_world_sai.sql b/sql/old/3.3.5a/2011_11_13_01_world_sai.sql
new file mode 100644
index 00000000000..1a4ed5b29d9
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_01_world_sai.sql
@@ -0,0 +1,38 @@
+-- Areatrigger Warsong Farms SAI
+SET @AT_SLAUGHTERHOUSE := 4873;
+SET @AT_GRAINERY := 4871;
+SET @AT_TORP_FARM := 4872;
+SET @NPC_SLAUGHTERHOUSE := 25672;
+SET @NPC_GRAINERY := 25669;
+SET @NPC_TORP_FARM := 25671;
+UPDATE `areatrigger_scripts` SET `ScriptName`='SmartTrigger' WHERE `entry` IN (@AT_SLAUGHTERHOUSE,@AT_GRAINERY,@AT_TORP_FARM);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@AT_SLAUGHTERHOUSE,@AT_GRAINERY,@AT_TORP_FARM) AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@AT_SLAUGHTERHOUSE,2,0,0,46,0,100,0,@AT_SLAUGHTERHOUSE,0,0,0,33,@NPC_SLAUGHTERHOUSE,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger Slaughterhouse - On Trigger - Quest Credit"),
+(@AT_GRAINERY,2,0,0,46,0,100,0,@AT_GRAINERY,0,0,0,33,@NPC_GRAINERY,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger Grainery - On Trigger - Quest Credit"),
+(@AT_TORP_FARM,2,0,0,46,0,100,0,@AT_TORP_FARM,0,0,0,33,@NPC_TORP_FARM,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger Torp Farm - On Trigger - Quest Credit");
+
+-- Areatrigger Ravenholdt SAI
+SET @AT_RAVENHOLDT := 3066;
+SET @NPC_RAVENHOLDT := 13936;
+UPDATE `areatrigger_scripts` SET `ScriptName`='SmartTrigger' WHERE `entry`=@AT_RAVENHOLDT;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@AT_RAVENHOLDT AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@AT_RAVENHOLDT,2,0,0,46,0,100,0,@AT_RAVENHOLDT,0,0,0,33,@NPC_RAVENHOLDT,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger Ravenholdt - On Trigger - Quest Credit");
+
+-- Areatrigger Aldurthar Gate SAI
+SET @AT_SOUTH := 5284;
+SET @AT_CENTRAL := 5285;
+SET @AT_NORTH := 5286;
+SET @AT_NORTHWEST := 5287;
+SET @NPC_SOUTH := 32195;
+SET @NPC_CENTRAL := 32196;
+SET @NPC_NORTH := 32197;
+SET @NPC_NORTHWEST := 32199;
+UPDATE `areatrigger_scripts` SET `ScriptName`='SmartTrigger' WHERE `entry` IN (@AT_SOUTH,@AT_CENTRAL,@AT_NORTH,@AT_NORTHWEST);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@AT_SOUTH,@AT_CENTRAL,@AT_NORTH,@AT_NORTHWEST) AND `source_type`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@AT_SOUTH,2,0,0,46,0,100,0,@AT_SOUTH,0,0,0,33,@NPC_SOUTH,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger South - On Trigger - Quest Credit"),
+(@AT_CENTRAL,2,0,0,46,0,100,0,@AT_CENTRAL,0,0,0,33,@NPC_CENTRAL,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger Central - On Trigger - Quest Credit"),
+(@AT_NORTH,2,0,0,46,0,100,0,@AT_NORTH,0,0,0,33,@NPC_NORTH,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger North - On Trigger - Quest Credit"),
+(@AT_NORTHWEST,2,0,0,46,0,100,0,@AT_NORTHWEST,0,0,0,33,@NPC_NORTHWEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Areatrigger Northwest - On Trigger - Quest Credit");
diff --git a/sql/old/3.3.5a/2011_11_13_02_world_pool_template.sql b/sql/old/3.3.5a/2011_11_13_02_world_pool_template.sql
new file mode 100644
index 00000000000..257398d4457
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_02_world_pool_template.sql
@@ -0,0 +1,6095 @@
+-- --- Northrend ore spawns ---
+/*
+Borean Tundra guid 160000 - 160299 pool 10000 - 10149
+150 - Cobalt
+150 - Secondary
+Howling Fjord guid 160300 - 160599 pool 10150 - 10299
+150 - Cobalt
+150 - Secondary
+Grizzly Hills guid 160600 - 160799 pool 10300 - 10499
+100 - Cobalt
+100 - Secondary
+Dragonblight guid 160800 - 161099 pool 10500 - 10649
+150 - Cobalt
+150 - Secondary
+Zul''Drak guid 161100 - 161399 pool 10650 - 10799
+150 - Cobalt
+150 - Secondary
+Sholazar Basin guid 161400 - 162449 pool 10800 - 11149
+350 - Saronite
+350 - Secondary
+350 - third
+Storm Peaks guid 162450 - 163199 pool 11150 - 11399
+250 - Saronite
+250 - Secondary
+250 - Third
+Icecrown guid 163200 - 164399 pool 11400 - 11799
+400 - Saronite
+400 - Secondary
+400 - Third
+*/
+-- ----------------------------------------
+-- -- Fixup ore spawns for Borean Tundra --
+-- ----------------------------------------
+SET @RANGE := 150;
+SET @GUID1 := 160000;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @POOL := 10000;
+SET @LASTGUID := 90; -- Total number of guids - 1 in zone
+SET @CHANCE1 := 90; -- This value can be 0 to 100
+SET @CHANCE2 := 100 - @CHANCE1;
+SET @MOTHER := 9900;
+SET @ACTIVE := 30; -- Max number of active spawns
+SET @TIMER := 900; -- Respawn timer in seconds
+-- Remove Ore spawns from Borean Tundra
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y > 4800 AND `position_x` < 4600;
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < 4800 AND position_y > 4235 AND `position_x` < 4420;
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < 4235 AND position_y > 3120 AND `position_x` < 4290;
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5000 AND 5064;
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5283 AND 5291;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5000 AND 5064;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5283 AND 5291;
+-- Colbalt Deposits Borean Tundra
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1+0,189978,571,1,1,2041.020,5487.780,0.6657,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189978,571,1,1,2107.070,5567.050,4.3290,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189978,571,1,1,2176.160,6465.650,36.7026,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189978,571,1,1,2191.400,6179.220,59.8092,0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189978,571,1,1,2207.810,5461.620,1.4179,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189978,571,1,1,2210.390,6140.070,102.5860,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189978,571,1,1,2268.480,6553.980,44.8410,2.23402,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189978,571,1,1,2420.550,5354.250,1.1916,-2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189978,571,1,1,2440.970,5670.830,55.7080,-1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189978,571,1,1,2479.390,5862.970,123.9090,-2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189978,571,1,1,2484.080,5877.070,-24.4687,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189978,571,1,1,2522.500,5118.600,11.1408,-1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189978,571,1,1,2599.540,5932.400,-15.0285,1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189978,571,1,1,2650.770,5183.580,8.5151,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189978,571,1,1,2748.900,6927.940,-0.4558,0.64577,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189978,571,1,1,2761.550,5608.240,45.2715,-0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189978,571,1,1,2763.630,5342.760,30.6526,2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189978,571,1,1,2770.520,5154.430,30.9665,-2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189978,571,1,1,2790.090,5263.080,20.6015,-1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189978,571,1,1,2840.900,4952.440,8.9537,2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189978,571,1,1,2874.190,5228.350,8.6320,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189978,571,1,1,2930.960,5704.170,48.5007,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189978,571,1,1,3027.790,4980.890,12.1247,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189978,571,1,1,3034.250,4541.600,9.2876,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189978,571,1,1,3099.810,4421.810,27.8759,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189978,571,1,1,3112.390,4653.800,7.5872,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189978,571,1,1,3121.680,3765.480,9.0758,-2.80997,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189978,571,1,1,3137.750,3442.070,3.3502,0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189978,571,1,1,3138.650,5762.380,56.1208,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189978,571,1,1,3139.470,3676.510,4.5353,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189978,571,1,1,3151.480,5622.400,31.6321,-0.57596,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189978,571,1,1,3166.540,4828.210,8.4315,2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189978,571,1,1,3178.550,4306.800,27.7940,-0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189978,571,1,1,3185.580,3546.170,7.6564,2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189978,571,1,1,3198.810,4009.430,26.2162,1.11701,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189978,571,1,1,3236.340,5552.180,37.9475,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189978,571,1,1,3258.650,6215.420,66.4526,2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189978,571,1,1,3286.000,3285.200,26.0825,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189978,571,1,1,3312.170,4442.610,16.2630,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189978,571,1,1,3339.990,6077.690,70.5354,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189978,571,1,1,3373.570,5698.460,59.7515,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189978,571,1,1,3425.060,6250.550,59.3819,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189978,571,1,1,3432.170,3205.750,28.7276,0.19199,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189978,571,1,1,3442.730,4790.610,28.0548,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189978,571,1,1,3456.690,4495.230,-14.5277,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189978,571,1,1,3471.360,3949.050,28.4666,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189978,571,1,1,3500.650,5648.270,61.2663,-1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189978,571,1,1,3546.060,5485.130,28.2165,-1.20428,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189978,571,1,1,3575.170,5582.850,36.2144,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189978,571,1,1,3589.770,4352.250,-0.0799,0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189978,571,1,1,3597.660,7076.430,207.8640,-0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189978,571,1,1,3602.530,3264.460,29.1279,3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189978,571,1,1,3629.540,3121.820,52.9232,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189978,571,1,1,3637.100,4875.020,-4.4644,1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189978,571,1,1,3641.540,7262.290,224.0600,0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189978,571,1,1,3647.920,4760.270,-21.7579,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189978,571,1,1,3673.780,5719.620,65.1652,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189978,571,1,1,3679.230,4027.050,25.4779,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189978,571,1,1,3735.660,7364.340,221.5280,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189978,571,1,1,3773.740,4124.640,26.3959,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189978,571,1,1,3791.720,6400.170,201.6110,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID1+61,189978,571,1,1,3799.720,6641.220,152.9170,3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID1+62,189978,571,1,1,3806.030,4624.150,-4.2562,2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID1+63,189978,571,1,1,3815.140,4009.440,27.9435,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+64,189978,571,1,1,3835.130,4339.370,13.9343,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+65,189978,571,1,1,3903.800,6724.670,152.8680,-0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID1+66,189978,571,1,1,3917.590,6440.270,12.2326,-2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID1+67,189978,571,1,1,3966.950,4626.570,3.9666,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID1+68,189978,571,1,1,3983.410,5187.210,14.7211,-0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID1+69,189978,571,1,1,4027.440,5977.490,-126.0680,-1.27409,0,0,0,1,@TIMER,255,1),
+(@GUID1+70,189978,571,1,1,4032.270,4116.910,68.5057,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+71,189978,571,1,1,4069.310,7227.390,193.9630,-0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID1+72,189978,571,1,1,4070.480,6434.010,18.6334,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID1+73,189978,571,1,1,4145.380,6067.060,-125.9360,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+74,189978,571,1,1,4171.720,5077.170,16.6149,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID1+75,189978,571,1,1,4208.170,6800.440,237.2870,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID1+76,189978,571,1,1,4230.770,4443.920,31.1130,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID1+77,189978,571,1,1,4250.450,5738.320,63.6832,3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID1+78,189978,571,1,1,4284.010,6139.800,-124.8270,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+79,189978,571,1,1,4290.250,4914.950,24.5063,-0.45379,0,0,0,1,@TIMER,255,1),
+(@GUID1+80,189978,571,1,1,4365.940,6207.040,-125.8980,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID1+81,189978,571,1,1,4367.850,4251.450,97.6535,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID1+82,189978,571,1,1,4368.080,5342.280,5.1373,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID1+83,189978,571,1,1,4420.920,5968.570,58.9111,-1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID1+84,189978,571,1,1,4428.090,4947.540,22.4015,-0.57596,0,0,0,1,@TIMER,255,1),
+(@GUID1+85,189978,571,1,1,4474.030,5326.940,81.2181,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+86,189978,571,1,1,4489.790,5061.610,53.6446,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+87,189978,571,1,1,4495.700,5196.980,77.0767,-2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID1+88,189978,571,1,1,4510.570,5420.060,28.6437,0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID1+89,189978,571,1,1,4527.510,5433.780,-17.0905,0.45379,0,0,0,1,@TIMER,255,1),
+(@GUID1+90,189978,571,1,1,4541.420,5349.580,-31.6367,1.36136,0,0,0,1,@TIMER,255,1);
+-- Rich Colbalt Deposits Borean Tundra
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID2+0,189979,571,1,1,2041.020,5487.780,0.6657,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189979,571,1,1,2107.070,5567.050,4.3290,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189979,571,1,1,2176.160,6465.650,36.7026,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189979,571,1,1,2191.400,6179.220,59.8092,0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189979,571,1,1,2207.810,5461.620,1.4179,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189979,571,1,1,2210.390,6140.070,102.5860,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189979,571,1,1,2268.480,6553.980,44.8410,2.23402,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189979,571,1,1,2420.550,5354.250,1.1916,-2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189979,571,1,1,2440.970,5670.830,55.7080,-1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189979,571,1,1,2479.390,5862.970,123.9090,-2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189979,571,1,1,2484.080,5877.070,-24.4687,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189979,571,1,1,2522.500,5118.600,11.1408,-1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189979,571,1,1,2599.540,5932.400,-15.0285,1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189979,571,1,1,2650.770,5183.580,8.5151,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189979,571,1,1,2748.900,6927.940,-0.4558,0.64577,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189979,571,1,1,2761.550,5608.240,45.2715,-0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189979,571,1,1,2763.630,5342.760,30.6526,2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189979,571,1,1,2770.520,5154.430,30.9665,-2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189979,571,1,1,2790.090,5263.080,20.6015,-1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189979,571,1,1,2840.900,4952.440,8.9537,2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189979,571,1,1,2874.190,5228.350,8.6320,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189979,571,1,1,2930.960,5704.170,48.5007,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189979,571,1,1,3027.790,4980.890,12.1247,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+23,189979,571,1,1,3034.250,4541.600,9.2876,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189979,571,1,1,3099.810,4421.810,27.8759,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189979,571,1,1,3112.390,4653.800,7.5872,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189979,571,1,1,3121.680,3765.480,9.0758,-2.80997,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189979,571,1,1,3137.750,3442.070,3.3502,0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189979,571,1,1,3138.650,5762.380,56.1208,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189979,571,1,1,3139.470,3676.510,4.5353,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189979,571,1,1,3151.480,5622.400,31.6321,-0.57596,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189979,571,1,1,3166.540,4828.210,8.4315,2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189979,571,1,1,3178.550,4306.800,27.7940,-0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189979,571,1,1,3185.580,3546.170,7.6564,2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189979,571,1,1,3198.810,4009.430,26.2162,1.11701,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189979,571,1,1,3236.340,5552.180,37.9475,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189979,571,1,1,3258.650,6215.420,66.4526,2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189979,571,1,1,3286.000,3285.200,26.0825,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189979,571,1,1,3312.170,4442.610,16.2630,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189979,571,1,1,3339.990,6077.690,70.5354,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189979,571,1,1,3373.570,5698.460,59.7515,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189979,571,1,1,3425.060,6250.550,59.3819,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189979,571,1,1,3432.170,3205.750,28.7276,0.19199,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189979,571,1,1,3442.730,4790.610,28.0548,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189979,571,1,1,3456.690,4495.230,-14.5277,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189979,571,1,1,3471.360,3949.050,28.4666,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189979,571,1,1,3500.650,5648.270,61.2663,-1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID2+47,189979,571,1,1,3546.060,5485.130,28.2165,-1.20428,0,0,0,1,@TIMER,255,1),
+(@GUID2+48,189979,571,1,1,3575.170,5582.850,36.2144,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189979,571,1,1,3589.770,4352.250,-0.0799,0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189979,571,1,1,3597.660,7076.430,207.8640,-0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189979,571,1,1,3602.530,3264.460,29.1279,3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189979,571,1,1,3629.540,3121.820,52.9232,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189979,571,1,1,3637.100,4875.020,-4.4644,1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189979,571,1,1,3641.540,7262.290,224.0600,0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189979,571,1,1,3647.920,4760.270,-21.7579,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189979,571,1,1,3673.780,5719.620,65.1652,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189979,571,1,1,3679.230,4027.050,25.4779,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189979,571,1,1,3735.660,7364.340,221.5280,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189979,571,1,1,3773.740,4124.640,26.3959,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189979,571,1,1,3791.720,6400.170,201.6110,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID2+61,189979,571,1,1,3799.720,6641.220,152.9170,3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID2+62,189979,571,1,1,3806.030,4624.150,-4.2562,2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID2+63,189979,571,1,1,3815.140,4009.440,27.9435,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+64,189979,571,1,1,3835.130,4339.370,13.9343,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+65,189979,571,1,1,3903.800,6724.670,152.8680,-0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID2+66,189979,571,1,1,3917.590,6440.270,12.2326,-2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID2+67,189979,571,1,1,3966.950,4626.570,3.9666,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID2+68,189979,571,1,1,3983.410,5187.210,14.7211,-0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID2+69,189979,571,1,1,4027.440,5977.490,-126.0680,-1.27409,0,0,0,1,@TIMER,255,1),
+(@GUID2+70,189979,571,1,1,4032.270,4116.910,68.5057,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+71,189979,571,1,1,4069.310,7227.390,193.9630,-0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID2+72,189979,571,1,1,4070.480,6434.010,18.6334,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID2+73,189979,571,1,1,4145.380,6067.060,-125.9360,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+74,189979,571,1,1,4171.720,5077.170,16.6149,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID2+75,189979,571,1,1,4208.170,6800.440,237.2870,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID2+76,189979,571,1,1,4230.770,4443.920,31.1130,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID2+77,189979,571,1,1,4250.450,5738.320,63.6832,3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID2+78,189979,571,1,1,4284.010,6139.800,-124.8270,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+79,189979,571,1,1,4290.250,4914.950,24.5063,-0.45379,0,0,0,1,@TIMER,255,1),
+(@GUID2+80,189979,571,1,1,4365.940,6207.040,-125.8980,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID2+81,189979,571,1,1,4367.850,4251.450,97.6535,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID2+82,189979,571,1,1,4368.080,5342.280,5.1373,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID2+83,189979,571,1,1,4420.920,5968.570,58.9111,-1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID2+84,189979,571,1,1,4428.090,4947.540,22.4015,-0.57596,0,0,0,1,@TIMER,255,1),
+(@GUID2+85,189979,571,1,1,4474.030,5326.940,81.2181,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+86,189979,571,1,1,4489.790,5061.610,53.6446,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+87,189979,571,1,1,4495.700,5196.980,77.0767,-2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID2+88,189979,571,1,1,4510.570,5420.060,28.6437,0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID2+89,189979,571,1,1,4527.510,5433.780,-17.0905,0.45379,0,0,0,1,@TIMER,255,1),
+(@GUID2+90,189979,571,1,1,4541.420,5349.580,-31.6367,1.36136,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@LASTGUID;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Borean Tundra Ore Spawnpoint 1 Cobalt'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Borean Tundra Ore Spawnpoint 1 Rich Cobalt'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Borean Tundra Ore Spawnpoint 2 Cobalt'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Borean Tundra Ore Spawnpoint 2 Rich Cobalt'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Borean Tundra Ore Spawnpoint 3 Cobalt'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Borean Tundra Ore Spawnpoint 3 Rich Cobalt'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Borean Tundra Ore Spawnpoint 4 Cobalt'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Borean Tundra Ore Spawnpoint 4 Rich Cobalt'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Borean Tundra Ore Spawnpoint 5 Cobalt'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Borean Tundra Ore Spawnpoint 5 Rich Cobalt'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Borean Tundra Ore Spawnpoint 6 Cobalt'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Borean Tundra Ore Spawnpoint 6 Rich Cobalt'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Borean Tundra Ore Spawnpoint 7 Cobalt'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Borean Tundra Ore Spawnpoint 7 Rich Cobalt'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Borean Tundra Ore Spawnpoint 8 Cobalt'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Borean Tundra Ore Spawnpoint 8 Rich Cobalt'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Borean Tundra Ore Spawnpoint 9 Cobalt'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Borean Tundra Ore Spawnpoint 9 Rich Cobalt'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Borean Tundra Ore Spawnpoint 10 Cobalt'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Borean Tundra Ore Spawnpoint 10 Rich Cobalt'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Borean Tundra Ore Spawnpoint 11 Cobalt'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Borean Tundra Ore Spawnpoint 11 Rich Cobalt'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Borean Tundra Ore Spawnpoint 12 Cobalt'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Borean Tundra Ore Spawnpoint 12 Rich Cobalt'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Borean Tundra Ore Spawnpoint 13 Cobalt'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Borean Tundra Ore Spawnpoint 13 Rich Cobalt'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Borean Tundra Ore Spawnpoint 14 Cobalt'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Borean Tundra Ore Spawnpoint 14 Rich Cobalt'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Borean Tundra Ore Spawnpoint 15 Cobalt'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Borean Tundra Ore Spawnpoint 15 Rich Cobalt'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Borean Tundra Ore Spawnpoint 16 Cobalt'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Borean Tundra Ore Spawnpoint 16 Rich Cobalt'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Borean Tundra Ore Spawnpoint 17 Cobalt'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Borean Tundra Ore Spawnpoint 17 Rich Cobalt'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Borean Tundra Ore Spawnpoint 18 Cobalt'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Borean Tundra Ore Spawnpoint 18 Rich Cobalt'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Borean Tundra Ore Spawnpoint 19 Cobalt'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Borean Tundra Ore Spawnpoint 19 Rich Cobalt'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Borean Tundra Ore Spawnpoint 20 Cobalt'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Borean Tundra Ore Spawnpoint 20 Rich Cobalt'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Borean Tundra Ore Spawnpoint 21 Cobalt'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Borean Tundra Ore Spawnpoint 21 Rich Cobalt'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Borean Tundra Ore Spawnpoint 22 Cobalt'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Borean Tundra Ore Spawnpoint 22 Rich Cobalt'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Borean Tundra Ore Spawnpoint 23 Cobalt'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Borean Tundra Ore Spawnpoint 23 Rich Cobalt'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Borean Tundra Ore Spawnpoint 24 Cobalt'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Borean Tundra Ore Spawnpoint 24 Rich Cobalt'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Borean Tundra Ore Spawnpoint 25 Cobalt'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Borean Tundra Ore Spawnpoint 25 Rich Cobalt'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Borean Tundra Ore Spawnpoint 26 Cobalt'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Borean Tundra Ore Spawnpoint 26 Rich Cobalt'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Borean Tundra Ore Spawnpoint 27 Cobalt'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Borean Tundra Ore Spawnpoint 27 Rich Cobalt'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Borean Tundra Ore Spawnpoint 28 Cobalt'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Borean Tundra Ore Spawnpoint 28 Rich Cobalt'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Borean Tundra Ore Spawnpoint 29 Cobalt'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Borean Tundra Ore Spawnpoint 29 Rich Cobalt'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Borean Tundra Ore Spawnpoint 30 Cobalt'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Borean Tundra Ore Spawnpoint 30 Rich Cobalt'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Borean Tundra Ore Spawnpoint 31 Cobalt'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Borean Tundra Ore Spawnpoint 31 Rich Cobalt'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Borean Tundra Ore Spawnpoint 32 Cobalt'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Borean Tundra Ore Spawnpoint 32 Rich Cobalt'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Borean Tundra Ore Spawnpoint 33 Cobalt'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Borean Tundra Ore Spawnpoint 33 Rich Cobalt'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Borean Tundra Ore Spawnpoint 34 Cobalt'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Borean Tundra Ore Spawnpoint 34 Rich Cobalt'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Borean Tundra Ore Spawnpoint 35 Cobalt'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Borean Tundra Ore Spawnpoint 35 Rich Cobalt'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Borean Tundra Ore Spawnpoint 36 Cobalt'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Borean Tundra Ore Spawnpoint 36 Rich Cobalt'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Borean Tundra Ore Spawnpoint 37 Cobalt'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Borean Tundra Ore Spawnpoint 37 Rich Cobalt'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Borean Tundra Ore Spawnpoint 38 Cobalt'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Borean Tundra Ore Spawnpoint 38 Rich Cobalt'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Borean Tundra Ore Spawnpoint 39 Cobalt'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Borean Tundra Ore Spawnpoint 39 Rich Cobalt'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Borean Tundra Ore Spawnpoint 40 Cobalt'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Borean Tundra Ore Spawnpoint 40 Rich Cobalt'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Borean Tundra Ore Spawnpoint 41 Cobalt'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Borean Tundra Ore Spawnpoint 41 Rich Cobalt'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Borean Tundra Ore Spawnpoint 42 Cobalt'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Borean Tundra Ore Spawnpoint 42 Rich Cobalt'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Borean Tundra Ore Spawnpoint 43 Cobalt'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Borean Tundra Ore Spawnpoint 43 Rich Cobalt'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Borean Tundra Ore Spawnpoint 44 Cobalt'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Borean Tundra Ore Spawnpoint 44 Rich Cobalt'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Borean Tundra Ore Spawnpoint 45 Cobalt'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Borean Tundra Ore Spawnpoint 45 Rich Cobalt'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Borean Tundra Ore Spawnpoint 46 Cobalt'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Borean Tundra Ore Spawnpoint 46 Rich Cobalt'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Borean Tundra Ore Spawnpoint 47 Cobalt'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Borean Tundra Ore Spawnpoint 47 Rich Cobalt'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Borean Tundra Ore Spawnpoint 48 Cobalt'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Borean Tundra Ore Spawnpoint 48 Rich Cobalt'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Borean Tundra Ore Spawnpoint 49 Cobalt'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Borean Tundra Ore Spawnpoint 49 Rich Cobalt'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Borean Tundra Ore Spawnpoint 50 Cobalt'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Borean Tundra Ore Spawnpoint 50 Rich Cobalt'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Borean Tundra Ore Spawnpoint 51 Cobalt'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Borean Tundra Ore Spawnpoint 51 Rich Cobalt'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Borean Tundra Ore Spawnpoint 52 Cobalt'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Borean Tundra Ore Spawnpoint 52 Rich Cobalt'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Borean Tundra Ore Spawnpoint 53 Cobalt'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Borean Tundra Ore Spawnpoint 53 Rich Cobalt'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Borean Tundra Ore Spawnpoint 54 Cobalt'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Borean Tundra Ore Spawnpoint 54 Rich Cobalt'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Borean Tundra Ore Spawnpoint 55 Cobalt'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Borean Tundra Ore Spawnpoint 55 Rich Cobalt'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Borean Tundra Ore Spawnpoint 56 Cobalt'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Borean Tundra Ore Spawnpoint 56 Rich Cobalt'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Borean Tundra Ore Spawnpoint 57 Cobalt'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Borean Tundra Ore Spawnpoint 57 Rich Cobalt'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Borean Tundra Ore Spawnpoint 58 Cobalt'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Borean Tundra Ore Spawnpoint 58 Rich Cobalt'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Borean Tundra Ore Spawnpoint 59 Cobalt'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Borean Tundra Ore Spawnpoint 59 Rich Cobalt'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Borean Tundra Ore Spawnpoint 60 Cobalt'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Borean Tundra Ore Spawnpoint 60 Rich Cobalt'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Borean Tundra Ore Spawnpoint 61 Cobalt'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Borean Tundra Ore Spawnpoint 61 Rich Cobalt'),
+(@GUID1+61,@POOL+61,@CHANCE1, 'Borean Tundra Ore Spawnpoint 62 Cobalt'),
+(@GUID2+61,@POOL+61,@CHANCE2, 'Borean Tundra Ore Spawnpoint 62 Rich Cobalt'),
+(@GUID1+62,@POOL+62,@CHANCE1, 'Borean Tundra Ore Spawnpoint 63 Cobalt'),
+(@GUID2+62,@POOL+62,@CHANCE2, 'Borean Tundra Ore Spawnpoint 63 Rich Cobalt'),
+(@GUID1+63,@POOL+63,@CHANCE1, 'Borean Tundra Ore Spawnpoint 64 Cobalt'),
+(@GUID2+63,@POOL+63,@CHANCE2, 'Borean Tundra Ore Spawnpoint 64 Rich Cobalt'),
+(@GUID1+64,@POOL+64,@CHANCE1, 'Borean Tundra Ore Spawnpoint 65 Cobalt'),
+(@GUID2+64,@POOL+64,@CHANCE2, 'Borean Tundra Ore Spawnpoint 65 Rich Cobalt'),
+(@GUID1+65,@POOL+65,@CHANCE1, 'Borean Tundra Ore Spawnpoint 66 Cobalt'),
+(@GUID2+65,@POOL+65,@CHANCE2, 'Borean Tundra Ore Spawnpoint 66 Rich Cobalt'),
+(@GUID1+66,@POOL+66,@CHANCE1, 'Borean Tundra Ore Spawnpoint 67 Cobalt'),
+(@GUID2+66,@POOL+66,@CHANCE2, 'Borean Tundra Ore Spawnpoint 67 Rich Cobalt'),
+(@GUID1+67,@POOL+67,@CHANCE1, 'Borean Tundra Ore Spawnpoint 68 Cobalt'),
+(@GUID2+67,@POOL+67,@CHANCE2, 'Borean Tundra Ore Spawnpoint 68 Rich Cobalt'),
+(@GUID1+68,@POOL+68,@CHANCE1, 'Borean Tundra Ore Spawnpoint 69 Cobalt'),
+(@GUID2+68,@POOL+68,@CHANCE2, 'Borean Tundra Ore Spawnpoint 69 Rich Cobalt'),
+(@GUID1+69,@POOL+69,@CHANCE1, 'Borean Tundra Ore Spawnpoint 70 Cobalt'),
+(@GUID2+69,@POOL+69,@CHANCE2, 'Borean Tundra Ore Spawnpoint 70 Rich Cobalt'),
+(@GUID1+70,@POOL+70,@CHANCE1, 'Borean Tundra Ore Spawnpoint 71 Cobalt'),
+(@GUID2+70,@POOL+70,@CHANCE2, 'Borean Tundra Ore Spawnpoint 71 Rich Cobalt'),
+(@GUID1+71,@POOL+71,@CHANCE1, 'Borean Tundra Ore Spawnpoint 72 Cobalt'),
+(@GUID2+71,@POOL+71,@CHANCE2, 'Borean Tundra Ore Spawnpoint 72 Rich Cobalt'),
+(@GUID1+72,@POOL+72,@CHANCE1, 'Borean Tundra Ore Spawnpoint 73 Cobalt'),
+(@GUID2+72,@POOL+72,@CHANCE2, 'Borean Tundra Ore Spawnpoint 73 Rich Cobalt'),
+(@GUID1+73,@POOL+73,@CHANCE1, 'Borean Tundra Ore Spawnpoint 74 Cobalt'),
+(@GUID2+73,@POOL+73,@CHANCE2, 'Borean Tundra Ore Spawnpoint 74 Rich Cobalt'),
+(@GUID1+74,@POOL+74,@CHANCE1, 'Borean Tundra Ore Spawnpoint 75 Cobalt'),
+(@GUID2+74,@POOL+74,@CHANCE2, 'Borean Tundra Ore Spawnpoint 75 Rich Cobalt'),
+(@GUID1+75,@POOL+75,@CHANCE1, 'Borean Tundra Ore Spawnpoint 76 Cobalt'),
+(@GUID2+75,@POOL+75,@CHANCE2, 'Borean Tundra Ore Spawnpoint 76 Rich Cobalt'),
+(@GUID1+76,@POOL+76,@CHANCE1, 'Borean Tundra Ore Spawnpoint 77 Cobalt'),
+(@GUID2+76,@POOL+76,@CHANCE2, 'Borean Tundra Ore Spawnpoint 77 Rich Cobalt'),
+(@GUID1+77,@POOL+77,@CHANCE1, 'Borean Tundra Ore Spawnpoint 78 Cobalt'),
+(@GUID2+77,@POOL+77,@CHANCE2, 'Borean Tundra Ore Spawnpoint 78 Rich Cobalt'),
+(@GUID1+78,@POOL+78,@CHANCE1, 'Borean Tundra Ore Spawnpoint 79 Cobalt'),
+(@GUID2+78,@POOL+78,@CHANCE2, 'Borean Tundra Ore Spawnpoint 79 Rich Cobalt'),
+(@GUID1+79,@POOL+79,@CHANCE1, 'Borean Tundra Ore Spawnpoint 80 Cobalt'),
+(@GUID2+79,@POOL+79,@CHANCE2, 'Borean Tundra Ore Spawnpoint 80 Rich Cobalt'),
+(@GUID1+80,@POOL+80,@CHANCE1, 'Borean Tundra Ore Spawnpoint 81 Cobalt'),
+(@GUID2+80,@POOL+80,@CHANCE2, 'Borean Tundra Ore Spawnpoint 81 Rich Cobalt'),
+(@GUID1+81,@POOL+81,@CHANCE1, 'Borean Tundra Ore Spawnpoint 82 Cobalt'),
+(@GUID2+81,@POOL+81,@CHANCE2, 'Borean Tundra Ore Spawnpoint 82 Rich Cobalt'),
+(@GUID1+82,@POOL+82,@CHANCE1, 'Borean Tundra Ore Spawnpoint 83 Cobalt'),
+(@GUID2+82,@POOL+82,@CHANCE2, 'Borean Tundra Ore Spawnpoint 83 Rich Cobalt'),
+(@GUID1+83,@POOL+83,@CHANCE1, 'Borean Tundra Ore Spawnpoint 84 Cobalt'),
+(@GUID2+83,@POOL+83,@CHANCE2, 'Borean Tundra Ore Spawnpoint 84 Rich Cobalt'),
+(@GUID1+84,@POOL+84,@CHANCE1, 'Borean Tundra Ore Spawnpoint 85 Cobalt'),
+(@GUID2+84,@POOL+84,@CHANCE2, 'Borean Tundra Ore Spawnpoint 85 Rich Cobalt'),
+(@GUID1+85,@POOL+85,@CHANCE1, 'Borean Tundra Ore Spawnpoint 86 Cobalt'),
+(@GUID2+85,@POOL+85,@CHANCE2, 'Borean Tundra Ore Spawnpoint 86 Rich Cobalt'),
+(@GUID1+86,@POOL+86,@CHANCE1, 'Borean Tundra Ore Spawnpoint 87 Cobalt'),
+(@GUID2+86,@POOL+86,@CHANCE2, 'Borean Tundra Ore Spawnpoint 87 Rich Cobalt'),
+(@GUID1+87,@POOL+87,@CHANCE1, 'Borean Tundra Ore Spawnpoint 88 Cobalt'),
+(@GUID2+87,@POOL+87,@CHANCE2, 'Borean Tundra Ore Spawnpoint 88 Rich Cobalt'),
+(@GUID1+88,@POOL+88,@CHANCE1, 'Borean Tundra Ore Spawnpoint 89 Cobalt'),
+(@GUID2+88,@POOL+88,@CHANCE2, 'Borean Tundra Ore Spawnpoint 89 Rich Cobalt'),
+(@GUID1+89,@POOL+89,@CHANCE1, 'Borean Tundra Ore Spawnpoint 90 Cobalt'),
+(@GUID2+89,@POOL+89,@CHANCE2, 'Borean Tundra Ore Spawnpoint 90 Rich Cobalt'),
+(@GUID1+90,@POOL+90,@CHANCE1, 'Borean Tundra Ore Spawnpoint 91 Cobalt'),
+(@GUID2+90,@POOL+90,@CHANCE2, 'Borean Tundra Ore Spawnpoint 91 Rich Cobalt');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Borean Tundra Ore Spawnpoint 1'),
+(@POOL+1,1, 'Borean Tundra Ore Spawnpoint 2'),
+(@POOL+2,1, 'Borean Tundra Ore Spawnpoint 3'),
+(@POOL+3,1, 'Borean Tundra Ore Spawnpoint 4'),
+(@POOL+4,1, 'Borean Tundra Ore Spawnpoint 5'),
+(@POOL+5,1, 'Borean Tundra Ore Spawnpoint 6'),
+(@POOL+6,1, 'Borean Tundra Ore Spawnpoint 7'),
+(@POOL+7,1, 'Borean Tundra Ore Spawnpoint 8'),
+(@POOL+8,1, 'Borean Tundra Ore Spawnpoint 9'),
+(@POOL+9,1, 'Borean Tundra Ore Spawnpoint 10'),
+(@POOL+10,1, 'Borean Tundra Ore Spawnpoint 11'),
+(@POOL+11,1, 'Borean Tundra Ore Spawnpoint 12'),
+(@POOL+12,1, 'Borean Tundra Ore Spawnpoint 13'),
+(@POOL+13,1, 'Borean Tundra Ore Spawnpoint 14'),
+(@POOL+14,1, 'Borean Tundra Ore Spawnpoint 15'),
+(@POOL+15,1, 'Borean Tundra Ore Spawnpoint 16'),
+(@POOL+16,1, 'Borean Tundra Ore Spawnpoint 17'),
+(@POOL+17,1, 'Borean Tundra Ore Spawnpoint 18'),
+(@POOL+18,1, 'Borean Tundra Ore Spawnpoint 19'),
+(@POOL+19,1, 'Borean Tundra Ore Spawnpoint 20'),
+(@POOL+20,1, 'Borean Tundra Ore Spawnpoint 21'),
+(@POOL+21,1, 'Borean Tundra Ore Spawnpoint 22'),
+(@POOL+22,1, 'Borean Tundra Ore Spawnpoint 23'),
+(@POOL+23,1, 'Borean Tundra Ore Spawnpoint 24'),
+(@POOL+24,1, 'Borean Tundra Ore Spawnpoint 25'),
+(@POOL+25,1, 'Borean Tundra Ore Spawnpoint 26'),
+(@POOL+26,1, 'Borean Tundra Ore Spawnpoint 27'),
+(@POOL+27,1, 'Borean Tundra Ore Spawnpoint 28'),
+(@POOL+28,1, 'Borean Tundra Ore Spawnpoint 29'),
+(@POOL+29,1, 'Borean Tundra Ore Spawnpoint 30'),
+(@POOL+30,1, 'Borean Tundra Ore Spawnpoint 31'),
+(@POOL+31,1, 'Borean Tundra Ore Spawnpoint 32'),
+(@POOL+32,1, 'Borean Tundra Ore Spawnpoint 33'),
+(@POOL+33,1, 'Borean Tundra Ore Spawnpoint 34'),
+(@POOL+34,1, 'Borean Tundra Ore Spawnpoint 35'),
+(@POOL+35,1, 'Borean Tundra Ore Spawnpoint 36'),
+(@POOL+36,1, 'Borean Tundra Ore Spawnpoint 37'),
+(@POOL+37,1, 'Borean Tundra Ore Spawnpoint 38'),
+(@POOL+38,1, 'Borean Tundra Ore Spawnpoint 39'),
+(@POOL+39,1, 'Borean Tundra Ore Spawnpoint 40'),
+(@POOL+40,1, 'Borean Tundra Ore Spawnpoint 41'),
+(@POOL+41,1, 'Borean Tundra Ore Spawnpoint 42'),
+(@POOL+42,1, 'Borean Tundra Ore Spawnpoint 43'),
+(@POOL+43,1, 'Borean Tundra Ore Spawnpoint 44'),
+(@POOL+44,1, 'Borean Tundra Ore Spawnpoint 45'),
+(@POOL+45,1, 'Borean Tundra Ore Spawnpoint 46'),
+(@POOL+46,1, 'Borean Tundra Ore Spawnpoint 47'),
+(@POOL+47,1, 'Borean Tundra Ore Spawnpoint 48'),
+(@POOL+48,1, 'Borean Tundra Ore Spawnpoint 49'),
+(@POOL+49,1, 'Borean Tundra Ore Spawnpoint 50'),
+(@POOL+50,1, 'Borean Tundra Ore Spawnpoint 51'),
+(@POOL+51,1, 'Borean Tundra Ore Spawnpoint 52'),
+(@POOL+52,1, 'Borean Tundra Ore Spawnpoint 53'),
+(@POOL+53,1, 'Borean Tundra Ore Spawnpoint 54'),
+(@POOL+54,1, 'Borean Tundra Ore Spawnpoint 55'),
+(@POOL+55,1, 'Borean Tundra Ore Spawnpoint 56'),
+(@POOL+56,1, 'Borean Tundra Ore Spawnpoint 57'),
+(@POOL+57,1, 'Borean Tundra Ore Spawnpoint 58'),
+(@POOL+58,1, 'Borean Tundra Ore Spawnpoint 59'),
+(@POOL+59,1, 'Borean Tundra Ore Spawnpoint 60'),
+(@POOL+60,1, 'Borean Tundra Ore Spawnpoint 61'),
+(@POOL+61,1, 'Borean Tundra Ore Spawnpoint 62'),
+(@POOL+62,1, 'Borean Tundra Ore Spawnpoint 63'),
+(@POOL+63,1, 'Borean Tundra Ore Spawnpoint 64'),
+(@POOL+64,1, 'Borean Tundra Ore Spawnpoint 65'),
+(@POOL+65,1, 'Borean Tundra Ore Spawnpoint 66'),
+(@POOL+66,1, 'Borean Tundra Ore Spawnpoint 67'),
+(@POOL+67,1, 'Borean Tundra Ore Spawnpoint 68'),
+(@POOL+68,1, 'Borean Tundra Ore Spawnpoint 69'),
+(@POOL+69,1, 'Borean Tundra Ore Spawnpoint 70'),
+(@POOL+70,1, 'Borean Tundra Ore Spawnpoint 71'),
+(@POOL+71,1, 'Borean Tundra Ore Spawnpoint 72'),
+(@POOL+72,1, 'Borean Tundra Ore Spawnpoint 73'),
+(@POOL+73,1, 'Borean Tundra Ore Spawnpoint 74'),
+(@POOL+74,1, 'Borean Tundra Ore Spawnpoint 75'),
+(@POOL+75,1, 'Borean Tundra Ore Spawnpoint 76'),
+(@POOL+76,1, 'Borean Tundra Ore Spawnpoint 77'),
+(@POOL+77,1, 'Borean Tundra Ore Spawnpoint 78'),
+(@POOL+78,1, 'Borean Tundra Ore Spawnpoint 79'),
+(@POOL+79,1, 'Borean Tundra Ore Spawnpoint 80'),
+(@POOL+80,1, 'Borean Tundra Ore Spawnpoint 81'),
+(@POOL+81,1, 'Borean Tundra Ore Spawnpoint 82'),
+(@POOL+82,1, 'Borean Tundra Ore Spawnpoint 83'),
+(@POOL+83,1, 'Borean Tundra Ore Spawnpoint 84'),
+(@POOL+84,1, 'Borean Tundra Ore Spawnpoint 85'),
+(@POOL+85,1, 'Borean Tundra Ore Spawnpoint 86'),
+(@POOL+86,1, 'Borean Tundra Ore Spawnpoint 87'),
+(@POOL+87,1, 'Borean Tundra Ore Spawnpoint 88'),
+(@POOL+88,1, 'Borean Tundra Ore Spawnpoint 89'),
+(@POOL+89,1, 'Borean Tundra Ore Spawnpoint 90'),
+(@POOL+90,1, 'Borean Tundra Ore Spawnpoint 91');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Borean Tundra Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 61'),
+(@POOL+61,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 62'),
+(@POOL+62,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 63'),
+(@POOL+63,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 64'),
+(@POOL+64,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 65'),
+(@POOL+65,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 66'),
+(@POOL+66,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 67'),
+(@POOL+67,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 68'),
+(@POOL+68,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 69'),
+(@POOL+69,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 70'),
+(@POOL+70,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 71'),
+(@POOL+71,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 72'),
+(@POOL+72,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 73'),
+(@POOL+73,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 74'),
+(@POOL+74,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 75'),
+(@POOL+75,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 76'),
+(@POOL+76,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 77'),
+(@POOL+77,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 78'),
+(@POOL+78,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 79'),
+(@POOL+79,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 80'),
+(@POOL+80,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 81'),
+(@POOL+81,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 82'),
+(@POOL+82,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 83'),
+(@POOL+83,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 84'),
+(@POOL+84,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 85'),
+(@POOL+85,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 86'),
+(@POOL+86,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 87'),
+(@POOL+87,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 88'),
+(@POOL+88,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 89'),
+(@POOL+89,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 90'),
+(@POOL+90,@MOTHER,0, 'Borean Tundra Ore Spawnpoint 91');
+
+-- ----------------------------------------
+-- Fixup ore spawns for Howling Fjord
+-- ----------------------------------------
+SET @RANGE := 150;
+SET @GUID1 := 160300;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @POOL := 10150;
+SET @LASTGUID := 99; -- Total number of guids - 1 in zone
+SET @CHANCE1 := 90; -- This value can be 0 to 100
+SET @CHANCE2 := 100 - @CHANCE1;
+SET @MOTHER := 9901;
+SET @ACTIVE := 30; -- Max number of active spawns
+SET @TIMER := 900; -- Respawn timer in seconds
+-- Remove Ore spawns from Howling Fjord
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < -1630 AND `position_x` < 3090;
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5065 AND 5121;
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5277 AND 5282;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5065 AND 5120;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5277 AND 5282;
+-- Cobalt Deposits Howling Fjord
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1,189978,571,1,1,-144.006,-4989.570,309.6730,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189978,571,1,1,-23.354,-3586.670,33.7790,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189978,571,1,1,27.324,-3423.650,35.6203,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189978,571,1,1,85.848,-4961.880,316.0240,-1.74533,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189978,571,1,1,124.983,-3449.730,11.4041,-2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189978,571,1,1,146.113,-5708.520,190.8280,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189978,571,1,1,196.368,-5529.420,341.1140,1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189978,571,1,1,222.143,-4541.690,253.7470,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189978,571,1,1,229.642,-4166.400,247.4830,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189978,571,1,1,299.400,-5925.310,169.6930,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189978,571,1,1,311.682,-5829.520,198.0980,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189978,571,1,1,316.353,-5817.650,83.6513,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189978,571,1,1,328.762,-5728.000,99.5547,-0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189978,571,1,1,330.220,-3287.700,18.4444,-2.23402,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189978,571,1,1,423.793,-4250.210,244.9780,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189978,571,1,1,492.294,-4829.170,197.9880,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189978,571,1,1,500.158,-5366.890,254.5380,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189978,571,1,1,541.476,-4125.020,233.4580,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189978,571,1,1,576.522,-5438.030,252.0870,2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189978,571,1,1,589.568,-5148.210,-27.0699,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189978,571,1,1,635.328,-5190.950,-62.0246,-0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189978,571,1,1,667.572,-5772.810,284.2740,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189978,571,1,1,714.204,-5995.600,298.3530,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189978,571,1,1,733.277,-5463.260,245.2840,-1.58825,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189978,571,1,1,785.268,-4710.470,189.7250,0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189978,571,1,3,788.804,-5611.920,231.8180,2.63544,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189978,571,1,1,830.549,-5146.020,-89.1197,-2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189978,571,1,1,837.785,-3214.380,20.0425,0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189978,571,1,1,854.087,-5928.980,280.4520,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189978,571,1,1,875.595,-3690.570,175.6530,2.63544,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189978,571,1,1,886.931,-4307.350,193.8120,-1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189978,571,1,1,895.472,-4540.750,159.1540,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189978,571,1,1,910.239,-3593.450,177.5230,2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189978,571,1,1,937.882,-3032.450,48.7494,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189978,571,1,1,985.488,-5351.640,193.8970,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189978,571,1,1,997.533,-3464.590,186.6590,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189978,571,1,1,998.078,-5148.790,-57.7402,2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189978,571,1,1,1016.760,-4291.670,174.0770,2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189978,571,1,1,1041.890,-4154.150,152.6180,0.94248,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189978,571,1,1,1118.230,-3437.520,182.9670,2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189978,571,1,1,1257.230,-6054.090,270.8700,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189978,571,1,3,1257.940,-6169.470,234.7100,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189978,571,1,1,1339.420,-5826.830,281.0600,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189978,571,1,1,1462.340,-5216.200,195.6330,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189978,571,1,1,1541.420,-5149.820,182.1700,2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189978,571,1,1,1598.760,-5001.500,144.0290,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189978,571,1,1,1599.154,-4322.061,187.5960,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189978,571,1,1,1615.540,-5234.790,181.3280,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189978,571,1,1,1653.280,-4680.180,88.7987,1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189978,571,1,1,1660.280,-6275.210,-0.2026,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189978,571,1,1,1683.270,-6037.250,7.9892,-3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189978,571,1,1,1691.670,-4586.670,169.3620,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189978,571,1,1,1725.580,-4852.210,115.8110,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189978,571,1,1,1742.030,-4378.720,174.1920,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189978,571,1,1,1796.960,-6265.710,-0.9726,-2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189978,571,1,1,1813.380,-5678.040,226.8270,0.29671,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189978,571,1,1,1820.460,-3808.940,151.5820,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189978,571,1,1,1836.030,-3927.070,177.5710,-1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189978,571,1,1,1864.170,-3001.180,144.1620,2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189978,571,1,1,1876.110,-4463.470,197.2810,2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189978,571,1,1,1887.140,-3679.140,153.3620,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+61,189978,571,1,1,1963.890,-2986.950,155.5740,-2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID1+62,189978,571,1,1,1985.820,-5552.980,217.1860,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+63,189978,571,1,1,2022.600,-2729.910,0.3004,0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+64,189978,571,1,1,2047.480,-5751.410,222.5030,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID1+65,189978,571,1,1,2063.090,-5004.980,231.0370,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+66,189978,571,1,1,2136.450,-5652.090,224.3920,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+67,189978,571,1,1,2143.750,-5151.330,240.6410,2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID1+68,189978,571,1,1,2183.740,-5265.660,250.0680,0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID1+69,189978,571,1,1,2192.250,-2648.390,1.1699,-1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID1+70,189978,571,1,1,2192.970,-2536.350,5.3353,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID1+71,189978,571,1,1,2208.330,-3082.530,132.8410,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID1+72,189978,571,1,1,2275.290,-2949.500,123.7380,2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID1+73,189978,571,1,1,2304.780,-2744.870,-0.0415,2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID1+74,189978,571,1,1,2332.090,-5852.160,251.1900,-0.50614,0,0,0,1,@TIMER,255,1),
+(@GUID1+75,189978,571,1,1,2357.480,-3706.470,223.2140,-2.32129,0,0,0,1,@TIMER,255,1),
+(@GUID1+76,189978,571,1,1,2407.690,-2824.830,9.7012,-0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID1+77,189978,571,1,1,2467.060,-2824.690,20.6504,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+78,189978,571,1,1,2478.630,-3080.530,138.9920,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+79,189978,571,1,1,2479.220,-5437.190,299.5430,1.74533,0,0,0,1,@TIMER,255,1),
+(@GUID1+80,189978,571,1,1,2504.180,-3896.100,263.8390,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID1+81,189978,571,1,1,2508.660,-3015.970,120.7830,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID1+82,189978,571,1,1,2518.630,-4743.720,246.5690,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+83,189978,571,1,1,2536.780,-3717.470,266.8920,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+84,189978,571,1,1,2545.640,-4507.800,230.7980,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID1+85,189978,571,1,1,2557.900,-4616.650,229.8060,0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID1+86,189978,571,1,3,2570.450,-2766.360,8.7401,-0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+87,189978,571,1,1,2580.790,-4152.530,302.8390,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID1+88,189978,571,1,1,2583.110,-3123.240,128.7190,2.12930,0,0,0,1,@TIMER,255,1),
+(@GUID1+89,189978,571,1,1,2588.110,-3004.660,111.5360,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+90,189978,571,1,1,2589.780,-3917.450,296.8400,-0.29671,0,0,0,1,@TIMER,255,1),
+(@GUID1+91,189978,571,1,1,2616.550,-5791.180,314.3880,0.03491,0,0,0,1,@TIMER,255,1),
+(@GUID1+92,189978,571,1,1,2637.770,-3659.380,241.5800,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+93,189978,571,1,3,2696.920,-4105.830,365.9280,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+94,189978,571,1,1,2700.000,-3145.570,119.8800,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID1+95,189978,571,1,1,2731.690,-5583.630,379.2140,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+96,189978,571,1,3,2733.180,-4021.560,378.2430,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID1+97,189978,571,1,1,2821.700,-3719.720,232.7200,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID1+98,189978,571,1,1,2869.770,-3186.190,134.0100,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID1+99,189978,571,1,1,2918.130,-3075.250,91.0060,1.81514,0,0,0,1,@TIMER,255,1);
+-- Rich Cobalt Deposits Howling Fjord
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID2,189979,571,1,1,-144.006,-4989.570,309.6730,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189979,571,1,1,-23.354,-3586.670,33.7790,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189979,571,1,1,27.324,-3423.650,35.6203,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189979,571,1,1,85.848,-4961.880,316.0240,-1.74533,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189979,571,1,1,124.983,-3449.730,11.4041,-2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189979,571,1,1,146.113,-5708.520,190.8280,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189979,571,1,1,196.368,-5529.420,341.1140,1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189979,571,1,1,222.143,-4541.690,253.7470,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189979,571,1,1,229.642,-4166.400,247.4830,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189979,571,1,1,299.400,-5925.310,169.6930,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189979,571,1,1,311.682,-5829.520,198.0980,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189979,571,1,1,316.353,-5817.650,83.6513,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189979,571,1,1,328.762,-5728.000,99.5547,-0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189979,571,1,1,330.220,-3287.700,18.4444,-2.23402,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189979,571,1,1,423.793,-4250.210,244.9780,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189979,571,1,1,492.294,-4829.170,197.9880,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189979,571,1,1,500.158,-5366.890,254.5380,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189979,571,1,1,541.476,-4125.020,233.4580,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189979,571,1,1,576.522,-5438.030,252.0870,2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189979,571,1,1,589.568,-5148.210,-27.0699,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189979,571,1,1,635.328,-5190.950,-62.0246,-0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189979,571,1,1,667.572,-5772.810,284.2740,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189979,571,1,1,714.204,-5995.600,298.3530,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID2+23,189979,571,1,1,733.277,-5463.260,245.2840,-1.58825,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189979,571,1,1,785.268,-4710.470,189.7250,0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189979,571,1,3,788.804,-5611.920,231.8180,2.63544,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189979,571,1,1,830.549,-5146.020,-89.1197,-2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189979,571,1,1,837.785,-3214.380,20.0425,0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189979,571,1,1,854.087,-5928.980,280.4520,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189979,571,1,1,875.595,-3690.570,175.6530,2.63544,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189979,571,1,1,886.931,-4307.350,193.8120,-1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189979,571,1,1,895.472,-4540.750,159.1540,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189979,571,1,1,910.239,-3593.450,177.5230,2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189979,571,1,1,937.882,-3032.450,48.7494,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189979,571,1,1,985.488,-5351.640,193.8970,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189979,571,1,1,997.533,-3464.590,186.6590,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189979,571,1,1,998.078,-5148.790,-57.7402,2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189979,571,1,1,1016.760,-4291.670,174.0770,2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189979,571,1,1,1041.890,-4154.150,152.6180,0.94248,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189979,571,1,1,1118.230,-3437.520,182.9670,2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189979,571,1,1,1257.230,-6054.090,270.8700,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189979,571,1,3,1257.940,-6169.470,234.7100,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189979,571,1,1,1339.420,-5826.830,281.0600,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189979,571,1,1,1462.340,-5216.200,195.6330,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189979,571,1,1,1541.420,-5149.820,182.1700,2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189979,571,1,1,1598.760,-5001.500,144.0290,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189979,571,1,1,1599.154,-4322.061,187.5960,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID2+47,189979,571,1,1,1615.540,-5234.790,181.3280,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+48,189979,571,1,1,1653.280,-4680.180,88.7987,1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189979,571,1,1,1660.280,-6275.210,-0.2026,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189979,571,1,1,1683.270,-6037.250,7.9892,-3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189979,571,1,1,1691.670,-4586.670,169.3620,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189979,571,1,1,1725.580,-4852.210,115.8110,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189979,571,1,1,1742.030,-4378.720,174.1920,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189979,571,1,1,1796.960,-6265.710,-0.9726,-2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189979,571,1,1,1813.380,-5678.040,226.8270,0.29671,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189979,571,1,1,1820.460,-3808.940,151.5820,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189979,571,1,1,1836.030,-3927.070,177.5710,-1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189979,571,1,1,1864.170,-3001.180,144.1620,2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189979,571,1,1,1876.110,-4463.470,197.2810,2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189979,571,1,1,1887.140,-3679.140,153.3620,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+61,189979,571,1,1,1963.890,-2986.950,155.5740,-2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID2+62,189979,571,1,1,1985.820,-5552.980,217.1860,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+63,189979,571,1,1,2022.600,-2729.910,0.3004,0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+64,189979,571,1,1,2047.480,-5751.410,222.5030,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID2+65,189979,571,1,1,2063.090,-5004.980,231.0370,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+66,189979,571,1,1,2136.450,-5652.090,224.3920,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+67,189979,571,1,1,2143.750,-5151.330,240.6410,2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID2+68,189979,571,1,1,2183.740,-5265.660,250.0680,0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID2+69,189979,571,1,1,2192.250,-2648.390,1.1699,-1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID2+70,189979,571,1,1,2192.970,-2536.350,5.3353,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID2+71,189979,571,1,1,2208.330,-3082.530,132.8410,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID2+72,189979,571,1,1,2275.290,-2949.500,123.7380,2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID2+73,189979,571,1,1,2304.780,-2744.870,-0.0415,2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID2+74,189979,571,1,1,2332.090,-5852.160,251.1900,-0.50614,0,0,0,1,@TIMER,255,1),
+(@GUID2+75,189979,571,1,1,2357.480,-3706.470,223.2140,-2.32129,0,0,0,1,@TIMER,255,1),
+(@GUID2+76,189979,571,1,1,2407.690,-2824.830,9.7012,-0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID2+77,189979,571,1,1,2467.060,-2824.690,20.6504,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+78,189979,571,1,1,2478.630,-3080.530,138.9920,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+79,189979,571,1,1,2479.220,-5437.190,299.5430,1.74533,0,0,0,1,@TIMER,255,1),
+(@GUID2+80,189979,571,1,1,2504.180,-3896.100,263.8390,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID2+81,189979,571,1,1,2508.660,-3015.970,120.7830,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID2+82,189979,571,1,1,2518.630,-4743.720,246.5690,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+83,189979,571,1,1,2536.780,-3717.470,266.8920,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+84,189979,571,1,1,2545.640,-4507.800,230.7980,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID2+85,189979,571,1,1,2557.900,-4616.650,229.8060,0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID2+86,189979,571,1,3,2570.450,-2766.360,8.7401,-0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+87,189979,571,1,1,2580.790,-4152.530,302.8390,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID2+88,189979,571,1,1,2583.110,-3123.240,128.7190,2.12930,0,0,0,1,@TIMER,255,1),
+(@GUID2+89,189979,571,1,1,2588.110,-3004.660,111.5360,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+90,189979,571,1,1,2589.780,-3917.450,296.8400,-0.29671,0,0,0,1,@TIMER,255,1),
+(@GUID2+91,189979,571,1,1,2616.550,-5791.180,314.3880,0.03491,0,0,0,1,@TIMER,255,1),
+(@GUID2+92,189979,571,1,1,2637.770,-3659.380,241.5800,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+93,189979,571,1,3,2696.920,-4105.830,365.9280,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+94,189979,571,1,1,2700.000,-3145.570,119.8800,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID2+95,189979,571,1,1,2731.690,-5583.630,379.2140,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+96,189979,571,1,3,2733.180,-4021.560,378.2430,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID2+97,189979,571,1,1,2821.700,-3719.720,232.7200,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID2+98,189979,571,1,1,2869.770,-3186.190,134.0100,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID2+99,189979,571,1,1,2918.130,-3075.250,91.0060,1.81514,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@LASTGUID;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Howling Fjord Ore Spawnpoint 1 Cobalt'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Howling Fjord Ore Spawnpoint 1 Rich Cobalt'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Howling Fjord Ore Spawnpoint 2 Cobalt'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Howling Fjord Ore Spawnpoint 2 Rich Cobalt'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Howling Fjord Ore Spawnpoint 3 Cobalt'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Howling Fjord Ore Spawnpoint 3 Rich Cobalt'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Howling Fjord Ore Spawnpoint 4 Cobalt'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Howling Fjord Ore Spawnpoint 4 Rich Cobalt'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Howling Fjord Ore Spawnpoint 5 Cobalt'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Howling Fjord Ore Spawnpoint 5 Rich Cobalt'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Howling Fjord Ore Spawnpoint 6 Cobalt'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Howling Fjord Ore Spawnpoint 6 Rich Cobalt'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Howling Fjord Ore Spawnpoint 7 Cobalt'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Howling Fjord Ore Spawnpoint 7 Rich Cobalt'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Howling Fjord Ore Spawnpoint 8 Cobalt'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Howling Fjord Ore Spawnpoint 8 Rich Cobalt'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Howling Fjord Ore Spawnpoint 9 Cobalt'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Howling Fjord Ore Spawnpoint 9 Rich Cobalt'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Howling Fjord Ore Spawnpoint 10 Cobalt'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Howling Fjord Ore Spawnpoint 10 Rich Cobalt'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Howling Fjord Ore Spawnpoint 11 Cobalt'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Howling Fjord Ore Spawnpoint 11 Rich Cobalt'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Howling Fjord Ore Spawnpoint 12 Cobalt'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Howling Fjord Ore Spawnpoint 12 Rich Cobalt'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Howling Fjord Ore Spawnpoint 13 Cobalt'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Howling Fjord Ore Spawnpoint 13 Rich Cobalt'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Howling Fjord Ore Spawnpoint 14 Cobalt'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Howling Fjord Ore Spawnpoint 14 Rich Cobalt'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Howling Fjord Ore Spawnpoint 15 Cobalt'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Howling Fjord Ore Spawnpoint 15 Rich Cobalt'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Howling Fjord Ore Spawnpoint 16 Cobalt'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Howling Fjord Ore Spawnpoint 16 Rich Cobalt'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Howling Fjord Ore Spawnpoint 17 Cobalt'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Howling Fjord Ore Spawnpoint 17 Rich Cobalt'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Howling Fjord Ore Spawnpoint 18 Cobalt'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Howling Fjord Ore Spawnpoint 18 Rich Cobalt'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Howling Fjord Ore Spawnpoint 19 Cobalt'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Howling Fjord Ore Spawnpoint 19 Rich Cobalt'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Howling Fjord Ore Spawnpoint 20 Cobalt'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Howling Fjord Ore Spawnpoint 20 Rich Cobalt'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Howling Fjord Ore Spawnpoint 21 Cobalt'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Howling Fjord Ore Spawnpoint 21 Rich Cobalt'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Howling Fjord Ore Spawnpoint 22 Cobalt'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Howling Fjord Ore Spawnpoint 22 Rich Cobalt'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Howling Fjord Ore Spawnpoint 23 Cobalt'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Howling Fjord Ore Spawnpoint 23 Rich Cobalt'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Howling Fjord Ore Spawnpoint 24 Cobalt'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Howling Fjord Ore Spawnpoint 24 Rich Cobalt'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Howling Fjord Ore Spawnpoint 25 Cobalt'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Howling Fjord Ore Spawnpoint 25 Rich Cobalt'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Howling Fjord Ore Spawnpoint 26 Cobalt'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Howling Fjord Ore Spawnpoint 26 Rich Cobalt'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Howling Fjord Ore Spawnpoint 27 Cobalt'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Howling Fjord Ore Spawnpoint 27 Rich Cobalt'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Howling Fjord Ore Spawnpoint 28 Cobalt'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Howling Fjord Ore Spawnpoint 28 Rich Cobalt'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Howling Fjord Ore Spawnpoint 29 Cobalt'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Howling Fjord Ore Spawnpoint 29 Rich Cobalt'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Howling Fjord Ore Spawnpoint 30 Cobalt'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Howling Fjord Ore Spawnpoint 30 Rich Cobalt'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Howling Fjord Ore Spawnpoint 31 Cobalt'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Howling Fjord Ore Spawnpoint 31 Rich Cobalt'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Howling Fjord Ore Spawnpoint 32 Cobalt'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Howling Fjord Ore Spawnpoint 32 Rich Cobalt'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Howling Fjord Ore Spawnpoint 33 Cobalt'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Howling Fjord Ore Spawnpoint 33 Rich Cobalt'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Howling Fjord Ore Spawnpoint 34 Cobalt'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Howling Fjord Ore Spawnpoint 34 Rich Cobalt'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Howling Fjord Ore Spawnpoint 35 Cobalt'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Howling Fjord Ore Spawnpoint 35 Rich Cobalt'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Howling Fjord Ore Spawnpoint 36 Cobalt'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Howling Fjord Ore Spawnpoint 36 Rich Cobalt'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Howling Fjord Ore Spawnpoint 37 Cobalt'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Howling Fjord Ore Spawnpoint 37 Rich Cobalt'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Howling Fjord Ore Spawnpoint 38 Cobalt'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Howling Fjord Ore Spawnpoint 38 Rich Cobalt'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Howling Fjord Ore Spawnpoint 39 Cobalt'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Howling Fjord Ore Spawnpoint 39 Rich Cobalt'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Howling Fjord Ore Spawnpoint 40 Cobalt'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Howling Fjord Ore Spawnpoint 40 Rich Cobalt'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Howling Fjord Ore Spawnpoint 41 Cobalt'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Howling Fjord Ore Spawnpoint 41 Rich Cobalt'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Howling Fjord Ore Spawnpoint 42 Cobalt'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Howling Fjord Ore Spawnpoint 42 Rich Cobalt'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Howling Fjord Ore Spawnpoint 43 Cobalt'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Howling Fjord Ore Spawnpoint 43 Rich Cobalt'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Howling Fjord Ore Spawnpoint 44 Cobalt'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Howling Fjord Ore Spawnpoint 44 Rich Cobalt'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Howling Fjord Ore Spawnpoint 45 Cobalt'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Howling Fjord Ore Spawnpoint 45 Rich Cobalt'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Howling Fjord Ore Spawnpoint 46 Cobalt'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Howling Fjord Ore Spawnpoint 46 Rich Cobalt'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Howling Fjord Ore Spawnpoint 47 Cobalt'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Howling Fjord Ore Spawnpoint 47 Rich Cobalt'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Howling Fjord Ore Spawnpoint 48 Cobalt'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Howling Fjord Ore Spawnpoint 48 Rich Cobalt'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Howling Fjord Ore Spawnpoint 49 Cobalt'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Howling Fjord Ore Spawnpoint 49 Rich Cobalt'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Howling Fjord Ore Spawnpoint 50 Cobalt'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Howling Fjord Ore Spawnpoint 50 Rich Cobalt'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Howling Fjord Ore Spawnpoint 51 Cobalt'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Howling Fjord Ore Spawnpoint 51 Rich Cobalt'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Howling Fjord Ore Spawnpoint 52 Cobalt'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Howling Fjord Ore Spawnpoint 52 Rich Cobalt'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Howling Fjord Ore Spawnpoint 53 Cobalt'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Howling Fjord Ore Spawnpoint 53 Rich Cobalt'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Howling Fjord Ore Spawnpoint 54 Cobalt'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Howling Fjord Ore Spawnpoint 54 Rich Cobalt'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Howling Fjord Ore Spawnpoint 55 Cobalt'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Howling Fjord Ore Spawnpoint 55 Rich Cobalt'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Howling Fjord Ore Spawnpoint 56 Cobalt'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Howling Fjord Ore Spawnpoint 56 Rich Cobalt'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Howling Fjord Ore Spawnpoint 57 Cobalt'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Howling Fjord Ore Spawnpoint 57 Rich Cobalt'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Howling Fjord Ore Spawnpoint 58 Cobalt'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Howling Fjord Ore Spawnpoint 58 Rich Cobalt'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Howling Fjord Ore Spawnpoint 59 Cobalt'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Howling Fjord Ore Spawnpoint 59 Rich Cobalt'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Howling Fjord Ore Spawnpoint 60 Cobalt'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Howling Fjord Ore Spawnpoint 60 Rich Cobalt'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Howling Fjord Ore Spawnpoint 61 Cobalt'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Howling Fjord Ore Spawnpoint 61 Rich Cobalt'),
+(@GUID1+61,@POOL+61,@CHANCE1, 'Howling Fjord Ore Spawnpoint 62 Cobalt'),
+(@GUID2+61,@POOL+61,@CHANCE2, 'Howling Fjord Ore Spawnpoint 62 Rich Cobalt'),
+(@GUID1+62,@POOL+62,@CHANCE1, 'Howling Fjord Ore Spawnpoint 63 Cobalt'),
+(@GUID2+62,@POOL+62,@CHANCE2, 'Howling Fjord Ore Spawnpoint 63 Rich Cobalt'),
+(@GUID1+63,@POOL+63,@CHANCE1, 'Howling Fjord Ore Spawnpoint 64 Cobalt'),
+(@GUID2+63,@POOL+63,@CHANCE2, 'Howling Fjord Ore Spawnpoint 64 Rich Cobalt'),
+(@GUID1+64,@POOL+64,@CHANCE1, 'Howling Fjord Ore Spawnpoint 65 Cobalt'),
+(@GUID2+64,@POOL+64,@CHANCE2, 'Howling Fjord Ore Spawnpoint 65 Rich Cobalt'),
+(@GUID1+65,@POOL+65,@CHANCE1, 'Howling Fjord Ore Spawnpoint 66 Cobalt'),
+(@GUID2+65,@POOL+65,@CHANCE2, 'Howling Fjord Ore Spawnpoint 66 Rich Cobalt'),
+(@GUID1+66,@POOL+66,@CHANCE1, 'Howling Fjord Ore Spawnpoint 67 Cobalt'),
+(@GUID2+66,@POOL+66,@CHANCE2, 'Howling Fjord Ore Spawnpoint 67 Rich Cobalt'),
+(@GUID1+67,@POOL+67,@CHANCE1, 'Howling Fjord Ore Spawnpoint 68 Cobalt'),
+(@GUID2+67,@POOL+67,@CHANCE2, 'Howling Fjord Ore Spawnpoint 68 Rich Cobalt'),
+(@GUID1+68,@POOL+68,@CHANCE1, 'Howling Fjord Ore Spawnpoint 69 Cobalt'),
+(@GUID2+68,@POOL+68,@CHANCE2, 'Howling Fjord Ore Spawnpoint 69 Rich Cobalt'),
+(@GUID1+69,@POOL+69,@CHANCE1, 'Howling Fjord Ore Spawnpoint 70 Cobalt'),
+(@GUID2+69,@POOL+69,@CHANCE2, 'Howling Fjord Ore Spawnpoint 70 Rich Cobalt'),
+(@GUID1+70,@POOL+70,@CHANCE1, 'Howling Fjord Ore Spawnpoint 71 Cobalt'),
+(@GUID2+70,@POOL+70,@CHANCE2, 'Howling Fjord Ore Spawnpoint 71 Rich Cobalt'),
+(@GUID1+71,@POOL+71,@CHANCE1, 'Howling Fjord Ore Spawnpoint 72 Cobalt'),
+(@GUID2+71,@POOL+71,@CHANCE2, 'Howling Fjord Ore Spawnpoint 72 Rich Cobalt'),
+(@GUID1+72,@POOL+72,@CHANCE1, 'Howling Fjord Ore Spawnpoint 73 Cobalt'),
+(@GUID2+72,@POOL+72,@CHANCE2, 'Howling Fjord Ore Spawnpoint 73 Rich Cobalt'),
+(@GUID1+73,@POOL+73,@CHANCE1, 'Howling Fjord Ore Spawnpoint 74 Cobalt'),
+(@GUID2+73,@POOL+73,@CHANCE2, 'Howling Fjord Ore Spawnpoint 74 Rich Cobalt'),
+(@GUID1+74,@POOL+74,@CHANCE1, 'Howling Fjord Ore Spawnpoint 75 Cobalt'),
+(@GUID2+74,@POOL+74,@CHANCE2, 'Howling Fjord Ore Spawnpoint 75 Rich Cobalt'),
+(@GUID1+75,@POOL+75,@CHANCE1, 'Howling Fjord Ore Spawnpoint 76 Cobalt'),
+(@GUID2+75,@POOL+75,@CHANCE2, 'Howling Fjord Ore Spawnpoint 76 Rich Cobalt'),
+(@GUID1+76,@POOL+76,@CHANCE1, 'Howling Fjord Ore Spawnpoint 77 Cobalt'),
+(@GUID2+76,@POOL+76,@CHANCE2, 'Howling Fjord Ore Spawnpoint 77 Rich Cobalt'),
+(@GUID1+77,@POOL+77,@CHANCE1, 'Howling Fjord Ore Spawnpoint 78 Cobalt'),
+(@GUID2+77,@POOL+77,@CHANCE2, 'Howling Fjord Ore Spawnpoint 78 Rich Cobalt'),
+(@GUID1+78,@POOL+78,@CHANCE1, 'Howling Fjord Ore Spawnpoint 79 Cobalt'),
+(@GUID2+78,@POOL+78,@CHANCE2, 'Howling Fjord Ore Spawnpoint 79 Rich Cobalt'),
+(@GUID1+79,@POOL+79,@CHANCE1, 'Howling Fjord Ore Spawnpoint 80 Cobalt'),
+(@GUID2+79,@POOL+79,@CHANCE2, 'Howling Fjord Ore Spawnpoint 80 Rich Cobalt'),
+(@GUID1+80,@POOL+80,@CHANCE1, 'Howling Fjord Ore Spawnpoint 81 Cobalt'),
+(@GUID2+80,@POOL+80,@CHANCE2, 'Howling Fjord Ore Spawnpoint 81 Rich Cobalt'),
+(@GUID1+81,@POOL+81,@CHANCE1, 'Howling Fjord Ore Spawnpoint 82 Cobalt'),
+(@GUID2+81,@POOL+81,@CHANCE2, 'Howling Fjord Ore Spawnpoint 82 Rich Cobalt'),
+(@GUID1+82,@POOL+82,@CHANCE1, 'Howling Fjord Ore Spawnpoint 83 Cobalt'),
+(@GUID2+82,@POOL+82,@CHANCE2, 'Howling Fjord Ore Spawnpoint 83 Rich Cobalt'),
+(@GUID1+83,@POOL+83,@CHANCE1, 'Howling Fjord Ore Spawnpoint 84 Cobalt'),
+(@GUID2+83,@POOL+83,@CHANCE2, 'Howling Fjord Ore Spawnpoint 84 Rich Cobalt'),
+(@GUID1+84,@POOL+84,@CHANCE1, 'Howling Fjord Ore Spawnpoint 85 Cobalt'),
+(@GUID2+84,@POOL+84,@CHANCE2, 'Howling Fjord Ore Spawnpoint 85 Rich Cobalt'),
+(@GUID1+85,@POOL+85,@CHANCE1, 'Howling Fjord Ore Spawnpoint 86 Cobalt'),
+(@GUID2+85,@POOL+85,@CHANCE2, 'Howling Fjord Ore Spawnpoint 86 Rich Cobalt'),
+(@GUID1+86,@POOL+86,@CHANCE1, 'Howling Fjord Ore Spawnpoint 87 Cobalt'),
+(@GUID2+86,@POOL+86,@CHANCE2, 'Howling Fjord Ore Spawnpoint 87 Rich Cobalt'),
+(@GUID1+87,@POOL+87,@CHANCE1, 'Howling Fjord Ore Spawnpoint 88 Cobalt'),
+(@GUID2+87,@POOL+87,@CHANCE2, 'Howling Fjord Ore Spawnpoint 88 Rich Cobalt'),
+(@GUID1+88,@POOL+88,@CHANCE1, 'Howling Fjord Ore Spawnpoint 89 Cobalt'),
+(@GUID2+88,@POOL+88,@CHANCE2, 'Howling Fjord Ore Spawnpoint 89 Rich Cobalt'),
+(@GUID1+89,@POOL+89,@CHANCE1, 'Howling Fjord Ore Spawnpoint 90 Cobalt'),
+(@GUID2+89,@POOL+89,@CHANCE2, 'Howling Fjord Ore Spawnpoint 90 Rich Cobalt'),
+(@GUID1+90,@POOL+90,@CHANCE1, 'Howling Fjord Ore Spawnpoint 91 Cobalt'),
+(@GUID2+90,@POOL+90,@CHANCE2, 'Howling Fjord Ore Spawnpoint 91 Rich Cobalt'),
+(@GUID1+91,@POOL+91,@CHANCE1, 'Howling Fjord Ore Spawnpoint 92 Cobalt'),
+(@GUID2+91,@POOL+91,@CHANCE2, 'Howling Fjord Ore Spawnpoint 92 Rich Cobalt'),
+(@GUID1+92,@POOL+92,@CHANCE1, 'Howling Fjord Ore Spawnpoint 93 Cobalt'),
+(@GUID2+92,@POOL+92,@CHANCE2, 'Howling Fjord Ore Spawnpoint 93 Rich Cobalt'),
+(@GUID1+93,@POOL+93,@CHANCE1, 'Howling Fjord Ore Spawnpoint 94 Cobalt'),
+(@GUID2+93,@POOL+93,@CHANCE2, 'Howling Fjord Ore Spawnpoint 94 Rich Cobalt'),
+(@GUID1+94,@POOL+94,@CHANCE1, 'Howling Fjord Ore Spawnpoint 95 Cobalt'),
+(@GUID2+94,@POOL+94,@CHANCE2, 'Howling Fjord Ore Spawnpoint 95 Rich Cobalt'),
+(@GUID1+95,@POOL+95,@CHANCE1, 'Howling Fjord Ore Spawnpoint 96 Cobalt'),
+(@GUID2+95,@POOL+95,@CHANCE2, 'Howling Fjord Ore Spawnpoint 96 Rich Cobalt'),
+(@GUID1+96,@POOL+96,@CHANCE1, 'Howling Fjord Ore Spawnpoint 97 Cobalt'),
+(@GUID2+96,@POOL+96,@CHANCE2, 'Howling Fjord Ore Spawnpoint 97 Rich Cobalt'),
+(@GUID1+97,@POOL+97,@CHANCE1, 'Howling Fjord Ore Spawnpoint 98 Cobalt'),
+(@GUID2+97,@POOL+97,@CHANCE2, 'Howling Fjord Ore Spawnpoint 98 Rich Cobalt'),
+(@GUID1+98,@POOL+98,@CHANCE1, 'Howling Fjord Ore Spawnpoint 99 Cobalt'),
+(@GUID2+98,@POOL+98,@CHANCE2, 'Howling Fjord Ore Spawnpoint 99 Rich Cobalt'),
+(@GUID1+99,@POOL+99,@CHANCE1, 'Howling Fjord Ore Spawnpoint 100 Cobalt'),
+(@GUID2+99,@POOL+99,@CHANCE2, 'Howling Fjord Ore Spawnpoint 100 Rich Cobalt');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Howling Fjord Ore Spawnpoint 1'),
+(@POOL+1,1, 'Howling Fjord Ore Spawnpoint 2'),
+(@POOL+2,1, 'Howling Fjord Ore Spawnpoint 3'),
+(@POOL+3,1, 'Howling Fjord Ore Spawnpoint 4'),
+(@POOL+4,1, 'Howling Fjord Ore Spawnpoint 5'),
+(@POOL+5,1, 'Howling Fjord Ore Spawnpoint 6'),
+(@POOL+6,1, 'Howling Fjord Ore Spawnpoint 7'),
+(@POOL+7,1, 'Howling Fjord Ore Spawnpoint 8'),
+(@POOL+8,1, 'Howling Fjord Ore Spawnpoint 9'),
+(@POOL+9,1, 'Howling Fjord Ore Spawnpoint 10'),
+(@POOL+10,1, 'Howling Fjord Ore Spawnpoint 11'),
+(@POOL+11,1, 'Howling Fjord Ore Spawnpoint 12'),
+(@POOL+12,1, 'Howling Fjord Ore Spawnpoint 13'),
+(@POOL+13,1, 'Howling Fjord Ore Spawnpoint 14'),
+(@POOL+14,1, 'Howling Fjord Ore Spawnpoint 15'),
+(@POOL+15,1, 'Howling Fjord Ore Spawnpoint 16'),
+(@POOL+16,1, 'Howling Fjord Ore Spawnpoint 17'),
+(@POOL+17,1, 'Howling Fjord Ore Spawnpoint 18'),
+(@POOL+18,1, 'Howling Fjord Ore Spawnpoint 19'),
+(@POOL+19,1, 'Howling Fjord Ore Spawnpoint 20'),
+(@POOL+20,1, 'Howling Fjord Ore Spawnpoint 21'),
+(@POOL+21,1, 'Howling Fjord Ore Spawnpoint 22'),
+(@POOL+22,1, 'Howling Fjord Ore Spawnpoint 23'),
+(@POOL+23,1, 'Howling Fjord Ore Spawnpoint 24'),
+(@POOL+24,1, 'Howling Fjord Ore Spawnpoint 25'),
+(@POOL+25,1, 'Howling Fjord Ore Spawnpoint 26'),
+(@POOL+26,1, 'Howling Fjord Ore Spawnpoint 27'),
+(@POOL+27,1, 'Howling Fjord Ore Spawnpoint 28'),
+(@POOL+28,1, 'Howling Fjord Ore Spawnpoint 29'),
+(@POOL+29,1, 'Howling Fjord Ore Spawnpoint 30'),
+(@POOL+30,1, 'Howling Fjord Ore Spawnpoint 31'),
+(@POOL+31,1, 'Howling Fjord Ore Spawnpoint 32'),
+(@POOL+32,1, 'Howling Fjord Ore Spawnpoint 33'),
+(@POOL+33,1, 'Howling Fjord Ore Spawnpoint 34'),
+(@POOL+34,1, 'Howling Fjord Ore Spawnpoint 35'),
+(@POOL+35,1, 'Howling Fjord Ore Spawnpoint 36'),
+(@POOL+36,1, 'Howling Fjord Ore Spawnpoint 37'),
+(@POOL+37,1, 'Howling Fjord Ore Spawnpoint 38'),
+(@POOL+38,1, 'Howling Fjord Ore Spawnpoint 39'),
+(@POOL+39,1, 'Howling Fjord Ore Spawnpoint 40'),
+(@POOL+40,1, 'Howling Fjord Ore Spawnpoint 41'),
+(@POOL+41,1, 'Howling Fjord Ore Spawnpoint 42'),
+(@POOL+42,1, 'Howling Fjord Ore Spawnpoint 43'),
+(@POOL+43,1, 'Howling Fjord Ore Spawnpoint 44'),
+(@POOL+44,1, 'Howling Fjord Ore Spawnpoint 45'),
+(@POOL+45,1, 'Howling Fjord Ore Spawnpoint 46'),
+(@POOL+46,1, 'Howling Fjord Ore Spawnpoint 47'),
+(@POOL+47,1, 'Howling Fjord Ore Spawnpoint 48'),
+(@POOL+48,1, 'Howling Fjord Ore Spawnpoint 49'),
+(@POOL+49,1, 'Howling Fjord Ore Spawnpoint 50'),
+(@POOL+50,1, 'Howling Fjord Ore Spawnpoint 51'),
+(@POOL+51,1, 'Howling Fjord Ore Spawnpoint 52'),
+(@POOL+52,1, 'Howling Fjord Ore Spawnpoint 53'),
+(@POOL+53,1, 'Howling Fjord Ore Spawnpoint 54'),
+(@POOL+54,1, 'Howling Fjord Ore Spawnpoint 55'),
+(@POOL+55,1, 'Howling Fjord Ore Spawnpoint 56'),
+(@POOL+56,1, 'Howling Fjord Ore Spawnpoint 57'),
+(@POOL+57,1, 'Howling Fjord Ore Spawnpoint 58'),
+(@POOL+58,1, 'Howling Fjord Ore Spawnpoint 59'),
+(@POOL+59,1, 'Howling Fjord Ore Spawnpoint 60'),
+(@POOL+60,1, 'Howling Fjord Ore Spawnpoint 61'),
+(@POOL+61,1, 'Howling Fjord Ore Spawnpoint 62'),
+(@POOL+62,1, 'Howling Fjord Ore Spawnpoint 63'),
+(@POOL+63,1, 'Howling Fjord Ore Spawnpoint 64'),
+(@POOL+64,1, 'Howling Fjord Ore Spawnpoint 65'),
+(@POOL+65,1, 'Howling Fjord Ore Spawnpoint 66'),
+(@POOL+66,1, 'Howling Fjord Ore Spawnpoint 67'),
+(@POOL+67,1, 'Howling Fjord Ore Spawnpoint 68'),
+(@POOL+68,1, 'Howling Fjord Ore Spawnpoint 69'),
+(@POOL+69,1, 'Howling Fjord Ore Spawnpoint 70'),
+(@POOL+70,1, 'Howling Fjord Ore Spawnpoint 71'),
+(@POOL+71,1, 'Howling Fjord Ore Spawnpoint 72'),
+(@POOL+72,1, 'Howling Fjord Ore Spawnpoint 73'),
+(@POOL+73,1, 'Howling Fjord Ore Spawnpoint 74'),
+(@POOL+74,1, 'Howling Fjord Ore Spawnpoint 75'),
+(@POOL+75,1, 'Howling Fjord Ore Spawnpoint 76'),
+(@POOL+76,1, 'Howling Fjord Ore Spawnpoint 77'),
+(@POOL+77,1, 'Howling Fjord Ore Spawnpoint 78'),
+(@POOL+78,1, 'Howling Fjord Ore Spawnpoint 79'),
+(@POOL+79,1, 'Howling Fjord Ore Spawnpoint 80'),
+(@POOL+80,1, 'Howling Fjord Ore Spawnpoint 81'),
+(@POOL+81,1, 'Howling Fjord Ore Spawnpoint 82'),
+(@POOL+82,1, 'Howling Fjord Ore Spawnpoint 83'),
+(@POOL+83,1, 'Howling Fjord Ore Spawnpoint 84'),
+(@POOL+84,1, 'Howling Fjord Ore Spawnpoint 85'),
+(@POOL+85,1, 'Howling Fjord Ore Spawnpoint 86'),
+(@POOL+86,1, 'Howling Fjord Ore Spawnpoint 87'),
+(@POOL+87,1, 'Howling Fjord Ore Spawnpoint 88'),
+(@POOL+88,1, 'Howling Fjord Ore Spawnpoint 89'),
+(@POOL+89,1, 'Howling Fjord Ore Spawnpoint 90'),
+(@POOL+90,1, 'Howling Fjord Ore Spawnpoint 91'),
+(@POOL+91,1, 'Howling Fjord Ore Spawnpoint 92'),
+(@POOL+92,1, 'Howling Fjord Ore Spawnpoint 93'),
+(@POOL+93,1, 'Howling Fjord Ore Spawnpoint 94'),
+(@POOL+94,1, 'Howling Fjord Ore Spawnpoint 95'),
+(@POOL+95,1, 'Howling Fjord Ore Spawnpoint 96'),
+(@POOL+96,1, 'Howling Fjord Ore Spawnpoint 97'),
+(@POOL+97,1, 'Howling Fjord Ore Spawnpoint 98'),
+(@POOL+98,1, 'Howling Fjord Ore Spawnpoint 99'),
+(@POOL+99,1, 'Howling Fjord Ore Spawnpoint 100');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Howling Fjord Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 61'),
+(@POOL+61,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 62'),
+(@POOL+62,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 63'),
+(@POOL+63,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 64'),
+(@POOL+64,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 65'),
+(@POOL+65,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 66'),
+(@POOL+66,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 67'),
+(@POOL+67,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 68'),
+(@POOL+68,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 69'),
+(@POOL+69,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 70'),
+(@POOL+70,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 71'),
+(@POOL+71,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 72'),
+(@POOL+72,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 73'),
+(@POOL+73,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 74'),
+(@POOL+74,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 75'),
+(@POOL+75,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 76'),
+(@POOL+76,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 77'),
+(@POOL+77,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 78'),
+(@POOL+78,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 79'),
+(@POOL+79,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 80'),
+(@POOL+80,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 81'),
+(@POOL+81,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 82'),
+(@POOL+82,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 83'),
+(@POOL+83,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 84'),
+(@POOL+84,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 85'),
+(@POOL+85,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 86'),
+(@POOL+86,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 87'),
+(@POOL+87,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 88'),
+(@POOL+88,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 89'),
+(@POOL+89,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 90'),
+(@POOL+90,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 91'),
+(@POOL+91,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 92'),
+(@POOL+92,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 93'),
+(@POOL+93,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 94'),
+(@POOL+94,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 95'),
+(@POOL+95,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 96'),
+(@POOL+96,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 97'),
+(@POOL+97,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 98'),
+(@POOL+98,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 99'),
+(@POOL+99,@MOTHER,0, 'Howling Fjord Ore Spawnpoint 100');
+
+-- ----------------------------------------
+-- -- Fixup ore spawns for Grizzly Hills --
+-- ----------------------------------------
+SET @RANGE := 100;
+SET @GUID1 := 160600;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @POOL := 10300;
+SET @LASTGUID := 60;
+SET @CHANCE1 := 90;
+SET @CHANCE2 := 100 - @CHANCE1;
+SET @MOTHER := 9902;
+SET @ACTIVE := 20; -- Max number of active spawns
+SET @TIMER := 600; -- Respawn timer in seconds
+-- Remove Ore spawns from Grizzly Hills
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < -1550 AND position_y > -2380 AND `position_x` < 4650 AND `position_x` > 3090;
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < -2380 AND position_y > -3160 AND `position_x` < 4560 AND `position_x` > 3090;
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < -3160 AND position_y > -5800 AND `position_x` < 4850 AND `position_x` > 3090;
+DELETE FROM gameobject WHERE id IN (189978,189979) AND map=571 AND position_y < -3604 AND position_y > -5800 AND `position_x` < 5470 AND `position_x` > 4850 AND `position_z` < 380;
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5181 AND 5216;
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5240 AND 5243;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5182 AND 5216;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5240 AND 5243;
+-- Colbalt Deposits Grizzly Hills
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1,189978,571,1,1,3092.010,-3250.750,239.4220,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189978,571,1,1,3245.520,-4263.030,346.3790,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189978,571,1,1,3278.070,-4631.530,274.2350,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189978,571,1,1,3297.320,-4432.250,323.8490,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189978,571,1,1,3304.730,-1804.230,85.4142,2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189978,571,1,1,3330.480,-4922.170,305.9250,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189978,571,1,1,3374.104,-4776.897,274.4394,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189978,571,1,1,3402.580,-1772.610,93.7937,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189978,571,1,1,3482.790,-3444.500,267.0810,0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189978,571,1,1,3504.310,-5246.790,179.1390,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189978,571,1,1,3505.110,-4140.870,264.1560,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189978,571,1,1,3523.270,-2664.510,104.2180,-2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189978,571,1,1,3543.850,-5054.890,234.0610,2.80997,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189978,571,1,1,3546.450,-1799.920,161.3730,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189978,571,1,1,3555.420,-3562.350,242.5690,0.19199,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189978,571,1,1,3562.720,-5167.090,179.5770,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189978,571,1,1,3593.700,-3737.760,231.2620,-3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189978,571,1,1,3634.340,-2647.850,137.6100,1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189978,571,1,1,3683.020,-1787.160,170.3800,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189978,571,1,1,3684.690,-2654.980,152.8360,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189978,571,1,1,3689.440,-5363.480,107.9370,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189978,571,1,1,3775.340,-3570.330,235.9720,2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189978,571,1,1,3776.570,-2395.590,173.3690,-0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189978,571,1,1,3779.940,-3770.120,179.4740,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189978,571,1,1,3806.770,-3351.670,282.0970,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189978,571,1,1,3808.300,-1743.320,203.5550,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189978,571,1,1,3819.070,-2721.720,200.3380,-0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189978,571,1,1,3823.790,-1846.020,215.9370,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189978,571,1,1,3887.610,-3704.440,173.5850,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189978,571,1,1,3892.340,-5151.140,73.8241,-1.53589,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189978,571,1,1,3931.060,-1655.190,190.6440,1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189978,571,1,3,3932.550,-3970.730,174.8070,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189978,571,1,1,3943.470,-1843.410,217.4480,2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189978,571,1,1,4101.430,-2955.460,270.9040,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189978,571,1,1,4109.900,-2432.630,221.0930,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189978,571,1,1,4128.130,-3959.530,160.6620,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189978,571,1,1,4151.420,-4614.510,144.2710,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189978,571,1,1,4152.130,-1891.690,187.4210,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189978,571,1,1,4172.300,-3685.310,186.9110,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189978,571,1,1,4196.390,-1995.750,211.0920,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189978,571,1,1,4208.140,-3133.170,282.3300,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189978,571,1,1,4220.520,-3803.550,185.4780,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189978,571,1,1,4303.788,-4978.636,23.5756,2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189978,571,1,1,4408.610,-2408.180,228.9980,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189978,571,1,1,4448.330,-4800.280,40.7411,-2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189978,571,1,1,4560.060,-2319.040,181.0760,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189978,571,1,1,4560.340,-4972.120,48.4352,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189978,571,1,1,4584.810,-4561.060,196.2030,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189978,571,1,1,4585.620,-3743.730,233.2730,-1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189978,571,1,1,4641.260,-3944.710,249.8200,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189978,571,1,1,4731.170,-3974.150,202.9880,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189978,571,1,1,4734.590,-4548.180,206.8140,-0.36652,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189978,571,1,1,4774.960,-4882.750,58.8890,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189978,571,1,1,4782.520,-3895.370,187.3920,2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189978,571,1,1,4823.120,-3888.860,183.0190,2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189978,571,1,1,4830.860,-4477.090,200.1495,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189978,571,1,1,4882.170,-4206.040,253.2890,-0.19199,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189978,571,1,1,4934.329,-4555.055,220.0529,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189978,571,1,1,4956.457,-4666.764,214.5148,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189978,571,1,1,5018.210,-4794.480,217.7570,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189978,571,1,1,5060.030,-4828.330,212.2340,0.85521,0,0,0,1,@TIMER,255,1);
+-- Rich Colbalt Deposits Grizzly Hills
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID2,189979,571,1,1,3092.010,-3250.750,239.4220,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189979,571,1,1,3245.520,-4263.030,346.3790,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189979,571,1,1,3278.070,-4631.530,274.2350,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189979,571,1,1,3297.320,-4432.250,323.8490,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189979,571,1,1,3304.730,-1804.230,85.4142,2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189979,571,1,1,3330.480,-4922.170,305.9250,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189979,571,1,1,3374.104,-4776.897,274.4394,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189979,571,1,1,3402.580,-1772.610,93.7937,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189979,571,1,1,3482.790,-3444.500,267.0810,0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189979,571,1,1,3504.310,-5246.790,179.1390,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189979,571,1,1,3505.110,-4140.870,264.1560,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189979,571,1,1,3523.270,-2664.510,104.2180,-2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189979,571,1,1,3543.850,-5054.890,234.0610,2.80997,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189979,571,1,1,3546.450,-1799.920,161.3730,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189979,571,1,1,3555.420,-3562.350,242.5690,0.19199,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189979,571,1,1,3562.720,-5167.090,179.5770,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189979,571,1,1,3593.700,-3737.760,231.2620,-3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189979,571,1,1,3634.340,-2647.850,137.6100,1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189979,571,1,1,3683.020,-1787.160,170.3800,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189979,571,1,1,3684.690,-2654.980,152.8360,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189979,571,1,1,3689.440,-5363.480,107.9370,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189979,571,1,1,3775.340,-3570.330,235.9720,2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189979,571,1,1,3776.570,-2395.590,173.3690,-0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID2+23,189979,571,1,1,3779.940,-3770.120,179.4740,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189979,571,1,1,3806.770,-3351.670,282.0970,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189979,571,1,1,3808.300,-1743.320,203.5550,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189979,571,1,1,3819.070,-2721.720,200.3380,-0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189979,571,1,1,3823.790,-1846.020,215.9370,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189979,571,1,1,3887.610,-3704.440,173.5850,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189979,571,1,1,3892.340,-5151.140,73.8241,-1.53589,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189979,571,1,1,3931.060,-1655.190,190.6440,1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189979,571,1,3,3932.550,-3970.730,174.8070,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189979,571,1,1,3943.470,-1843.410,217.4480,2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189979,571,1,1,4101.430,-2955.460,270.9040,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189979,571,1,1,4109.900,-2432.630,221.0930,3.14159,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189979,571,1,1,4128.130,-3959.530,160.6620,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189979,571,1,1,4151.420,-4614.510,144.2710,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189979,571,1,1,4152.130,-1891.690,187.4210,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189979,571,1,1,4172.300,-3685.310,186.9110,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189979,571,1,1,4196.390,-1995.750,211.0920,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189979,571,1,1,4208.140,-3133.170,282.3300,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189979,571,1,1,4220.520,-3803.550,185.4780,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189979,571,1,1,4303.788,-4978.636,23.5756,2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189979,571,1,1,4408.610,-2408.180,228.9980,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189979,571,1,1,4448.330,-4800.280,40.7411,-2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189979,571,1,1,4560.060,-2319.040,181.0760,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189979,571,1,1,4560.340,-4972.120,48.4352,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID2+47,189979,571,1,1,4584.810,-4561.060,196.2030,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID2+48,189979,571,1,1,4585.620,-3743.730,233.2730,-1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189979,571,1,1,4641.260,-3944.710,249.8200,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189979,571,1,1,4731.170,-3974.150,202.9880,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189979,571,1,1,4734.590,-4548.180,206.8140,-0.36652,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189979,571,1,1,4774.960,-4882.750,58.8890,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189979,571,1,1,4782.520,-3895.370,187.3920,2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189979,571,1,1,4823.120,-3888.860,183.0190,2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189979,571,1,1,4830.860,-4477.090,200.1495,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189979,571,1,1,4882.170,-4206.040,253.2890,-0.19199,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189979,571,1,1,4934.329,-4555.055,220.0529,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189979,571,1,1,4956.457,-4666.764,214.5148,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189979,571,1,1,5018.210,-4794.480,217.7570,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189979,571,1,1,5060.030,-4828.330,212.2340,0.85521,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@LASTGUID;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 1 Cobalt'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 1 Rich Cobalt'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 2 Cobalt'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 2 Rich Cobalt'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 3 Cobalt'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 3 Rich Cobalt'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 4 Cobalt'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 4 Rich Cobalt'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 5 Cobalt'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 5 Rich Cobalt'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 6 Cobalt'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 6 Rich Cobalt'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 7 Cobalt'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 7 Rich Cobalt'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 8 Cobalt'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 8 Rich Cobalt'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 9 Cobalt'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 9 Rich Cobalt'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 10 Cobalt'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 10 Rich Cobalt'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 11 Cobalt'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 11 Rich Cobalt'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 12 Cobalt'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 12 Rich Cobalt'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 13 Cobalt'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 13 Rich Cobalt'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 14 Cobalt'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 14 Rich Cobalt'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 15 Cobalt'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 15 Rich Cobalt'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 16 Cobalt'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 16 Rich Cobalt'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 17 Cobalt'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 17 Rich Cobalt'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 18 Cobalt'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 18 Rich Cobalt'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 19 Cobalt'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 19 Rich Cobalt'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 20 Cobalt'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 20 Rich Cobalt'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 21 Cobalt'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 21 Rich Cobalt'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 22 Cobalt'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 22 Rich Cobalt'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 23 Cobalt'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 23 Rich Cobalt'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 24 Cobalt'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 24 Rich Cobalt'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 25 Cobalt'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 25 Rich Cobalt'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 26 Cobalt'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 26 Rich Cobalt'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 27 Cobalt'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 27 Rich Cobalt'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 28 Cobalt'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 28 Rich Cobalt'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 29 Cobalt'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 29 Rich Cobalt'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 30 Cobalt'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 30 Rich Cobalt'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 31 Cobalt'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 31 Rich Cobalt'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 32 Cobalt'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 32 Rich Cobalt'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 33 Cobalt'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 33 Rich Cobalt'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 34 Cobalt'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 34 Rich Cobalt'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 35 Cobalt'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 35 Rich Cobalt'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 36 Cobalt'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 36 Rich Cobalt'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 37 Cobalt'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 37 Rich Cobalt'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 38 Cobalt'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 38 Rich Cobalt'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 39 Cobalt'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 39 Rich Cobalt'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 40 Cobalt'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 40 Rich Cobalt'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 41 Cobalt'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 41 Rich Cobalt'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 42 Cobalt'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 42 Rich Cobalt'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 43 Cobalt'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 43 Rich Cobalt'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 44 Cobalt'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 44 Rich Cobalt'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 45 Cobalt'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 45 Rich Cobalt'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 46 Cobalt'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 46 Rich Cobalt'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 47 Cobalt'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 47 Rich Cobalt'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 48 Cobalt'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 48 Rich Cobalt'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 49 Cobalt'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 49 Rich Cobalt'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 50 Cobalt'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 50 Rich Cobalt'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 51 Cobalt'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 51 Rich Cobalt'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 52 Cobalt'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 52 Rich Cobalt'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 53 Cobalt'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 53 Rich Cobalt'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 54 Cobalt'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 54 Rich Cobalt'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 55 Cobalt'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 55 Rich Cobalt'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 56 Cobalt'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 56 Rich Cobalt'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 57 Cobalt'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 57 Rich Cobalt'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 58 Cobalt'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 58 Rich Cobalt'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 59 Cobalt'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 59 Rich Cobalt'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 60 Cobalt'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 60 Rich Cobalt'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Grizzly Hills Ore Spawnpoint 61 Cobalt'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Grizzly Hills Ore Spawnpoint 61 Rich Cobalt');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Grizzly Hills Ore Spawnpoint 1'),
+(@POOL+1,1, 'Grizzly Hills Ore Spawnpoint 2'),
+(@POOL+2,1, 'Grizzly Hills Ore Spawnpoint 3'),
+(@POOL+3,1, 'Grizzly Hills Ore Spawnpoint 4'),
+(@POOL+4,1, 'Grizzly Hills Ore Spawnpoint 5'),
+(@POOL+5,1, 'Grizzly Hills Ore Spawnpoint 6'),
+(@POOL+6,1, 'Grizzly Hills Ore Spawnpoint 7'),
+(@POOL+7,1, 'Grizzly Hills Ore Spawnpoint 8'),
+(@POOL+8,1, 'Grizzly Hills Ore Spawnpoint 9'),
+(@POOL+9,1, 'Grizzly Hills Ore Spawnpoint 10'),
+(@POOL+10,1, 'Grizzly Hills Ore Spawnpoint 11'),
+(@POOL+11,1, 'Grizzly Hills Ore Spawnpoint 12'),
+(@POOL+12,1, 'Grizzly Hills Ore Spawnpoint 13'),
+(@POOL+13,1, 'Grizzly Hills Ore Spawnpoint 14'),
+(@POOL+14,1, 'Grizzly Hills Ore Spawnpoint 15'),
+(@POOL+15,1, 'Grizzly Hills Ore Spawnpoint 16'),
+(@POOL+16,1, 'Grizzly Hills Ore Spawnpoint 17'),
+(@POOL+17,1, 'Grizzly Hills Ore Spawnpoint 18'),
+(@POOL+18,1, 'Grizzly Hills Ore Spawnpoint 19'),
+(@POOL+19,1, 'Grizzly Hills Ore Spawnpoint 20'),
+(@POOL+20,1, 'Grizzly Hills Ore Spawnpoint 21'),
+(@POOL+21,1, 'Grizzly Hills Ore Spawnpoint 22'),
+(@POOL+22,1, 'Grizzly Hills Ore Spawnpoint 23'),
+(@POOL+23,1, 'Grizzly Hills Ore Spawnpoint 24'),
+(@POOL+24,1, 'Grizzly Hills Ore Spawnpoint 25'),
+(@POOL+25,1, 'Grizzly Hills Ore Spawnpoint 26'),
+(@POOL+26,1, 'Grizzly Hills Ore Spawnpoint 27'),
+(@POOL+27,1, 'Grizzly Hills Ore Spawnpoint 28'),
+(@POOL+28,1, 'Grizzly Hills Ore Spawnpoint 29'),
+(@POOL+29,1, 'Grizzly Hills Ore Spawnpoint 30'),
+(@POOL+30,1, 'Grizzly Hills Ore Spawnpoint 31'),
+(@POOL+31,1, 'Grizzly Hills Ore Spawnpoint 32'),
+(@POOL+32,1, 'Grizzly Hills Ore Spawnpoint 33'),
+(@POOL+33,1, 'Grizzly Hills Ore Spawnpoint 34'),
+(@POOL+34,1, 'Grizzly Hills Ore Spawnpoint 35'),
+(@POOL+35,1, 'Grizzly Hills Ore Spawnpoint 36'),
+(@POOL+36,1, 'Grizzly Hills Ore Spawnpoint 37'),
+(@POOL+37,1, 'Grizzly Hills Ore Spawnpoint 38'),
+(@POOL+38,1, 'Grizzly Hills Ore Spawnpoint 39'),
+(@POOL+39,1, 'Grizzly Hills Ore Spawnpoint 40'),
+(@POOL+40,1, 'Grizzly Hills Ore Spawnpoint 41'),
+(@POOL+41,1, 'Grizzly Hills Ore Spawnpoint 42'),
+(@POOL+42,1, 'Grizzly Hills Ore Spawnpoint 43'),
+(@POOL+43,1, 'Grizzly Hills Ore Spawnpoint 44'),
+(@POOL+44,1, 'Grizzly Hills Ore Spawnpoint 45'),
+(@POOL+45,1, 'Grizzly Hills Ore Spawnpoint 46'),
+(@POOL+46,1, 'Grizzly Hills Ore Spawnpoint 47'),
+(@POOL+47,1, 'Grizzly Hills Ore Spawnpoint 48'),
+(@POOL+48,1, 'Grizzly Hills Ore Spawnpoint 49'),
+(@POOL+49,1, 'Grizzly Hills Ore Spawnpoint 50'),
+(@POOL+50,1, 'Grizzly Hills Ore Spawnpoint 51'),
+(@POOL+51,1, 'Grizzly Hills Ore Spawnpoint 52'),
+(@POOL+52,1, 'Grizzly Hills Ore Spawnpoint 53'),
+(@POOL+53,1, 'Grizzly Hills Ore Spawnpoint 54'),
+(@POOL+54,1, 'Grizzly Hills Ore Spawnpoint 55'),
+(@POOL+55,1, 'Grizzly Hills Ore Spawnpoint 56'),
+(@POOL+56,1, 'Grizzly Hills Ore Spawnpoint 57'),
+(@POOL+57,1, 'Grizzly Hills Ore Spawnpoint 58'),
+(@POOL+58,1, 'Grizzly Hills Ore Spawnpoint 59'),
+(@POOL+59,1, 'Grizzly Hills Ore Spawnpoint 60'),
+(@POOL+60,1, 'Grizzly Hills Ore Spawnpoint 61');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Grizzly Hills Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Grizzly Hills Ore Spawnpoint 61');
+
+-- -----------------------------------
+-- -- Fixup ore spawns for Zul'Drak --
+-- -----------------------------------
+SET @RANGE := 150;
+SET @GUID1 := 161100;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @POOL := 10650;
+SET @LASTGUID := 92;
+SET @CHANCE1 := 90;
+SET @CHANCE2 := 100 - @CHANCE1;
+SET @MOTHER := 9904;
+SET @ACTIVE := 30; -- Max number of active spawns
+SET @TIMER := 900; -- Respawn timer in seconds
+-- Remove existing Colbalt, Rich Colbalt, & Saronite Deposits from Zul''Drak
+DELETE FROM gameobject WHERE id IN (189978,189979,189980) AND map=571 AND position_y < -1100 AND position_y > -3605 AND `position_x` > 4850 AND `position_x` < 6516 ORDER BY position_x;
+DELETE FROM gameobject WHERE id IN (189978,189979,189980) AND map=571 AND position_y < -3605 AND position_y > -5500 AND `position_x` > 5100 AND `position_x` < 7000 ORDER BY position_x;
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5256 AND 5276;
+-- Colbalt Deposits Zul'Drak
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1,189978,571,1,1,4859.570,-2766.920,293.1760,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189978,571,1,1,4862.150,-3603.410,307.0340,1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189978,571,1,1,4865.680,-2458.640,213.6510,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189978,571,1,1,4914.590,-1231.760,174.7320,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189978,571,1,1,4930.794,-2900.828,290.6294,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189978,571,1,1,4988.300,-3547.630,289.5220,3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189978,571,1,1,5034.149,-3107.575,281.8192,-2.94960,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189978,571,1,1,5068.390,-1175.990,260.7850,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189978,571,1,1,5086.030,-1155.550,265.3410,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189978,571,1,1,5090.210,-1197.570,267.1280,-2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189978,571,1,1,5104.010,-1243.180,252.9670,2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189978,571,1,1,5107.330,-1267.570,262.3820,2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189978,571,1,1,5118.357,-2138.430,241.0557,2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189978,571,1,1,5124.540,-2863.140,292.8380,-0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189978,571,1,1,5126.980,-1597.360,236.5620,-3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189978,571,1,1,5131.699,-2155.166,239.0023,0.99484,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189978,571,1,1,5131.740,-1276.760,248.3140,3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189978,571,1,1,5138.820,-1427.070,246.8070,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189978,571,1,1,5174.090,-1159.020,257.8510,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189978,571,1,1,5179.080,-3316.920,283.7740,-0.90757,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189978,571,1,1,5179.630,-3603.580,295.8630,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189978,571,1,1,5193.190,-3341.850,289.4360,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189978,571,1,1,5213.890,-3377.160,290.4010,1.81514,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189978,571,1,1,5239.606,-2370.833,286.3241,0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189978,571,1,1,5251.932,-2361.378,286.3510,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189978,571,1,1,5272.223,-1614.815,231.3021,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189978,571,1,1,5309.277,-3209.399,282.3378,-0.57596,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189978,571,1,1,5309.970,-2060.150,241.4680,1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189978,571,1,1,5311.820,-3125.220,280.9130,2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189978,571,1,1,5311.940,-1202.480,246.5990,-1.16937,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189978,571,1,1,5319.037,-4535.752,415.2371,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189978,571,1,1,5341.113,-1305.672,238.4332,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189978,571,1,1,5355.556,-2016.313,235.9245,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189978,571,1,1,5364.510,-2058.915,242.2356,2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189978,571,1,1,5368.401,-3257.874,290.5284,1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189978,571,1,1,5374.420,-1755.010,240.0630,2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189978,571,1,1,5380.200,-2170.010,237.1360,-1.32645,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189978,571,1,1,5384.130,-1101.800,185.3190,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189978,571,1,1,5402.130,-1898.590,237.1590,1.74533,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189978,571,1,1,5403.180,-2268.070,243.9030,2.40855,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189978,571,1,1,5410.570,-2534.090,292.4060,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189978,571,1,1,5512.260,-1314.160,238.3930,-0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189978,571,1,1,5517.676,-2101.106,239.9783,-0.71558,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189978,571,1,1,5517.870,-1276.300,239.4080,2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189978,571,1,1,5546.540,-1721.970,243.6690,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189978,571,1,1,5557.930,-2331.110,287.8600,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189978,571,1,1,5566.940,-1860.930,235.2660,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189978,571,1,1,5673.484,-3554.344,373.4818,0.71558,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189978,571,1,1,5697.810,-2317.470,288.6290,1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189978,571,1,1,5711.410,-3665.910,372.2200,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189978,571,1,1,5714.953,-2415.053,288.1849,2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189978,571,1,1,5775.913,-3235.525,362.1545,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189978,571,1,1,5840.190,-2309.730,288.2010,-1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189978,571,1,1,5915.270,-1263.340,261.5160,-2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189978,571,1,1,5953.860,-2800.040,270.2110,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189978,571,1,1,5966.880,-4236.390,358.4940,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189978,571,1,1,5970.190,-2870.240,287.2890,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189978,571,1,1,5971.868,-3366.344,363.9691,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189978,571,1,1,5972.123,-3234.955,361.8635,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189978,571,1,1,5990.524,-4156.240,377.7000,1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189978,571,1,1,6033.010,-4086.710,355.1950,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+61,189978,571,1,1,6051.720,-1285.410,503.8380,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+62,189978,571,1,1,6055.426,-4338.665,378.8201,2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID1+63,189978,571,1,1,6073.873,-2672.150,293.3498,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+64,189978,571,1,1,6085.920,-1623.470,273.3960,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID1+65,189978,571,1,1,6093.193,-4243.174,319.0197,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID1+66,189978,571,1,1,6106.116,-4426.526,366.1528,-0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID1+67,189978,571,1,1,6131.640,-2383.840,301.0840,-0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID1+68,189978,571,1,1,6171.825,-3366.969,363.1176,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID1+69,189978,571,1,1,6176.548,-3235.763,362.9467,2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID1+70,189978,571,1,1,6217.740,-2238.070,238.7050,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID1+71,189978,571,1,1,6265.880,-2931.170,307.0120,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+72,189978,571,1,1,6278.610,-2746.580,303.1850,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+73,189978,571,1,1,6280.100,-2592.430,302.3720,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+74,189978,571,1,1,6286.331,-2263.173,237.8203,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+75,189978,571,1,1,6286.910,-2671.790,304.4130,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+76,189978,571,1,1,6331.420,-2977.620,339.6420,1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID1+77,189978,571,1,1,6365.950,-2193.240,272.6010,-0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID1+78,189978,571,1,1,6436.630,-3241.960,405.8750,-1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID1+79,189978,571,1,1,6439.040,-3330.390,404.9060,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+80,189978,571,1,1,6462.370,-3474.220,388.9030,-0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID1+81,189978,571,1,1,6512.855,-4255.316,463.8195,-0.29671,0,0,0,1,@TIMER,255,1),
+(@GUID1+82,189978,571,1,1,6515.427,-3485.970,389.0715,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID1+83,189978,571,1,1,6537.952,-4141.421,467.0403,-0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID1+84,189978,571,1,1,6564.480,-4107.550,464.1680,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID1+85,189978,571,1,1,6572.520,-4193.380,468.7800,-1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID1+86,189978,571,1,1,6579.668,-4053.245,487.2758,-1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID1+87,189978,571,1,1,6700.080,-4231.600,461.2990,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+88,189978,571,1,1,6779.470,-4100.770,470.9730,-3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID1+89,189978,571,1,1,6792.440,-4281.660,452.8340,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID1+90,189978,571,1,1,6818.135,-4627.391,442.2250,1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID1+91,189978,571,1,1,6845.492,-4442.293,444.4835,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID1+92,189978,571,1,1,6914.570,-4477.570,444.9130,1.55334,0,0,0,1,@TIMER,255,1);
+-- Rich Colbalt & Saronite Deposits Zul'Drak
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID2,189979,571,1,1,4859.570,-2766.920,293.1760,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189979,571,1,1,4862.150,-3603.410,307.0340,1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189979,571,1,1,4865.680,-2458.640,213.6510,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189979,571,1,1,4914.590,-1231.760,174.7320,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189979,571,1,1,4930.794,-2900.828,290.6294,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189979,571,1,1,4988.300,-3547.630,289.5220,3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189979,571,1,1,5034.149,-3107.575,281.8192,-2.94960,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189979,571,1,1,5068.390,-1175.990,260.7850,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189979,571,1,1,5086.030,-1155.550,265.3410,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189979,571,1,1,5090.210,-1197.570,267.1280,-2.60053,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189979,571,1,1,5104.010,-1243.180,252.9670,2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189979,571,1,1,5107.330,-1267.570,262.3820,2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189979,571,1,1,5118.357,-2138.430,241.0557,2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189979,571,1,1,5124.540,-2863.140,292.8380,-0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189979,571,1,1,5126.980,-1597.360,236.5620,-3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189979,571,1,1,5131.699,-2155.166,239.0023,0.99484,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189979,571,1,1,5131.740,-1276.760,248.3140,3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189979,571,1,1,5138.820,-1427.070,246.8070,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189979,571,1,1,5174.090,-1159.020,257.8510,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189979,571,1,1,5179.080,-3316.920,283.7740,-0.90757,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189979,571,1,1,5179.630,-3603.580,295.8630,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189979,571,1,1,5193.190,-3341.850,289.4360,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189980,571,1,1,5213.890,-3377.160,290.4010,1.81514,0,0,0,1,@TIMER,255,1), -- Saronite
+(@GUID2+23,189979,571,1,1,5239.606,-2370.833,286.3241,0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189979,571,1,1,5251.932,-2361.378,286.3510,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189979,571,1,1,5272.223,-1614.815,231.3021,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189979,571,1,1,5309.277,-3209.399,282.3378,-0.57596,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189979,571,1,1,5309.970,-2060.150,241.4680,1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189979,571,1,1,5311.820,-3125.220,280.9130,2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189979,571,1,1,5311.940,-1202.480,246.5990,-1.16937,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189979,571,1,1,5319.037,-4535.752,415.2371,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189979,571,1,1,5341.113,-1305.672,238.4332,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189979,571,1,1,5355.556,-2016.313,235.9245,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189979,571,1,1,5364.510,-2058.915,242.2356,2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189979,571,1,1,5368.401,-3257.874,290.5284,1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189979,571,1,1,5374.420,-1755.010,240.0630,2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189979,571,1,1,5380.200,-2170.010,237.1360,-1.32645,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189979,571,1,1,5384.130,-1101.800,185.3190,2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189979,571,1,1,5402.130,-1898.590,237.1590,1.74533,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189979,571,1,1,5403.180,-2268.070,243.9030,2.40855,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189979,571,1,1,5410.570,-2534.090,292.4060,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189979,571,1,1,5512.260,-1314.160,238.3930,-0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189979,571,1,1,5517.676,-2101.106,239.9783,-0.71558,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189979,571,1,1,5517.870,-1276.300,239.4080,2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189979,571,1,1,5546.540,-1721.970,243.6690,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189979,571,1,1,5557.930,-2331.110,287.8600,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189980,571,1,1,5566.940,-1860.930,235.2660,-1.79769,0,0,0,1,@TIMER,255,1), -- Saronite
+(@GUID2+47,189980,571,1,1,5673.484,-3554.344,373.4818,0.71558,0,0,0,1,@TIMER,255,1), -- Saronite
+(@GUID2+48,189979,571,1,1,5697.810,-2317.470,288.6290,1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189979,571,1,1,5711.410,-3665.910,372.2200,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189979,571,1,1,5714.953,-2415.053,288.1849,2.16421,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189979,571,1,1,5775.913,-3235.525,362.1545,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189979,571,1,1,5840.190,-2309.730,288.2010,-1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189979,571,1,1,5915.270,-1263.340,261.5160,-2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189979,571,1,1,5953.860,-2800.040,270.2110,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189979,571,1,1,5966.880,-4236.390,358.4940,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189979,571,1,1,5970.190,-2870.240,287.2890,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189979,571,1,1,5971.868,-3366.344,363.9691,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189979,571,1,1,5972.123,-3234.955,361.8635,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189979,571,1,1,5990.524,-4156.240,377.7000,1.72787,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189979,571,1,1,6033.010,-4086.710,355.1950,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+61,189979,571,1,1,6051.720,-1285.410,503.8380,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+62,189980,571,1,1,6055.426,-4338.665,378.8201,2.60054,0,0,0,1,@TIMER,255,1), -- Saronite
+(@GUID2+63,189979,571,1,1,6073.873,-2672.150,293.3498,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+64,189979,571,1,1,6085.920,-1623.470,273.3960,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID2+65,189979,571,1,1,6093.193,-4243.174,319.0197,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID2+66,189979,571,1,1,6106.116,-4426.526,366.1528,-0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID2+67,189979,571,1,1,6131.640,-2383.840,301.0840,-0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID2+68,189979,571,1,1,6171.825,-3366.969,363.1176,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID2+69,189979,571,1,1,6176.548,-3235.763,362.9467,2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID2+70,189979,571,1,1,6217.740,-2238.070,238.7050,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID2+71,189980,571,1,1,6265.880,-2931.170,307.0120,0.76794,0,0,0,1,@TIMER,255,1), -- Saronite
+(@GUID2+72,189979,571,1,1,6278.610,-2746.580,303.1850,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+73,189979,571,1,1,6280.100,-2592.430,302.3720,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+74,189980,571,1,1,6286.331,-2263.173,237.8203,-2.37364,0,0,0,1,@TIMER,255,1), -- Saronite
+(@GUID2+75,189979,571,1,1,6286.910,-2671.790,304.4130,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+76,189979,571,1,1,6331.420,-2977.620,339.6420,1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID2+77,189979,571,1,1,6365.950,-2193.240,272.6010,-0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID2+78,189979,571,1,1,6436.630,-3241.960,405.8750,-1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID2+79,189979,571,1,1,6439.040,-3330.390,404.9060,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+80,189979,571,1,1,6462.370,-3474.220,388.9030,-0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID2+81,189979,571,1,1,6512.855,-4255.316,463.8195,-0.29671,0,0,0,1,@TIMER,255,1),
+(@GUID2+82,189979,571,1,1,6515.427,-3485.970,389.0715,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID2+83,189979,571,1,1,6537.952,-4141.421,467.0403,-0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID2+84,189979,571,1,1,6564.480,-4107.550,464.1680,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID2+85,189979,571,1,1,6572.520,-4193.380,468.7800,-1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID2+86,189979,571,1,1,6579.668,-4053.245,487.2758,-1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID2+87,189979,571,1,1,6700.080,-4231.600,461.2990,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+88,189979,571,1,1,6779.470,-4100.770,470.9730,-3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID2+89,189979,571,1,1,6792.440,-4281.660,452.8340,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID2+90,189979,571,1,1,6818.135,-4627.391,442.2250,1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID2+91,189979,571,1,1,6845.492,-4442.293,444.4835,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID2+92,189979,571,1,1,6914.570,-4477.570,444.9130,1.55334,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@LASTGUID;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Zul''Drak Ore Spawnpoint 1 Cobalt'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Zul''Drak Ore Spawnpoint 1 Rich Cobalt'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Zul''Drak Ore Spawnpoint 2 Cobalt'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Zul''Drak Ore Spawnpoint 2 Rich Cobalt'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Zul''Drak Ore Spawnpoint 3 Cobalt'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Zul''Drak Ore Spawnpoint 3 Rich Cobalt'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Zul''Drak Ore Spawnpoint 4 Cobalt'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Zul''Drak Ore Spawnpoint 4 Rich Cobalt'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Zul''Drak Ore Spawnpoint 5 Cobalt'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Zul''Drak Ore Spawnpoint 5 Rich Cobalt'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Zul''Drak Ore Spawnpoint 6 Cobalt'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Zul''Drak Ore Spawnpoint 6 Rich Cobalt'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Zul''Drak Ore Spawnpoint 7 Cobalt'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Zul''Drak Ore Spawnpoint 7 Rich Cobalt'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Zul''Drak Ore Spawnpoint 8 Cobalt'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Zul''Drak Ore Spawnpoint 8 Rich Cobalt'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Zul''Drak Ore Spawnpoint 9 Cobalt'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Zul''Drak Ore Spawnpoint 9 Rich Cobalt'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Zul''Drak Ore Spawnpoint 10 Cobalt'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Zul''Drak Ore Spawnpoint 10 Rich Cobalt'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Zul''Drak Ore Spawnpoint 11 Cobalt'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Zul''Drak Ore Spawnpoint 11 Rich Cobalt'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Zul''Drak Ore Spawnpoint 12 Cobalt'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Zul''Drak Ore Spawnpoint 12 Rich Cobalt'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Zul''Drak Ore Spawnpoint 13 Cobalt'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Zul''Drak Ore Spawnpoint 13 Rich Cobalt'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Zul''Drak Ore Spawnpoint 14 Cobalt'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Zul''Drak Ore Spawnpoint 14 Rich Cobalt'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Zul''Drak Ore Spawnpoint 15 Cobalt'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Zul''Drak Ore Spawnpoint 15 Rich Cobalt'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Zul''Drak Ore Spawnpoint 16 Cobalt'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Zul''Drak Ore Spawnpoint 16 Rich Cobalt'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Zul''Drak Ore Spawnpoint 17 Cobalt'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Zul''Drak Ore Spawnpoint 17 Rich Cobalt'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Zul''Drak Ore Spawnpoint 18 Cobalt'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Zul''Drak Ore Spawnpoint 18 Rich Cobalt'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Zul''Drak Ore Spawnpoint 19 Cobalt'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Zul''Drak Ore Spawnpoint 19 Rich Cobalt'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Zul''Drak Ore Spawnpoint 20 Cobalt'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Zul''Drak Ore Spawnpoint 20 Rich Cobalt'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Zul''Drak Ore Spawnpoint 21 Cobalt'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Zul''Drak Ore Spawnpoint 21 Rich Cobalt'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Zul''Drak Ore Spawnpoint 22 Cobalt'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Zul''Drak Ore Spawnpoint 22 Rich Cobalt'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Zul''Drak Ore Spawnpoint 23 Cobalt'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Zul''Drak Ore Spawnpoint 23 Saronite'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Zul''Drak Ore Spawnpoint 24 Cobalt'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Zul''Drak Ore Spawnpoint 24 Rich Cobalt'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Zul''Drak Ore Spawnpoint 25 Cobalt'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Zul''Drak Ore Spawnpoint 25 Rich Cobalt'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Zul''Drak Ore Spawnpoint 26 Cobalt'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Zul''Drak Ore Spawnpoint 26 Rich Cobalt'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Zul''Drak Ore Spawnpoint 27 Cobalt'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Zul''Drak Ore Spawnpoint 27 Rich Cobalt'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Zul''Drak Ore Spawnpoint 28 Cobalt'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Zul''Drak Ore Spawnpoint 28 Rich Cobalt'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Zul''Drak Ore Spawnpoint 29 Cobalt'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Zul''Drak Ore Spawnpoint 29 Rich Cobalt'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Zul''Drak Ore Spawnpoint 30 Cobalt'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Zul''Drak Ore Spawnpoint 30 Rich Cobalt'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Zul''Drak Ore Spawnpoint 31 Cobalt'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Zul''Drak Ore Spawnpoint 31 Rich Cobalt'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Zul''Drak Ore Spawnpoint 32 Cobalt'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Zul''Drak Ore Spawnpoint 32 Rich Cobalt'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Zul''Drak Ore Spawnpoint 33 Cobalt'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Zul''Drak Ore Spawnpoint 33 Rich Cobalt'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Zul''Drak Ore Spawnpoint 34 Cobalt'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Zul''Drak Ore Spawnpoint 34 Rich Cobalt'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Zul''Drak Ore Spawnpoint 35 Cobalt'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Zul''Drak Ore Spawnpoint 35 Rich Cobalt'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Zul''Drak Ore Spawnpoint 36 Cobalt'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Zul''Drak Ore Spawnpoint 36 Rich Cobalt'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Zul''Drak Ore Spawnpoint 37 Cobalt'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Zul''Drak Ore Spawnpoint 37 Rich Cobalt'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Zul''Drak Ore Spawnpoint 38 Cobalt'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Zul''Drak Ore Spawnpoint 38 Rich Cobalt'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Zul''Drak Ore Spawnpoint 39 Cobalt'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Zul''Drak Ore Spawnpoint 39 Rich Cobalt'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Zul''Drak Ore Spawnpoint 40 Cobalt'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Zul''Drak Ore Spawnpoint 40 Rich Cobalt'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Zul''Drak Ore Spawnpoint 41 Cobalt'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Zul''Drak Ore Spawnpoint 41 Rich Cobalt'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Zul''Drak Ore Spawnpoint 42 Cobalt'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Zul''Drak Ore Spawnpoint 42 Rich Cobalt'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Zul''Drak Ore Spawnpoint 43 Cobalt'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Zul''Drak Ore Spawnpoint 43 Rich Cobalt'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Zul''Drak Ore Spawnpoint 44 Cobalt'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Zul''Drak Ore Spawnpoint 44 Rich Cobalt'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Zul''Drak Ore Spawnpoint 45 Cobalt'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Zul''Drak Ore Spawnpoint 45 Rich Cobalt'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Zul''Drak Ore Spawnpoint 46 Cobalt'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Zul''Drak Ore Spawnpoint 46 Rich Cobalt'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Zul''Drak Ore Spawnpoint 47 Cobalt'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Zul''Drak Ore Spawnpoint 47 Saronite'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Zul''Drak Ore Spawnpoint 48 Cobalt'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Zul''Drak Ore Spawnpoint 48 Saronite'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Zul''Drak Ore Spawnpoint 49 Cobalt'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Zul''Drak Ore Spawnpoint 49 Rich Cobalt'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Zul''Drak Ore Spawnpoint 50 Cobalt'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Zul''Drak Ore Spawnpoint 50 Rich Cobalt'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Zul''Drak Ore Spawnpoint 51 Cobalt'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Zul''Drak Ore Spawnpoint 51 Rich Cobalt'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Zul''Drak Ore Spawnpoint 52 Cobalt'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Zul''Drak Ore Spawnpoint 52 Rich Cobalt'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Zul''Drak Ore Spawnpoint 53 Cobalt'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Zul''Drak Ore Spawnpoint 53 Rich Cobalt'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Zul''Drak Ore Spawnpoint 54 Cobalt'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Zul''Drak Ore Spawnpoint 54 Rich Cobalt'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Zul''Drak Ore Spawnpoint 55 Cobalt'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Zul''Drak Ore Spawnpoint 55 Rich Cobalt'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Zul''Drak Ore Spawnpoint 56 Cobalt'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Zul''Drak Ore Spawnpoint 56 Rich Cobalt'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Zul''Drak Ore Spawnpoint 57 Cobalt'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Zul''Drak Ore Spawnpoint 57 Rich Cobalt'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Zul''Drak Ore Spawnpoint 58 Cobalt'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Zul''Drak Ore Spawnpoint 58 Rich Cobalt'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Zul''Drak Ore Spawnpoint 59 Cobalt'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Zul''Drak Ore Spawnpoint 59 Rich Cobalt'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Zul''Drak Ore Spawnpoint 60 Cobalt'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Zul''Drak Ore Spawnpoint 60 Rich Cobalt'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Zul''Drak Ore Spawnpoint 61 Cobalt'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Zul''Drak Ore Spawnpoint 61 Rich Cobalt'),
+(@GUID1+61,@POOL+61,@CHANCE1, 'Zul''Drak Ore Spawnpoint 62 Cobalt'),
+(@GUID2+61,@POOL+61,@CHANCE2, 'Zul''Drak Ore Spawnpoint 62 Saronite'),
+(@GUID1+62,@POOL+62,@CHANCE1, 'Zul''Drak Ore Spawnpoint 63 Cobalt'),
+(@GUID2+62,@POOL+62,@CHANCE2, 'Zul''Drak Ore Spawnpoint 63 Rich Cobalt'),
+(@GUID1+63,@POOL+63,@CHANCE1, 'Zul''Drak Ore Spawnpoint 64 Cobalt'),
+(@GUID2+63,@POOL+63,@CHANCE2, 'Zul''Drak Ore Spawnpoint 64 Rich Cobalt'),
+(@GUID1+64,@POOL+64,@CHANCE1, 'Zul''Drak Ore Spawnpoint 65 Cobalt'),
+(@GUID2+64,@POOL+64,@CHANCE2, 'Zul''Drak Ore Spawnpoint 65 Rich Cobalt'),
+(@GUID1+65,@POOL+65,@CHANCE1, 'Zul''Drak Ore Spawnpoint 66 Cobalt'),
+(@GUID2+65,@POOL+65,@CHANCE2, 'Zul''Drak Ore Spawnpoint 66 Rich Cobalt'),
+(@GUID1+66,@POOL+66,@CHANCE1, 'Zul''Drak Ore Spawnpoint 67 Cobalt'),
+(@GUID2+66,@POOL+66,@CHANCE2, 'Zul''Drak Ore Spawnpoint 67 Rich Cobalt'),
+(@GUID1+67,@POOL+67,@CHANCE1, 'Zul''Drak Ore Spawnpoint 68 Cobalt'),
+(@GUID2+67,@POOL+67,@CHANCE2, 'Zul''Drak Ore Spawnpoint 68 Rich Cobalt'),
+(@GUID1+68,@POOL+68,@CHANCE1, 'Zul''Drak Ore Spawnpoint 69 Cobalt'),
+(@GUID2+68,@POOL+68,@CHANCE2, 'Zul''Drak Ore Spawnpoint 69 Rich Cobalt'),
+(@GUID1+69,@POOL+69,@CHANCE1, 'Zul''Drak Ore Spawnpoint 70 Cobalt'),
+(@GUID2+69,@POOL+69,@CHANCE2, 'Zul''Drak Ore Spawnpoint 70 Rich Cobalt'),
+(@GUID1+70,@POOL+70,@CHANCE1, 'Zul''Drak Ore Spawnpoint 71 Cobalt'),
+(@GUID2+70,@POOL+70,@CHANCE2, 'Zul''Drak Ore Spawnpoint 71 Saronite'),
+(@GUID1+71,@POOL+71,@CHANCE1, 'Zul''Drak Ore Spawnpoint 72 Cobalt'),
+(@GUID2+71,@POOL+71,@CHANCE2, 'Zul''Drak Ore Spawnpoint 72 Rich Cobalt'),
+(@GUID1+72,@POOL+72,@CHANCE1, 'Zul''Drak Ore Spawnpoint 73 Cobalt'),
+(@GUID2+72,@POOL+72,@CHANCE2, 'Zul''Drak Ore Spawnpoint 73 Rich Cobalt'),
+(@GUID1+73,@POOL+73,@CHANCE1, 'Zul''Drak Ore Spawnpoint 74 Cobalt'),
+(@GUID2+73,@POOL+73,@CHANCE2, 'Zul''Drak Ore Spawnpoint 74 Saronite'),
+(@GUID1+74,@POOL+74,@CHANCE1, 'Zul''Drak Ore Spawnpoint 75 Cobalt'),
+(@GUID2+74,@POOL+74,@CHANCE2, 'Zul''Drak Ore Spawnpoint 75 Rich Cobalt'),
+(@GUID1+75,@POOL+75,@CHANCE1, 'Zul''Drak Ore Spawnpoint 76 Cobalt'),
+(@GUID2+75,@POOL+75,@CHANCE2, 'Zul''Drak Ore Spawnpoint 76 Rich Cobalt'),
+(@GUID1+76,@POOL+76,@CHANCE1, 'Zul''Drak Ore Spawnpoint 77 Cobalt'),
+(@GUID2+76,@POOL+76,@CHANCE2, 'Zul''Drak Ore Spawnpoint 77 Rich Cobalt'),
+(@GUID1+77,@POOL+77,@CHANCE1, 'Zul''Drak Ore Spawnpoint 78 Cobalt'),
+(@GUID2+77,@POOL+77,@CHANCE2, 'Zul''Drak Ore Spawnpoint 78 Rich Cobalt'),
+(@GUID1+78,@POOL+78,@CHANCE1, 'Zul''Drak Ore Spawnpoint 79 Cobalt'),
+(@GUID2+78,@POOL+78,@CHANCE2, 'Zul''Drak Ore Spawnpoint 79 Rich Cobalt'),
+(@GUID1+79,@POOL+79,@CHANCE1, 'Zul''Drak Ore Spawnpoint 80 Cobalt'),
+(@GUID2+79,@POOL+79,@CHANCE2, 'Zul''Drak Ore Spawnpoint 80 Rich Cobalt'),
+(@GUID1+80,@POOL+80,@CHANCE1, 'Zul''Drak Ore Spawnpoint 81 Cobalt'),
+(@GUID2+80,@POOL+80,@CHANCE2, 'Zul''Drak Ore Spawnpoint 81 Rich Cobalt'),
+(@GUID1+81,@POOL+81,@CHANCE1, 'Zul''Drak Ore Spawnpoint 82 Cobalt'),
+(@GUID2+81,@POOL+81,@CHANCE2, 'Zul''Drak Ore Spawnpoint 82 Rich Cobalt'),
+(@GUID1+82,@POOL+82,@CHANCE1, 'Zul''Drak Ore Spawnpoint 83 Cobalt'),
+(@GUID2+82,@POOL+82,@CHANCE2, 'Zul''Drak Ore Spawnpoint 83 Rich Cobalt'),
+(@GUID1+83,@POOL+83,@CHANCE1, 'Zul''Drak Ore Spawnpoint 84 Cobalt'),
+(@GUID2+83,@POOL+83,@CHANCE2, 'Zul''Drak Ore Spawnpoint 84 Rich Cobalt'),
+(@GUID1+84,@POOL+84,@CHANCE1, 'Zul''Drak Ore Spawnpoint 85 Cobalt'),
+(@GUID2+84,@POOL+84,@CHANCE2, 'Zul''Drak Ore Spawnpoint 85 Rich Cobalt'),
+(@GUID1+85,@POOL+85,@CHANCE1, 'Zul''Drak Ore Spawnpoint 86 Cobalt'),
+(@GUID2+85,@POOL+85,@CHANCE2, 'Zul''Drak Ore Spawnpoint 86 Rich Cobalt'),
+(@GUID1+86,@POOL+86,@CHANCE1, 'Zul''Drak Ore Spawnpoint 87 Cobalt'),
+(@GUID2+86,@POOL+86,@CHANCE2, 'Zul''Drak Ore Spawnpoint 87 Rich Cobalt'),
+(@GUID1+87,@POOL+87,@CHANCE1, 'Zul''Drak Ore Spawnpoint 88 Cobalt'),
+(@GUID2+87,@POOL+87,@CHANCE2, 'Zul''Drak Ore Spawnpoint 88 Rich Cobalt'),
+(@GUID1+88,@POOL+88,@CHANCE1, 'Zul''Drak Ore Spawnpoint 89 Cobalt'),
+(@GUID2+88,@POOL+88,@CHANCE2, 'Zul''Drak Ore Spawnpoint 89 Rich Cobalt'),
+(@GUID1+89,@POOL+89,@CHANCE1, 'Zul''Drak Ore Spawnpoint 90 Cobalt'),
+(@GUID2+89,@POOL+89,@CHANCE2, 'Zul''Drak Ore Spawnpoint 90 Rich Cobalt'),
+(@GUID1+90,@POOL+90,@CHANCE1, 'Zul''Drak Ore Spawnpoint 91 Cobalt'),
+(@GUID2+90,@POOL+90,@CHANCE2, 'Zul''Drak Ore Spawnpoint 91 Rich Cobalt'),
+(@GUID1+91,@POOL+91,@CHANCE1, 'Zul''Drak Ore Spawnpoint 92 Cobalt'),
+(@GUID2+91,@POOL+91,@CHANCE2, 'Zul''Drak Ore Spawnpoint 92 Rich Cobalt'),
+(@GUID1+92,@POOL+92,@CHANCE1, 'Zul''Drak Ore Spawnpoint 93 Cobalt'),
+(@GUID2+92,@POOL+92,@CHANCE2, 'Zul''Drak Ore Spawnpoint 93 Rich Cobalt');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Zul''Drak Ore Spawnpoint 1'),
+(@POOL+1,1, 'Zul''Drak Ore Spawnpoint 2'),
+(@POOL+2,1, 'Zul''Drak Ore Spawnpoint 3'),
+(@POOL+3,1, 'Zul''Drak Ore Spawnpoint 4'),
+(@POOL+4,1, 'Zul''Drak Ore Spawnpoint 5'),
+(@POOL+5,1, 'Zul''Drak Ore Spawnpoint 6'),
+(@POOL+6,1, 'Zul''Drak Ore Spawnpoint 7'),
+(@POOL+7,1, 'Zul''Drak Ore Spawnpoint 8'),
+(@POOL+8,1, 'Zul''Drak Ore Spawnpoint 9'),
+(@POOL+9,1, 'Zul''Drak Ore Spawnpoint 10'),
+(@POOL+10,1, 'Zul''Drak Ore Spawnpoint 11'),
+(@POOL+11,1, 'Zul''Drak Ore Spawnpoint 12'),
+(@POOL+12,1, 'Zul''Drak Ore Spawnpoint 13'),
+(@POOL+13,1, 'Zul''Drak Ore Spawnpoint 14'),
+(@POOL+14,1, 'Zul''Drak Ore Spawnpoint 15'),
+(@POOL+15,1, 'Zul''Drak Ore Spawnpoint 16'),
+(@POOL+16,1, 'Zul''Drak Ore Spawnpoint 17'),
+(@POOL+17,1, 'Zul''Drak Ore Spawnpoint 18'),
+(@POOL+18,1, 'Zul''Drak Ore Spawnpoint 19'),
+(@POOL+19,1, 'Zul''Drak Ore Spawnpoint 20'),
+(@POOL+20,1, 'Zul''Drak Ore Spawnpoint 21'),
+(@POOL+21,1, 'Zul''Drak Ore Spawnpoint 22'),
+(@POOL+22,1, 'Zul''Drak Ore Spawnpoint 23'),
+(@POOL+23,1, 'Zul''Drak Ore Spawnpoint 24'),
+(@POOL+24,1, 'Zul''Drak Ore Spawnpoint 25'),
+(@POOL+25,1, 'Zul''Drak Ore Spawnpoint 26'),
+(@POOL+26,1, 'Zul''Drak Ore Spawnpoint 27'),
+(@POOL+27,1, 'Zul''Drak Ore Spawnpoint 28'),
+(@POOL+28,1, 'Zul''Drak Ore Spawnpoint 29'),
+(@POOL+29,1, 'Zul''Drak Ore Spawnpoint 30'),
+(@POOL+30,1, 'Zul''Drak Ore Spawnpoint 31'),
+(@POOL+31,1, 'Zul''Drak Ore Spawnpoint 32'),
+(@POOL+32,1, 'Zul''Drak Ore Spawnpoint 33'),
+(@POOL+33,1, 'Zul''Drak Ore Spawnpoint 34'),
+(@POOL+34,1, 'Zul''Drak Ore Spawnpoint 35'),
+(@POOL+35,1, 'Zul''Drak Ore Spawnpoint 36'),
+(@POOL+36,1, 'Zul''Drak Ore Spawnpoint 37'),
+(@POOL+37,1, 'Zul''Drak Ore Spawnpoint 38'),
+(@POOL+38,1, 'Zul''Drak Ore Spawnpoint 39'),
+(@POOL+39,1, 'Zul''Drak Ore Spawnpoint 40'),
+(@POOL+40,1, 'Zul''Drak Ore Spawnpoint 41'),
+(@POOL+41,1, 'Zul''Drak Ore Spawnpoint 42'),
+(@POOL+42,1, 'Zul''Drak Ore Spawnpoint 43'),
+(@POOL+43,1, 'Zul''Drak Ore Spawnpoint 44'),
+(@POOL+44,1, 'Zul''Drak Ore Spawnpoint 45'),
+(@POOL+45,1, 'Zul''Drak Ore Spawnpoint 46'),
+(@POOL+46,1, 'Zul''Drak Ore Spawnpoint 47'),
+(@POOL+47,1, 'Zul''Drak Ore Spawnpoint 48'),
+(@POOL+48,1, 'Zul''Drak Ore Spawnpoint 49'),
+(@POOL+49,1, 'Zul''Drak Ore Spawnpoint 50'),
+(@POOL+50,1, 'Zul''Drak Ore Spawnpoint 51'),
+(@POOL+51,1, 'Zul''Drak Ore Spawnpoint 52'),
+(@POOL+52,1, 'Zul''Drak Ore Spawnpoint 53'),
+(@POOL+53,1, 'Zul''Drak Ore Spawnpoint 54'),
+(@POOL+54,1, 'Zul''Drak Ore Spawnpoint 55'),
+(@POOL+55,1, 'Zul''Drak Ore Spawnpoint 56'),
+(@POOL+56,1, 'Zul''Drak Ore Spawnpoint 57'),
+(@POOL+57,1, 'Zul''Drak Ore Spawnpoint 58'),
+(@POOL+58,1, 'Zul''Drak Ore Spawnpoint 59'),
+(@POOL+59,1, 'Zul''Drak Ore Spawnpoint 60'),
+(@POOL+60,1, 'Zul''Drak Ore Spawnpoint 61'),
+(@POOL+61,1, 'Zul''Drak Ore Spawnpoint 62'),
+(@POOL+62,1, 'Zul''Drak Ore Spawnpoint 63'),
+(@POOL+63,1, 'Zul''Drak Ore Spawnpoint 64'),
+(@POOL+64,1, 'Zul''Drak Ore Spawnpoint 65'),
+(@POOL+65,1, 'Zul''Drak Ore Spawnpoint 66'),
+(@POOL+66,1, 'Zul''Drak Ore Spawnpoint 67'),
+(@POOL+67,1, 'Zul''Drak Ore Spawnpoint 68'),
+(@POOL+68,1, 'Zul''Drak Ore Spawnpoint 69'),
+(@POOL+69,1, 'Zul''Drak Ore Spawnpoint 70'),
+(@POOL+70,1, 'Zul''Drak Ore Spawnpoint 71'),
+(@POOL+71,1, 'Zul''Drak Ore Spawnpoint 72'),
+(@POOL+72,1, 'Zul''Drak Ore Spawnpoint 73'),
+(@POOL+73,1, 'Zul''Drak Ore Spawnpoint 74'),
+(@POOL+74,1, 'Zul''Drak Ore Spawnpoint 75'),
+(@POOL+75,1, 'Zul''Drak Ore Spawnpoint 76'),
+(@POOL+76,1, 'Zul''Drak Ore Spawnpoint 77'),
+(@POOL+77,1, 'Zul''Drak Ore Spawnpoint 78'),
+(@POOL+78,1, 'Zul''Drak Ore Spawnpoint 79'),
+(@POOL+79,1, 'Zul''Drak Ore Spawnpoint 80'),
+(@POOL+80,1, 'Zul''Drak Ore Spawnpoint 81'),
+(@POOL+81,1, 'Zul''Drak Ore Spawnpoint 82'),
+(@POOL+82,1, 'Zul''Drak Ore Spawnpoint 83'),
+(@POOL+83,1, 'Zul''Drak Ore Spawnpoint 84'),
+(@POOL+84,1, 'Zul''Drak Ore Spawnpoint 85'),
+(@POOL+85,1, 'Zul''Drak Ore Spawnpoint 86'),
+(@POOL+86,1, 'Zul''Drak Ore Spawnpoint 87'),
+(@POOL+87,1, 'Zul''Drak Ore Spawnpoint 88'),
+(@POOL+88,1, 'Zul''Drak Ore Spawnpoint 89'),
+(@POOL+89,1, 'Zul''Drak Ore Spawnpoint 90'),
+(@POOL+90,1, 'Zul''Drak Ore Spawnpoint 91'),
+(@POOL+91,1, 'Zul''Drak Ore Spawnpoint 92'),
+(@POOL+92,1, 'Zul''Drak Ore Spawnpoint 93');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Zul''Drak Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 61'),
+(@POOL+61,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 62'),
+(@POOL+62,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 63'),
+(@POOL+63,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 64'),
+(@POOL+64,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 65'),
+(@POOL+65,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 66'),
+(@POOL+66,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 67'),
+(@POOL+67,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 68'),
+(@POOL+68,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 69'),
+(@POOL+69,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 70'),
+(@POOL+70,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 71'),
+(@POOL+71,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 72'),
+(@POOL+72,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 73'),
+(@POOL+73,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 74'),
+(@POOL+74,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 75'),
+(@POOL+75,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 76'),
+(@POOL+76,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 77'),
+(@POOL+77,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 78'),
+(@POOL+78,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 79'),
+(@POOL+79,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 80'),
+(@POOL+80,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 81'),
+(@POOL+81,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 82'),
+(@POOL+82,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 83'),
+(@POOL+83,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 84'),
+(@POOL+84,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 85'),
+(@POOL+85,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 86'),
+(@POOL+86,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 87'),
+(@POOL+87,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 88'),
+(@POOL+88,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 89'),
+(@POOL+89,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 90'),
+(@POOL+90,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 91'),
+(@POOL+91,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 92'),
+(@POOL+92,@MOTHER,0, 'Zul''Drak Ore Spawnpoint 93');
+
+-- -----------------------------------------
+-- -- Fixup ore spawns for Sholazar Basin --
+-- -----------------------------------------
+SET @RANGE := 350;
+SET @GUID1 := 161400;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @GUID3 := @GUID2 + @RANGE;
+SET @POOL := 10800;
+SET @LASTGUID := 111;
+SET @CHANCE1 := 75;
+SET @CHANCE2 := 15;
+SET @CHANCE3 := 10;
+SET @MOTHER := 9905;
+SET @ACTIVE := 35; -- Max number of active spawns
+SET @TIMER := 600; -- Respawn timer in seconds
+-- Remove Ore spawns from Sholazar Basin
+DELETE FROM gameobject WHERE id IN (189980,189981,191133) AND map=571 AND `position_y` > 3500 AND `position_x` < 6825 AND `position_x` > 4650 AND `position_z` < 300;
+DELETE FROM gameobject WHERE id IN (189980,189981,191133) AND map=571 AND `position_y` > 4450 AND `position_x` < 6400 AND `position_x` > 4825 AND `position_z` > 300;
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5292 AND 5375;
+DELETE FROM `pool_template` WHERE `entry`=899;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5292 AND 5375;
+-- Saronite Deposits Sholazar Basin
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1,189980,571,1,1,4704.718,5425.793,-32.3253,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189980,571,1,1,4709.270,4367.730,-31.7133,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189980,571,1,1,4716.542,4978.443,-44.2661,1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189980,571,1,1,4722.860,5246.860,-42.0046,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189980,571,1,1,4724.210,5107.490,-46.3651,-1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189980,571,1,1,4732.280,5135.100,-53.4326,-1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189980,571,1,1,4732.570,5036.200,-54.9473,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189980,571,1,1,4737.140,4847.460,-67.2180,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189980,571,1,1,4738.390,4691.450,-56.7589,0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189980,571,1,1,4794.450,5895.830,-30.9455,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189980,571,1,1,4837.230,4160.790,-3.6381,-0.62832,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189980,571,1,1,4846.780,5769.550,-57.8889,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189980,571,1,1,4847.239,5953.834,-15.9588,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189980,571,1,1,4866.020,4570.890,-60.3061,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189980,571,1,1,4884.830,4321.190,-54.8871,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189980,571,1,1,4927.281,4328.632,-72.9263,0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189980,571,1,1,4988.200,5373.050,-94.5907,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189980,571,1,1,4993.830,4180.020,-79.1709,0.01745,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189980,571,1,1,5013.689,5436.410,-94.5146,-1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189980,571,1,1,5015.700,4691.840,-91.0594,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189980,571,1,1,5052.430,5887.010,-69.4098,-1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189980,571,1,1,5054.910,4412.610,-92.8146,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189980,571,1,1,5056.290,4819.880,-132.8840,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189980,571,1,1,5062.380,4526.640,-96.4765,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189980,571,1,1,5062.479,5031.562,-131.0034,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189980,571,1,1,5079.800,5468.130,-88.7503,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189980,571,1,1,5086.370,5098.740,-134.5720,2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189980,571,1,1,5093.570,4341.180,-82.7253,3.08918,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189980,571,1,1,5094.270,5217.790,-88.3220,-2.21656,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189980,571,1,1,5105.152,4639.756,-135.8839,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189980,571,1,1,5125.490,6015.810,-50.0045,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189980,571,1,1,5128.380,4215.860,-83.4258,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189980,571,1,1,5159.018,5454.543,-88.2909,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189980,571,1,1,5171.400,3794.750,-12.2962,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189980,571,1,1,5190.180,6023.387,-37.9963,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189980,571,1,1,5199.739,5436.705,-81.6717,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189980,571,1,1,5226.190,4826.150,-132.7040,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189980,571,1,1,5232.450,4195.245,-93.5727,1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189980,571,1,1,5271.987,5251.519,-124.8593,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189980,571,1,1,5277.800,3702.890,12.7941,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189980,571,1,1,5309.020,4437.110,-101.2090,2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189980,571,1,1,5324.950,5368.980,-123.4160,-1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189980,571,1,1,5325.520,6025.470,-16.2582,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189980,571,1,1,5331.860,4405.600,-126.9970,-1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189980,571,1,1,5333.070,4300.510,-148.0820,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189980,571,1,1,5338.952,4182.072,-94.2039,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189980,571,1,1,5341.820,5396.050,-106.7450,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189980,571,1,1,5354.230,4820.880,-198.8800,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189980,571,1,1,5358.900,4514.820,-127.6330,2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189980,571,1,1,5385.530,4913.980,-195.3540,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189980,571,1,1,5388.270,4753.330,-198.7980,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189980,571,1,1,5418.620,4371.290,-137.6760,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189980,571,1,1,5434.910,3826.250,-65.5299,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189980,571,1,1,5443.155,4694.667,-187.9415,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189980,571,1,1,5446.752,5166.048,-133.7927,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189980,571,1,1,5447.930,4519.890,-135.9880,-1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189980,571,1,1,5449.870,4089.350,-91.0623,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189980,571,1,3,5451.860,5532.250,-101.7700,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189980,571,1,1,5455.970,5712.200,-102.7660,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189980,571,1,1,5456.090,4679.770,-173.5170,1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189980,571,1,1,5461.790,4916.510,-197.1930,-0.62832,0,0,0,1,@TIMER,255,1),
+(@GUID1+61,189980,571,1,1,5479.190,4193.700,-97.0735,0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID1+62,189980,571,1,1,5482.810,3505.600,7.2101,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID1+63,189980,571,1,1,5483.640,4688.750,-122.0030,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID1+64,189980,571,1,1,5494.615,5677.867,-97.2142,1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID1+65,189980,571,1,1,5509.580,3579.710,-12.9631,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+66,189980,571,1,1,5521.060,4926.980,-192.7710,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID1+67,189980,571,1,1,5522.840,3836.810,-62.7052,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+68,189980,571,1,1,5528.730,4681.650,-127.0880,0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID1+69,189980,571,1,1,5529.634,4501.900,-132.3918,-2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID1+70,189980,571,1,1,5537.919,4315.394,-130.2137,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+71,189980,571,1,1,5553.280,3666.730,-28.5651,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+72,189980,571,1,3,5608.650,3865.180,-99.3376,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+73,189980,571,1,1,5652.200,3981.090,-83.0324,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID1+74,189980,571,1,3,5656.220,6023.450,-28.9304,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+75,189980,571,1,1,5660.409,3699.911,-13.5126,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+76,189980,571,1,1,5668.259,4118.605,-90.1961,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+77,189980,571,1,3,5669.970,5463.910,-68.9469,2.89724,0,0,0,1,@TIMER,255,1),
+(@GUID1+78,189980,571,1,1,5671.007,4389.625,-137.5537,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+79,189980,571,1,1,5679.051,5598.783,-73.9954,-0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID1+80,189980,571,1,1,5682.740,3538.940,-8.8133,-2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID1+81,189980,571,1,1,5684.080,5541.490,-72.1058,-1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID1+82,189980,571,1,1,5704.426,3884.596,-72.5278,1.86750,0,0,0,1,@TIMER,255,1),
+(@GUID1+83,189980,571,1,1,5721.057,3655.517,-25.2488,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+84,189980,571,1,1,5721.060,3655.520,-25.2488,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+85,189980,571,1,1,5735.860,5612.500,-67.5912,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+86,189980,571,1,1,5740.394,5960.094,-36.3629,0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID1+87,189980,571,1,1,5762.140,3502.190,8.5711,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID1+88,189980,571,1,1,5827.040,4457.580,-130.4530,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID1+89,189980,571,1,1,5834.000,5370.130,-87.9156,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID1+90,189980,571,1,1,5859.746,4020.988,-68.8248,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID1+91,189980,571,1,3,5861.320,4419.110,-89.7436,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+92,189980,571,1,1,5882.228,5916.372,-25.0905,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+93,189980,571,1,1,5945.590,4566.130,-99.4520,1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID1+94,189980,571,1,1,6001.920,4160.640,-71.2961,0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+95,189980,571,1,1,6037.100,4847.040,-93.4030,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+96,189980,571,1,1,6053.300,4795.460,-92.8918,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID1+97,189980,571,1,1,6077.970,4860.720,-94.5449,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+98,189980,571,1,1,6084.560,4079.100,-46.7275,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+99,189980,571,1,1,6096.587,3644.301,143.1275,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID1+100,189980,571,1,1,6107.000,5455.440,-97.4798,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+101,189980,571,1,1,6167.440,5256.570,-127.8840,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+102,189980,571,1,3,6173.290,4609.010,-92.2689,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID1+103,189980,571,1,1,6174.170,5636.430,-22.3877,-1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID1+104,189980,571,1,1,6205.150,4325.340,-38.2094,-0.05236,0,0,0,1,@TIMER,255,1),
+(@GUID1+105,189980,571,1,1,6215.250,5172.350,-97.6636,0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID1+106,189980,571,1,1,6229.990,5392.570,-108.9900,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID1+107,189980,571,1,1,6277.390,4221.150,-40.3804,0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID1+108,189980,571,1,1,6302.940,5136.300,-81.6133,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID1+109,189980,571,1,1,6310.000,3957.290,109.0570,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+110,189980,571,1,1,6659.690,4690.380,0.1829,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID1+111,189980,571,1,1,6672.220,4932.340,-17.9780,2.94959,0,0,0,1,@TIMER,255,1);
+-- Rich Saronite Deposits Sholazar Basin
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID2,189981,571,1,1,4704.718,5425.793,-32.3253,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189981,571,1,1,4709.270,4367.730,-31.7133,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189981,571,1,1,4716.542,4978.443,-44.2661,1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189981,571,1,1,4722.860,5246.860,-42.0046,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189981,571,1,1,4724.210,5107.490,-46.3651,-1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189981,571,1,1,4732.280,5135.100,-53.4326,-1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189981,571,1,1,4732.570,5036.200,-54.9473,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189981,571,1,1,4737.140,4847.460,-67.2180,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189981,571,1,1,4738.390,4691.450,-56.7589,0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189981,571,1,1,4794.450,5895.830,-30.9455,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189981,571,1,1,4837.230,4160.790,-3.6381,-0.62832,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189981,571,1,1,4846.780,5769.550,-57.8889,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189981,571,1,1,4847.239,5953.834,-15.9588,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189981,571,1,1,4866.020,4570.890,-60.3061,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189981,571,1,1,4884.830,4321.190,-54.8871,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189981,571,1,1,4927.281,4328.632,-72.9263,0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189981,571,1,1,4988.200,5373.050,-94.5907,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189981,571,1,1,4993.830,4180.020,-79.1709,0.01745,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189981,571,1,1,5013.689,5436.410,-94.5146,-1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189981,571,1,1,5015.700,4691.840,-91.0594,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189981,571,1,1,5052.430,5887.010,-69.4098,-1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189981,571,1,1,5054.910,4412.610,-92.8146,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189981,571,1,1,5056.290,4819.880,-132.8840,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+23,189981,571,1,1,5062.380,4526.640,-96.4765,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189981,571,1,1,5062.479,5031.562,-131.0034,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189981,571,1,1,5079.800,5468.130,-88.7503,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189981,571,1,1,5086.370,5098.740,-134.5720,2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189981,571,1,1,5093.570,4341.180,-82.7253,3.08918,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189981,571,1,1,5094.270,5217.790,-88.3220,-2.21656,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189981,571,1,1,5105.152,4639.756,-135.8839,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189981,571,1,1,5125.490,6015.810,-50.0045,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189981,571,1,1,5128.380,4215.860,-83.4258,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189981,571,1,1,5159.018,5454.543,-88.2909,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189981,571,1,1,5171.400,3794.750,-12.2962,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189981,571,1,1,5190.180,6023.387,-37.9963,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189981,571,1,1,5199.739,5436.705,-81.6717,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189981,571,1,1,5226.190,4826.150,-132.7040,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189981,571,1,1,5232.450,4195.245,-93.5727,1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189981,571,1,1,5271.987,5251.519,-124.8593,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189981,571,1,1,5277.800,3702.890,12.7941,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189981,571,1,1,5309.020,4437.110,-101.2090,2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189981,571,1,1,5324.950,5368.980,-123.4160,-1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189981,571,1,1,5325.520,6025.470,-16.2582,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189981,571,1,1,5331.860,4405.600,-126.9970,-1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189981,571,1,1,5333.070,4300.510,-148.0820,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189981,571,1,1,5338.952,4182.072,-94.2039,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189981,571,1,1,5341.820,5396.050,-106.7450,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+47,189981,571,1,1,5354.230,4820.880,-198.8800,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+48,189981,571,1,1,5358.900,4514.820,-127.6330,2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189981,571,1,1,5385.530,4913.980,-195.3540,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189981,571,1,1,5388.270,4753.330,-198.7980,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189981,571,1,1,5418.620,4371.290,-137.6760,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189981,571,1,1,5434.910,3826.250,-65.5299,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189981,571,1,1,5443.155,4694.667,-187.9415,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189981,571,1,1,5446.752,5166.048,-133.7927,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189981,571,1,1,5447.930,4519.890,-135.9880,-1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189981,571,1,1,5449.870,4089.350,-91.0623,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189981,571,1,3,5451.860,5532.250,-101.7700,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189981,571,1,1,5455.970,5712.200,-102.7660,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189981,571,1,1,5456.090,4679.770,-173.5170,1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189981,571,1,1,5461.790,4916.510,-197.1930,-0.62832,0,0,0,1,@TIMER,255,1),
+(@GUID2+61,189981,571,1,1,5479.190,4193.700,-97.0735,0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID2+62,189981,571,1,1,5482.810,3505.600,7.2101,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID2+63,189981,571,1,1,5483.640,4688.750,-122.0030,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID2+64,189981,571,1,1,5494.615,5677.867,-97.2142,1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID2+65,189981,571,1,1,5509.580,3579.710,-12.9631,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+66,189981,571,1,1,5521.060,4926.980,-192.7710,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID2+67,189981,571,1,1,5522.840,3836.810,-62.7052,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+68,189981,571,1,1,5528.730,4681.650,-127.0880,0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID2+69,189981,571,1,1,5529.634,4501.900,-132.3918,-2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID2+70,189981,571,1,1,5537.919,4315.394,-130.2137,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+71,189981,571,1,1,5553.280,3666.730,-28.5651,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+72,189981,571,1,3,5608.650,3865.180,-99.3376,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+73,189981,571,1,1,5652.200,3981.090,-83.0324,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID2+74,189981,571,1,3,5656.220,6023.450,-28.9304,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+75,189981,571,1,1,5660.409,3699.911,-13.5126,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID2+76,189981,571,1,1,5668.259,4118.605,-90.1961,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID2+77,189981,571,1,3,5669.970,5463.910,-68.9469,2.89724,0,0,0,1,@TIMER,255,1),
+(@GUID2+78,189981,571,1,1,5671.007,4389.625,-137.5537,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+79,189981,571,1,1,5679.051,5598.783,-73.9954,-0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID2+80,189981,571,1,1,5682.740,3538.940,-8.8133,-2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID2+81,189981,571,1,1,5684.080,5541.490,-72.1058,-1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID2+82,189981,571,1,1,5704.426,3884.596,-72.5278,1.86750,0,0,0,1,@TIMER,255,1),
+(@GUID2+83,189981,571,1,1,5721.057,3655.517,-25.2488,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+84,189981,571,1,1,5721.060,3655.520,-25.2488,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+85,189981,571,1,1,5735.860,5612.500,-67.5912,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+86,189981,571,1,1,5740.394,5960.094,-36.3629,0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID2+87,189981,571,1,1,5762.140,3502.190,8.5711,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID2+88,189981,571,1,1,5827.040,4457.580,-130.4530,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID2+89,189981,571,1,1,5834.000,5370.130,-87.9156,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID2+90,189981,571,1,1,5859.746,4020.988,-68.8248,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID2+91,189981,571,1,3,5861.320,4419.110,-89.7436,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+92,189981,571,1,1,5882.228,5916.372,-25.0905,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+93,189981,571,1,1,5945.590,4566.130,-99.4520,1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID2+94,189981,571,1,1,6001.920,4160.640,-71.2961,0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+95,189981,571,1,1,6037.100,4847.040,-93.4030,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+96,189981,571,1,1,6053.300,4795.460,-92.8918,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID2+97,189981,571,1,1,6077.970,4860.720,-94.5449,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+98,189981,571,1,1,6084.560,4079.100,-46.7275,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+99,189981,571,1,1,6096.587,3644.301,143.1275,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID2+100,189981,571,1,1,6107.000,5455.440,-97.4798,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+101,189981,571,1,1,6167.440,5256.570,-127.8840,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+102,189981,571,1,3,6173.290,4609.010,-92.2689,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID2+103,189981,571,1,1,6174.170,5636.430,-22.3877,-1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID2+104,189981,571,1,1,6205.150,4325.340,-38.2094,-0.05236,0,0,0,1,@TIMER,255,1),
+(@GUID2+105,189981,571,1,1,6215.250,5172.350,-97.6636,0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID2+106,189981,571,1,1,6229.990,5392.570,-108.9900,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID2+107,189981,571,1,1,6277.390,4221.150,-40.3804,0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID2+108,189981,571,1,1,6302.940,5136.300,-81.6133,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID2+109,189981,571,1,1,6310.000,3957.290,109.0570,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+110,189981,571,1,1,6659.690,4690.380,0.1829,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID2+111,189981,571,1,1,6672.220,4932.340,-17.9780,2.94959,0,0,0,1,@TIMER,255,1);
+-- Titanium Deposits Sholazar Basin
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID3,191133,571,1,1,4704.718,5425.793,-32.3253,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+1,191133,571,1,1,4709.270,4367.730,-31.7133,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+2,191133,571,1,1,4716.542,4978.443,-44.2661,1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID3+3,191133,571,1,1,4722.860,5246.860,-42.0046,1.18682,0,0,0,1,@TIMER,255,1),
+(@GUID3+4,191133,571,1,1,4724.210,5107.490,-46.3651,-1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID3+5,191133,571,1,1,4732.280,5135.100,-53.4326,-1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID3+6,191133,571,1,1,4732.570,5036.200,-54.9473,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID3+7,191133,571,1,1,4737.140,4847.460,-67.2180,1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID3+8,191133,571,1,1,4738.390,4691.450,-56.7589,0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID3+9,191133,571,1,1,4794.450,5895.830,-30.9455,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID3+10,191133,571,1,1,4837.230,4160.790,-3.6381,-0.62832,0,0,0,1,@TIMER,255,1),
+(@GUID3+11,191133,571,1,1,4846.780,5769.550,-57.8889,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID3+12,191133,571,1,1,4847.239,5953.834,-15.9588,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID3+13,191133,571,1,1,4866.020,4570.890,-60.3061,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID3+14,191133,571,1,1,4884.830,4321.190,-54.8871,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID3+15,191133,571,1,1,4927.281,4328.632,-72.9263,0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID3+16,191133,571,1,1,4988.200,5373.050,-94.5907,1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID3+17,191133,571,1,1,4993.830,4180.020,-79.1709,0.01745,0,0,0,1,@TIMER,255,1),
+(@GUID3+18,191133,571,1,1,5013.689,5436.410,-94.5146,-1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID3+19,191133,571,1,1,5015.700,4691.840,-91.0594,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID3+20,191133,571,1,1,5052.430,5887.010,-69.4098,-1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID3+21,191133,571,1,1,5054.910,4412.610,-92.8146,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID3+22,191133,571,1,1,5056.290,4819.880,-132.8840,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID3+23,191133,571,1,1,5062.380,4526.640,-96.4765,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID3+24,191133,571,1,1,5062.479,5031.562,-131.0034,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID3+25,191133,571,1,1,5079.800,5468.130,-88.7503,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+26,191133,571,1,1,5086.370,5098.740,-134.5720,2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID3+27,191133,571,1,1,5093.570,4341.180,-82.7253,3.08918,0,0,0,1,@TIMER,255,1),
+(@GUID3+28,191133,571,1,1,5094.270,5217.790,-88.3220,-2.21656,0,0,0,1,@TIMER,255,1),
+(@GUID3+29,191133,571,1,1,5105.152,4639.756,-135.8839,-1.02974,0,0,0,1,@TIMER,255,1),
+(@GUID3+30,191133,571,1,1,5125.490,6015.810,-50.0045,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID3+31,191133,571,1,1,5128.380,4215.860,-83.4258,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID3+32,191133,571,1,1,5159.018,5454.543,-88.2909,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID3+33,191133,571,1,1,5171.400,3794.750,-12.2962,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID3+34,191133,571,1,1,5190.180,6023.387,-37.9963,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+35,191133,571,1,1,5199.739,5436.705,-81.6717,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID3+36,191133,571,1,1,5226.190,4826.150,-132.7040,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID3+37,191133,571,1,1,5232.450,4195.245,-93.5727,1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID3+38,191133,571,1,1,5271.987,5251.519,-124.8593,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID3+39,191133,571,1,1,5277.800,3702.890,12.7941,1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID3+40,191133,571,1,1,5309.020,4437.110,-101.2090,2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID3+41,191133,571,1,1,5324.950,5368.980,-123.4160,-1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID3+42,191133,571,1,1,5325.520,6025.470,-16.2582,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID3+43,191133,571,1,1,5331.860,4405.600,-126.9970,-1.51844,0,0,0,1,@TIMER,255,1),
+(@GUID3+44,191133,571,1,1,5333.070,4300.510,-148.0820,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID3+45,191133,571,1,1,5338.952,4182.072,-94.2039,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID3+46,191133,571,1,1,5341.820,5396.050,-106.7450,2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID3+47,191133,571,1,1,5354.230,4820.880,-198.8800,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID3+48,191133,571,1,1,5358.900,4514.820,-127.6330,2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID3+49,191133,571,1,1,5385.530,4913.980,-195.3540,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID3+50,191133,571,1,1,5388.270,4753.330,-198.7980,2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID3+51,191133,571,1,1,5418.620,4371.290,-137.6760,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID3+52,191133,571,1,1,5434.910,3826.250,-65.5299,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+53,191133,571,1,1,5443.155,4694.667,-187.9415,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID3+54,191133,571,1,1,5446.752,5166.048,-133.7927,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID3+55,191133,571,1,1,5447.930,4519.890,-135.9880,-1.67551,0,0,0,1,@TIMER,255,1),
+(@GUID3+56,191133,571,1,1,5449.870,4089.350,-91.0623,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+57,191133,571,1,3,5451.860,5532.250,-101.7700,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID3+58,191133,571,1,1,5455.970,5712.200,-102.7660,-0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID3+59,191133,571,1,1,5456.090,4679.770,-173.5170,1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID3+60,191133,571,1,1,5461.790,4916.510,-197.1930,-0.62832,0,0,0,1,@TIMER,255,1),
+(@GUID3+61,191133,571,1,1,5479.190,4193.700,-97.0735,0.80285,0,0,0,1,@TIMER,255,1),
+(@GUID3+62,191133,571,1,1,5482.810,3505.600,7.2101,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID3+63,191133,571,1,1,5483.640,4688.750,-122.0030,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID3+64,191133,571,1,1,5494.615,5677.867,-97.2142,1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID3+65,191133,571,1,1,5509.580,3579.710,-12.9631,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID3+66,191133,571,1,1,5521.060,4926.980,-192.7710,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID3+67,191133,571,1,1,5522.840,3836.810,-62.7052,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID3+68,191133,571,1,1,5528.730,4681.650,-127.0880,0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID3+69,191133,571,1,1,5529.634,4501.900,-132.3918,-2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID3+70,191133,571,1,1,5537.919,4315.394,-130.2137,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+71,191133,571,1,1,5553.280,3666.730,-28.5651,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+72,191133,571,1,3,5608.650,3865.180,-99.3376,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID3+73,191133,571,1,1,5652.200,3981.090,-83.0324,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID3+74,191133,571,1,3,5656.220,6023.450,-28.9304,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+75,191133,571,1,1,5660.409,3699.911,-13.5126,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID3+76,191133,571,1,1,5668.259,4118.605,-90.1961,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID3+77,191133,571,1,3,5669.970,5463.910,-68.9469,2.89724,0,0,0,1,@TIMER,255,1),
+(@GUID3+78,191133,571,1,1,5671.007,4389.625,-137.5537,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID3+79,191133,571,1,1,5679.051,5598.783,-73.9954,-0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID3+80,191133,571,1,1,5682.740,3538.940,-8.8133,-2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID3+81,191133,571,1,1,5684.080,5541.490,-72.1058,-1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID3+82,191133,571,1,1,5704.426,3884.596,-72.5278,1.86750,0,0,0,1,@TIMER,255,1),
+(@GUID3+83,191133,571,1,1,5721.057,3655.517,-25.2488,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+84,191133,571,1,1,5721.060,3655.520,-25.2488,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+85,191133,571,1,1,5735.860,5612.500,-67.5912,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID3+86,191133,571,1,1,5740.394,5960.094,-36.3629,0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID3+87,191133,571,1,1,5762.140,3502.190,8.5711,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID3+88,191133,571,1,1,5827.040,4457.580,-130.4530,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID3+89,191133,571,1,1,5834.000,5370.130,-87.9156,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID3+90,191133,571,1,1,5859.746,4020.988,-68.8248,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID3+91,191133,571,1,3,5861.320,4419.110,-89.7436,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID3+92,191133,571,1,1,5882.228,5916.372,-25.0905,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID3+93,191133,571,1,1,5945.590,4566.130,-99.4520,1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID3+94,191133,571,1,1,6001.920,4160.640,-71.2961,0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID3+95,191133,571,1,1,6037.100,4847.040,-93.4030,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+96,191133,571,1,1,6053.300,4795.460,-92.8918,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID3+97,191133,571,1,1,6077.970,4860.720,-94.5449,-1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID3+98,191133,571,1,1,6084.560,4079.100,-46.7275,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID3+99,191133,571,1,1,6096.587,3644.301,143.1275,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID3+100,191133,571,1,1,6107.000,5455.440,-97.4798,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID3+101,191133,571,1,1,6167.440,5256.570,-127.8840,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID3+102,191133,571,1,3,6173.290,4609.010,-92.2689,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID3+103,191133,571,1,1,6174.170,5636.430,-22.3877,-1.93731,0,0,0,1,@TIMER,255,1),
+(@GUID3+104,191133,571,1,1,6205.150,4325.340,-38.2094,-0.05236,0,0,0,1,@TIMER,255,1),
+(@GUID3+105,191133,571,1,1,6215.250,5172.350,-97.6636,0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID3+106,191133,571,1,1,6229.990,5392.570,-108.9900,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID3+107,191133,571,1,1,6277.390,4221.150,-40.3804,0.59341,0,0,0,1,@TIMER,255,1),
+(@GUID3+108,191133,571,1,1,6302.940,5136.300,-81.6133,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID3+109,191133,571,1,1,6310.000,3957.290,109.0570,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+110,191133,571,1,1,6659.690,4690.380,0.1829,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID3+111,191133,571,1,1,6672.220,4932.340,-17.9780,2.94959,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID3 AND @GUID3+@LASTGUID;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 1 Saronite'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 1 Rich Saronite'),
+(@GUID3+0,@POOL+0,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 1 Titanium'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 2 Saronite'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 2 Rich Saronite'),
+(@GUID3+1,@POOL+1,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 2 Titanium'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 3 Saronite'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 3 Rich Saronite'),
+(@GUID3+2,@POOL+2,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 3 Titanium'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 4 Saronite'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 4 Rich Saronite'),
+(@GUID3+3,@POOL+3,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 4 Titanium'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 5 Saronite'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 5 Rich Saronite'),
+(@GUID3+4,@POOL+4,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 5 Titanium'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 6 Saronite'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 6 Rich Saronite'),
+(@GUID3+5,@POOL+5,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 6 Titanium'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 7 Saronite'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 7 Rich Saronite'),
+(@GUID3+6,@POOL+6,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 7 Titanium'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 8 Saronite'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 8 Rich Saronite'),
+(@GUID3+7,@POOL+7,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 8 Titanium'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 9 Saronite'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 9 Rich Saronite'),
+(@GUID3+8,@POOL+8,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 9 Titanium'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 10 Saronite'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 10 Rich Saronite'),
+(@GUID3+9,@POOL+9,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 10 Titanium'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 11 Saronite'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 11 Rich Saronite'),
+(@GUID3+10,@POOL+10,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 11 Titanium'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 12 Saronite'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 12 Rich Saronite'),
+(@GUID3+11,@POOL+11,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 12 Titanium'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 13 Saronite'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 13 Rich Saronite'),
+(@GUID3+12,@POOL+12,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 13 Titanium'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 14 Saronite'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 14 Rich Saronite'),
+(@GUID3+13,@POOL+13,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 14 Titanium'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 15 Saronite'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 15 Rich Saronite'),
+(@GUID3+14,@POOL+14,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 15 Titanium'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 16 Saronite'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 16 Rich Saronite'),
+(@GUID3+15,@POOL+15,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 16 Titanium'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 17 Saronite'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 17 Rich Saronite'),
+(@GUID3+16,@POOL+16,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 17 Titanium'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 18 Saronite'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 18 Rich Saronite'),
+(@GUID3+17,@POOL+17,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 18 Titanium'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 19 Saronite'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 19 Rich Saronite'),
+(@GUID3+18,@POOL+18,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 19 Titanium'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 20 Saronite'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 20 Rich Saronite'),
+(@GUID3+19,@POOL+19,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 20 Titanium'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 21 Saronite'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 21 Rich Saronite'),
+(@GUID3+20,@POOL+20,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 21 Titanium'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 22 Saronite'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 22 Rich Saronite'),
+(@GUID3+21,@POOL+21,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 22 Titanium'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 23 Saronite'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 23 Rich Saronite'),
+(@GUID3+22,@POOL+22,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 23 Titanium'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 24 Saronite'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 24 Rich Saronite'),
+(@GUID3+23,@POOL+23,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 24 Titanium'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 25 Saronite'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 25 Rich Saronite'),
+(@GUID3+24,@POOL+24,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 25 Titanium'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 26 Saronite'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 26 Rich Saronite'),
+(@GUID3+25,@POOL+25,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 26 Titanium'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 27 Saronite'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 27 Rich Saronite'),
+(@GUID3+26,@POOL+26,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 27 Titanium'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 28 Saronite'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 28 Rich Saronite'),
+(@GUID3+27,@POOL+27,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 28 Titanium'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 29 Saronite'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 29 Rich Saronite'),
+(@GUID3+28,@POOL+28,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 29 Titanium'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 30 Saronite'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 30 Rich Saronite'),
+(@GUID3+29,@POOL+29,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 30 Titanium'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 31 Saronite'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 31 Rich Saronite'),
+(@GUID3+30,@POOL+30,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 31 Titanium'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 32 Saronite'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 32 Rich Saronite'),
+(@GUID3+31,@POOL+31,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 32 Titanium'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 33 Saronite'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 33 Rich Saronite'),
+(@GUID3+32,@POOL+32,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 33 Titanium'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 34 Saronite'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 34 Rich Saronite'),
+(@GUID3+33,@POOL+33,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 34 Titanium'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 35 Saronite'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 35 Rich Saronite'),
+(@GUID3+34,@POOL+34,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 35 Titanium'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 36 Saronite'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 36 Rich Saronite'),
+(@GUID3+35,@POOL+35,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 36 Titanium'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 37 Saronite'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 37 Rich Saronite'),
+(@GUID3+36,@POOL+36,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 37 Titanium'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 38 Saronite'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 38 Rich Saronite'),
+(@GUID3+37,@POOL+37,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 38 Titanium'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 39 Saronite'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 39 Rich Saronite'),
+(@GUID3+38,@POOL+38,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 39 Titanium'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 40 Saronite'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 40 Rich Saronite'),
+(@GUID3+39,@POOL+39,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 40 Titanium'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 41 Saronite'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 41 Rich Saronite'),
+(@GUID3+40,@POOL+40,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 41 Titanium'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 42 Saronite'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 42 Rich Saronite'),
+(@GUID3+41,@POOL+41,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 42 Titanium'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 43 Saronite'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 43 Rich Saronite'),
+(@GUID3+42,@POOL+42,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 43 Titanium'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 44 Saronite'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 44 Rich Saronite'),
+(@GUID3+43,@POOL+43,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 44 Titanium'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 45 Saronite'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 45 Rich Saronite'),
+(@GUID3+44,@POOL+44,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 45 Titanium'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 46 Saronite'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 46 Rich Saronite'),
+(@GUID3+45,@POOL+45,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 46 Titanium'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 47 Saronite'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 47 Rich Saronite'),
+(@GUID3+46,@POOL+46,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 47 Titanium'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 48 Saronite'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 48 Rich Saronite'),
+(@GUID3+47,@POOL+47,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 48 Titanium'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 49 Saronite'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 49 Rich Saronite'),
+(@GUID3+48,@POOL+48,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 49 Titanium'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 50 Saronite'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 50 Rich Saronite'),
+(@GUID3+49,@POOL+49,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 50 Titanium'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 51 Saronite'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 51 Rich Saronite'),
+(@GUID3+50,@POOL+50,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 51 Titanium'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 52 Saronite'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 52 Rich Saronite'),
+(@GUID3+51,@POOL+51,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 52 Titanium'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 53 Saronite'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 53 Rich Saronite'),
+(@GUID3+52,@POOL+52,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 53 Titanium'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 54 Saronite'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 54 Rich Saronite'),
+(@GUID3+53,@POOL+53,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 54 Titanium'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 55 Saronite'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 55 Rich Saronite'),
+(@GUID3+54,@POOL+54,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 55 Titanium'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 56 Saronite'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 56 Rich Saronite'),
+(@GUID3+55,@POOL+55,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 56 Titanium'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 57 Saronite'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 57 Rich Saronite'),
+(@GUID3+56,@POOL+56,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 57 Titanium'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 58 Saronite'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 58 Rich Saronite'),
+(@GUID3+57,@POOL+57,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 58 Titanium'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 59 Saronite'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 59 Rich Saronite'),
+(@GUID3+58,@POOL+58,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 59 Titanium'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 60 Saronite'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 60 Rich Saronite'),
+(@GUID3+59,@POOL+59,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 60 Titanium'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 61 Saronite'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 61 Rich Saronite'),
+(@GUID3+60,@POOL+60,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 61 Titanium'),
+(@GUID1+61,@POOL+61,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 62 Saronite'),
+(@GUID2+61,@POOL+61,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 62 Rich Saronite'),
+(@GUID3+61,@POOL+61,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 62 Titanium'),
+(@GUID1+62,@POOL+62,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 63 Saronite'),
+(@GUID2+62,@POOL+62,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 63 Rich Saronite'),
+(@GUID3+62,@POOL+62,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 63 Titanium'),
+(@GUID1+63,@POOL+63,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 64 Saronite'),
+(@GUID2+63,@POOL+63,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 64 Rich Saronite'),
+(@GUID3+63,@POOL+63,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 64 Titanium'),
+(@GUID1+64,@POOL+64,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 65 Saronite'),
+(@GUID2+64,@POOL+64,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 65 Rich Saronite'),
+(@GUID3+64,@POOL+64,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 65 Titanium'),
+(@GUID1+65,@POOL+65,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 66 Saronite'),
+(@GUID2+65,@POOL+65,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 66 Rich Saronite'),
+(@GUID3+65,@POOL+65,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 66 Titanium'),
+(@GUID1+66,@POOL+66,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 67 Saronite'),
+(@GUID2+66,@POOL+66,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 67 Rich Saronite'),
+(@GUID3+66,@POOL+66,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 67 Titanium'),
+(@GUID1+67,@POOL+67,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 68 Saronite'),
+(@GUID2+67,@POOL+67,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 68 Rich Saronite'),
+(@GUID3+67,@POOL+67,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 68 Titanium'),
+(@GUID1+68,@POOL+68,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 69 Saronite'),
+(@GUID2+68,@POOL+68,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 69 Rich Saronite'),
+(@GUID3+68,@POOL+68,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 69 Titanium'),
+(@GUID1+69,@POOL+69,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 70 Saronite'),
+(@GUID2+69,@POOL+69,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 70 Rich Saronite'),
+(@GUID3+69,@POOL+69,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 70 Titanium'),
+(@GUID1+70,@POOL+70,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 71 Saronite'),
+(@GUID2+70,@POOL+70,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 71 Rich Saronite'),
+(@GUID3+70,@POOL+70,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 71 Titanium'),
+(@GUID1+71,@POOL+71,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 72 Saronite'),
+(@GUID2+71,@POOL+71,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 72 Rich Saronite'),
+(@GUID3+71,@POOL+71,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 72 Titanium'),
+(@GUID1+72,@POOL+72,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 73 Saronite'),
+(@GUID2+72,@POOL+72,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 73 Rich Saronite'),
+(@GUID3+72,@POOL+72,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 73 Titanium'),
+(@GUID1+73,@POOL+73,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 74 Saronite'),
+(@GUID2+73,@POOL+73,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 74 Rich Saronite'),
+(@GUID3+73,@POOL+73,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 74 Titanium'),
+(@GUID1+74,@POOL+74,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 75 Saronite'),
+(@GUID2+74,@POOL+74,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 75 Rich Saronite'),
+(@GUID3+74,@POOL+74,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 75 Titanium'),
+(@GUID1+75,@POOL+75,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 76 Saronite'),
+(@GUID2+75,@POOL+75,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 76 Rich Saronite'),
+(@GUID3+75,@POOL+75,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 76 Titanium'),
+(@GUID1+76,@POOL+76,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 77 Saronite'),
+(@GUID2+76,@POOL+76,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 77 Rich Saronite'),
+(@GUID3+76,@POOL+76,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 77 Titanium'),
+(@GUID1+77,@POOL+77,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 78 Saronite'),
+(@GUID2+77,@POOL+77,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 78 Rich Saronite'),
+(@GUID3+77,@POOL+77,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 78 Titanium'),
+(@GUID1+78,@POOL+78,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 79 Saronite'),
+(@GUID2+78,@POOL+78,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 79 Rich Saronite'),
+(@GUID3+78,@POOL+78,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 79 Titanium'),
+(@GUID1+79,@POOL+79,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 80 Saronite'),
+(@GUID2+79,@POOL+79,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 80 Rich Saronite'),
+(@GUID3+79,@POOL+79,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 80 Titanium'),
+(@GUID1+80,@POOL+80,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 81 Saronite'),
+(@GUID2+80,@POOL+80,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 81 Rich Saronite'),
+(@GUID3+80,@POOL+80,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 81 Titanium'),
+(@GUID1+81,@POOL+81,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 82 Saronite'),
+(@GUID2+81,@POOL+81,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 82 Rich Saronite'),
+(@GUID3+81,@POOL+81,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 82 Titanium'),
+(@GUID1+82,@POOL+82,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 83 Saronite'),
+(@GUID2+82,@POOL+82,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 83 Rich Saronite'),
+(@GUID3+82,@POOL+82,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 83 Titanium'),
+(@GUID1+83,@POOL+83,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 84 Saronite'),
+(@GUID2+83,@POOL+83,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 84 Rich Saronite'),
+(@GUID3+83,@POOL+83,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 84 Titanium'),
+(@GUID1+84,@POOL+84,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 85 Saronite'),
+(@GUID2+84,@POOL+84,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 85 Rich Saronite'),
+(@GUID3+84,@POOL+84,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 85 Titanium'),
+(@GUID1+85,@POOL+85,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 86 Saronite'),
+(@GUID2+85,@POOL+85,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 86 Rich Saronite'),
+(@GUID3+85,@POOL+85,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 86 Titanium'),
+(@GUID1+86,@POOL+86,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 87 Saronite'),
+(@GUID2+86,@POOL+86,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 87 Rich Saronite'),
+(@GUID3+86,@POOL+86,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 87 Titanium'),
+(@GUID1+87,@POOL+87,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 88 Saronite'),
+(@GUID2+87,@POOL+87,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 88 Rich Saronite'),
+(@GUID3+87,@POOL+87,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 88 Titanium'),
+(@GUID1+88,@POOL+88,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 89 Saronite'),
+(@GUID2+88,@POOL+88,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 89 Rich Saronite'),
+(@GUID3+88,@POOL+88,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 89 Titanium'),
+(@GUID1+89,@POOL+89,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 90 Saronite'),
+(@GUID2+89,@POOL+89,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 90 Rich Saronite'),
+(@GUID3+89,@POOL+89,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 90 Titanium'),
+(@GUID1+90,@POOL+90,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 91 Saronite'),
+(@GUID2+90,@POOL+90,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 91 Rich Saronite'),
+(@GUID3+90,@POOL+90,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 91 Titanium'),
+(@GUID1+91,@POOL+91,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 92 Saronite'),
+(@GUID2+91,@POOL+91,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 92 Rich Saronite'),
+(@GUID3+91,@POOL+91,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 92 Titanium'),
+(@GUID1+92,@POOL+92,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 93 Saronite'),
+(@GUID2+92,@POOL+92,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 93 Rich Saronite'),
+(@GUID3+92,@POOL+92,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 93 Titanium'),
+(@GUID1+93,@POOL+93,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 94 Saronite'),
+(@GUID2+93,@POOL+93,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 94 Rich Saronite'),
+(@GUID3+93,@POOL+93,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 94 Titanium'),
+(@GUID1+94,@POOL+94,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 95 Saronite'),
+(@GUID2+94,@POOL+94,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 95 Rich Saronite'),
+(@GUID3+94,@POOL+94,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 95 Titanium'),
+(@GUID1+95,@POOL+95,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 96 Saronite'),
+(@GUID2+95,@POOL+95,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 96 Rich Saronite'),
+(@GUID3+95,@POOL+95,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 96 Titanium'),
+(@GUID1+96,@POOL+96,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 97 Saronite'),
+(@GUID2+96,@POOL+96,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 97 Rich Saronite'),
+(@GUID3+96,@POOL+96,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 97 Titanium'),
+(@GUID1+97,@POOL+97,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 98 Saronite'),
+(@GUID2+97,@POOL+97,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 98 Rich Saronite'),
+(@GUID3+97,@POOL+97,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 98 Titanium'),
+(@GUID1+98,@POOL+98,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 99 Saronite'),
+(@GUID2+98,@POOL+98,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 99 Rich Saronite'),
+(@GUID3+98,@POOL+98,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 99 Titanium'),
+(@GUID1+99,@POOL+99,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 100 Saronite'),
+(@GUID2+99,@POOL+99,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 100 Rich Saronite'),
+(@GUID3+99,@POOL+99,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 100 Titanium'),
+(@GUID1+100,@POOL+100,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 101 Saronite'),
+(@GUID2+100,@POOL+100,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 101 Rich Saronite'),
+(@GUID3+100,@POOL+100,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 101 Titanium'),
+(@GUID1+101,@POOL+101,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 102 Saronite'),
+(@GUID2+101,@POOL+101,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 102 Rich Saronite'),
+(@GUID3+101,@POOL+101,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 102 Titanium'),
+(@GUID1+102,@POOL+102,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 103 Saronite'),
+(@GUID2+102,@POOL+102,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 103 Rich Saronite'),
+(@GUID3+102,@POOL+102,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 103 Titanium'),
+(@GUID1+103,@POOL+103,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 104 Saronite'),
+(@GUID2+103,@POOL+103,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 104 Rich Saronite'),
+(@GUID3+103,@POOL+103,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 104 Titanium'),
+(@GUID1+104,@POOL+104,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 105 Saronite'),
+(@GUID2+104,@POOL+104,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 105 Rich Saronite'),
+(@GUID3+104,@POOL+104,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 105 Titanium'),
+(@GUID1+105,@POOL+105,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 106 Saronite'),
+(@GUID2+105,@POOL+105,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 106 Rich Saronite'),
+(@GUID3+105,@POOL+105,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 106 Titanium'),
+(@GUID1+106,@POOL+106,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 107 Saronite'),
+(@GUID2+106,@POOL+106,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 107 Rich Saronite'),
+(@GUID3+106,@POOL+106,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 107 Titanium'),
+(@GUID1+107,@POOL+107,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 108 Saronite'),
+(@GUID2+107,@POOL+107,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 108 Rich Saronite'),
+(@GUID3+107,@POOL+107,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 108 Titanium'),
+(@GUID1+108,@POOL+108,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 109 Saronite'),
+(@GUID2+108,@POOL+108,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 109 Rich Saronite'),
+(@GUID3+108,@POOL+108,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 109 Titanium'),
+(@GUID1+109,@POOL+109,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 110 Saronite'),
+(@GUID2+109,@POOL+109,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 110 Rich Saronite'),
+(@GUID3+109,@POOL+109,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 110 Titanium'),
+(@GUID1+110,@POOL+110,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 111 Saronite'),
+(@GUID2+110,@POOL+110,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 111 Rich Saronite'),
+(@GUID3+110,@POOL+110,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 111 Titanium'),
+(@GUID1+111,@POOL+111,@CHANCE1, 'Sholazar Basin Ore Spawnpoint 112 Saronite'),
+(@GUID2+111,@POOL+111,@CHANCE2, 'Sholazar Basin Ore Spawnpoint 112 Rich Saronite'),
+(@GUID3+111,@POOL+111,@CHANCE3, 'Sholazar Basin Ore Spawnpoint 112 Titanium');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Sholazar Basin Ore Spawnpoint 1'),
+(@POOL+1,1, 'Sholazar Basin Ore Spawnpoint 2'),
+(@POOL+2,1, 'Sholazar Basin Ore Spawnpoint 3'),
+(@POOL+3,1, 'Sholazar Basin Ore Spawnpoint 4'),
+(@POOL+4,1, 'Sholazar Basin Ore Spawnpoint 5'),
+(@POOL+5,1, 'Sholazar Basin Ore Spawnpoint 6'),
+(@POOL+6,1, 'Sholazar Basin Ore Spawnpoint 7'),
+(@POOL+7,1, 'Sholazar Basin Ore Spawnpoint 8'),
+(@POOL+8,1, 'Sholazar Basin Ore Spawnpoint 9'),
+(@POOL+9,1, 'Sholazar Basin Ore Spawnpoint 10'),
+(@POOL+10,1, 'Sholazar Basin Ore Spawnpoint 11'),
+(@POOL+11,1, 'Sholazar Basin Ore Spawnpoint 12'),
+(@POOL+12,1, 'Sholazar Basin Ore Spawnpoint 13'),
+(@POOL+13,1, 'Sholazar Basin Ore Spawnpoint 14'),
+(@POOL+14,1, 'Sholazar Basin Ore Spawnpoint 15'),
+(@POOL+15,1, 'Sholazar Basin Ore Spawnpoint 16'),
+(@POOL+16,1, 'Sholazar Basin Ore Spawnpoint 17'),
+(@POOL+17,1, 'Sholazar Basin Ore Spawnpoint 18'),
+(@POOL+18,1, 'Sholazar Basin Ore Spawnpoint 19'),
+(@POOL+19,1, 'Sholazar Basin Ore Spawnpoint 20'),
+(@POOL+20,1, 'Sholazar Basin Ore Spawnpoint 21'),
+(@POOL+21,1, 'Sholazar Basin Ore Spawnpoint 22'),
+(@POOL+22,1, 'Sholazar Basin Ore Spawnpoint 23'),
+(@POOL+23,1, 'Sholazar Basin Ore Spawnpoint 24'),
+(@POOL+24,1, 'Sholazar Basin Ore Spawnpoint 25'),
+(@POOL+25,1, 'Sholazar Basin Ore Spawnpoint 26'),
+(@POOL+26,1, 'Sholazar Basin Ore Spawnpoint 27'),
+(@POOL+27,1, 'Sholazar Basin Ore Spawnpoint 28'),
+(@POOL+28,1, 'Sholazar Basin Ore Spawnpoint 29'),
+(@POOL+29,1, 'Sholazar Basin Ore Spawnpoint 30'),
+(@POOL+30,1, 'Sholazar Basin Ore Spawnpoint 31'),
+(@POOL+31,1, 'Sholazar Basin Ore Spawnpoint 32'),
+(@POOL+32,1, 'Sholazar Basin Ore Spawnpoint 33'),
+(@POOL+33,1, 'Sholazar Basin Ore Spawnpoint 34'),
+(@POOL+34,1, 'Sholazar Basin Ore Spawnpoint 35'),
+(@POOL+35,1, 'Sholazar Basin Ore Spawnpoint 36'),
+(@POOL+36,1, 'Sholazar Basin Ore Spawnpoint 37'),
+(@POOL+37,1, 'Sholazar Basin Ore Spawnpoint 38'),
+(@POOL+38,1, 'Sholazar Basin Ore Spawnpoint 39'),
+(@POOL+39,1, 'Sholazar Basin Ore Spawnpoint 40'),
+(@POOL+40,1, 'Sholazar Basin Ore Spawnpoint 41'),
+(@POOL+41,1, 'Sholazar Basin Ore Spawnpoint 42'),
+(@POOL+42,1, 'Sholazar Basin Ore Spawnpoint 43'),
+(@POOL+43,1, 'Sholazar Basin Ore Spawnpoint 44'),
+(@POOL+44,1, 'Sholazar Basin Ore Spawnpoint 45'),
+(@POOL+45,1, 'Sholazar Basin Ore Spawnpoint 46'),
+(@POOL+46,1, 'Sholazar Basin Ore Spawnpoint 47'),
+(@POOL+47,1, 'Sholazar Basin Ore Spawnpoint 48'),
+(@POOL+48,1, 'Sholazar Basin Ore Spawnpoint 49'),
+(@POOL+49,1, 'Sholazar Basin Ore Spawnpoint 50'),
+(@POOL+50,1, 'Sholazar Basin Ore Spawnpoint 51'),
+(@POOL+51,1, 'Sholazar Basin Ore Spawnpoint 52'),
+(@POOL+52,1, 'Sholazar Basin Ore Spawnpoint 53'),
+(@POOL+53,1, 'Sholazar Basin Ore Spawnpoint 54'),
+(@POOL+54,1, 'Sholazar Basin Ore Spawnpoint 55'),
+(@POOL+55,1, 'Sholazar Basin Ore Spawnpoint 56'),
+(@POOL+56,1, 'Sholazar Basin Ore Spawnpoint 57'),
+(@POOL+57,1, 'Sholazar Basin Ore Spawnpoint 58'),
+(@POOL+58,1, 'Sholazar Basin Ore Spawnpoint 59'),
+(@POOL+59,1, 'Sholazar Basin Ore Spawnpoint 60'),
+(@POOL+60,1, 'Sholazar Basin Ore Spawnpoint 61'),
+(@POOL+61,1, 'Sholazar Basin Ore Spawnpoint 62'),
+(@POOL+62,1, 'Sholazar Basin Ore Spawnpoint 63'),
+(@POOL+63,1, 'Sholazar Basin Ore Spawnpoint 64'),
+(@POOL+64,1, 'Sholazar Basin Ore Spawnpoint 65'),
+(@POOL+65,1, 'Sholazar Basin Ore Spawnpoint 66'),
+(@POOL+66,1, 'Sholazar Basin Ore Spawnpoint 67'),
+(@POOL+67,1, 'Sholazar Basin Ore Spawnpoint 68'),
+(@POOL+68,1, 'Sholazar Basin Ore Spawnpoint 69'),
+(@POOL+69,1, 'Sholazar Basin Ore Spawnpoint 70'),
+(@POOL+70,1, 'Sholazar Basin Ore Spawnpoint 71'),
+(@POOL+71,1, 'Sholazar Basin Ore Spawnpoint 72'),
+(@POOL+72,1, 'Sholazar Basin Ore Spawnpoint 73'),
+(@POOL+73,1, 'Sholazar Basin Ore Spawnpoint 74'),
+(@POOL+74,1, 'Sholazar Basin Ore Spawnpoint 75'),
+(@POOL+75,1, 'Sholazar Basin Ore Spawnpoint 76'),
+(@POOL+76,1, 'Sholazar Basin Ore Spawnpoint 77'),
+(@POOL+77,1, 'Sholazar Basin Ore Spawnpoint 78'),
+(@POOL+78,1, 'Sholazar Basin Ore Spawnpoint 79'),
+(@POOL+79,1, 'Sholazar Basin Ore Spawnpoint 80'),
+(@POOL+80,1, 'Sholazar Basin Ore Spawnpoint 81'),
+(@POOL+81,1, 'Sholazar Basin Ore Spawnpoint 82'),
+(@POOL+82,1, 'Sholazar Basin Ore Spawnpoint 83'),
+(@POOL+83,1, 'Sholazar Basin Ore Spawnpoint 84'),
+(@POOL+84,1, 'Sholazar Basin Ore Spawnpoint 85'),
+(@POOL+85,1, 'Sholazar Basin Ore Spawnpoint 86'),
+(@POOL+86,1, 'Sholazar Basin Ore Spawnpoint 87'),
+(@POOL+87,1, 'Sholazar Basin Ore Spawnpoint 88'),
+(@POOL+88,1, 'Sholazar Basin Ore Spawnpoint 89'),
+(@POOL+89,1, 'Sholazar Basin Ore Spawnpoint 90'),
+(@POOL+90,1, 'Sholazar Basin Ore Spawnpoint 91'),
+(@POOL+91,1, 'Sholazar Basin Ore Spawnpoint 92'),
+(@POOL+92,1, 'Sholazar Basin Ore Spawnpoint 93'),
+(@POOL+93,1, 'Sholazar Basin Ore Spawnpoint 94'),
+(@POOL+94,1, 'Sholazar Basin Ore Spawnpoint 95'),
+(@POOL+95,1, 'Sholazar Basin Ore Spawnpoint 96'),
+(@POOL+96,1, 'Sholazar Basin Ore Spawnpoint 97'),
+(@POOL+97,1, 'Sholazar Basin Ore Spawnpoint 98'),
+(@POOL+98,1, 'Sholazar Basin Ore Spawnpoint 99'),
+(@POOL+99,1, 'Sholazar Basin Ore Spawnpoint 100'),
+(@POOL+100,1, 'Sholazar Basin Ore Spawnpoint 101'),
+(@POOL+101,1, 'Sholazar Basin Ore Spawnpoint 102'),
+(@POOL+102,1, 'Sholazar Basin Ore Spawnpoint 103'),
+(@POOL+103,1, 'Sholazar Basin Ore Spawnpoint 104'),
+(@POOL+104,1, 'Sholazar Basin Ore Spawnpoint 105'),
+(@POOL+105,1, 'Sholazar Basin Ore Spawnpoint 106'),
+(@POOL+106,1, 'Sholazar Basin Ore Spawnpoint 107'),
+(@POOL+107,1, 'Sholazar Basin Ore Spawnpoint 108'),
+(@POOL+108,1, 'Sholazar Basin Ore Spawnpoint 109'),
+(@POOL+109,1, 'Sholazar Basin Ore Spawnpoint 110'),
+(@POOL+110,1, 'Sholazar Basin Ore Spawnpoint 111'),
+(@POOL+111,1, 'Sholazar Basin Ore Spawnpoint 112');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Sholazar Basin Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 61'),
+(@POOL+61,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 62'),
+(@POOL+62,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 63'),
+(@POOL+63,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 64'),
+(@POOL+64,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 65'),
+(@POOL+65,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 66'),
+(@POOL+66,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 67'),
+(@POOL+67,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 68'),
+(@POOL+68,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 69'),
+(@POOL+69,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 70'),
+(@POOL+70,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 71'),
+(@POOL+71,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 72'),
+(@POOL+72,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 73'),
+(@POOL+73,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 74'),
+(@POOL+74,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 75'),
+(@POOL+75,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 76'),
+(@POOL+76,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 77'),
+(@POOL+77,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 78'),
+(@POOL+78,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 79'),
+(@POOL+79,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 80'),
+(@POOL+80,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 81'),
+(@POOL+81,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 82'),
+(@POOL+82,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 83'),
+(@POOL+83,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 84'),
+(@POOL+84,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 85'),
+(@POOL+85,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 86'),
+(@POOL+86,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 87'),
+(@POOL+87,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 88'),
+(@POOL+88,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 89'),
+(@POOL+89,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 90'),
+(@POOL+90,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 91'),
+(@POOL+91,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 92'),
+(@POOL+92,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 93'),
+(@POOL+93,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 94'),
+(@POOL+94,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 95'),
+(@POOL+95,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 96'),
+(@POOL+96,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 97'),
+(@POOL+97,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 98'),
+(@POOL+98,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 99'),
+(@POOL+99,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 100'),
+(@POOL+100,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 101'),
+(@POOL+101,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 102'),
+(@POOL+102,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 103'),
+(@POOL+103,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 104'),
+(@POOL+104,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 105'),
+(@POOL+105,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 106'),
+(@POOL+106,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 107'),
+(@POOL+107,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 108'),
+(@POOL+108,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 109'),
+(@POOL+109,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 110'),
+(@POOL+110,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 111'),
+(@POOL+111,@MOTHER,0, 'Sholazar Basin Ore Spawnpoint 112');
+
+-- --------------------------------------
+-- -- Fixup ore spawns for Storm Peaks --
+-- --------------------------------------
+SET @RANGE := 250;
+SET @GUID1 := 162450;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @GUID3 := @GUID2 + @RANGE;
+SET @POOL := 11150;
+SET @LASTGUID := 109;
+SET @CHANCE1 := 75;
+SET @CHANCE2 := 15;
+SET @CHANCE3 := 10;
+SET @MOTHER := 9906;
+SET @MOTHER2 := 9907;
+SET @ACTIVE := 35; -- Max number of active spawns
+SET @TIMER := 900; -- Respawn timer in seconds
+-- Remove Ore spawns from Storm Peaks
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < -110 AND `position_y` > -3430 AND `position_x` > 6490;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < -3430 AND `position_x` > 6980;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < -110 AND `position_y` > -1890 AND `position_x` > 6100 AND `position_x` < 6490;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < -230 AND `position_y` > -1195 AND `position_x` > 5790 AND `position_x` < 6100;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 225 AND `position_y` > -30 AND `position_x` > 6920 AND `position_x` < 7200;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 225 AND `position_y` > -110 AND `position_x` > 7300;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` > -4030 AND `position_y` < -2300 AND `position_x` > 6730 AND `position_x` < 6980;
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5376 AND 5447;
+DELETE FROM `pool_template` WHERE `entry`=898;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5376 AND 5447;
+-- Saronite Deposits Storm Peaks
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1,189980,571,1,1,5973.130,-678.799,384.3029,-1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189980,571,1,1,5990.065,-1015.166,446.6375,2.19911,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189980,571,1,1,5990.990,-621.435,374.3110,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189980,571,1,1,6344.363,-785.474,408.0191,-1.86750,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189980,571,1,1,6394.662,-876.401,409.3433,1.27409,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189980,571,1,1,6518.710,-1309.900,407.2080,2.21656,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189980,571,1,1,6523.616,-1265.091,405.4821,-1.58825,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189980,571,1,1,6570.893,-1050.817,432.5308,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189980,571,1,1,6570.996,-1230.147,404.3670,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189980,571,1,1,6571.000,-1230.150,404.3670,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189980,571,1,1,6596.600,-1356.010,410.0870,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189980,571,1,1,6600.015,-977.058,430.9555,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189980,571,1,1,6646.551,-876.419,685.5173,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189980,571,1,1,6657.530,-1251.140,397.5630,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189980,571,1,1,6666.780,-1032.980,413.8020,-0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189980,571,1,1,6675.330,-1195.820,398.5400,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189980,571,1,1,6677.080,-1207.990,398.8300,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189980,571,1,1,6679.290,-1365.290,392.1810,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189980,571,1,1,6688.502,-1112.257,397.3456,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189980,571,1,1,6756.100,-1530.500,369.0680,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189980,571,1,1,6799.450,-1602.820,354.4390,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189980,571,1,1,6816.010,-1364.550,819.6750,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189980,571,1,1,6821.420,-607.278,982.4290,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189980,571,1,1,6831.780,-1599.010,352.3690,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189980,571,1,1,6836.444,-1338.513,819.7522,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189980,571,1,1,6847.579,-1230.780,806.6544,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189980,571,1,1,6866.660,-1725.760,827.2400,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189980,571,1,1,6867.097,-3428.810,629.1428,-1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189980,571,1,1,6879.430,-1237.150,810.2590,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189980,571,1,1,6900.310,-1523.000,359.9120,-0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189980,571,1,1,6927.970,-28.980,805.1720,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189980,571,1,1,6961.172,-6.584,809.1790,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189980,571,1,1,6979.510,-658.492,770.4860,-2.94959,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189980,571,1,1,6981.886,-1205.506,810.1734,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189980,571,1,1,6983.300,-1221.080,809.7370,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189980,571,1,1,6986.340,-1293.410,820.2910,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189980,571,1,1,6994.690,-804.125,736.4880,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189980,571,1,1,6996.860,34.220,810.4850,2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189980,571,1,1,7002.330,-19.649,811.0490,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189980,571,1,1,7005.420,-367.084,788.1000,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189980,571,1,1,7008.100,-503.726,745.1890,-0.13962,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189980,571,1,1,7010.060,90.342,814.8490,0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189980,571,1,1,7019.150,-776.146,732.3610,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189980,571,1,1,7019.820,-1357.060,833.0070,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189980,571,1,3,7032.890,-1319.140,820.8290,0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189980,571,1,1,7051.360,-2016.770,769.8010,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189980,571,1,3,7052.570,-1106.910,934.5030,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189980,571,1,1,7075.710,-1920.550,774.8670,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189980,571,1,1,7075.710,-1920.546,774.8665,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189980,571,1,4,7080.040,-2724.640,756.8140,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189980,571,1,1,7108.708,-390.674,785.4223,-2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189980,571,1,2,7109.325,-2248.944,760.0534,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189980,571,1,1,7110.417,-543.947,739.8368,-0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189980,571,1,1,7122.950,-1096.950,928.4570,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189980,571,1,4,7134.020,-2760.250,786.9060,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189980,571,1,8,7142.310,-3636.810,841.7630,2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189980,571,1,4,7160.350,-2126.890,762.2910,-1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189980,571,1,1,7169.138,-1110.031,933.9944,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189980,571,1,4,7170.760,-2087.910,771.9970,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189980,571,1,1,7171.050,-232.757,808.5810,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189980,571,1,4,7177.672,-2048.255,768.8198,-2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID1+61,189980,571,1,1,7187.288,-1305.361,946.4589,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID1+62,189980,571,1,1,7187.840,220.090,793.1120,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID1+63,189980,571,1,4,7191.417,-2963.443,863.3470,0.71558,0,0,0,1,@TIMER,255,1),
+(@GUID1+64,189980,571,1,4,7201.295,-1976.741,771.9154,2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID1+65,189980,571,1,8,7216.890,-3691.290,822.2200,1.95477,0,0,0,1,@TIMER,255,1),
+(@GUID1+66,189980,571,1,1,7224.430,-993.775,926.9220,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID1+67,189980,571,1,2,7233.571,-3542.979,834.7737,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID1+68,189980,571,1,1,7247.440,-1258.090,922.4690,0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID1+69,189980,571,1,4,7253.561,-2213.503,765.6185,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID1+70,189980,571,1,3,7263.250,-2858.310,784.9630,3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID1+71,189980,571,1,1,7290.680,-158.387,791.6990,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID1+72,189980,571,1,1,7301.970,-1076.270,922.8330,2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID1+73,189980,571,1,4,7308.590,-2918.880,829.2740,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID1+74,189980,571,1,4,7310.649,-2244.919,759.6533,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID1+75,189980,571,1,8,7343.630,-3631.950,827.0680,2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID1+76,189980,571,1,4,7375.280,-2741.830,755.0170,1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID1+77,189980,571,1,1,7402.413,-2801.713,771.3893,2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID1+78,189980,571,1,4,7407.630,-3292.640,865.9170,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+79,189980,571,1,1,7425.510,-124.863,794.2450,-1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID1+80,189980,571,1,4,7440.669,-2350.947,758.8542,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID1+81,189980,571,1,2,7471.304,-2436.701,759.9119,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+82,189980,571,1,1,7610.480,-1368.060,958.4000,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID1+83,189980,571,1,1,7705.490,-3346.280,889.6080,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID1+84,189980,571,1,1,7751.970,-268.932,919.1180,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+85,189980,571,1,1,7776.040,-3094.280,917.4480,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID1+86,189980,571,1,1,7808.350,-82.079,880.2680,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID1+87,189980,571,1,1,7828.840,-115.694,886.1690,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+88,189980,571,1,1,7854.360,49.873,1010.9600,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID1+89,189980,571,1,1,7908.766,124.441,1030.6354,-0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID1+90,189980,571,1,1,7923.454,-2642.304,1139.8401,0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID1+91,189980,571,1,1,8016.460,-2395.760,1161.8300,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+92,189980,571,1,1,8069.040,-2777.400,1050.3100,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID1+93,189980,571,1,1,8106.100,-2241.150,1167.3900,-0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID1+94,189980,571,1,1,8125.980,-218.974,848.5040,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+95,189980,571,1,3,8126.960,-1265.300,1018.4300,-0.99484,0,0,0,1,@TIMER,255,1),
+(@GUID1+96,189980,571,1,1,8136.270,-286.253,867.3590,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+97,189980,571,1,1,8153.250,-392.846,1020.5000,-2.94959,0,0,0,1,@TIMER,255,1),
+(@GUID1+98,189980,571,1,1,8182.390,-729.494,929.5760,1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID1+99,189980,571,1,1,8184.400,-2399.480,1139.6400,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID1+100,189980,571,1,1,8191.020,-2794.480,1044.1400,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID1+101,189980,571,1,1,8196.150,-2734.560,1036.6200,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID1+102,189980,571,1,1,8223.970,-674.648,933.0660,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID1+103,189980,571,1,1,8239.630,-2988.430,1087.3600,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID1+104,189980,571,1,1,8286.560,-212.827,889.2710,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+105,189980,571,1,1,8292.716,-2688.017,1036.6243,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID1+106,189980,571,1,1,8297.316,-1323.155,989.2230,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID1+107,189980,571,1,1,8443.600,-1578.120,1038.2500,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID1+108,189980,571,1,1,8569.773,-1292.149,544.9063,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+109,189980,571,1,1,8636.965,-1181.421,539.1292,-1.32645,0,0,0,1,@TIMER,255,1);
+-- Rich Saronite Deposits Storm Peaks
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID2,189981,571,1,1,5973.130,-678.799,384.3029,-1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189981,571,1,1,5990.065,-1015.166,446.6375,2.19911,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189981,571,1,1,5990.990,-621.435,374.3110,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189981,571,1,1,6344.363,-785.474,408.0191,-1.86750,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189981,571,1,1,6394.662,-876.401,409.3433,1.27409,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189981,571,1,1,6518.710,-1309.900,407.2080,2.21656,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189981,571,1,1,6523.616,-1265.091,405.4821,-1.58825,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189981,571,1,1,6570.893,-1050.817,432.5308,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189981,571,1,1,6570.996,-1230.147,404.3670,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189981,571,1,1,6571.000,-1230.150,404.3670,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189981,571,1,1,6596.600,-1356.010,410.0870,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189981,571,1,1,6600.015,-977.058,430.9555,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189981,571,1,1,6646.551,-876.419,685.5173,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189981,571,1,1,6657.530,-1251.140,397.5630,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189981,571,1,1,6666.780,-1032.980,413.8020,-0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189981,571,1,1,6675.330,-1195.820,398.5400,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189981,571,1,1,6677.080,-1207.990,398.8300,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189981,571,1,1,6679.290,-1365.290,392.1810,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189981,571,1,1,6688.502,-1112.257,397.3456,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189981,571,1,1,6756.100,-1530.500,369.0680,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189981,571,1,1,6799.450,-1602.820,354.4390,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189981,571,1,1,6816.010,-1364.550,819.6750,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189981,571,1,1,6821.420,-607.278,982.4290,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID2+23,189981,571,1,1,6831.780,-1599.010,352.3690,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189981,571,1,1,6836.444,-1338.513,819.7522,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189981,571,1,1,6847.579,-1230.780,806.6544,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189981,571,1,1,6866.660,-1725.760,827.2400,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189981,571,1,1,6867.097,-3428.810,629.1428,-1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189981,571,1,1,6879.430,-1237.150,810.2590,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189981,571,1,1,6900.310,-1523.000,359.9120,-0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189981,571,1,1,6927.970,-28.980,805.1720,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189981,571,1,1,6961.172,-6.584,809.1790,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189981,571,1,1,6979.510,-658.492,770.4860,-2.94959,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189981,571,1,1,6981.886,-1205.506,810.1734,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189981,571,1,1,6983.300,-1221.080,809.7370,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189981,571,1,1,6986.340,-1293.410,820.2910,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189981,571,1,1,6994.690,-804.125,736.4880,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189981,571,1,1,6996.860,34.220,810.4850,2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189981,571,1,1,7002.330,-19.649,811.0490,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189981,571,1,1,7005.420,-367.084,788.1000,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189981,571,1,1,7008.100,-503.726,745.1890,-0.13962,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189981,571,1,1,7010.060,90.342,814.8490,0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189981,571,1,1,7019.150,-776.146,732.3610,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189981,571,1,1,7019.820,-1357.060,833.0070,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189981,571,1,3,7032.890,-1319.140,820.8290,0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189981,571,1,1,7051.360,-2016.770,769.8010,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189981,571,1,3,7052.570,-1106.910,934.5030,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+47,189981,571,1,1,7075.710,-1920.550,774.8670,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+48,189981,571,1,1,7075.710,-1920.546,774.8665,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189981,571,1,4,7080.040,-2724.640,756.8140,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189981,571,1,1,7108.708,-390.674,785.4223,-2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189981,571,1,2,7109.325,-2248.944,760.0534,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189981,571,1,1,7110.417,-543.947,739.8368,-0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189981,571,1,1,7122.950,-1096.950,928.4570,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189981,571,1,4,7134.020,-2760.250,786.9060,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189981,571,1,8,7142.310,-3636.810,841.7630,2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189981,571,1,4,7160.350,-2126.890,762.2910,-1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189981,571,1,1,7169.138,-1110.031,933.9944,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189981,571,1,4,7170.760,-2087.910,771.9970,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189981,571,1,1,7171.050,-232.757,808.5810,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189981,571,1,4,7177.672,-2048.255,768.8198,-2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID2+61,189981,571,1,1,7187.288,-1305.361,946.4589,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID2+62,189981,571,1,1,7187.840,220.090,793.1120,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID2+63,189981,571,1,4,7191.417,-2963.443,863.3470,0.71558,0,0,0,1,@TIMER,255,1),
+(@GUID2+64,189981,571,1,4,7201.295,-1976.741,771.9154,2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID2+65,189981,571,1,8,7216.890,-3691.290,822.2200,1.95477,0,0,0,1,@TIMER,255,1),
+(@GUID2+66,189981,571,1,1,7224.430,-993.775,926.9220,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID2+67,189981,571,1,2,7233.571,-3542.979,834.7737,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID2+68,189981,571,1,1,7247.440,-1258.090,922.4690,0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID2+69,189981,571,1,4,7253.561,-2213.503,765.6185,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID2+70,189981,571,1,3,7263.250,-2858.310,784.9630,3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID2+71,189981,571,1,1,7290.680,-158.387,791.6990,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID2+72,189981,571,1,1,7301.970,-1076.270,922.8330,2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID2+73,189981,571,1,4,7308.590,-2918.880,829.2740,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID2+74,189981,571,1,4,7310.649,-2244.919,759.6533,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID2+75,189981,571,1,8,7343.630,-3631.950,827.0680,2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID2+76,189981,571,1,4,7375.280,-2741.830,755.0170,1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID2+77,189981,571,1,1,7402.413,-2801.713,771.3893,2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID2+78,189981,571,1,4,7407.630,-3292.640,865.9170,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+79,189981,571,1,1,7425.510,-124.863,794.2450,-1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID2+80,189981,571,1,4,7440.669,-2350.947,758.8542,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID2+81,189981,571,1,2,7471.304,-2436.701,759.9119,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+82,189981,571,1,1,7610.480,-1368.060,958.4000,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID2+83,189981,571,1,1,7705.490,-3346.280,889.6080,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID2+84,189981,571,1,1,7751.970,-268.932,919.1180,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+85,189981,571,1,1,7776.040,-3094.280,917.4480,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID2+86,189981,571,1,1,7808.350,-82.079,880.2680,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID2+87,189981,571,1,1,7828.840,-115.694,886.1690,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+88,189981,571,1,1,7854.360,49.873,1010.9600,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID2+89,189981,571,1,1,7908.766,124.441,1030.6354,-0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID2+90,189981,571,1,1,7923.454,-2642.304,1139.8401,0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID2+91,189981,571,1,1,8016.460,-2395.760,1161.8300,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+92,189981,571,1,1,8069.040,-2777.400,1050.3100,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID2+93,189981,571,1,1,8106.100,-2241.150,1167.3900,-0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID2+94,189981,571,1,1,8125.980,-218.974,848.5040,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+95,189981,571,1,3,8126.960,-1265.300,1018.4300,-0.99484,0,0,0,1,@TIMER,255,1),
+(@GUID2+96,189981,571,1,1,8136.270,-286.253,867.3590,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID2+97,189981,571,1,1,8153.250,-392.846,1020.5000,-2.94959,0,0,0,1,@TIMER,255,1),
+(@GUID2+98,189981,571,1,1,8182.390,-729.494,929.5760,1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID2+99,189981,571,1,1,8184.400,-2399.480,1139.6400,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID2+100,189981,571,1,1,8191.020,-2794.480,1044.1400,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID2+101,189981,571,1,1,8196.150,-2734.560,1036.6200,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID2+102,189981,571,1,1,8223.970,-674.648,933.0660,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID2+103,189981,571,1,1,8239.630,-2988.430,1087.3600,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID2+104,189981,571,1,1,8286.560,-212.827,889.2710,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+105,189981,571,1,1,8292.716,-2688.017,1036.6243,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID2+106,189981,571,1,1,8297.316,-1323.155,989.2230,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID2+107,189981,571,1,1,8443.600,-1578.120,1038.2500,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID2+108,189981,571,1,1,8569.773,-1292.149,544.9063,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+109,189981,571,1,1,8636.965,-1181.421,539.1292,-1.32645,0,0,0,1,@TIMER,255,1);
+-- Titanium Deposits Storm Peaks
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID3,191133,571,1,1,5973.130,-678.799,384.3029,-1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID3+1,191133,571,1,1,5990.065,-1015.166,446.6375,2.19911,0,0,0,1,@TIMER,255,1),
+(@GUID3+2,191133,571,1,1,5990.990,-621.435,374.3110,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID3+3,191133,571,1,1,6344.363,-785.474,408.0191,-1.86750,0,0,0,1,@TIMER,255,1),
+(@GUID3+4,191133,571,1,1,6394.662,-876.401,409.3433,1.27409,0,0,0,1,@TIMER,255,1),
+(@GUID3+5,191133,571,1,1,6518.710,-1309.900,407.2080,2.21656,0,0,0,1,@TIMER,255,1),
+(@GUID3+6,191133,571,1,1,6523.616,-1265.091,405.4821,-1.58825,0,0,0,1,@TIMER,255,1),
+(@GUID3+7,191133,571,1,1,6570.893,-1050.817,432.5308,-1.36136,0,0,0,1,@TIMER,255,1),
+(@GUID3+8,191133,571,1,1,6570.996,-1230.147,404.3670,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID3+9,191133,571,1,1,6571.000,-1230.150,404.3670,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID3+10,191133,571,1,1,6596.600,-1356.010,410.0870,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+11,191133,571,1,1,6600.015,-977.058,430.9555,1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID3+12,191133,571,1,1,6646.551,-876.419,685.5173,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID3+13,191133,571,1,1,6657.530,-1251.140,397.5630,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID3+14,191133,571,1,1,6666.780,-1032.980,413.8020,-0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID3+15,191133,571,1,1,6675.330,-1195.820,398.5400,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID3+16,191133,571,1,1,6677.080,-1207.990,398.8300,-1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID3+17,191133,571,1,1,6679.290,-1365.290,392.1810,2.87979,0,0,0,1,@TIMER,255,1),
+(@GUID3+18,191133,571,1,1,6688.502,-1112.257,397.3456,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+19,191133,571,1,1,6756.100,-1530.500,369.0680,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID3+20,191133,571,1,1,6799.450,-1602.820,354.4390,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID3+21,191133,571,1,1,6816.010,-1364.550,819.6750,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID3+22,191133,571,1,1,6821.420,-607.278,982.4290,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID3+23,191133,571,1,1,6831.780,-1599.010,352.3690,1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID3+24,191133,571,1,1,6836.444,-1338.513,819.7522,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID3+25,191133,571,1,1,6847.579,-1230.780,806.6544,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID3+26,191133,571,1,1,6866.660,-1725.760,827.2400,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID3+27,191133,571,1,1,6867.097,-3428.810,629.1428,-1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID3+28,191133,571,1,1,6879.430,-1237.150,810.2590,1.39626,0,0,0,1,@TIMER,255,1),
+(@GUID3+29,191133,571,1,1,6900.310,-1523.000,359.9120,-0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID3+30,191133,571,1,1,6927.970,-28.980,805.1720,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID3+31,191133,571,1,1,6961.172,-6.584,809.1790,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID3+32,191133,571,1,1,6979.510,-658.492,770.4860,-2.94959,0,0,0,1,@TIMER,255,1),
+(@GUID3+33,191133,571,1,1,6981.886,-1205.506,810.1734,2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID3+34,191133,571,1,1,6983.300,-1221.080,809.7370,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID3+35,191133,571,1,1,6986.340,-1293.410,820.2910,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+36,191133,571,1,1,6994.690,-804.125,736.4880,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID3+37,191133,571,1,1,6996.860,34.220,810.4850,2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID3+38,191133,571,1,1,7002.330,-19.649,811.0490,-1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID3+39,191133,571,1,1,7005.420,-367.084,788.1000,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID3+40,191133,571,1,1,7008.100,-503.726,745.1890,-0.13962,0,0,0,1,@TIMER,255,1),
+(@GUID3+41,191133,571,1,1,7010.060,90.342,814.8490,0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID3+42,191133,571,1,1,7019.150,-776.146,732.3610,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID3+43,191133,571,1,1,7019.820,-1357.060,833.0070,-0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID3+44,191133,571,1,3,7032.890,-1319.140,820.8290,0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID3+45,191133,571,1,1,7051.360,-2016.770,769.8010,-0.78540,0,0,0,1,@TIMER,255,1),
+(@GUID3+46,191133,571,1,3,7052.570,-1106.910,934.5030,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID3+47,191133,571,1,1,7075.710,-1920.550,774.8670,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID3+48,191133,571,1,1,7075.710,-1920.546,774.8665,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID3+49,191133,571,1,4,7080.040,-2724.640,756.8140,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID3+50,191133,571,1,1,7108.708,-390.674,785.4223,-2.60054,0,0,0,1,@TIMER,255,1),
+(@GUID3+51,191133,571,1,2,7109.325,-2248.944,760.0534,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID3+52,191133,571,1,1,7110.417,-543.947,739.8368,-0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID3+53,191133,571,1,1,7122.950,-1096.950,928.4570,0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID3+54,191133,571,1,4,7134.020,-2760.250,786.9060,0.22689,0,0,0,1,@TIMER,255,1),
+(@GUID3+55,191133,571,1,8,7142.310,-3636.810,841.7630,2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID3+56,191133,571,1,4,7160.350,-2126.890,762.2910,-1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID3+57,191133,571,1,1,7169.138,-1110.031,933.9944,2.56563,0,0,0,1,@TIMER,255,1),
+(@GUID3+58,191133,571,1,4,7170.760,-2087.910,771.9970,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID3+59,191133,571,1,1,7171.050,-232.757,808.5810,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID3+60,191133,571,1,4,7177.672,-2048.255,768.8198,-2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID3+61,191133,571,1,1,7187.288,-1305.361,946.4589,0.10472,0,0,0,1,@TIMER,255,1),
+(@GUID3+62,191133,571,1,1,7187.840,220.090,793.1120,-2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID3+63,191133,571,1,4,7191.417,-2963.443,863.3470,0.71558,0,0,0,1,@TIMER,255,1),
+(@GUID3+64,191133,571,1,4,7201.295,-1976.741,771.9154,2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID3+65,191133,571,1,8,7216.890,-3691.290,822.2200,1.95477,0,0,0,1,@TIMER,255,1),
+(@GUID3+66,191133,571,1,1,7224.430,-993.775,926.9220,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID3+67,191133,571,1,2,7233.571,-3542.979,834.7737,1.64061,0,0,0,1,@TIMER,255,1),
+(@GUID3+68,191133,571,1,1,7247.440,-1258.090,922.4690,0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID3+69,191133,571,1,4,7253.561,-2213.503,765.6185,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID3+70,191133,571,1,3,7263.250,-2858.310,784.9630,3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID3+71,191133,571,1,1,7290.680,-158.387,791.6990,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID3+72,191133,571,1,1,7301.970,-1076.270,922.8330,2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID3+73,191133,571,1,4,7308.590,-2918.880,829.2740,2.18166,0,0,0,1,@TIMER,255,1),
+(@GUID3+74,191133,571,1,4,7310.649,-2244.919,759.6533,2.79252,0,0,0,1,@TIMER,255,1),
+(@GUID3+75,191133,571,1,8,7343.630,-3631.950,827.0680,2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID3+76,191133,571,1,4,7375.280,-2741.830,755.0170,1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID3+77,191133,571,1,1,7402.413,-2801.713,771.3893,2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID3+78,191133,571,1,4,7407.630,-3292.640,865.9170,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+79,191133,571,1,1,7425.510,-124.863,794.2450,-1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID3+80,191133,571,1,4,7440.669,-2350.947,758.8542,-2.58308,0,0,0,1,@TIMER,255,1),
+(@GUID3+81,191133,571,1,2,7471.304,-2436.701,759.9119,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID3+82,191133,571,1,1,7610.480,-1368.060,958.4000,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID3+83,191133,571,1,1,7705.490,-3346.280,889.6080,-0.06981,0,0,0,1,@TIMER,255,1),
+(@GUID3+84,191133,571,1,1,7751.970,-268.932,919.1180,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID3+85,191133,571,1,1,7776.040,-3094.280,917.4480,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID3+86,191133,571,1,1,7808.350,-82.079,880.2680,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID3+87,191133,571,1,1,7828.840,-115.694,886.1690,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+88,191133,571,1,1,7854.360,49.873,1010.9600,2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID3+89,191133,571,1,1,7908.766,124.441,1030.6354,-0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID3+90,191133,571,1,1,7923.454,-2642.304,1139.8401,0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID3+91,191133,571,1,1,8016.460,-2395.760,1161.8300,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID3+92,191133,571,1,1,8069.040,-2777.400,1050.3100,-1.23918,0,0,0,1,@TIMER,255,1),
+(@GUID3+93,191133,571,1,1,8106.100,-2241.150,1167.3900,-0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID3+94,191133,571,1,1,8125.980,-218.974,848.5040,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+95,191133,571,1,3,8126.960,-1265.300,1018.4300,-0.99484,0,0,0,1,@TIMER,255,1),
+(@GUID3+96,191133,571,1,1,8136.270,-286.253,867.3590,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID3+97,191133,571,1,1,8153.250,-392.846,1020.5000,-2.94959,0,0,0,1,@TIMER,255,1),
+(@GUID3+98,191133,571,1,1,8182.390,-729.494,929.5760,1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID3+99,191133,571,1,1,8184.400,-2399.480,1139.6400,-0.69813,0,0,0,1,@TIMER,255,1),
+(@GUID3+100,191133,571,1,1,8191.020,-2794.480,1044.1400,-2.75761,0,0,0,1,@TIMER,255,1),
+(@GUID3+101,191133,571,1,1,8196.150,-2734.560,1036.6200,-2.84488,0,0,0,1,@TIMER,255,1),
+(@GUID3+102,191133,571,1,1,8223.970,-674.648,933.0660,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID3+103,191133,571,1,1,8239.630,-2988.430,1087.3600,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID3+104,191133,571,1,1,8286.560,-212.827,889.2710,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+105,191133,571,1,1,8292.716,-2688.017,1036.6243,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID3+106,191133,571,1,1,8297.316,-1323.155,989.2230,3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID3+107,191133,571,1,1,8443.600,-1578.120,1038.2500,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID3+108,191133,571,1,1,8569.773,-1292.149,544.9063,1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID3+109,191133,571,1,1,8636.965,-1181.421,539.1292,-1.32645,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@RANGE;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@RANGE;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID3 AND @GUID3+@RANGE;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Storm Peaks Ore Spawnpoint 1 Saronite'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Storm Peaks Ore Spawnpoint 1 Rich Saronite'),
+(@GUID3+0,@POOL+0,@CHANCE3, 'Storm Peaks Ore Spawnpoint 1 Titanium'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Storm Peaks Ore Spawnpoint 2 Saronite'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Storm Peaks Ore Spawnpoint 2 Rich Saronite'),
+(@GUID3+1,@POOL+1,@CHANCE3, 'Storm Peaks Ore Spawnpoint 2 Titanium'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Storm Peaks Ore Spawnpoint 3 Saronite'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Storm Peaks Ore Spawnpoint 3 Rich Saronite'),
+(@GUID3+2,@POOL+2,@CHANCE3, 'Storm Peaks Ore Spawnpoint 3 Titanium'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Storm Peaks Ore Spawnpoint 4 Saronite'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Storm Peaks Ore Spawnpoint 4 Rich Saronite'),
+(@GUID3+3,@POOL+3,@CHANCE3, 'Storm Peaks Ore Spawnpoint 4 Titanium'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Storm Peaks Ore Spawnpoint 5 Saronite'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Storm Peaks Ore Spawnpoint 5 Rich Saronite'),
+(@GUID3+4,@POOL+4,@CHANCE3, 'Storm Peaks Ore Spawnpoint 5 Titanium'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Storm Peaks Ore Spawnpoint 6 Saronite'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Storm Peaks Ore Spawnpoint 6 Rich Saronite'),
+(@GUID3+5,@POOL+5,@CHANCE3, 'Storm Peaks Ore Spawnpoint 6 Titanium'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Storm Peaks Ore Spawnpoint 7 Saronite'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Storm Peaks Ore Spawnpoint 7 Rich Saronite'),
+(@GUID3+6,@POOL+6,@CHANCE3, 'Storm Peaks Ore Spawnpoint 7 Titanium'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Storm Peaks Ore Spawnpoint 8 Saronite'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Storm Peaks Ore Spawnpoint 8 Rich Saronite'),
+(@GUID3+7,@POOL+7,@CHANCE3, 'Storm Peaks Ore Spawnpoint 8 Titanium'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Storm Peaks Ore Spawnpoint 9 Saronite'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Storm Peaks Ore Spawnpoint 9 Rich Saronite'),
+(@GUID3+8,@POOL+8,@CHANCE3, 'Storm Peaks Ore Spawnpoint 9 Titanium'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Storm Peaks Ore Spawnpoint 10 Saronite'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Storm Peaks Ore Spawnpoint 10 Rich Saronite'),
+(@GUID3+9,@POOL+9,@CHANCE3, 'Storm Peaks Ore Spawnpoint 10 Titanium'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Storm Peaks Ore Spawnpoint 11 Saronite'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Storm Peaks Ore Spawnpoint 11 Rich Saronite'),
+(@GUID3+10,@POOL+10,@CHANCE3, 'Storm Peaks Ore Spawnpoint 11 Titanium'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Storm Peaks Ore Spawnpoint 12 Saronite'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Storm Peaks Ore Spawnpoint 12 Rich Saronite'),
+(@GUID3+11,@POOL+11,@CHANCE3, 'Storm Peaks Ore Spawnpoint 12 Titanium'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Storm Peaks Ore Spawnpoint 13 Saronite'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Storm Peaks Ore Spawnpoint 13 Rich Saronite'),
+(@GUID3+12,@POOL+12,@CHANCE3, 'Storm Peaks Ore Spawnpoint 13 Titanium'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Storm Peaks Ore Spawnpoint 14 Saronite'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Storm Peaks Ore Spawnpoint 14 Rich Saronite'),
+(@GUID3+13,@POOL+13,@CHANCE3, 'Storm Peaks Ore Spawnpoint 14 Titanium'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Storm Peaks Ore Spawnpoint 15 Saronite'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Storm Peaks Ore Spawnpoint 15 Rich Saronite'),
+(@GUID3+14,@POOL+14,@CHANCE3, 'Storm Peaks Ore Spawnpoint 15 Titanium'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Storm Peaks Ore Spawnpoint 16 Saronite'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Storm Peaks Ore Spawnpoint 16 Rich Saronite'),
+(@GUID3+15,@POOL+15,@CHANCE3, 'Storm Peaks Ore Spawnpoint 16 Titanium'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Storm Peaks Ore Spawnpoint 17 Saronite'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Storm Peaks Ore Spawnpoint 17 Rich Saronite'),
+(@GUID3+16,@POOL+16,@CHANCE3, 'Storm Peaks Ore Spawnpoint 17 Titanium'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Storm Peaks Ore Spawnpoint 18 Saronite'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Storm Peaks Ore Spawnpoint 18 Rich Saronite'),
+(@GUID3+17,@POOL+17,@CHANCE3, 'Storm Peaks Ore Spawnpoint 18 Titanium'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Storm Peaks Ore Spawnpoint 19 Saronite'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Storm Peaks Ore Spawnpoint 19 Rich Saronite'),
+(@GUID3+18,@POOL+18,@CHANCE3, 'Storm Peaks Ore Spawnpoint 19 Titanium'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Storm Peaks Ore Spawnpoint 20 Saronite'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Storm Peaks Ore Spawnpoint 20 Rich Saronite'),
+(@GUID3+19,@POOL+19,@CHANCE3, 'Storm Peaks Ore Spawnpoint 20 Titanium'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Storm Peaks Ore Spawnpoint 21 Saronite'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Storm Peaks Ore Spawnpoint 21 Rich Saronite'),
+(@GUID3+20,@POOL+20,@CHANCE3, 'Storm Peaks Ore Spawnpoint 21 Titanium'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Storm Peaks Ore Spawnpoint 22 Saronite'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Storm Peaks Ore Spawnpoint 22 Rich Saronite'),
+(@GUID3+21,@POOL+21,@CHANCE3, 'Storm Peaks Ore Spawnpoint 22 Titanium'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Storm Peaks Ore Spawnpoint 23 Saronite'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Storm Peaks Ore Spawnpoint 23 Rich Saronite'),
+(@GUID3+22,@POOL+22,@CHANCE3, 'Storm Peaks Ore Spawnpoint 23 Titanium'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Storm Peaks Ore Spawnpoint 24 Saronite'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Storm Peaks Ore Spawnpoint 24 Rich Saronite'),
+(@GUID3+23,@POOL+23,@CHANCE3, 'Storm Peaks Ore Spawnpoint 24 Titanium'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Storm Peaks Ore Spawnpoint 25 Saronite'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Storm Peaks Ore Spawnpoint 25 Rich Saronite'),
+(@GUID3+24,@POOL+24,@CHANCE3, 'Storm Peaks Ore Spawnpoint 25 Titanium'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Storm Peaks Ore Spawnpoint 26 Saronite'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Storm Peaks Ore Spawnpoint 26 Rich Saronite'),
+(@GUID3+25,@POOL+25,@CHANCE3, 'Storm Peaks Ore Spawnpoint 26 Titanium'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Storm Peaks Ore Spawnpoint 27 Saronite'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Storm Peaks Ore Spawnpoint 27 Rich Saronite'),
+(@GUID3+26,@POOL+26,@CHANCE3, 'Storm Peaks Ore Spawnpoint 27 Titanium'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Storm Peaks Ore Spawnpoint 28 Saronite'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Storm Peaks Ore Spawnpoint 28 Rich Saronite'),
+(@GUID3+27,@POOL+27,@CHANCE3, 'Storm Peaks Ore Spawnpoint 28 Titanium'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Storm Peaks Ore Spawnpoint 29 Saronite'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Storm Peaks Ore Spawnpoint 29 Rich Saronite'),
+(@GUID3+28,@POOL+28,@CHANCE3, 'Storm Peaks Ore Spawnpoint 29 Titanium'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Storm Peaks Ore Spawnpoint 30 Saronite'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Storm Peaks Ore Spawnpoint 30 Rich Saronite'),
+(@GUID3+29,@POOL+29,@CHANCE3, 'Storm Peaks Ore Spawnpoint 30 Titanium'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Storm Peaks Ore Spawnpoint 31 Saronite'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Storm Peaks Ore Spawnpoint 31 Rich Saronite'),
+(@GUID3+30,@POOL+30,@CHANCE3, 'Storm Peaks Ore Spawnpoint 31 Titanium'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Storm Peaks Ore Spawnpoint 32 Saronite'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Storm Peaks Ore Spawnpoint 32 Rich Saronite'),
+(@GUID3+31,@POOL+31,@CHANCE3, 'Storm Peaks Ore Spawnpoint 32 Titanium'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Storm Peaks Ore Spawnpoint 33 Saronite'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Storm Peaks Ore Spawnpoint 33 Rich Saronite'),
+(@GUID3+32,@POOL+32,@CHANCE3, 'Storm Peaks Ore Spawnpoint 33 Titanium'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Storm Peaks Ore Spawnpoint 34 Saronite'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Storm Peaks Ore Spawnpoint 34 Rich Saronite'),
+(@GUID3+33,@POOL+33,@CHANCE3, 'Storm Peaks Ore Spawnpoint 34 Titanium'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Storm Peaks Ore Spawnpoint 35 Saronite'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Storm Peaks Ore Spawnpoint 35 Rich Saronite'),
+(@GUID3+34,@POOL+34,@CHANCE3, 'Storm Peaks Ore Spawnpoint 35 Titanium'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Storm Peaks Ore Spawnpoint 36 Saronite'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Storm Peaks Ore Spawnpoint 36 Rich Saronite'),
+(@GUID3+35,@POOL+35,@CHANCE3, 'Storm Peaks Ore Spawnpoint 36 Titanium'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Storm Peaks Ore Spawnpoint 37 Saronite'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Storm Peaks Ore Spawnpoint 37 Rich Saronite'),
+(@GUID3+36,@POOL+36,@CHANCE3, 'Storm Peaks Ore Spawnpoint 37 Titanium'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Storm Peaks Ore Spawnpoint 38 Saronite'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Storm Peaks Ore Spawnpoint 38 Rich Saronite'),
+(@GUID3+37,@POOL+37,@CHANCE3, 'Storm Peaks Ore Spawnpoint 38 Titanium'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Storm Peaks Ore Spawnpoint 39 Saronite'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Storm Peaks Ore Spawnpoint 39 Rich Saronite'),
+(@GUID3+38,@POOL+38,@CHANCE3, 'Storm Peaks Ore Spawnpoint 39 Titanium'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Storm Peaks Ore Spawnpoint 40 Saronite'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Storm Peaks Ore Spawnpoint 40 Rich Saronite'),
+(@GUID3+39,@POOL+39,@CHANCE3, 'Storm Peaks Ore Spawnpoint 40 Titanium'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Storm Peaks Ore Spawnpoint 41 Saronite'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Storm Peaks Ore Spawnpoint 41 Rich Saronite'),
+(@GUID3+40,@POOL+40,@CHANCE3, 'Storm Peaks Ore Spawnpoint 41 Titanium'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Storm Peaks Ore Spawnpoint 42 Saronite'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Storm Peaks Ore Spawnpoint 42 Rich Saronite'),
+(@GUID3+41,@POOL+41,@CHANCE3, 'Storm Peaks Ore Spawnpoint 42 Titanium'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Storm Peaks Ore Spawnpoint 43 Saronite'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Storm Peaks Ore Spawnpoint 43 Rich Saronite'),
+(@GUID3+42,@POOL+42,@CHANCE3, 'Storm Peaks Ore Spawnpoint 43 Titanium'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Storm Peaks Ore Spawnpoint 44 Saronite'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Storm Peaks Ore Spawnpoint 44 Rich Saronite'),
+(@GUID3+43,@POOL+43,@CHANCE3, 'Storm Peaks Ore Spawnpoint 44 Titanium'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Storm Peaks Ore Spawnpoint 45 Saronite'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Storm Peaks Ore Spawnpoint 45 Rich Saronite'),
+(@GUID3+44,@POOL+44,@CHANCE3, 'Storm Peaks Ore Spawnpoint 45 Titanium'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Storm Peaks Ore Spawnpoint 46 Saronite'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Storm Peaks Ore Spawnpoint 46 Rich Saronite'),
+(@GUID3+45,@POOL+45,@CHANCE3, 'Storm Peaks Ore Spawnpoint 46 Titanium'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Storm Peaks Ore Spawnpoint 47 Saronite'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Storm Peaks Ore Spawnpoint 47 Rich Saronite'),
+(@GUID3+46,@POOL+46,@CHANCE3, 'Storm Peaks Ore Spawnpoint 47 Titanium'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Storm Peaks Ore Spawnpoint 48 Saronite'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Storm Peaks Ore Spawnpoint 48 Rich Saronite'),
+(@GUID3+47,@POOL+47,@CHANCE3, 'Storm Peaks Ore Spawnpoint 48 Titanium'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Storm Peaks Ore Spawnpoint 49 Saronite'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Storm Peaks Ore Spawnpoint 49 Rich Saronite'),
+(@GUID3+48,@POOL+48,@CHANCE3, 'Storm Peaks Ore Spawnpoint 49 Titanium'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Storm Peaks Ore Spawnpoint 50 Saronite'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Storm Peaks Ore Spawnpoint 50 Rich Saronite'),
+(@GUID3+49,@POOL+49,@CHANCE3, 'Storm Peaks Ore Spawnpoint 50 Titanium'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Storm Peaks Ore Spawnpoint 51 Saronite'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Storm Peaks Ore Spawnpoint 51 Rich Saronite'),
+(@GUID3+50,@POOL+50,@CHANCE3, 'Storm Peaks Ore Spawnpoint 51 Titanium'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Storm Peaks Ore Spawnpoint 52 Saronite'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Storm Peaks Ore Spawnpoint 52 Rich Saronite'),
+(@GUID3+51,@POOL+51,@CHANCE3, 'Storm Peaks Ore Spawnpoint 52 Titanium'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Storm Peaks Ore Spawnpoint 53 Saronite'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Storm Peaks Ore Spawnpoint 53 Rich Saronite'),
+(@GUID3+52,@POOL+52,@CHANCE3, 'Storm Peaks Ore Spawnpoint 53 Titanium'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Storm Peaks Ore Spawnpoint 54 Saronite'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Storm Peaks Ore Spawnpoint 54 Rich Saronite'),
+(@GUID3+53,@POOL+53,@CHANCE3, 'Storm Peaks Ore Spawnpoint 54 Titanium'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Storm Peaks Ore Spawnpoint 55 Saronite'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Storm Peaks Ore Spawnpoint 55 Rich Saronite'),
+(@GUID3+54,@POOL+54,@CHANCE3, 'Storm Peaks Ore Spawnpoint 55 Titanium'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Storm Peaks Ore Spawnpoint 56 Saronite'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Storm Peaks Ore Spawnpoint 56 Rich Saronite'),
+(@GUID3+55,@POOL+55,@CHANCE3, 'Storm Peaks Ore Spawnpoint 56 Titanium'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Storm Peaks Ore Spawnpoint 57 Saronite'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Storm Peaks Ore Spawnpoint 57 Rich Saronite'),
+(@GUID3+56,@POOL+56,@CHANCE3, 'Storm Peaks Ore Spawnpoint 57 Titanium'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Storm Peaks Ore Spawnpoint 58 Saronite'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Storm Peaks Ore Spawnpoint 58 Rich Saronite'),
+(@GUID3+57,@POOL+57,@CHANCE3, 'Storm Peaks Ore Spawnpoint 58 Titanium'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Storm Peaks Ore Spawnpoint 59 Saronite'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Storm Peaks Ore Spawnpoint 59 Rich Saronite'),
+(@GUID3+58,@POOL+58,@CHANCE3, 'Storm Peaks Ore Spawnpoint 59 Titanium'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Storm Peaks Ore Spawnpoint 60 Saronite'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Storm Peaks Ore Spawnpoint 60 Rich Saronite'),
+(@GUID3+59,@POOL+59,@CHANCE3, 'Storm Peaks Ore Spawnpoint 60 Titanium'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Storm Peaks Ore Spawnpoint 61 Saronite'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Storm Peaks Ore Spawnpoint 61 Rich Saronite'),
+(@GUID3+60,@POOL+60,@CHANCE3, 'Storm Peaks Ore Spawnpoint 61 Titanium'),
+(@GUID1+61,@POOL+61,@CHANCE1, 'Storm Peaks Ore Spawnpoint 62 Saronite'),
+(@GUID2+61,@POOL+61,@CHANCE2, 'Storm Peaks Ore Spawnpoint 62 Rich Saronite'),
+(@GUID3+61,@POOL+61,@CHANCE3, 'Storm Peaks Ore Spawnpoint 62 Titanium'),
+(@GUID1+62,@POOL+62,@CHANCE1, 'Storm Peaks Ore Spawnpoint 63 Saronite'),
+(@GUID2+62,@POOL+62,@CHANCE2, 'Storm Peaks Ore Spawnpoint 63 Rich Saronite'),
+(@GUID3+62,@POOL+62,@CHANCE3, 'Storm Peaks Ore Spawnpoint 63 Titanium'),
+(@GUID1+63,@POOL+63,@CHANCE1, 'Storm Peaks Ore Spawnpoint 64 Saronite'),
+(@GUID2+63,@POOL+63,@CHANCE2, 'Storm Peaks Ore Spawnpoint 64 Rich Saronite'),
+(@GUID3+63,@POOL+63,@CHANCE3, 'Storm Peaks Ore Spawnpoint 64 Titanium'),
+(@GUID1+64,@POOL+64,@CHANCE1, 'Storm Peaks Ore Spawnpoint 65 Saronite'),
+(@GUID2+64,@POOL+64,@CHANCE2, 'Storm Peaks Ore Spawnpoint 65 Rich Saronite'),
+(@GUID3+64,@POOL+64,@CHANCE3, 'Storm Peaks Ore Spawnpoint 65 Titanium'),
+(@GUID1+65,@POOL+65,@CHANCE1, 'Storm Peaks Ore Spawnpoint 66 Saronite'),
+(@GUID2+65,@POOL+65,@CHANCE2, 'Storm Peaks Ore Spawnpoint 66 Rich Saronite'),
+(@GUID3+65,@POOL+65,@CHANCE3, 'Storm Peaks Ore Spawnpoint 66 Titanium'),
+(@GUID1+66,@POOL+66,@CHANCE1, 'Storm Peaks Ore Spawnpoint 67 Saronite'),
+(@GUID2+66,@POOL+66,@CHANCE2, 'Storm Peaks Ore Spawnpoint 67 Rich Saronite'),
+(@GUID3+66,@POOL+66,@CHANCE3, 'Storm Peaks Ore Spawnpoint 67 Titanium'),
+(@GUID1+67,@POOL+67,@CHANCE1, 'Storm Peaks Ore Spawnpoint 68 Saronite'),
+(@GUID2+67,@POOL+67,@CHANCE2, 'Storm Peaks Ore Spawnpoint 68 Rich Saronite'),
+(@GUID3+67,@POOL+67,@CHANCE3, 'Storm Peaks Ore Spawnpoint 68 Titanium'),
+(@GUID1+68,@POOL+68,@CHANCE1, 'Storm Peaks Ore Spawnpoint 69 Saronite'),
+(@GUID2+68,@POOL+68,@CHANCE2, 'Storm Peaks Ore Spawnpoint 69 Rich Saronite'),
+(@GUID3+68,@POOL+68,@CHANCE3, 'Storm Peaks Ore Spawnpoint 69 Titanium'),
+(@GUID1+69,@POOL+69,@CHANCE1, 'Storm Peaks Ore Spawnpoint 70 Saronite'),
+(@GUID2+69,@POOL+69,@CHANCE2, 'Storm Peaks Ore Spawnpoint 70 Rich Saronite'),
+(@GUID3+69,@POOL+69,@CHANCE3, 'Storm Peaks Ore Spawnpoint 70 Titanium'),
+(@GUID1+70,@POOL+70,@CHANCE1, 'Storm Peaks Ore Spawnpoint 71 Saronite'),
+(@GUID2+70,@POOL+70,@CHANCE2, 'Storm Peaks Ore Spawnpoint 71 Rich Saronite'),
+(@GUID3+70,@POOL+70,@CHANCE3, 'Storm Peaks Ore Spawnpoint 71 Titanium'),
+(@GUID1+71,@POOL+71,@CHANCE1, 'Storm Peaks Ore Spawnpoint 72 Saronite'),
+(@GUID2+71,@POOL+71,@CHANCE2, 'Storm Peaks Ore Spawnpoint 72 Rich Saronite'),
+(@GUID3+71,@POOL+71,@CHANCE3, 'Storm Peaks Ore Spawnpoint 72 Titanium'),
+(@GUID1+72,@POOL+72,@CHANCE1, 'Storm Peaks Ore Spawnpoint 73 Saronite'),
+(@GUID2+72,@POOL+72,@CHANCE2, 'Storm Peaks Ore Spawnpoint 73 Rich Saronite'),
+(@GUID3+72,@POOL+72,@CHANCE3, 'Storm Peaks Ore Spawnpoint 73 Titanium'),
+(@GUID1+73,@POOL+73,@CHANCE1, 'Storm Peaks Ore Spawnpoint 74 Saronite'),
+(@GUID2+73,@POOL+73,@CHANCE2, 'Storm Peaks Ore Spawnpoint 74 Rich Saronite'),
+(@GUID3+73,@POOL+73,@CHANCE3, 'Storm Peaks Ore Spawnpoint 74 Titanium'),
+(@GUID1+74,@POOL+74,@CHANCE1, 'Storm Peaks Ore Spawnpoint 75 Saronite'),
+(@GUID2+74,@POOL+74,@CHANCE2, 'Storm Peaks Ore Spawnpoint 75 Rich Saronite'),
+(@GUID3+74,@POOL+74,@CHANCE3, 'Storm Peaks Ore Spawnpoint 75 Titanium'),
+(@GUID1+75,@POOL+75,@CHANCE1, 'Storm Peaks Ore Spawnpoint 76 Saronite'),
+(@GUID2+75,@POOL+75,@CHANCE2, 'Storm Peaks Ore Spawnpoint 76 Rich Saronite'),
+(@GUID3+75,@POOL+75,@CHANCE3, 'Storm Peaks Ore Spawnpoint 76 Titanium'),
+(@GUID1+76,@POOL+76,@CHANCE1, 'Storm Peaks Ore Spawnpoint 77 Saronite'),
+(@GUID2+76,@POOL+76,@CHANCE2, 'Storm Peaks Ore Spawnpoint 77 Rich Saronite'),
+(@GUID3+76,@POOL+76,@CHANCE3, 'Storm Peaks Ore Spawnpoint 77 Titanium'),
+(@GUID1+77,@POOL+77,@CHANCE1, 'Storm Peaks Ore Spawnpoint 78 Saronite'),
+(@GUID2+77,@POOL+77,@CHANCE2, 'Storm Peaks Ore Spawnpoint 78 Rich Saronite'),
+(@GUID3+77,@POOL+77,@CHANCE3, 'Storm Peaks Ore Spawnpoint 78 Titanium'),
+(@GUID1+78,@POOL+78,@CHANCE1, 'Storm Peaks Ore Spawnpoint 79 Saronite'),
+(@GUID2+78,@POOL+78,@CHANCE2, 'Storm Peaks Ore Spawnpoint 79 Rich Saronite'),
+(@GUID3+78,@POOL+78,@CHANCE3, 'Storm Peaks Ore Spawnpoint 79 Titanium'),
+(@GUID1+79,@POOL+79,@CHANCE1, 'Storm Peaks Ore Spawnpoint 80 Saronite'),
+(@GUID2+79,@POOL+79,@CHANCE2, 'Storm Peaks Ore Spawnpoint 80 Rich Saronite'),
+(@GUID3+79,@POOL+79,@CHANCE3, 'Storm Peaks Ore Spawnpoint 80 Titanium'),
+(@GUID1+80,@POOL+80,@CHANCE1, 'Storm Peaks Ore Spawnpoint 81 Saronite'),
+(@GUID2+80,@POOL+80,@CHANCE2, 'Storm Peaks Ore Spawnpoint 81 Rich Saronite'),
+(@GUID3+80,@POOL+80,@CHANCE3, 'Storm Peaks Ore Spawnpoint 81 Titanium'),
+(@GUID1+81,@POOL+81,@CHANCE1, 'Storm Peaks Ore Spawnpoint 82 Saronite'),
+(@GUID2+81,@POOL+81,@CHANCE2, 'Storm Peaks Ore Spawnpoint 82 Rich Saronite'),
+(@GUID3+81,@POOL+81,@CHANCE3, 'Storm Peaks Ore Spawnpoint 82 Titanium'),
+(@GUID1+82,@POOL+82,@CHANCE1, 'Storm Peaks Ore Spawnpoint 83 Saronite'),
+(@GUID2+82,@POOL+82,@CHANCE2, 'Storm Peaks Ore Spawnpoint 83 Rich Saronite'),
+(@GUID3+82,@POOL+82,@CHANCE3, 'Storm Peaks Ore Spawnpoint 83 Titanium'),
+(@GUID1+83,@POOL+83,@CHANCE1, 'Storm Peaks Ore Spawnpoint 84 Saronite'),
+(@GUID2+83,@POOL+83,@CHANCE2, 'Storm Peaks Ore Spawnpoint 84 Rich Saronite'),
+(@GUID3+83,@POOL+83,@CHANCE3, 'Storm Peaks Ore Spawnpoint 84 Titanium'),
+(@GUID1+84,@POOL+84,@CHANCE1, 'Storm Peaks Ore Spawnpoint 85 Saronite'),
+(@GUID2+84,@POOL+84,@CHANCE2, 'Storm Peaks Ore Spawnpoint 85 Rich Saronite'),
+(@GUID3+84,@POOL+84,@CHANCE3, 'Storm Peaks Ore Spawnpoint 85 Titanium'),
+(@GUID1+85,@POOL+85,@CHANCE1, 'Storm Peaks Ore Spawnpoint 86 Saronite'),
+(@GUID2+85,@POOL+85,@CHANCE2, 'Storm Peaks Ore Spawnpoint 86 Rich Saronite'),
+(@GUID3+85,@POOL+85,@CHANCE3, 'Storm Peaks Ore Spawnpoint 86 Titanium'),
+(@GUID1+86,@POOL+86,@CHANCE1, 'Storm Peaks Ore Spawnpoint 87 Saronite'),
+(@GUID2+86,@POOL+86,@CHANCE2, 'Storm Peaks Ore Spawnpoint 87 Rich Saronite'),
+(@GUID3+86,@POOL+86,@CHANCE3, 'Storm Peaks Ore Spawnpoint 87 Titanium'),
+(@GUID1+87,@POOL+87,@CHANCE1, 'Storm Peaks Ore Spawnpoint 88 Saronite'),
+(@GUID2+87,@POOL+87,@CHANCE2, 'Storm Peaks Ore Spawnpoint 88 Rich Saronite'),
+(@GUID3+87,@POOL+87,@CHANCE3, 'Storm Peaks Ore Spawnpoint 88 Titanium'),
+(@GUID1+88,@POOL+88,@CHANCE1, 'Storm Peaks Ore Spawnpoint 89 Saronite'),
+(@GUID2+88,@POOL+88,@CHANCE2, 'Storm Peaks Ore Spawnpoint 89 Rich Saronite'),
+(@GUID3+88,@POOL+88,@CHANCE3, 'Storm Peaks Ore Spawnpoint 89 Titanium'),
+(@GUID1+89,@POOL+89,@CHANCE1, 'Storm Peaks Ore Spawnpoint 90 Saronite'),
+(@GUID2+89,@POOL+89,@CHANCE2, 'Storm Peaks Ore Spawnpoint 90 Rich Saronite'),
+(@GUID3+89,@POOL+89,@CHANCE3, 'Storm Peaks Ore Spawnpoint 90 Titanium'),
+(@GUID1+90,@POOL+90,@CHANCE1, 'Storm Peaks Ore Spawnpoint 91 Saronite'),
+(@GUID2+90,@POOL+90,@CHANCE2, 'Storm Peaks Ore Spawnpoint 91 Rich Saronite'),
+(@GUID3+90,@POOL+90,@CHANCE3, 'Storm Peaks Ore Spawnpoint 91 Titanium'),
+(@GUID1+91,@POOL+91,@CHANCE1, 'Storm Peaks Ore Spawnpoint 92 Saronite'),
+(@GUID2+91,@POOL+91,@CHANCE2, 'Storm Peaks Ore Spawnpoint 92 Rich Saronite'),
+(@GUID3+91,@POOL+91,@CHANCE3, 'Storm Peaks Ore Spawnpoint 92 Titanium'),
+(@GUID1+92,@POOL+92,@CHANCE1, 'Storm Peaks Ore Spawnpoint 93 Saronite'),
+(@GUID2+92,@POOL+92,@CHANCE2, 'Storm Peaks Ore Spawnpoint 93 Rich Saronite'),
+(@GUID3+92,@POOL+92,@CHANCE3, 'Storm Peaks Ore Spawnpoint 93 Titanium'),
+(@GUID1+93,@POOL+93,@CHANCE1, 'Storm Peaks Ore Spawnpoint 94 Saronite'),
+(@GUID2+93,@POOL+93,@CHANCE2, 'Storm Peaks Ore Spawnpoint 94 Rich Saronite'),
+(@GUID3+93,@POOL+93,@CHANCE3, 'Storm Peaks Ore Spawnpoint 94 Titanium'),
+(@GUID1+94,@POOL+94,@CHANCE1, 'Storm Peaks Ore Spawnpoint 95 Saronite'),
+(@GUID2+94,@POOL+94,@CHANCE2, 'Storm Peaks Ore Spawnpoint 95 Rich Saronite'),
+(@GUID3+94,@POOL+94,@CHANCE3, 'Storm Peaks Ore Spawnpoint 95 Titanium'),
+(@GUID1+95,@POOL+95,@CHANCE1, 'Storm Peaks Ore Spawnpoint 96 Saronite'),
+(@GUID2+95,@POOL+95,@CHANCE2, 'Storm Peaks Ore Spawnpoint 96 Rich Saronite'),
+(@GUID3+95,@POOL+95,@CHANCE3, 'Storm Peaks Ore Spawnpoint 96 Titanium'),
+(@GUID1+96,@POOL+96,@CHANCE1, 'Storm Peaks Ore Spawnpoint 97 Saronite'),
+(@GUID2+96,@POOL+96,@CHANCE2, 'Storm Peaks Ore Spawnpoint 97 Rich Saronite'),
+(@GUID3+96,@POOL+96,@CHANCE3, 'Storm Peaks Ore Spawnpoint 97 Titanium'),
+(@GUID1+97,@POOL+97,@CHANCE1, 'Storm Peaks Ore Spawnpoint 98 Saronite'),
+(@GUID2+97,@POOL+97,@CHANCE2, 'Storm Peaks Ore Spawnpoint 98 Rich Saronite'),
+(@GUID3+97,@POOL+97,@CHANCE3, 'Storm Peaks Ore Spawnpoint 98 Titanium'),
+(@GUID1+98,@POOL+98,@CHANCE1, 'Storm Peaks Ore Spawnpoint 99 Saronite'),
+(@GUID2+98,@POOL+98,@CHANCE2, 'Storm Peaks Ore Spawnpoint 99 Rich Saronite'),
+(@GUID3+98,@POOL+98,@CHANCE3, 'Storm Peaks Ore Spawnpoint 99 Titanium'),
+(@GUID1+99,@POOL+99,@CHANCE1, 'Storm Peaks Ore Spawnpoint 100 Saronite'),
+(@GUID2+99,@POOL+99,@CHANCE2, 'Storm Peaks Ore Spawnpoint 100 Rich Saronite'),
+(@GUID3+99,@POOL+99,@CHANCE3, 'Storm Peaks Ore Spawnpoint 100 Titanium'),
+(@GUID1+100,@POOL+100,@CHANCE1, 'Storm Peaks Ore Spawnpoint 101 Saronite'),
+(@GUID2+100,@POOL+100,@CHANCE2, 'Storm Peaks Ore Spawnpoint 101 Rich Saronite'),
+(@GUID3+100,@POOL+100,@CHANCE3, 'Storm Peaks Ore Spawnpoint 101 Titanium'),
+(@GUID1+101,@POOL+101,@CHANCE1, 'Storm Peaks Ore Spawnpoint 102 Saronite'),
+(@GUID2+101,@POOL+101,@CHANCE2, 'Storm Peaks Ore Spawnpoint 102 Rich Saronite'),
+(@GUID3+101,@POOL+101,@CHANCE3, 'Storm Peaks Ore Spawnpoint 102 Titanium'),
+(@GUID1+102,@POOL+102,@CHANCE1, 'Storm Peaks Ore Spawnpoint 103 Saronite'),
+(@GUID2+102,@POOL+102,@CHANCE2, 'Storm Peaks Ore Spawnpoint 103 Rich Saronite'),
+(@GUID3+102,@POOL+102,@CHANCE3, 'Storm Peaks Ore Spawnpoint 103 Titanium'),
+(@GUID1+103,@POOL+103,@CHANCE1, 'Storm Peaks Ore Spawnpoint 104 Saronite'),
+(@GUID2+103,@POOL+103,@CHANCE2, 'Storm Peaks Ore Spawnpoint 104 Rich Saronite'),
+(@GUID3+103,@POOL+103,@CHANCE3, 'Storm Peaks Ore Spawnpoint 104 Titanium'),
+(@GUID1+104,@POOL+104,@CHANCE1, 'Storm Peaks Ore Spawnpoint 105 Saronite'),
+(@GUID2+104,@POOL+104,@CHANCE2, 'Storm Peaks Ore Spawnpoint 105 Rich Saronite'),
+(@GUID3+104,@POOL+104,@CHANCE3, 'Storm Peaks Ore Spawnpoint 105 Titanium'),
+(@GUID1+105,@POOL+105,@CHANCE1, 'Storm Peaks Ore Spawnpoint 106 Saronite'),
+(@GUID2+105,@POOL+105,@CHANCE2, 'Storm Peaks Ore Spawnpoint 106 Rich Saronite'),
+(@GUID3+105,@POOL+105,@CHANCE3, 'Storm Peaks Ore Spawnpoint 106 Titanium'),
+(@GUID1+106,@POOL+106,@CHANCE1, 'Storm Peaks Ore Spawnpoint 107 Saronite'),
+(@GUID2+106,@POOL+106,@CHANCE2, 'Storm Peaks Ore Spawnpoint 107 Rich Saronite'),
+(@GUID3+106,@POOL+106,@CHANCE3, 'Storm Peaks Ore Spawnpoint 107 Titanium'),
+(@GUID1+107,@POOL+107,@CHANCE1, 'Storm Peaks Ore Spawnpoint 108 Saronite'),
+(@GUID2+107,@POOL+107,@CHANCE2, 'Storm Peaks Ore Spawnpoint 108 Rich Saronite'),
+(@GUID3+107,@POOL+107,@CHANCE3, 'Storm Peaks Ore Spawnpoint 108 Titanium'),
+(@GUID1+108,@POOL+108,@CHANCE1, 'Storm Peaks Ore Spawnpoint 109 Saronite'),
+(@GUID2+108,@POOL+108,@CHANCE2, 'Storm Peaks Ore Spawnpoint 109 Rich Saronite'),
+(@GUID3+108,@POOL+108,@CHANCE3, 'Storm Peaks Ore Spawnpoint 109 Titanium'),
+(@GUID1+109,@POOL+109,@CHANCE1, 'Storm Peaks Ore Spawnpoint 110 Saronite'),
+(@GUID2+109,@POOL+109,@CHANCE2, 'Storm Peaks Ore Spawnpoint 110 Rich Saronite'),
+(@GUID3+109,@POOL+109,@CHANCE3, 'Storm Peaks Ore Spawnpoint 110 Titanium');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@RANGE;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Storm Peaks Ore Spawnpoint 1'),
+(@POOL+1,1, 'Storm Peaks Ore Spawnpoint 2'),
+(@POOL+2,1, 'Storm Peaks Ore Spawnpoint 3'),
+(@POOL+3,1, 'Storm Peaks Ore Spawnpoint 4'),
+(@POOL+4,1, 'Storm Peaks Ore Spawnpoint 5'),
+(@POOL+5,1, 'Storm Peaks Ore Spawnpoint 6'),
+(@POOL+6,1, 'Storm Peaks Ore Spawnpoint 7'),
+(@POOL+7,1, 'Storm Peaks Ore Spawnpoint 8'),
+(@POOL+8,1, 'Storm Peaks Ore Spawnpoint 9'),
+(@POOL+9,1, 'Storm Peaks Ore Spawnpoint 10'),
+(@POOL+10,1, 'Storm Peaks Ore Spawnpoint 11'),
+(@POOL+11,1, 'Storm Peaks Ore Spawnpoint 12'),
+(@POOL+12,1, 'Storm Peaks Ore Spawnpoint 13'),
+(@POOL+13,1, 'Storm Peaks Ore Spawnpoint 14'),
+(@POOL+14,1, 'Storm Peaks Ore Spawnpoint 15'),
+(@POOL+15,1, 'Storm Peaks Ore Spawnpoint 16'),
+(@POOL+16,1, 'Storm Peaks Ore Spawnpoint 17'),
+(@POOL+17,1, 'Storm Peaks Ore Spawnpoint 18'),
+(@POOL+18,1, 'Storm Peaks Ore Spawnpoint 19'),
+(@POOL+19,1, 'Storm Peaks Ore Spawnpoint 20'),
+(@POOL+20,1, 'Storm Peaks Ore Spawnpoint 21'),
+(@POOL+21,1, 'Storm Peaks Ore Spawnpoint 22'),
+(@POOL+22,1, 'Storm Peaks Ore Spawnpoint 23'),
+(@POOL+23,1, 'Storm Peaks Ore Spawnpoint 24'),
+(@POOL+24,1, 'Storm Peaks Ore Spawnpoint 25'),
+(@POOL+25,1, 'Storm Peaks Ore Spawnpoint 26'),
+(@POOL+26,1, 'Storm Peaks Ore Spawnpoint 27'),
+(@POOL+27,1, 'Storm Peaks Ore Spawnpoint 28'),
+(@POOL+28,1, 'Storm Peaks Ore Spawnpoint 29'),
+(@POOL+29,1, 'Storm Peaks Ore Spawnpoint 30'),
+(@POOL+30,1, 'Storm Peaks Ore Spawnpoint 31'),
+(@POOL+31,1, 'Storm Peaks Ore Spawnpoint 32'),
+(@POOL+32,1, 'Storm Peaks Ore Spawnpoint 33'),
+(@POOL+33,1, 'Storm Peaks Ore Spawnpoint 34'),
+(@POOL+34,1, 'Storm Peaks Ore Spawnpoint 35'),
+(@POOL+35,1, 'Storm Peaks Ore Spawnpoint 36'),
+(@POOL+36,1, 'Storm Peaks Ore Spawnpoint 37'),
+(@POOL+37,1, 'Storm Peaks Ore Spawnpoint 38'),
+(@POOL+38,1, 'Storm Peaks Ore Spawnpoint 39'),
+(@POOL+39,1, 'Storm Peaks Ore Spawnpoint 40'),
+(@POOL+40,1, 'Storm Peaks Ore Spawnpoint 41'),
+(@POOL+41,1, 'Storm Peaks Ore Spawnpoint 42'),
+(@POOL+42,1, 'Storm Peaks Ore Spawnpoint 43'),
+(@POOL+43,1, 'Storm Peaks Ore Spawnpoint 44'),
+(@POOL+44,1, 'Storm Peaks Ore Spawnpoint 45'),
+(@POOL+45,1, 'Storm Peaks Ore Spawnpoint 46'),
+(@POOL+46,1, 'Storm Peaks Ore Spawnpoint 47'),
+(@POOL+47,1, 'Storm Peaks Ore Spawnpoint 48'),
+(@POOL+48,1, 'Storm Peaks Ore Spawnpoint 49'),
+(@POOL+49,1, 'Storm Peaks Ore Spawnpoint 50'),
+(@POOL+50,1, 'Storm Peaks Ore Spawnpoint 51'),
+(@POOL+51,1, 'Storm Peaks Ore Spawnpoint 52'),
+(@POOL+52,1, 'Storm Peaks Ore Spawnpoint 53'),
+(@POOL+53,1, 'Storm Peaks Ore Spawnpoint 54'),
+(@POOL+54,1, 'Storm Peaks Ore Spawnpoint 55'),
+(@POOL+55,1, 'Storm Peaks Ore Spawnpoint 56'),
+(@POOL+56,1, 'Storm Peaks Ore Spawnpoint 57'),
+(@POOL+57,1, 'Storm Peaks Ore Spawnpoint 58'),
+(@POOL+58,1, 'Storm Peaks Ore Spawnpoint 59'),
+(@POOL+59,1, 'Storm Peaks Ore Spawnpoint 60'),
+(@POOL+60,1, 'Storm Peaks Ore Spawnpoint 61'),
+(@POOL+61,1, 'Storm Peaks Ore Spawnpoint 62'),
+(@POOL+62,1, 'Storm Peaks Ore Spawnpoint 63'),
+(@POOL+63,1, 'Storm Peaks Ore Spawnpoint 64'),
+(@POOL+64,1, 'Storm Peaks Ore Spawnpoint 65'),
+(@POOL+65,1, 'Storm Peaks Ore Spawnpoint 66'),
+(@POOL+66,1, 'Storm Peaks Ore Spawnpoint 67'),
+(@POOL+67,1, 'Storm Peaks Ore Spawnpoint 68'),
+(@POOL+68,1, 'Storm Peaks Ore Spawnpoint 69'),
+(@POOL+69,1, 'Storm Peaks Ore Spawnpoint 70'),
+(@POOL+70,1, 'Storm Peaks Ore Spawnpoint 71'),
+(@POOL+71,1, 'Storm Peaks Ore Spawnpoint 72'),
+(@POOL+72,1, 'Storm Peaks Ore Spawnpoint 73'),
+(@POOL+73,1, 'Storm Peaks Ore Spawnpoint 74'),
+(@POOL+74,1, 'Storm Peaks Ore Spawnpoint 75'),
+(@POOL+75,1, 'Storm Peaks Ore Spawnpoint 76'),
+(@POOL+76,1, 'Storm Peaks Ore Spawnpoint 77'),
+(@POOL+77,1, 'Storm Peaks Ore Spawnpoint 78'),
+(@POOL+78,1, 'Storm Peaks Ore Spawnpoint 79'),
+(@POOL+79,1, 'Storm Peaks Ore Spawnpoint 80'),
+(@POOL+80,1, 'Storm Peaks Ore Spawnpoint 81'),
+(@POOL+81,1, 'Storm Peaks Ore Spawnpoint 82'),
+(@POOL+82,1, 'Storm Peaks Ore Spawnpoint 83'),
+(@POOL+83,1, 'Storm Peaks Ore Spawnpoint 84'),
+(@POOL+84,1, 'Storm Peaks Ore Spawnpoint 85'),
+(@POOL+85,1, 'Storm Peaks Ore Spawnpoint 86'),
+(@POOL+86,1, 'Storm Peaks Ore Spawnpoint 87'),
+(@POOL+87,1, 'Storm Peaks Ore Spawnpoint 88'),
+(@POOL+88,1, 'Storm Peaks Ore Spawnpoint 89'),
+(@POOL+89,1, 'Storm Peaks Ore Spawnpoint 90'),
+(@POOL+90,1, 'Storm Peaks Ore Spawnpoint 91'),
+(@POOL+91,1, 'Storm Peaks Ore Spawnpoint 92'),
+(@POOL+92,1, 'Storm Peaks Ore Spawnpoint 93'),
+(@POOL+93,1, 'Storm Peaks Ore Spawnpoint 94'),
+(@POOL+94,1, 'Storm Peaks Ore Spawnpoint 95'),
+(@POOL+95,1, 'Storm Peaks Ore Spawnpoint 96'),
+(@POOL+96,1, 'Storm Peaks Ore Spawnpoint 97'),
+(@POOL+97,1, 'Storm Peaks Ore Spawnpoint 98'),
+(@POOL+98,1, 'Storm Peaks Ore Spawnpoint 99'),
+(@POOL+99,1, 'Storm Peaks Ore Spawnpoint 100'),
+(@POOL+100,1, 'Storm Peaks Ore Spawnpoint 101'),
+(@POOL+101,1, 'Storm Peaks Ore Spawnpoint 102'),
+(@POOL+102,1, 'Storm Peaks Ore Spawnpoint 103'),
+(@POOL+103,1, 'Storm Peaks Ore Spawnpoint 104'),
+(@POOL+104,1, 'Storm Peaks Ore Spawnpoint 105'),
+(@POOL+105,1, 'Storm Peaks Ore Spawnpoint 106'),
+(@POOL+106,1, 'Storm Peaks Ore Spawnpoint 107'),
+(@POOL+107,1, 'Storm Peaks Ore Spawnpoint 108'),
+(@POOL+108,1, 'Storm Peaks Ore Spawnpoint 109'),
+(@POOL+109,1, 'Storm Peaks Ore Spawnpoint 110');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Storm Peaks Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@RANGE;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 61'),
+(@POOL+61,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 62'),
+(@POOL+62,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 63'),
+(@POOL+63,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 64'),
+(@POOL+64,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 65'),
+(@POOL+65,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 66'),
+(@POOL+66,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 67'),
+(@POOL+67,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 68'),
+(@POOL+68,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 69'),
+(@POOL+69,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 70'),
+(@POOL+70,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 71'),
+(@POOL+71,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 72'),
+(@POOL+72,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 73'),
+(@POOL+73,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 74'),
+(@POOL+74,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 75'),
+(@POOL+75,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 76'),
+(@POOL+76,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 77'),
+(@POOL+77,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 78'),
+(@POOL+78,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 79'),
+(@POOL+79,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 80'),
+(@POOL+80,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 81'),
+(@POOL+81,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 82'),
+(@POOL+82,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 83'),
+(@POOL+83,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 84'),
+(@POOL+84,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 85'),
+(@POOL+85,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 86'),
+(@POOL+86,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 87'),
+(@POOL+87,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 88'),
+(@POOL+88,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 89'),
+(@POOL+89,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 90'),
+(@POOL+90,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 91'),
+(@POOL+91,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 92'),
+(@POOL+92,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 93'),
+(@POOL+93,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 94'),
+(@POOL+94,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 95'),
+(@POOL+95,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 96'),
+(@POOL+96,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 97'),
+(@POOL+97,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 98'),
+(@POOL+98,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 99'),
+(@POOL+99,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 100'),
+(@POOL+100,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 101'),
+(@POOL+101,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 102'),
+(@POOL+102,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 103'),
+(@POOL+103,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 104'),
+(@POOL+104,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 105'),
+(@POOL+105,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 106'),
+(@POOL+106,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 107'),
+(@POOL+107,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 108'),
+(@POOL+108,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 109'),
+(@POOL+109,@MOTHER,0, 'Storm Peaks Ore Spawnpoint 110');
+-- POOL 2 for Cobalt
+-- Cobalt & Rich Cobalt Deposits Storm Peaks
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(@GUID1+239,189978,571,1,1,6749.401,-3469.023,563.5495,-1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID2+239,189979,571,1,1,6749.401,-3469.023,563.5495,-1.30900,0,0,0,1,@TIMER,255,1);
+-- Pooling
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+239,@POOL+239,@CHANCE1, 'Storm Peaks Ore Spawnpoint 1 Cobalt'),
+(@GUID2+239,@POOL+239,@CHANCE2+@CHANCE3, 'Storm Peaks Ore Spawnpoint 1 Rich Cobalt');
+-- Add each pool to pool template
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+239,1, 'Storm Peaks Ore Spawnpoint 240');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER2;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER2,@ACTIVE, 'Storm Peaks Ore Mother pool 2');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+239,@MOTHER2,0, 'Storm Peaks Ore Spawnpoint 240');
+
+-- -----------------------------------
+-- -- Fixup ore spawns for Icecrown --
+-- -----------------------------------
+SET @RANGE := 400;
+SET @GUID1 := 163200;
+SET @GUID2 := @GUID1 + @RANGE;
+SET @GUID3 := @GUID2 + @RANGE;
+SET @POOL := 11400;
+SET @LASTGUID := 234;
+SET @CHANCE1 := 75;
+SET @CHANCE2 := 15;
+SET @CHANCE3 := 10;
+SET @MOTHER := 9908;
+SET @ACTIVE := 60; -- Max number of active spawns
+SET @TIMER := 600; -- Respawn timer in seconds
+-- Remove Ore spawns from Icecrown
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 740 AND `position_y` > 535 AND `position_x` > 6220;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 1220 AND `position_y` > 740 AND `position_x` > 6380;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_x` > 5400 AND `position_y` > 1220 AND `position_y` < 2570;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 3360 AND `position_y` > 2570 AND `position_x` > 5600;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` > 3360 AND `position_x` > 6800;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 335 AND `position_y` > -110 AND `position_x` > 6100 AND `position_x` < 6460;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 535 AND `position_y` > 130 AND `position_x` > 6460;
+DELETE FROM `gameobject` WHERE `id` IN (189978,189979,189980,189981,191133) AND `map`=571 AND `position_y` < 3835 AND `position_y` > 3360 AND `position_x` > 6450 AND `position_x` < 6800;
+
+-- Remove old pools
+DELETE FROM `pool_gameobject` WHERE `guid` NOT IN (SELECT `guid` FROM `gameobject`);
+DELETE FROM `pool_template` WHERE `entry` BETWEEN 5448 AND 5616;
+DELETE FROM `pool_template` WHERE `entry`=897;
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN 5448 AND 5616;
+-- Saronite Deposits Icecrown
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@GUID1+0,189980,571,1,1,6674.631,1332.353,299.6001,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID1+1,189980,571,1,1,6939.153,2862.694,435.1407,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID1+2,189980,571,1,1,7980.812,3096.596,635.4854,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID1+3,189980,571,1,1,5636.890,1931.159,517.3533,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID1+4,189980,571,1,1,5665.190,1897.490,519.6750,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+5,189980,571,1,1,5706.650,2046.590,-339.6590,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID1+6,189980,571,1,1,5711.610,2071.070,-340.7400,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID1+7,189980,571,1,1,5749.150,2086.660,-343.5200,-2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID1+8,189980,571,1,1,5753.728,2282.746,533.9716,-1.53589,0,0,0,1,@TIMER,255,1),
+(@GUID1+9,189980,571,1,1,5775.480,2081.830,-342.7420,0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID1+10,189980,571,1,1,5790.740,2214.070,515.1540,1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID1+11,189980,571,1,1,5808.930,2268.290,523.3210,2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID1+12,189980,571,1,1,5826.980,1863.070,-345.8090,1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID1+13,189980,571,1,1,5842.430,1858.810,-345.3000,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID1+14,189980,571,1,1,5843.150,2256.140,520.1550,-1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID1+15,189980,571,1,1,5857.440,1936.720,510.8840,0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID1+16,189980,571,1,1,5890.500,1915.920,-345.9820,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID1+17,189980,571,1,1,5890.500,1915.920,-345.9820,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID1+18,189980,571,1,1,5894.700,1913.140,-345.9370,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID1+19,189980,571,1,1,5914.500,2015.980,516.3390,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+20,189980,571,1,1,5941.548,1912.958,567.5397,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID1+21,189980,571,1,1,5957.890,2517.910,537.2770,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+22,189980,571,1,1,5961.092,2412.068,519.9221,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+23,189980,571,1,1,5967.890,1850.520,630.5570,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID1+24,189980,571,1,1,6038.564,2326.347,514.5131,1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID1+25,189980,571,1,1,6171.915,2015.665,531.4319,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID1+26,189980,571,1,1,6448.210,1897.020,515.3600,0.36652,0,0,0,1,@TIMER,255,1),
+(@GUID1+27,189980,571,1,1,6466.150,137.682,444.7190,2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID1+28,189980,571,1,1,6466.396,648.508,428.8037,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+29,189980,571,1,1,6477.440,2487.120,475.9810,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+30,189980,571,1,1,6481.970,540.381,438.7030,0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID1+31,189980,571,1,1,6482.543,2462.866,468.1175,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+32,189980,571,1,1,6483.739,1237.931,286.9318,1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID1+33,189980,571,1,1,6484.370,294.937,399.8210,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID1+34,189980,571,1,1,6497.030,3510.880,540.2320,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID1+35,189980,571,1,1,6514.270,896.626,290.6450,1.29154,0,0,0,1,@TIMER,255,1),
+(@GUID1+36,189980,571,1,1,6533.500,907.337,294.8920,0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID1+37,189980,571,1,1,6541.251,1011.675,276.9524,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID1+38,189980,571,1,1,6554.230,332.830,411.5670,0.13962,0,0,0,1,@TIMER,255,1),
+(@GUID1+39,189980,571,1,1,6557.070,284.192,401.7890,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID1+40,189980,571,1,1,6559.550,659.112,408.1460,-2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID1+41,189980,571,1,1,6561.430,1050.489,275.1745,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID1+42,189980,571,1,1,6583.151,1267.122,286.0256,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+43,189980,571,1,1,6604.228,1248.473,282.4915,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+44,189980,571,1,1,6608.890,990.280,284.7300,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID1+45,189980,571,1,1,6618.750,356.354,453.1560,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID1+46,189980,571,1,1,6622.904,1252.617,282.5027,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+47,189980,571,1,1,6636.596,3176.859,648.8128,1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID1+48,189980,571,1,1,6640.880,3346.680,677.4100,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+49,189980,571,1,1,6658.340,688.135,410.4380,2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID1+50,189980,571,1,1,6662.220,573.318,406.8580,-0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID1+51,189980,571,1,1,6664.980,615.527,410.0190,-2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID1+52,189980,571,1,1,6672.161,1189.572,273.2596,-2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID1+53,189980,571,1,1,6691.890,1520.673,466.3800,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID1+54,189980,571,1,1,6696.400,743.905,396.9640,-0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID1+55,189980,571,1,1,6710.980,644.300,412.4740,-1.29154,0,0,0,1,@TIMER,255,1),
+(@GUID1+56,189980,571,1,1,6717.320,1228.804,275.0786,-2.86234,0,0,0,1,@TIMER,255,1),
+(@GUID1+57,189980,571,1,1,6725.160,570.259,424.5290,-2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID1+58,189980,571,1,1,6734.880,1458.500,403.8720,0.31416,0,0,0,1,@TIMER,255,1),
+(@GUID1+59,189980,571,1,1,6737.770,586.034,425.3840,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID1+60,189980,571,1,1,6748.570,2727.220,435.5540,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID1+61,189980,571,1,1,6751.800,1325.140,285.5890,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID1+62,189980,571,1,1,6753.930,328.981,442.2290,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+63,189980,571,1,1,6754.170,2342.520,442.6880,-2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID1+64,189980,571,1,1,6754.800,575.615,425.3900,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID1+65,189980,571,1,1,6755.160,1224.160,276.8440,0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID1+66,189980,571,1,1,6755.390,974.467,312.3300,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+67,189980,571,1,1,6756.568,2694.843,427.8352,-2.80998,0,0,0,1,@TIMER,255,1),
+(@GUID1+68,189980,571,1,1,6758.730,585.806,425.6570,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID1+69,189980,571,1,1,6766.010,2936.860,456.1350,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID1+70,189980,571,1,1,6774.690,499.547,410.7330,-0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID1+71,189980,571,1,1,6781.035,1131.430,278.6142,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+72,189980,571,1,1,6789.004,1141.311,277.1633,-1.81514,0,0,0,1,@TIMER,255,1),
+(@GUID1+73,189980,571,1,1,6790.110,449.812,411.4930,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+74,189980,571,1,1,6793.867,924.565,348.8412,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID1+75,189980,571,1,1,6797.174,2369.824,435.4318,-0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID1+76,189980,571,1,1,6804.510,1294.230,281.1890,0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID1+77,189980,571,1,1,6817.340,453.798,470.4500,-3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID1+78,189980,571,1,1,6818.782,2181.032,660.7790,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+79,189980,571,1,1,6824.141,2207.658,654.9231,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID1+80,189980,571,1,1,6830.670,762.702,409.8570,2.12930,0,0,0,1,@TIMER,255,1),
+(@GUID1+81,189980,571,1,1,6833.760,2472.190,421.7130,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID1+82,189980,571,1,1,6884.590,645.147,426.5720,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+83,189980,571,1,1,6885.250,2378.060,427.7960,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+84,189980,571,1,1,6885.810,2052.910,828.6610,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID1+85,189980,571,1,1,6897.245,819.820,399.8205,-2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID1+86,189980,571,1,1,6898.430,786.803,405.3570,-1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID1+87,189980,571,1,1,6901.678,2352.561,428.5658,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+88,189980,571,1,1,6943.630,3630.960,830.1040,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+89,189980,571,1,1,6944.920,407.241,513.6190,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID1+90,189980,571,1,1,6993.890,681.144,491.2140,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID1+91,189980,571,1,1,6999.950,849.854,402.0200,-0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID1+92,189980,571,1,1,7010.360,702.436,473.7730,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID1+93,189980,571,1,1,7027.862,3066.551,475.0314,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID1+94,189980,571,1,1,7028.880,2508.660,409.5580,-0.54105,0,0,0,1,@TIMER,255,1),
+(@GUID1+95,189980,571,1,1,7053.120,824.111,537.6430,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+96,189980,571,1,1,7064.830,1379.270,307.5810,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID1+97,189980,571,1,1,7067.230,1367.880,306.2920,2.61799,0,0,0,1,@TIMER,255,1),
+(@GUID1+98,189980,571,1,1,7070.190,574.218,498.3680,-0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID1+99,189980,571,1,1,7102.520,3022.010,446.9720,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+100,189980,571,1,1,7115.280,1450.230,315.6940,-2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID1+101,189980,571,1,1,7136.144,1119.962,310.4275,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+102,189980,571,1,1,7144.400,2507.150,405.9100,-1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID1+103,189980,571,1,1,7162.500,2547.990,399.1830,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID1+104,189980,571,1,1,7164.714,2521.346,402.8072,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+105,189980,571,1,1,7185.228,2548.746,397.5674,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID1+106,189980,571,1,1,7215.860,2846.910,408.1010,2.89724,0,0,0,1,@TIMER,255,1),
+(@GUID1+107,189980,571,1,1,7231.514,2847.632,405.2855,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+108,189980,571,1,1,7235.410,575.545,499.3020,3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID1+109,189980,571,1,1,7235.530,1516.760,326.9980,-1.93732,0,0,0,1,@TIMER,255,1),
+(@GUID1+110,189980,571,1,1,7238.310,785.106,552.4170,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID1+111,189980,571,1,1,7240.890,2399.818,417.6793,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+112,189980,571,1,1,7260.710,1512.270,322.2740,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID1+113,189980,571,1,1,7323.180,2252.330,461.4260,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID1+114,189980,571,1,1,7330.260,2996.150,434.1070,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID1+115,189980,571,1,1,7330.480,2485.730,392.8050,1.11701,0,0,0,1,@TIMER,255,1),
+(@GUID1+116,189980,571,1,1,7343.430,602.649,615.5180,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID1+117,189980,571,1,1,7347.470,561.248,613.0550,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+118,189980,571,1,1,7362.550,614.322,580.0140,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID1+119,189980,571,1,1,7382.990,2443.480,387.4290,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+120,189980,571,1,1,7391.310,568.383,577.8610,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+121,189980,571,1,1,7399.734,2867.122,417.6852,-2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID1+122,189980,571,1,1,7420.410,3083.890,586.8870,-2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID1+123,189980,571,1,1,7420.450,632.061,497.2910,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+124,189980,571,1,1,7427.840,1463.890,324.1520,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID1+125,189980,571,1,1,7431.122,3330.435,693.0119,1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID1+126,189980,571,1,1,7466.787,2726.011,412.2881,-0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID1+127,189980,571,1,1,7471.173,2497.169,390.4092,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID1+128,189980,571,1,1,7472.370,1305.690,320.0850,-2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID1+129,189980,571,1,1,7476.556,1295.246,322.1502,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+130,189980,571,1,1,7476.560,1295.250,322.1500,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+131,189980,571,1,1,7488.803,1813.892,361.4976,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID1+132,189980,571,1,1,7488.803,1813.892,361.4976,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID1+133,189980,571,1,1,7490.424,2678.968,433.0785,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID1+134,189980,571,1,1,7512.870,1172.610,344.4850,-1.32645,0,0,0,1,@TIMER,255,1),
+(@GUID1+135,189980,571,1,1,7517.870,1846.080,360.2560,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID1+136,189980,571,1,1,7521.310,2268.770,391.4060,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID1+137,189980,571,1,1,7523.600,2698.610,409.9320,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID1+138,189980,571,1,1,7526.180,970.248,533.5250,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID1+139,189980,571,1,1,7529.280,639.333,494.9540,-2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID1+140,189980,571,1,1,7541.840,896.319,489.3380,0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID1+141,189980,571,1,1,7542.460,2870.100,429.9170,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID1+142,189980,571,1,1,7549.750,982.975,483.2320,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+143,189980,571,1,1,7554.596,1864.645,367.2740,0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID1+144,189980,571,1,1,7576.460,1972.390,369.5900,-0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID1+145,189980,571,1,1,7595.120,1891.100,371.2320,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID1+146,189980,571,1,1,7607.160,1752.610,339.9570,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID1+147,189980,571,1,1,7633.180,716.693,484.5840,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+148,189980,571,1,1,7653.100,2792.670,414.9850,0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID1+149,189980,571,1,1,7656.878,1786.749,350.2715,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+150,189980,571,1,1,7656.880,1786.750,350.2720,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+151,189980,571,1,1,7664.280,1709.210,333.7010,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID1+152,189980,571,1,1,7678.119,2818.930,444.8793,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID1+153,189980,571,1,1,7679.018,1021.261,471.1822,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+154,189980,571,1,1,7685.300,1256.030,341.5660,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID1+155,189980,571,1,1,7687.900,3554.850,736.6150,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID1+156,189980,571,1,1,7688.260,1386.790,347.2900,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+157,189980,571,1,1,7689.330,3181.030,578.8330,0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID1+158,189980,571,1,1,7689.890,553.471,698.6200,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID1+159,189980,571,1,1,7712.260,1282.210,339.2810,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+160,189980,571,1,1,7720.600,1424.710,353.3610,-1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID1+161,189980,571,1,1,7726.390,1305.620,341.8380,-2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID1+162,189980,571,1,1,7733.940,1814.480,349.6280,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+163,189980,571,1,1,7744.650,1779.400,338.0610,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID1+164,189980,571,1,1,7764.360,1088.720,395.6190,-0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID1+165,189980,571,1,1,7765.605,2713.188,409.2500,2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID1+166,189980,571,1,1,7772.450,796.567,517.5690,0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID1+167,189980,571,1,1,7773.792,1499.624,360.2978,-2.21657,0,0,0,1,@TIMER,255,1),
+(@GUID1+168,189980,571,1,1,7774.563,2665.078,405.8254,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+169,189980,571,1,1,7774.563,2665.078,405.8254,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID1+170,189980,571,1,1,7779.620,1830.560,356.3590,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID1+171,189980,571,1,1,7781.560,1106.510,395.6670,2.54818,0,0,0,1,@TIMER,255,1),
+(@GUID1+172,189980,571,1,1,7784.990,1043.740,395.6190,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+173,189980,571,1,1,7793.370,1526.290,363.6070,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID1+174,189980,571,1,1,7805.900,943.421,451.6210,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+175,189980,571,1,1,7819.700,1132.740,395.6190,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+176,189980,571,1,1,7822.420,696.106,554.0000,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID1+177,189980,571,1,1,7833.479,3008.132,536.2718,-1.20428,0,0,0,1,@TIMER,255,1),
+(@GUID1+178,189980,571,1,1,7834.560,818.007,501.7090,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID1+179,189980,571,1,1,7845.009,3354.724,736.6236,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID1+180,189980,571,1,1,7848.730,1108.210,395.6100,2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID1+181,189980,571,1,1,7854.104,1125.911,395.6191,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID1+182,189980,571,1,1,7857.740,1414.600,439.1670,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID1+183,189980,571,1,1,7867.160,1550.810,378.1740,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+184,189980,571,1,1,7894.100,1533.870,396.8620,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID1+185,189980,571,1,1,7915.382,2484.846,405.5244,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID1+186,189980,571,1,1,7926.210,2439.340,411.3850,2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID1+187,189980,571,1,1,7930.313,2802.014,499.5031,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID1+188,189980,571,1,1,7935.660,1579.350,411.4840,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID1+189,189980,571,1,1,7937.930,1442.640,520.4660,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID1+190,189980,571,1,1,7940.259,3483.749,694.0527,-1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID1+191,189980,571,1,1,7941.500,1706.580,371.8170,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+192,189980,571,1,1,7958.130,1927.860,367.0540,3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID1+193,189980,571,1,1,7963.188,2787.479,525.1877,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID1+194,189980,571,1,1,7980.900,1539.410,467.7100,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID1+195,189980,571,1,1,8006.929,1907.343,380.7083,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID1+196,189980,571,1,1,8044.050,1805.050,409.0340,2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID1+197,189980,571,1,1,8050.090,2858.940,510.4690,-1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID1+198,189980,571,1,1,8078.370,1646.490,553.9380,1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID1+199,189980,571,1,1,8128.210,1460.340,698.1700,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID1+200,189980,571,1,1,8150.700,1169.640,687.5320,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+201,189980,571,1,1,8160.790,1539.710,630.5920,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID1+202,189980,571,1,1,8161.500,1561.790,613.8130,2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID1+203,189980,571,1,1,8162.180,1286.700,785.9620,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID1+204,189980,571,1,1,8168.020,1303.410,793.5940,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID1+205,189980,571,1,1,8207.790,1281.010,775.6510,-0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID1+206,189980,571,1,1,8242.540,1257.540,741.1770,-1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID1+207,189980,571,1,1,8253.710,1842.500,563.0770,1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID1+208,189980,571,1,1,8266.340,1755.560,580.5210,-2.91469,0,0,0,1,@TIMER,255,1),
+(@GUID1+209,189980,571,1,1,8292.690,2611.040,718.0010,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID1+210,189980,571,1,1,8308.630,3014.360,679.2830,1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID1+211,189980,571,1,1,8450.060,1675.780,701.8550,-2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID1+212,189980,571,1,1,8478.730,1445.280,641.2010,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+213,189980,571,1,1,8478.730,1445.280,650.4550,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID1+214,189980,571,1,1,8523.810,1290.220,623.7830,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID1+215,189980,571,1,1,8579.111,1431.439,615.5118,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID1+216,189980,571,1,1,8698.680,909.670,496.3710,-0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID1+217,189980,571,1,1,8707.630,1008.050,443.8770,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID1+218,189980,571,1,2,5915.753,1990.665,518.8197,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID1+219,189980,571,1,2,5996.645,2335.773,518.0319,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID1+220,189980,571,1,2,6367.613,1682.053,548.5184,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID1+221,189980,571,1,2,6691.890,1520.673,466.3800,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID1+222,189980,571,1,3,5715.870,2059.130,-340.3910,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID1+223,189980,571,1,3,7332.590,3024.400,440.8590,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID1+224,189980,571,1,3,8149.280,2384.140,510.6090,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID1+225,189980,571,1,4,7566.926,1642.527,348.2145,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID1+226,189980,571,1,4,7828.466,1809.705,348.0653,0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID1+227,189980,571,1,5,5877.630,1942.750,518.3700,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID1+228,189980,571,1,5,5889.070,2160.360,515.0020,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID1+229,189980,571,1,5,5966.520,1908.870,580.8170,0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID1+230,189980,571,1,64,6803.910,3634.238,743.4531,-0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID1+231,189980,571,1,64,7070.146,3508.667,733.4362,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID1+232,189980,571,1,256,6166.920,2004.080,541.9620,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID1+233,189980,571,1,256,6522.390,2173.170,509.0700,-3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID1+234,189980,571,1,256,6831.540,2201.450,663.2940,2.98450,0,0,0,1,@TIMER,255,1);
+-- Rich Saronite Deposits Icecrown
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@GUID2+0,189981,571,1,1,6674.631,1332.353,299.6001,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID2+1,189981,571,1,1,6939.153,2862.694,435.1407,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID2+2,189981,571,1,1,7980.812,3096.596,635.4854,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID2+3,189981,571,1,1,5636.890,1931.159,517.3533,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID2+4,189981,571,1,1,5665.190,1897.490,519.6750,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+5,189981,571,1,1,5706.650,2046.590,-339.6590,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID2+6,189981,571,1,1,5711.610,2071.070,-340.7400,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID2+7,189981,571,1,1,5749.150,2086.660,-343.5200,-2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID2+8,189981,571,1,1,5753.728,2282.746,533.9716,-1.53589,0,0,0,1,@TIMER,255,1),
+(@GUID2+9,189981,571,1,1,5775.480,2081.830,-342.7420,0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID2+10,189981,571,1,1,5790.740,2214.070,515.1540,1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID2+11,189981,571,1,1,5808.930,2268.290,523.3210,2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID2+12,189981,571,1,1,5826.980,1863.070,-345.8090,1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID2+13,189981,571,1,1,5842.430,1858.810,-345.3000,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID2+14,189981,571,1,1,5843.150,2256.140,520.1550,-1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID2+15,189981,571,1,1,5857.440,1936.720,510.8840,0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID2+16,189981,571,1,1,5890.500,1915.920,-345.9820,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID2+17,189981,571,1,1,5890.500,1915.920,-345.9820,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID2+18,189981,571,1,1,5894.700,1913.140,-345.9370,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID2+19,189981,571,1,1,5914.500,2015.980,516.3390,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+20,189981,571,1,1,5941.548,1912.958,567.5397,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID2+21,189981,571,1,1,5957.890,2517.910,537.2770,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+22,189981,571,1,1,5961.092,2412.068,519.9221,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+23,189981,571,1,1,5967.890,1850.520,630.5570,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID2+24,189981,571,1,1,6038.564,2326.347,514.5131,1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID2+25,189981,571,1,1,6171.915,2015.665,531.4319,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID2+26,189981,571,1,1,6448.210,1897.020,515.3600,0.36652,0,0,0,1,@TIMER,255,1),
+(@GUID2+27,189981,571,1,1,6466.150,137.682,444.7190,2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID2+28,189981,571,1,1,6466.396,648.508,428.8037,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+29,189981,571,1,1,6477.440,2487.120,475.9810,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+30,189981,571,1,1,6481.970,540.381,438.7030,0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID2+31,189981,571,1,1,6482.543,2462.866,468.1175,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+32,189981,571,1,1,6483.739,1237.931,286.9318,1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID2+33,189981,571,1,1,6484.370,294.937,399.8210,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID2+34,189981,571,1,1,6497.030,3510.880,540.2320,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID2+35,189981,571,1,1,6514.270,896.626,290.6450,1.29154,0,0,0,1,@TIMER,255,1),
+(@GUID2+36,189981,571,1,1,6533.500,907.337,294.8920,0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID2+37,189981,571,1,1,6541.251,1011.675,276.9524,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID2+38,189981,571,1,1,6554.230,332.830,411.5670,0.13962,0,0,0,1,@TIMER,255,1),
+(@GUID2+39,189981,571,1,1,6557.070,284.192,401.7890,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID2+40,189981,571,1,1,6559.550,659.112,408.1460,-2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID2+41,189981,571,1,1,6561.430,1050.489,275.1745,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID2+42,189981,571,1,1,6583.151,1267.122,286.0256,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+43,189981,571,1,1,6604.228,1248.473,282.4915,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+44,189981,571,1,1,6608.890,990.280,284.7300,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID2+45,189981,571,1,1,6618.750,356.354,453.1560,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID2+46,189981,571,1,1,6622.904,1252.617,282.5027,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+47,189981,571,1,1,6636.596,3176.859,648.8128,1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID2+48,189981,571,1,1,6640.880,3346.680,677.4100,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+49,189981,571,1,1,6658.340,688.135,410.4380,2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID2+50,189981,571,1,1,6662.220,573.318,406.8580,-0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID2+51,189981,571,1,1,6664.980,615.527,410.0190,-2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID2+52,189981,571,1,1,6672.161,1189.572,273.2596,-2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID2+53,189981,571,1,1,6691.890,1520.673,466.3800,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID2+54,189981,571,1,1,6696.400,743.905,396.9640,-0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID2+55,189981,571,1,1,6710.980,644.300,412.4740,-1.29154,0,0,0,1,@TIMER,255,1),
+(@GUID2+56,189981,571,1,1,6717.320,1228.804,275.0786,-2.86234,0,0,0,1,@TIMER,255,1),
+(@GUID2+57,189981,571,1,1,6725.160,570.259,424.5290,-2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID2+58,189981,571,1,1,6734.880,1458.500,403.8720,0.31416,0,0,0,1,@TIMER,255,1),
+(@GUID2+59,189981,571,1,1,6737.770,586.034,425.3840,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID2+60,189981,571,1,1,6748.570,2727.220,435.5540,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID2+61,189981,571,1,1,6751.800,1325.140,285.5890,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID2+62,189981,571,1,1,6753.930,328.981,442.2290,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+63,189981,571,1,1,6754.170,2342.520,442.6880,-2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID2+64,189981,571,1,1,6754.800,575.615,425.3900,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID2+65,189981,571,1,1,6755.160,1224.160,276.8440,0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID2+66,189981,571,1,1,6755.390,974.467,312.3300,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+67,189981,571,1,1,6756.568,2694.843,427.8352,-2.80998,0,0,0,1,@TIMER,255,1),
+(@GUID2+68,189981,571,1,1,6758.730,585.806,425.6570,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID2+69,189981,571,1,1,6766.010,2936.860,456.1350,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID2+70,189981,571,1,1,6774.690,499.547,410.7330,-0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID2+71,189981,571,1,1,6781.035,1131.430,278.6142,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+72,189981,571,1,1,6789.004,1141.311,277.1633,-1.81514,0,0,0,1,@TIMER,255,1),
+(@GUID2+73,189981,571,1,1,6790.110,449.812,411.4930,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+74,189981,571,1,1,6793.867,924.565,348.8412,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID2+75,189981,571,1,1,6797.174,2369.824,435.4318,-0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID2+76,189981,571,1,1,6804.510,1294.230,281.1890,0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID2+77,189981,571,1,1,6817.340,453.798,470.4500,-3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID2+78,189981,571,1,1,6818.782,2181.032,660.7790,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+79,189981,571,1,1,6824.141,2207.658,654.9231,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID2+80,189981,571,1,1,6830.670,762.702,409.8570,2.12930,0,0,0,1,@TIMER,255,1),
+(@GUID2+81,189981,571,1,1,6833.760,2472.190,421.7130,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID2+82,189981,571,1,1,6884.590,645.147,426.5720,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+83,189981,571,1,1,6885.250,2378.060,427.7960,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID2+84,189981,571,1,1,6885.810,2052.910,828.6610,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID2+85,189981,571,1,1,6897.245,819.820,399.8205,-2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID2+86,189981,571,1,1,6898.430,786.803,405.3570,-1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID2+87,189981,571,1,1,6901.678,2352.561,428.5658,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+88,189981,571,1,1,6943.630,3630.960,830.1040,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+89,189981,571,1,1,6944.920,407.241,513.6190,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID2+90,189981,571,1,1,6993.890,681.144,491.2140,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID2+91,189981,571,1,1,6999.950,849.854,402.0200,-0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID2+92,189981,571,1,1,7010.360,702.436,473.7730,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID2+93,189981,571,1,1,7027.862,3066.551,475.0314,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID2+94,189981,571,1,1,7028.880,2508.660,409.5580,-0.54105,0,0,0,1,@TIMER,255,1),
+(@GUID2+95,189981,571,1,1,7053.120,824.111,537.6430,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+96,189981,571,1,1,7064.830,1379.270,307.5810,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID2+97,189981,571,1,1,7067.230,1367.880,306.2920,2.61799,0,0,0,1,@TIMER,255,1),
+(@GUID2+98,189981,571,1,1,7070.190,574.218,498.3680,-0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID2+99,189981,571,1,1,7102.520,3022.010,446.9720,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+100,189981,571,1,1,7115.280,1450.230,315.6940,-2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID2+101,189981,571,1,1,7136.144,1119.962,310.4275,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+102,189981,571,1,1,7144.400,2507.150,405.9100,-1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID2+103,189981,571,1,1,7162.500,2547.990,399.1830,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID2+104,189981,571,1,1,7164.714,2521.346,402.8072,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+105,189981,571,1,1,7185.228,2548.746,397.5674,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID2+106,189981,571,1,1,7215.860,2846.910,408.1010,2.89724,0,0,0,1,@TIMER,255,1),
+(@GUID2+107,189981,571,1,1,7231.514,2847.632,405.2855,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+108,189981,571,1,1,7235.410,575.545,499.3020,3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID2+109,189981,571,1,1,7235.530,1516.760,326.9980,-1.93732,0,0,0,1,@TIMER,255,1),
+(@GUID2+110,189981,571,1,1,7238.310,785.106,552.4170,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID2+111,189981,571,1,1,7240.890,2399.818,417.6793,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+112,189981,571,1,1,7260.710,1512.270,322.2740,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID2+113,189981,571,1,1,7323.180,2252.330,461.4260,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID2+114,189981,571,1,1,7330.260,2996.150,434.1070,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID2+115,189981,571,1,1,7330.480,2485.730,392.8050,1.11701,0,0,0,1,@TIMER,255,1),
+(@GUID2+116,189981,571,1,1,7343.430,602.649,615.5180,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID2+117,189981,571,1,1,7347.470,561.248,613.0550,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+118,189981,571,1,1,7362.550,614.322,580.0140,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID2+119,189981,571,1,1,7382.990,2443.480,387.4290,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID2+120,189981,571,1,1,7391.310,568.383,577.8610,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+121,189981,571,1,1,7399.734,2867.122,417.6852,-2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID2+122,189981,571,1,1,7420.410,3083.890,586.8870,-2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID2+123,189981,571,1,1,7420.450,632.061,497.2910,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+124,189981,571,1,1,7427.840,1463.890,324.1520,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID2+125,189981,571,1,1,7431.122,3330.435,693.0119,1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID2+126,189981,571,1,1,7466.787,2726.011,412.2881,-0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID2+127,189981,571,1,1,7471.173,2497.169,390.4092,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID2+128,189981,571,1,1,7472.370,1305.690,320.0850,-2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID2+129,189981,571,1,1,7476.556,1295.246,322.1502,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+130,189981,571,1,1,7476.560,1295.250,322.1500,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+131,189981,571,1,1,7488.803,1813.892,361.4976,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID2+132,189981,571,1,1,7488.803,1813.892,361.4976,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID2+133,189981,571,1,1,7490.424,2678.968,433.0785,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID2+134,189981,571,1,1,7512.870,1172.610,344.4850,-1.32645,0,0,0,1,@TIMER,255,1),
+(@GUID2+135,189981,571,1,1,7517.870,1846.080,360.2560,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID2+136,189981,571,1,1,7521.310,2268.770,391.4060,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID2+137,189981,571,1,1,7523.600,2698.610,409.9320,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID2+138,189981,571,1,1,7526.180,970.248,533.5250,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID2+139,189981,571,1,1,7529.280,639.333,494.9540,-2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID2+140,189981,571,1,1,7541.840,896.319,489.3380,0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID2+141,189981,571,1,1,7542.460,2870.100,429.9170,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID2+142,189981,571,1,1,7549.750,982.975,483.2320,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+143,189981,571,1,1,7554.596,1864.645,367.2740,0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID2+144,189981,571,1,1,7576.460,1972.390,369.5900,-0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID2+145,189981,571,1,1,7595.120,1891.100,371.2320,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID2+146,189981,571,1,1,7607.160,1752.610,339.9570,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID2+147,189981,571,1,1,7633.180,716.693,484.5840,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+148,189981,571,1,1,7653.100,2792.670,414.9850,0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID2+149,189981,571,1,1,7656.878,1786.749,350.2715,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+150,189981,571,1,1,7656.880,1786.750,350.2720,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+151,189981,571,1,1,7664.280,1709.210,333.7010,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID2+152,189981,571,1,1,7678.119,2818.930,444.8793,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID2+153,189981,571,1,1,7679.018,1021.261,471.1822,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+154,189981,571,1,1,7685.300,1256.030,341.5660,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID2+155,189981,571,1,1,7687.900,3554.850,736.6150,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID2+156,189981,571,1,1,7688.260,1386.790,347.2900,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+157,189981,571,1,1,7689.330,3181.030,578.8330,0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID2+158,189981,571,1,1,7689.890,553.471,698.6200,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID2+159,189981,571,1,1,7712.260,1282.210,339.2810,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+160,189981,571,1,1,7720.600,1424.710,353.3610,-1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID2+161,189981,571,1,1,7726.390,1305.620,341.8380,-2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID2+162,189981,571,1,1,7733.940,1814.480,349.6280,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+163,189981,571,1,1,7744.650,1779.400,338.0610,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID2+164,189981,571,1,1,7764.360,1088.720,395.6190,-0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID2+165,189981,571,1,1,7765.605,2713.188,409.2500,2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID2+166,189981,571,1,1,7772.450,796.567,517.5690,0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID2+167,189981,571,1,1,7773.792,1499.624,360.2978,-2.21657,0,0,0,1,@TIMER,255,1),
+(@GUID2+168,189981,571,1,1,7774.563,2665.078,405.8254,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+169,189981,571,1,1,7774.563,2665.078,405.8254,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID2+170,189981,571,1,1,7779.620,1830.560,356.3590,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID2+171,189981,571,1,1,7781.560,1106.510,395.6670,2.54818,0,0,0,1,@TIMER,255,1),
+(@GUID2+172,189981,571,1,1,7784.990,1043.740,395.6190,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+173,189981,571,1,1,7793.370,1526.290,363.6070,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID2+174,189981,571,1,1,7805.900,943.421,451.6210,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+175,189981,571,1,1,7819.700,1132.740,395.6190,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+176,189981,571,1,1,7822.420,696.106,554.0000,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID2+177,189981,571,1,1,7833.479,3008.132,536.2718,-1.20428,0,0,0,1,@TIMER,255,1),
+(@GUID2+178,189981,571,1,1,7834.560,818.007,501.7090,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID2+179,189981,571,1,1,7845.009,3354.724,736.6236,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID2+180,189981,571,1,1,7848.730,1108.210,395.6100,2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID2+181,189981,571,1,1,7854.104,1125.911,395.6191,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID2+182,189981,571,1,1,7857.740,1414.600,439.1670,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID2+183,189981,571,1,1,7867.160,1550.810,378.1740,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+184,189981,571,1,1,7894.100,1533.870,396.8620,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID2+185,189981,571,1,1,7915.382,2484.846,405.5244,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID2+186,189981,571,1,1,7926.210,2439.340,411.3850,2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID2+187,189981,571,1,1,7930.313,2802.014,499.5031,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID2+188,189981,571,1,1,7935.660,1579.350,411.4840,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID2+189,189981,571,1,1,7937.930,1442.640,520.4660,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID2+190,189981,571,1,1,7940.259,3483.749,694.0527,-1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID2+191,189981,571,1,1,7941.500,1706.580,371.8170,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+192,189981,571,1,1,7958.130,1927.860,367.0540,3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID2+193,189981,571,1,1,7963.188,2787.479,525.1877,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID2+194,189981,571,1,1,7980.900,1539.410,467.7100,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID2+195,189981,571,1,1,8006.929,1907.343,380.7083,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID2+196,189981,571,1,1,8044.050,1805.050,409.0340,2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID2+197,189981,571,1,1,8050.090,2858.940,510.4690,-1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID2+198,189981,571,1,1,8078.370,1646.490,553.9380,1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID2+199,189981,571,1,1,8128.210,1460.340,698.1700,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID2+200,189981,571,1,1,8150.700,1169.640,687.5320,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+201,189981,571,1,1,8160.790,1539.710,630.5920,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID2+202,189981,571,1,1,8161.500,1561.790,613.8130,2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID2+203,189981,571,1,1,8162.180,1286.700,785.9620,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID2+204,189981,571,1,1,8168.020,1303.410,793.5940,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID2+205,189981,571,1,1,8207.790,1281.010,775.6510,-0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID2+206,189981,571,1,1,8242.540,1257.540,741.1770,-1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID2+207,189981,571,1,1,8253.710,1842.500,563.0770,1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID2+208,189981,571,1,1,8266.340,1755.560,580.5210,-2.91469,0,0,0,1,@TIMER,255,1),
+(@GUID2+209,189981,571,1,1,8292.690,2611.040,718.0010,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID2+210,189981,571,1,1,8308.630,3014.360,679.2830,1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID2+211,189981,571,1,1,8450.060,1675.780,701.8550,-2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID2+212,189981,571,1,1,8478.730,1445.280,641.2010,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+213,189981,571,1,1,8478.730,1445.280,650.4550,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID2+214,189981,571,1,1,8523.810,1290.220,623.7830,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID2+215,189981,571,1,1,8579.111,1431.439,615.5118,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID2+216,189981,571,1,1,8698.680,909.670,496.3710,-0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID2+217,189981,571,1,1,8707.630,1008.050,443.8770,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID2+218,189981,571,1,2,5915.753,1990.665,518.8197,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID2+219,189981,571,1,2,5996.645,2335.773,518.0319,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID2+220,189981,571,1,2,6367.613,1682.053,548.5184,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID2+221,189981,571,1,2,6691.890,1520.673,466.3800,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID2+222,189981,571,1,3,5715.870,2059.130,-340.3910,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID2+223,189981,571,1,3,7332.590,3024.400,440.8590,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID2+224,189981,571,1,3,8149.280,2384.140,510.6090,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID2+225,189981,571,1,4,7566.926,1642.527,348.2145,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID2+226,189981,571,1,4,7828.466,1809.705,348.0653,0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID2+227,189981,571,1,5,5877.630,1942.750,518.3700,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID2+228,189981,571,1,5,5889.070,2160.360,515.0020,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID2+229,189981,571,1,5,5966.520,1908.870,580.8170,0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID2+230,189981,571,1,64,6803.910,3634.238,743.4531,-0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID2+231,189981,571,1,64,7070.146,3508.667,733.4362,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID2+232,189981,571,1,256,6166.920,2004.080,541.9620,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID2+233,189981,571,1,256,6522.390,2173.170,509.0700,-3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID2+234,189981,571,1,256,6831.540,2201.450,663.2940,2.98450,0,0,0,1,@TIMER,255,1);
+-- Titanium Deposits Icecrown
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@GUID3+0,191133,571,1,1,6674.631,1332.353,299.6001,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID3+1,191133,571,1,1,6939.153,2862.694,435.1407,1.57080,0,0,0,1,@TIMER,255,1),
+(@GUID3+2,191133,571,1,1,7980.812,3096.596,635.4854,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID3+3,191133,571,1,1,5636.890,1931.159,517.3533,-1.50098,0,0,0,1,@TIMER,255,1),
+(@GUID3+4,191133,571,1,1,5665.190,1897.490,519.6750,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID3+5,191133,571,1,1,5706.650,2046.590,-339.6590,-2.39110,0,0,0,1,@TIMER,255,1),
+(@GUID3+6,191133,571,1,1,5711.610,2071.070,-340.7400,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID3+7,191133,571,1,1,5749.150,2086.660,-343.5200,-2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID3+8,191133,571,1,1,5753.728,2282.746,533.9716,-1.53589,0,0,0,1,@TIMER,255,1),
+(@GUID3+9,191133,571,1,1,5775.480,2081.830,-342.7420,0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID3+10,191133,571,1,1,5790.740,2214.070,515.1540,1.30900,0,0,0,1,@TIMER,255,1),
+(@GUID3+11,191133,571,1,1,5808.930,2268.290,523.3210,2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID3+12,191133,571,1,1,5826.980,1863.070,-345.8090,1.90241,0,0,0,1,@TIMER,255,1),
+(@GUID3+13,191133,571,1,1,5842.430,1858.810,-345.3000,-2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID3+14,191133,571,1,1,5843.150,2256.140,520.1550,-1.06465,0,0,0,1,@TIMER,255,1),
+(@GUID3+15,191133,571,1,1,5857.440,1936.720,510.8840,0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID3+16,191133,571,1,1,5890.500,1915.920,-345.9820,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID3+17,191133,571,1,1,5890.500,1915.920,-345.9820,-1.76278,0,0,0,1,@TIMER,255,1),
+(@GUID3+18,191133,571,1,1,5894.700,1913.140,-345.9370,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID3+19,191133,571,1,1,5914.500,2015.980,516.3390,2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID3+20,191133,571,1,1,5941.548,1912.958,567.5397,0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID3+21,191133,571,1,1,5957.890,2517.910,537.2770,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+22,191133,571,1,1,5961.092,2412.068,519.9221,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID3+23,191133,571,1,1,5967.890,1850.520,630.5570,-0.52360,0,0,0,1,@TIMER,255,1),
+(@GUID3+24,191133,571,1,1,6038.564,2326.347,514.5131,1.69297,0,0,0,1,@TIMER,255,1),
+(@GUID3+25,191133,571,1,1,6171.915,2015.665,531.4319,-1.43117,0,0,0,1,@TIMER,255,1),
+(@GUID3+26,191133,571,1,1,6448.210,1897.020,515.3600,0.36652,0,0,0,1,@TIMER,255,1),
+(@GUID3+27,191133,571,1,1,6466.150,137.682,444.7190,2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID3+28,191133,571,1,1,6466.396,648.508,428.8037,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+29,191133,571,1,1,6477.440,2487.120,475.9810,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+30,191133,571,1,1,6481.970,540.381,438.7030,0.47124,0,0,0,1,@TIMER,255,1),
+(@GUID3+31,191133,571,1,1,6482.543,2462.866,468.1175,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID3+32,191133,571,1,1,6483.739,1237.931,286.9318,1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID3+33,191133,571,1,1,6484.370,294.937,399.8210,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID3+34,191133,571,1,1,6497.030,3510.880,540.2320,-2.70526,0,0,0,1,@TIMER,255,1),
+(@GUID3+35,191133,571,1,1,6514.270,896.626,290.6450,1.29154,0,0,0,1,@TIMER,255,1),
+(@GUID3+36,191133,571,1,1,6533.500,907.337,294.8920,0.17453,0,0,0,1,@TIMER,255,1),
+(@GUID3+37,191133,571,1,1,6541.251,1011.675,276.9524,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID3+38,191133,571,1,1,6554.230,332.830,411.5670,0.13962,0,0,0,1,@TIMER,255,1),
+(@GUID3+39,191133,571,1,1,6557.070,284.192,401.7890,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID3+40,191133,571,1,1,6559.550,659.112,408.1460,-2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID3+41,191133,571,1,1,6561.430,1050.489,275.1745,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID3+42,191133,571,1,1,6583.151,1267.122,286.0256,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID3+43,191133,571,1,1,6604.228,1248.473,282.4915,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID3+44,191133,571,1,1,6608.890,990.280,284.7300,-2.77507,0,0,0,1,@TIMER,255,1),
+(@GUID3+45,191133,571,1,1,6618.750,356.354,453.1560,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID3+46,191133,571,1,1,6622.904,1252.617,282.5027,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID3+47,191133,571,1,1,6636.596,3176.859,648.8128,1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID3+48,191133,571,1,1,6640.880,3346.680,677.4100,-0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+49,191133,571,1,1,6658.340,688.135,410.4380,2.14675,0,0,0,1,@TIMER,255,1),
+(@GUID3+50,191133,571,1,1,6662.220,573.318,406.8580,-0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID3+51,191133,571,1,1,6664.980,615.527,410.0190,-2.86233,0,0,0,1,@TIMER,255,1),
+(@GUID3+52,191133,571,1,1,6672.161,1189.572,273.2596,-2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID3+53,191133,571,1,1,6691.890,1520.673,466.3800,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID3+54,191133,571,1,1,6696.400,743.905,396.9640,-0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID3+55,191133,571,1,1,6710.980,644.300,412.4740,-1.29154,0,0,0,1,@TIMER,255,1),
+(@GUID3+56,191133,571,1,1,6717.320,1228.804,275.0786,-2.86234,0,0,0,1,@TIMER,255,1),
+(@GUID3+57,191133,571,1,1,6725.160,570.259,424.5290,-2.46091,0,0,0,1,@TIMER,255,1),
+(@GUID3+58,191133,571,1,1,6734.880,1458.500,403.8720,0.31416,0,0,0,1,@TIMER,255,1),
+(@GUID3+59,191133,571,1,1,6737.770,586.034,425.3840,1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID3+60,191133,571,1,1,6748.570,2727.220,435.5540,1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID3+61,191133,571,1,1,6751.800,1325.140,285.5890,-1.60570,0,0,0,1,@TIMER,255,1),
+(@GUID3+62,191133,571,1,1,6753.930,328.981,442.2290,0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID3+63,191133,571,1,1,6754.170,2342.520,442.6880,-2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID3+64,191133,571,1,1,6754.800,575.615,425.3900,-1.41372,0,0,0,1,@TIMER,255,1),
+(@GUID3+65,191133,571,1,1,6755.160,1224.160,276.8440,0.34907,0,0,0,1,@TIMER,255,1),
+(@GUID3+66,191133,571,1,1,6755.390,974.467,312.3300,-2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID3+67,191133,571,1,1,6756.568,2694.843,427.8352,-2.80998,0,0,0,1,@TIMER,255,1),
+(@GUID3+68,191133,571,1,1,6758.730,585.806,425.6570,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID3+69,191133,571,1,1,6766.010,2936.860,456.1350,-2.00713,0,0,0,1,@TIMER,255,1),
+(@GUID3+70,191133,571,1,1,6774.690,499.547,410.7330,-0.97738,0,0,0,1,@TIMER,255,1),
+(@GUID3+71,191133,571,1,1,6781.035,1131.430,278.6142,2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID3+72,191133,571,1,1,6789.004,1141.311,277.1633,-1.81514,0,0,0,1,@TIMER,255,1),
+(@GUID3+73,191133,571,1,1,6790.110,449.812,411.4930,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+74,191133,571,1,1,6793.867,924.565,348.8412,0.85521,0,0,0,1,@TIMER,255,1),
+(@GUID3+75,191133,571,1,1,6797.174,2369.824,435.4318,-0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID3+76,191133,571,1,1,6804.510,1294.230,281.1890,0.50615,0,0,0,1,@TIMER,255,1),
+(@GUID3+77,191133,571,1,1,6817.340,453.798,470.4500,-3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID3+78,191133,571,1,1,6818.782,2181.032,660.7790,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID3+79,191133,571,1,1,6824.141,2207.658,654.9231,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID3+80,191133,571,1,1,6830.670,762.702,409.8570,2.12930,0,0,0,1,@TIMER,255,1),
+(@GUID3+81,191133,571,1,1,6833.760,2472.190,421.7130,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID3+82,191133,571,1,1,6884.590,645.147,426.5720,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID3+83,191133,571,1,1,6885.250,2378.060,427.7960,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID3+84,191133,571,1,1,6885.810,2052.910,828.6610,0.08727,0,0,0,1,@TIMER,255,1),
+(@GUID3+85,191133,571,1,1,6897.245,819.820,399.8205,-2.82743,0,0,0,1,@TIMER,255,1),
+(@GUID3+86,191133,571,1,1,6898.430,786.803,405.3570,-1.48353,0,0,0,1,@TIMER,255,1),
+(@GUID3+87,191133,571,1,1,6901.678,2352.561,428.5658,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID3+88,191133,571,1,1,6943.630,3630.960,830.1040,-1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID3+89,191133,571,1,1,6944.920,407.241,513.6190,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID3+90,191133,571,1,1,6993.890,681.144,491.2140,0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID3+91,191133,571,1,1,6999.950,849.854,402.0200,-0.38397,0,0,0,1,@TIMER,255,1),
+(@GUID3+92,191133,571,1,1,7010.360,702.436,473.7730,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID3+93,191133,571,1,1,7027.862,3066.551,475.0314,1.78023,0,0,0,1,@TIMER,255,1),
+(@GUID3+94,191133,571,1,1,7028.880,2508.660,409.5580,-0.54105,0,0,0,1,@TIMER,255,1),
+(@GUID3+95,191133,571,1,1,7053.120,824.111,537.6430,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+96,191133,571,1,1,7064.830,1379.270,307.5810,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID3+97,191133,571,1,1,7067.230,1367.880,306.2920,2.61799,0,0,0,1,@TIMER,255,1),
+(@GUID3+98,191133,571,1,1,7070.190,574.218,498.3680,-0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID3+99,191133,571,1,1,7102.520,3022.010,446.9720,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+100,191133,571,1,1,7115.280,1450.230,315.6940,-2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID3+101,191133,571,1,1,7136.144,1119.962,310.4275,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+102,191133,571,1,1,7144.400,2507.150,405.9100,-1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID3+103,191133,571,1,1,7162.500,2547.990,399.1830,1.71042,0,0,0,1,@TIMER,255,1),
+(@GUID3+104,191133,571,1,1,7164.714,2521.346,402.8072,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+105,191133,571,1,1,7185.228,2548.746,397.5674,1.55334,0,0,0,1,@TIMER,255,1),
+(@GUID3+106,191133,571,1,1,7215.860,2846.910,408.1010,2.89724,0,0,0,1,@TIMER,255,1),
+(@GUID3+107,191133,571,1,1,7231.514,2847.632,405.2855,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+108,191133,571,1,1,7235.410,575.545,499.3020,3.12412,0,0,0,1,@TIMER,255,1),
+(@GUID3+109,191133,571,1,1,7235.530,1516.760,326.9980,-1.93732,0,0,0,1,@TIMER,255,1),
+(@GUID3+110,191133,571,1,1,7238.310,785.106,552.4170,0.26180,0,0,0,1,@TIMER,255,1),
+(@GUID3+111,191133,571,1,1,7240.890,2399.818,417.6793,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID3+112,191133,571,1,1,7260.710,1512.270,322.2740,2.19912,0,0,0,1,@TIMER,255,1),
+(@GUID3+113,191133,571,1,1,7323.180,2252.330,461.4260,2.49582,0,0,0,1,@TIMER,255,1),
+(@GUID3+114,191133,571,1,1,7330.260,2996.150,434.1070,-1.98967,0,0,0,1,@TIMER,255,1),
+(@GUID3+115,191133,571,1,1,7330.480,2485.730,392.8050,1.11701,0,0,0,1,@TIMER,255,1),
+(@GUID3+116,191133,571,1,1,7343.430,602.649,615.5180,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID3+117,191133,571,1,1,7347.470,561.248,613.0550,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID3+118,191133,571,1,1,7362.550,614.322,580.0140,-3.01941,0,0,0,1,@TIMER,255,1),
+(@GUID3+119,191133,571,1,1,7382.990,2443.480,387.4290,-2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID3+120,191133,571,1,1,7391.310,568.383,577.8610,-1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+121,191133,571,1,1,7399.734,2867.122,417.6852,-2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID3+122,191133,571,1,1,7420.410,3083.890,586.8870,-2.35619,0,0,0,1,@TIMER,255,1),
+(@GUID3+123,191133,571,1,1,7420.450,632.061,497.2910,-1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+124,191133,571,1,1,7427.840,1463.890,324.1520,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID3+125,191133,571,1,1,7431.122,3330.435,693.0119,1.08210,0,0,0,1,@TIMER,255,1),
+(@GUID3+126,191133,571,1,1,7466.787,2726.011,412.2881,-0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID3+127,191133,571,1,1,7471.173,2497.169,390.4092,-1.34390,0,0,0,1,@TIMER,255,1),
+(@GUID3+128,191133,571,1,1,7472.370,1305.690,320.0850,-2.28638,0,0,0,1,@TIMER,255,1),
+(@GUID3+129,191133,571,1,1,7476.556,1295.246,322.1502,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID3+130,191133,571,1,1,7476.560,1295.250,322.1500,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID3+131,191133,571,1,1,7488.803,1813.892,361.4976,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID3+132,191133,571,1,1,7488.803,1813.892,361.4976,-2.65289,0,0,0,1,@TIMER,255,1),
+(@GUID3+133,191133,571,1,1,7490.424,2678.968,433.0785,-1.15192,0,0,0,1,@TIMER,255,1),
+(@GUID3+134,191133,571,1,1,7512.870,1172.610,344.4850,-1.32645,0,0,0,1,@TIMER,255,1),
+(@GUID3+135,191133,571,1,1,7517.870,1846.080,360.2560,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID3+136,191133,571,1,1,7521.310,2268.770,391.4060,-1.04720,0,0,0,1,@TIMER,255,1),
+(@GUID3+137,191133,571,1,1,7523.600,2698.610,409.9320,2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID3+138,191133,571,1,1,7526.180,970.248,533.5250,0.75049,0,0,0,1,@TIMER,255,1),
+(@GUID3+139,191133,571,1,1,7529.280,639.333,494.9540,-2.02458,0,0,0,1,@TIMER,255,1),
+(@GUID3+140,191133,571,1,1,7541.840,896.319,489.3380,0.95993,0,0,0,1,@TIMER,255,1),
+(@GUID3+141,191133,571,1,1,7542.460,2870.100,429.9170,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID3+142,191133,571,1,1,7549.750,982.975,483.2320,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+143,191133,571,1,1,7554.596,1864.645,367.2740,0.24435,0,0,0,1,@TIMER,255,1),
+(@GUID3+144,191133,571,1,1,7576.460,1972.390,369.5900,-0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID3+145,191133,571,1,1,7595.120,1891.100,371.2320,-2.72271,0,0,0,1,@TIMER,255,1),
+(@GUID3+146,191133,571,1,1,7607.160,1752.610,339.9570,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID3+147,191133,571,1,1,7633.180,716.693,484.5840,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+148,191133,571,1,1,7653.100,2792.670,414.9850,0.12217,0,0,0,1,@TIMER,255,1),
+(@GUID3+149,191133,571,1,1,7656.878,1786.749,350.2715,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID3+150,191133,571,1,1,7656.880,1786.750,350.2720,-2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID3+151,191133,571,1,1,7664.280,1709.210,333.7010,1.85005,0,0,0,1,@TIMER,255,1),
+(@GUID3+152,191133,571,1,1,7678.119,2818.930,444.8793,2.42601,0,0,0,1,@TIMER,255,1),
+(@GUID3+153,191133,571,1,1,7679.018,1021.261,471.1822,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID3+154,191133,571,1,1,7685.300,1256.030,341.5660,-2.30383,0,0,0,1,@TIMER,255,1),
+(@GUID3+155,191133,571,1,1,7687.900,3554.850,736.6150,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID3+156,191133,571,1,1,7688.260,1386.790,347.2900,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID3+157,191133,571,1,1,7689.330,3181.030,578.8330,0.40143,0,0,0,1,@TIMER,255,1),
+(@GUID3+158,191133,571,1,1,7689.890,553.471,698.6200,0.68068,0,0,0,1,@TIMER,255,1),
+(@GUID3+159,191133,571,1,1,7712.260,1282.210,339.2810,1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID3+160,191133,571,1,1,7720.600,1424.710,353.3610,-1.62316,0,0,0,1,@TIMER,255,1),
+(@GUID3+161,191133,571,1,1,7726.390,1305.620,341.8380,-2.96704,0,0,0,1,@TIMER,255,1),
+(@GUID3+162,191133,571,1,1,7733.940,1814.480,349.6280,-1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+163,191133,571,1,1,7744.650,1779.400,338.0610,3.03684,0,0,0,1,@TIMER,255,1),
+(@GUID3+164,191133,571,1,1,7764.360,1088.720,395.6190,-0.61086,0,0,0,1,@TIMER,255,1),
+(@GUID3+165,191133,571,1,1,7765.605,2713.188,409.2500,2.68781,0,0,0,1,@TIMER,255,1),
+(@GUID3+166,191133,571,1,1,7772.450,796.567,517.5690,0.41888,0,0,0,1,@TIMER,255,1),
+(@GUID3+167,191133,571,1,1,7773.792,1499.624,360.2978,-2.21657,0,0,0,1,@TIMER,255,1),
+(@GUID3+168,191133,571,1,1,7774.563,2665.078,405.8254,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID3+169,191133,571,1,1,7774.563,2665.078,405.8254,-0.66322,0,0,0,1,@TIMER,255,1),
+(@GUID3+170,191133,571,1,1,7779.620,1830.560,356.3590,-2.53072,0,0,0,1,@TIMER,255,1),
+(@GUID3+171,191133,571,1,1,7781.560,1106.510,395.6670,2.54818,0,0,0,1,@TIMER,255,1),
+(@GUID3+172,191133,571,1,1,7784.990,1043.740,395.6190,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+173,191133,571,1,1,7793.370,1526.290,363.6070,0.48869,0,0,0,1,@TIMER,255,1),
+(@GUID3+174,191133,571,1,1,7805.900,943.421,451.6210,-1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+175,191133,571,1,1,7819.700,1132.740,395.6190,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID3+176,191133,571,1,1,7822.420,696.106,554.0000,1.01229,0,0,0,1,@TIMER,255,1),
+(@GUID3+177,191133,571,1,1,7833.479,3008.132,536.2718,-1.20428,0,0,0,1,@TIMER,255,1),
+(@GUID3+178,191133,571,1,1,7834.560,818.007,501.7090,-0.92502,0,0,0,1,@TIMER,255,1),
+(@GUID3+179,191133,571,1,1,7845.009,3354.724,736.6236,0.82030,0,0,0,1,@TIMER,255,1),
+(@GUID3+180,191133,571,1,1,7848.730,1108.210,395.6100,2.74016,0,0,0,1,@TIMER,255,1),
+(@GUID3+181,191133,571,1,1,7854.104,1125.911,395.6191,1.88495,0,0,0,1,@TIMER,255,1),
+(@GUID3+182,191133,571,1,1,7857.740,1414.600,439.1670,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID3+183,191133,571,1,1,7867.160,1550.810,378.1740,0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+184,191133,571,1,1,7894.100,1533.870,396.8620,-3.07177,0,0,0,1,@TIMER,255,1),
+(@GUID3+185,191133,571,1,1,7915.382,2484.846,405.5244,0.73304,0,0,0,1,@TIMER,255,1),
+(@GUID3+186,191133,571,1,1,7926.210,2439.340,411.3850,2.67035,0,0,0,1,@TIMER,255,1),
+(@GUID3+187,191133,571,1,1,7930.313,2802.014,499.5031,-2.44346,0,0,0,1,@TIMER,255,1),
+(@GUID3+188,191133,571,1,1,7935.660,1579.350,411.4840,-1.91986,0,0,0,1,@TIMER,255,1),
+(@GUID3+189,191133,571,1,1,7937.930,1442.640,520.4660,2.26892,0,0,0,1,@TIMER,255,1),
+(@GUID3+190,191133,571,1,1,7940.259,3483.749,694.0527,-1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID3+191,191133,571,1,1,7941.500,1706.580,371.8170,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+192,191133,571,1,1,7958.130,1927.860,367.0540,3.05433,0,0,0,1,@TIMER,255,1),
+(@GUID3+193,191133,571,1,1,7963.188,2787.479,525.1877,-1.83259,0,0,0,1,@TIMER,255,1),
+(@GUID3+194,191133,571,1,1,7980.900,1539.410,467.7100,1.46608,0,0,0,1,@TIMER,255,1),
+(@GUID3+195,191133,571,1,1,8006.929,1907.343,380.7083,-1.13446,0,0,0,1,@TIMER,255,1),
+(@GUID3+196,191133,571,1,1,8044.050,1805.050,409.0340,2.09439,0,0,0,1,@TIMER,255,1),
+(@GUID3+197,191133,571,1,1,8050.090,2858.940,510.4690,-1.65806,0,0,0,1,@TIMER,255,1),
+(@GUID3+198,191133,571,1,1,8078.370,1646.490,553.9380,1.97222,0,0,0,1,@TIMER,255,1),
+(@GUID3+199,191133,571,1,1,8128.210,1460.340,698.1700,0.20944,0,0,0,1,@TIMER,255,1),
+(@GUID3+200,191133,571,1,1,8150.700,1169.640,687.5320,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID3+201,191133,571,1,1,8160.790,1539.710,630.5920,0.76794,0,0,0,1,@TIMER,255,1),
+(@GUID3+202,191133,571,1,1,8161.500,1561.790,613.8130,2.05949,0,0,0,1,@TIMER,255,1),
+(@GUID3+203,191133,571,1,1,8162.180,1286.700,785.9620,2.33874,0,0,0,1,@TIMER,255,1),
+(@GUID3+204,191133,571,1,1,8168.020,1303.410,793.5940,0.15708,0,0,0,1,@TIMER,255,1),
+(@GUID3+205,191133,571,1,1,8207.790,1281.010,775.6510,-0.87266,0,0,0,1,@TIMER,255,1),
+(@GUID3+206,191133,571,1,1,8242.540,1257.540,741.1770,-1.37881,0,0,0,1,@TIMER,255,1),
+(@GUID3+207,191133,571,1,1,8253.710,1842.500,563.0770,1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID3+208,191133,571,1,1,8266.340,1755.560,580.5210,-2.91469,0,0,0,1,@TIMER,255,1),
+(@GUID3+209,191133,571,1,1,8292.690,2611.040,718.0010,-2.93214,0,0,0,1,@TIMER,255,1),
+(@GUID3+210,191133,571,1,1,8308.630,3014.360,679.2830,1.44862,0,0,0,1,@TIMER,255,1),
+(@GUID3+211,191133,571,1,1,8450.060,1675.780,701.8550,-2.04204,0,0,0,1,@TIMER,255,1),
+(@GUID3+212,191133,571,1,1,8478.730,1445.280,641.2010,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+213,191133,571,1,1,8478.730,1445.280,650.4550,1.25664,0,0,0,1,@TIMER,255,1),
+(@GUID3+214,191133,571,1,1,8523.810,1290.220,623.7830,-3.00195,0,0,0,1,@TIMER,255,1),
+(@GUID3+215,191133,571,1,1,8579.111,1431.439,615.5118,2.37364,0,0,0,1,@TIMER,255,1),
+(@GUID3+216,191133,571,1,1,8698.680,909.670,496.3710,-0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID3+217,191133,571,1,1,8707.630,1008.050,443.8770,0.89012,0,0,0,1,@TIMER,255,1),
+(@GUID3+218,191133,571,1,2,5915.753,1990.665,518.8197,-2.98450,0,0,0,1,@TIMER,255,1),
+(@GUID3+219,191133,571,1,2,5996.645,2335.773,518.0319,-0.55850,0,0,0,1,@TIMER,255,1),
+(@GUID3+220,191133,571,1,2,6367.613,1682.053,548.5184,-0.83776,0,0,0,1,@TIMER,255,1),
+(@GUID3+221,191133,571,1,2,6691.890,1520.673,466.3800,-2.07694,0,0,0,1,@TIMER,255,1),
+(@GUID3+222,191133,571,1,3,5715.870,2059.130,-340.3910,-2.25147,0,0,0,1,@TIMER,255,1),
+(@GUID3+223,191133,571,1,3,7332.590,3024.400,440.8590,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID3+224,191133,571,1,3,8149.280,2384.140,510.6090,2.51327,0,0,0,1,@TIMER,255,1),
+(@GUID3+225,191133,571,1,4,7566.926,1642.527,348.2145,1.09956,0,0,0,1,@TIMER,255,1),
+(@GUID3+226,191133,571,1,4,7828.466,1809.705,348.0653,0.43633,0,0,0,1,@TIMER,255,1),
+(@GUID3+227,191133,571,1,5,5877.630,1942.750,518.3700,-0.27925,0,0,0,1,@TIMER,255,1),
+(@GUID3+228,191133,571,1,5,5889.070,2160.360,515.0020,-2.47837,0,0,0,1,@TIMER,255,1),
+(@GUID3+229,191133,571,1,5,5966.520,1908.870,580.8170,0.71559,0,0,0,1,@TIMER,255,1),
+(@GUID3+230,191133,571,1,64,6803.910,3634.238,743.4531,-0.33161,0,0,0,1,@TIMER,255,1),
+(@GUID3+231,191133,571,1,64,7070.146,3508.667,733.4362,-1.22173,0,0,0,1,@TIMER,255,1),
+(@GUID3+232,191133,571,1,256,6166.920,2004.080,541.9620,1.79769,0,0,0,1,@TIMER,255,1),
+(@GUID3+233,191133,571,1,256,6522.390,2173.170,509.0700,-3.10665,0,0,0,1,@TIMER,255,1),
+(@GUID3+234,191133,571,1,256,6831.540,2201.450,663.2940,2.98450,0,0,0,1,@TIMER,255,1);
+-- Pooling
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID1 AND @GUID1+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID2 AND @GUID2+@LASTGUID;
+DELETE FROM `pool_gameobject` WHERE `guid` BETWEEN @GUID3 AND @GUID3+@LASTGUID;
+-- Pool different ore types to each spawnpoint
+INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES
+(@GUID1+0,@POOL+0,@CHANCE1, 'Icecrown Ore Spawnpoint 1 Saronite'),
+(@GUID2+0,@POOL+0,@CHANCE2, 'Icecrown Ore Spawnpoint 1 Rich Saronite'),
+(@GUID3+0,@POOL+0,@CHANCE3, 'Icecrown Ore Spawnpoint 1 Titanium'),
+(@GUID1+1,@POOL+1,@CHANCE1, 'Icecrown Ore Spawnpoint 2 Saronite'),
+(@GUID2+1,@POOL+1,@CHANCE2, 'Icecrown Ore Spawnpoint 2 Rich Saronite'),
+(@GUID3+1,@POOL+1,@CHANCE3, 'Icecrown Ore Spawnpoint 2 Titanium'),
+(@GUID1+2,@POOL+2,@CHANCE1, 'Icecrown Ore Spawnpoint 3 Saronite'),
+(@GUID2+2,@POOL+2,@CHANCE2, 'Icecrown Ore Spawnpoint 3 Rich Saronite'),
+(@GUID3+2,@POOL+2,@CHANCE3, 'Icecrown Ore Spawnpoint 3 Titanium'),
+(@GUID1+3,@POOL+3,@CHANCE1, 'Icecrown Ore Spawnpoint 4 Saronite'),
+(@GUID2+3,@POOL+3,@CHANCE2, 'Icecrown Ore Spawnpoint 4 Rich Saronite'),
+(@GUID3+3,@POOL+3,@CHANCE3, 'Icecrown Ore Spawnpoint 4 Titanium'),
+(@GUID1+4,@POOL+4,@CHANCE1, 'Icecrown Ore Spawnpoint 5 Saronite'),
+(@GUID2+4,@POOL+4,@CHANCE2, 'Icecrown Ore Spawnpoint 5 Rich Saronite'),
+(@GUID3+4,@POOL+4,@CHANCE3, 'Icecrown Ore Spawnpoint 5 Titanium'),
+(@GUID1+5,@POOL+5,@CHANCE1, 'Icecrown Ore Spawnpoint 6 Saronite'),
+(@GUID2+5,@POOL+5,@CHANCE2, 'Icecrown Ore Spawnpoint 6 Rich Saronite'),
+(@GUID3+5,@POOL+5,@CHANCE3, 'Icecrown Ore Spawnpoint 6 Titanium'),
+(@GUID1+6,@POOL+6,@CHANCE1, 'Icecrown Ore Spawnpoint 7 Saronite'),
+(@GUID2+6,@POOL+6,@CHANCE2, 'Icecrown Ore Spawnpoint 7 Rich Saronite'),
+(@GUID3+6,@POOL+6,@CHANCE3, 'Icecrown Ore Spawnpoint 7 Titanium'),
+(@GUID1+7,@POOL+7,@CHANCE1, 'Icecrown Ore Spawnpoint 8 Saronite'),
+(@GUID2+7,@POOL+7,@CHANCE2, 'Icecrown Ore Spawnpoint 8 Rich Saronite'),
+(@GUID3+7,@POOL+7,@CHANCE3, 'Icecrown Ore Spawnpoint 8 Titanium'),
+(@GUID1+8,@POOL+8,@CHANCE1, 'Icecrown Ore Spawnpoint 9 Saronite'),
+(@GUID2+8,@POOL+8,@CHANCE2, 'Icecrown Ore Spawnpoint 9 Rich Saronite'),
+(@GUID3+8,@POOL+8,@CHANCE3, 'Icecrown Ore Spawnpoint 9 Titanium'),
+(@GUID1+9,@POOL+9,@CHANCE1, 'Icecrown Ore Spawnpoint 10 Saronite'),
+(@GUID2+9,@POOL+9,@CHANCE2, 'Icecrown Ore Spawnpoint 10 Rich Saronite'),
+(@GUID3+9,@POOL+9,@CHANCE3, 'Icecrown Ore Spawnpoint 10 Titanium'),
+(@GUID1+10,@POOL+10,@CHANCE1, 'Icecrown Ore Spawnpoint 11 Saronite'),
+(@GUID2+10,@POOL+10,@CHANCE2, 'Icecrown Ore Spawnpoint 11 Rich Saronite'),
+(@GUID3+10,@POOL+10,@CHANCE3, 'Icecrown Ore Spawnpoint 11 Titanium'),
+(@GUID1+11,@POOL+11,@CHANCE1, 'Icecrown Ore Spawnpoint 12 Saronite'),
+(@GUID2+11,@POOL+11,@CHANCE2, 'Icecrown Ore Spawnpoint 12 Rich Saronite'),
+(@GUID3+11,@POOL+11,@CHANCE3, 'Icecrown Ore Spawnpoint 12 Titanium'),
+(@GUID1+12,@POOL+12,@CHANCE1, 'Icecrown Ore Spawnpoint 13 Saronite'),
+(@GUID2+12,@POOL+12,@CHANCE2, 'Icecrown Ore Spawnpoint 13 Rich Saronite'),
+(@GUID3+12,@POOL+12,@CHANCE3, 'Icecrown Ore Spawnpoint 13 Titanium'),
+(@GUID1+13,@POOL+13,@CHANCE1, 'Icecrown Ore Spawnpoint 14 Saronite'),
+(@GUID2+13,@POOL+13,@CHANCE2, 'Icecrown Ore Spawnpoint 14 Rich Saronite'),
+(@GUID3+13,@POOL+13,@CHANCE3, 'Icecrown Ore Spawnpoint 14 Titanium'),
+(@GUID1+14,@POOL+14,@CHANCE1, 'Icecrown Ore Spawnpoint 15 Saronite'),
+(@GUID2+14,@POOL+14,@CHANCE2, 'Icecrown Ore Spawnpoint 15 Rich Saronite'),
+(@GUID3+14,@POOL+14,@CHANCE3, 'Icecrown Ore Spawnpoint 15 Titanium'),
+(@GUID1+15,@POOL+15,@CHANCE1, 'Icecrown Ore Spawnpoint 16 Saronite'),
+(@GUID2+15,@POOL+15,@CHANCE2, 'Icecrown Ore Spawnpoint 16 Rich Saronite'),
+(@GUID3+15,@POOL+15,@CHANCE3, 'Icecrown Ore Spawnpoint 16 Titanium'),
+(@GUID1+16,@POOL+16,@CHANCE1, 'Icecrown Ore Spawnpoint 17 Saronite'),
+(@GUID2+16,@POOL+16,@CHANCE2, 'Icecrown Ore Spawnpoint 17 Rich Saronite'),
+(@GUID3+16,@POOL+16,@CHANCE3, 'Icecrown Ore Spawnpoint 17 Titanium'),
+(@GUID1+17,@POOL+17,@CHANCE1, 'Icecrown Ore Spawnpoint 18 Saronite'),
+(@GUID2+17,@POOL+17,@CHANCE2, 'Icecrown Ore Spawnpoint 18 Rich Saronite'),
+(@GUID3+17,@POOL+17,@CHANCE3, 'Icecrown Ore Spawnpoint 18 Titanium'),
+(@GUID1+18,@POOL+18,@CHANCE1, 'Icecrown Ore Spawnpoint 19 Saronite'),
+(@GUID2+18,@POOL+18,@CHANCE2, 'Icecrown Ore Spawnpoint 19 Rich Saronite'),
+(@GUID3+18,@POOL+18,@CHANCE3, 'Icecrown Ore Spawnpoint 19 Titanium'),
+(@GUID1+19,@POOL+19,@CHANCE1, 'Icecrown Ore Spawnpoint 20 Saronite'),
+(@GUID2+19,@POOL+19,@CHANCE2, 'Icecrown Ore Spawnpoint 20 Rich Saronite'),
+(@GUID3+19,@POOL+19,@CHANCE3, 'Icecrown Ore Spawnpoint 20 Titanium'),
+(@GUID1+20,@POOL+20,@CHANCE1, 'Icecrown Ore Spawnpoint 21 Saronite'),
+(@GUID2+20,@POOL+20,@CHANCE2, 'Icecrown Ore Spawnpoint 21 Rich Saronite'),
+(@GUID3+20,@POOL+20,@CHANCE3, 'Icecrown Ore Spawnpoint 21 Titanium'),
+(@GUID1+21,@POOL+21,@CHANCE1, 'Icecrown Ore Spawnpoint 22 Saronite'),
+(@GUID2+21,@POOL+21,@CHANCE2, 'Icecrown Ore Spawnpoint 22 Rich Saronite'),
+(@GUID3+21,@POOL+21,@CHANCE3, 'Icecrown Ore Spawnpoint 22 Titanium'),
+(@GUID1+22,@POOL+22,@CHANCE1, 'Icecrown Ore Spawnpoint 23 Saronite'),
+(@GUID2+22,@POOL+22,@CHANCE2, 'Icecrown Ore Spawnpoint 23 Rich Saronite'),
+(@GUID3+22,@POOL+22,@CHANCE3, 'Icecrown Ore Spawnpoint 23 Titanium'),
+(@GUID1+23,@POOL+23,@CHANCE1, 'Icecrown Ore Spawnpoint 24 Saronite'),
+(@GUID2+23,@POOL+23,@CHANCE2, 'Icecrown Ore Spawnpoint 24 Rich Saronite'),
+(@GUID3+23,@POOL+23,@CHANCE3, 'Icecrown Ore Spawnpoint 24 Titanium'),
+(@GUID1+24,@POOL+24,@CHANCE1, 'Icecrown Ore Spawnpoint 25 Saronite'),
+(@GUID2+24,@POOL+24,@CHANCE2, 'Icecrown Ore Spawnpoint 25 Rich Saronite'),
+(@GUID3+24,@POOL+24,@CHANCE3, 'Icecrown Ore Spawnpoint 25 Titanium'),
+(@GUID1+25,@POOL+25,@CHANCE1, 'Icecrown Ore Spawnpoint 26 Saronite'),
+(@GUID2+25,@POOL+25,@CHANCE2, 'Icecrown Ore Spawnpoint 26 Rich Saronite'),
+(@GUID3+25,@POOL+25,@CHANCE3, 'Icecrown Ore Spawnpoint 26 Titanium'),
+(@GUID1+26,@POOL+26,@CHANCE1, 'Icecrown Ore Spawnpoint 27 Saronite'),
+(@GUID2+26,@POOL+26,@CHANCE2, 'Icecrown Ore Spawnpoint 27 Rich Saronite'),
+(@GUID3+26,@POOL+26,@CHANCE3, 'Icecrown Ore Spawnpoint 27 Titanium'),
+(@GUID1+27,@POOL+27,@CHANCE1, 'Icecrown Ore Spawnpoint 28 Saronite'),
+(@GUID2+27,@POOL+27,@CHANCE2, 'Icecrown Ore Spawnpoint 28 Rich Saronite'),
+(@GUID3+27,@POOL+27,@CHANCE3, 'Icecrown Ore Spawnpoint 28 Titanium'),
+(@GUID1+28,@POOL+28,@CHANCE1, 'Icecrown Ore Spawnpoint 29 Saronite'),
+(@GUID2+28,@POOL+28,@CHANCE2, 'Icecrown Ore Spawnpoint 29 Rich Saronite'),
+(@GUID3+28,@POOL+28,@CHANCE3, 'Icecrown Ore Spawnpoint 29 Titanium'),
+(@GUID1+29,@POOL+29,@CHANCE1, 'Icecrown Ore Spawnpoint 30 Saronite'),
+(@GUID2+29,@POOL+29,@CHANCE2, 'Icecrown Ore Spawnpoint 30 Rich Saronite'),
+(@GUID3+29,@POOL+29,@CHANCE3, 'Icecrown Ore Spawnpoint 30 Titanium'),
+(@GUID1+30,@POOL+30,@CHANCE1, 'Icecrown Ore Spawnpoint 31 Saronite'),
+(@GUID2+30,@POOL+30,@CHANCE2, 'Icecrown Ore Spawnpoint 31 Rich Saronite'),
+(@GUID3+30,@POOL+30,@CHANCE3, 'Icecrown Ore Spawnpoint 31 Titanium'),
+(@GUID1+31,@POOL+31,@CHANCE1, 'Icecrown Ore Spawnpoint 32 Saronite'),
+(@GUID2+31,@POOL+31,@CHANCE2, 'Icecrown Ore Spawnpoint 32 Rich Saronite'),
+(@GUID3+31,@POOL+31,@CHANCE3, 'Icecrown Ore Spawnpoint 32 Titanium'),
+(@GUID1+32,@POOL+32,@CHANCE1, 'Icecrown Ore Spawnpoint 33 Saronite'),
+(@GUID2+32,@POOL+32,@CHANCE2, 'Icecrown Ore Spawnpoint 33 Rich Saronite'),
+(@GUID3+32,@POOL+32,@CHANCE3, 'Icecrown Ore Spawnpoint 33 Titanium'),
+(@GUID1+33,@POOL+33,@CHANCE1, 'Icecrown Ore Spawnpoint 34 Saronite'),
+(@GUID2+33,@POOL+33,@CHANCE2, 'Icecrown Ore Spawnpoint 34 Rich Saronite'),
+(@GUID3+33,@POOL+33,@CHANCE3, 'Icecrown Ore Spawnpoint 34 Titanium'),
+(@GUID1+34,@POOL+34,@CHANCE1, 'Icecrown Ore Spawnpoint 35 Saronite'),
+(@GUID2+34,@POOL+34,@CHANCE2, 'Icecrown Ore Spawnpoint 35 Rich Saronite'),
+(@GUID3+34,@POOL+34,@CHANCE3, 'Icecrown Ore Spawnpoint 35 Titanium'),
+(@GUID1+35,@POOL+35,@CHANCE1, 'Icecrown Ore Spawnpoint 36 Saronite'),
+(@GUID2+35,@POOL+35,@CHANCE2, 'Icecrown Ore Spawnpoint 36 Rich Saronite'),
+(@GUID3+35,@POOL+35,@CHANCE3, 'Icecrown Ore Spawnpoint 36 Titanium'),
+(@GUID1+36,@POOL+36,@CHANCE1, 'Icecrown Ore Spawnpoint 37 Saronite'),
+(@GUID2+36,@POOL+36,@CHANCE2, 'Icecrown Ore Spawnpoint 37 Rich Saronite'),
+(@GUID3+36,@POOL+36,@CHANCE3, 'Icecrown Ore Spawnpoint 37 Titanium'),
+(@GUID1+37,@POOL+37,@CHANCE1, 'Icecrown Ore Spawnpoint 38 Saronite'),
+(@GUID2+37,@POOL+37,@CHANCE2, 'Icecrown Ore Spawnpoint 38 Rich Saronite'),
+(@GUID3+37,@POOL+37,@CHANCE3, 'Icecrown Ore Spawnpoint 38 Titanium'),
+(@GUID1+38,@POOL+38,@CHANCE1, 'Icecrown Ore Spawnpoint 39 Saronite'),
+(@GUID2+38,@POOL+38,@CHANCE2, 'Icecrown Ore Spawnpoint 39 Rich Saronite'),
+(@GUID3+38,@POOL+38,@CHANCE3, 'Icecrown Ore Spawnpoint 39 Titanium'),
+(@GUID1+39,@POOL+39,@CHANCE1, 'Icecrown Ore Spawnpoint 40 Saronite'),
+(@GUID2+39,@POOL+39,@CHANCE2, 'Icecrown Ore Spawnpoint 40 Rich Saronite'),
+(@GUID3+39,@POOL+39,@CHANCE3, 'Icecrown Ore Spawnpoint 40 Titanium'),
+(@GUID1+40,@POOL+40,@CHANCE1, 'Icecrown Ore Spawnpoint 41 Saronite'),
+(@GUID2+40,@POOL+40,@CHANCE2, 'Icecrown Ore Spawnpoint 41 Rich Saronite'),
+(@GUID3+40,@POOL+40,@CHANCE3, 'Icecrown Ore Spawnpoint 41 Titanium'),
+(@GUID1+41,@POOL+41,@CHANCE1, 'Icecrown Ore Spawnpoint 42 Saronite'),
+(@GUID2+41,@POOL+41,@CHANCE2, 'Icecrown Ore Spawnpoint 42 Rich Saronite'),
+(@GUID3+41,@POOL+41,@CHANCE3, 'Icecrown Ore Spawnpoint 42 Titanium'),
+(@GUID1+42,@POOL+42,@CHANCE1, 'Icecrown Ore Spawnpoint 43 Saronite'),
+(@GUID2+42,@POOL+42,@CHANCE2, 'Icecrown Ore Spawnpoint 43 Rich Saronite'),
+(@GUID3+42,@POOL+42,@CHANCE3, 'Icecrown Ore Spawnpoint 43 Titanium'),
+(@GUID1+43,@POOL+43,@CHANCE1, 'Icecrown Ore Spawnpoint 44 Saronite'),
+(@GUID2+43,@POOL+43,@CHANCE2, 'Icecrown Ore Spawnpoint 44 Rich Saronite'),
+(@GUID3+43,@POOL+43,@CHANCE3, 'Icecrown Ore Spawnpoint 44 Titanium'),
+(@GUID1+44,@POOL+44,@CHANCE1, 'Icecrown Ore Spawnpoint 45 Saronite'),
+(@GUID2+44,@POOL+44,@CHANCE2, 'Icecrown Ore Spawnpoint 45 Rich Saronite'),
+(@GUID3+44,@POOL+44,@CHANCE3, 'Icecrown Ore Spawnpoint 45 Titanium'),
+(@GUID1+45,@POOL+45,@CHANCE1, 'Icecrown Ore Spawnpoint 46 Saronite'),
+(@GUID2+45,@POOL+45,@CHANCE2, 'Icecrown Ore Spawnpoint 46 Rich Saronite'),
+(@GUID3+45,@POOL+45,@CHANCE3, 'Icecrown Ore Spawnpoint 46 Titanium'),
+(@GUID1+46,@POOL+46,@CHANCE1, 'Icecrown Ore Spawnpoint 47 Saronite'),
+(@GUID2+46,@POOL+46,@CHANCE2, 'Icecrown Ore Spawnpoint 47 Rich Saronite'),
+(@GUID3+46,@POOL+46,@CHANCE3, 'Icecrown Ore Spawnpoint 47 Titanium'),
+(@GUID1+47,@POOL+47,@CHANCE1, 'Icecrown Ore Spawnpoint 48 Saronite'),
+(@GUID2+47,@POOL+47,@CHANCE2, 'Icecrown Ore Spawnpoint 48 Rich Saronite'),
+(@GUID3+47,@POOL+47,@CHANCE3, 'Icecrown Ore Spawnpoint 48 Titanium'),
+(@GUID1+48,@POOL+48,@CHANCE1, 'Icecrown Ore Spawnpoint 49 Saronite'),
+(@GUID2+48,@POOL+48,@CHANCE2, 'Icecrown Ore Spawnpoint 49 Rich Saronite'),
+(@GUID3+48,@POOL+48,@CHANCE3, 'Icecrown Ore Spawnpoint 49 Titanium'),
+(@GUID1+49,@POOL+49,@CHANCE1, 'Icecrown Ore Spawnpoint 50 Saronite'),
+(@GUID2+49,@POOL+49,@CHANCE2, 'Icecrown Ore Spawnpoint 50 Rich Saronite'),
+(@GUID3+49,@POOL+49,@CHANCE3, 'Icecrown Ore Spawnpoint 50 Titanium'),
+(@GUID1+50,@POOL+50,@CHANCE1, 'Icecrown Ore Spawnpoint 51 Saronite'),
+(@GUID2+50,@POOL+50,@CHANCE2, 'Icecrown Ore Spawnpoint 51 Rich Saronite'),
+(@GUID3+50,@POOL+50,@CHANCE3, 'Icecrown Ore Spawnpoint 51 Titanium'),
+(@GUID1+51,@POOL+51,@CHANCE1, 'Icecrown Ore Spawnpoint 52 Saronite'),
+(@GUID2+51,@POOL+51,@CHANCE2, 'Icecrown Ore Spawnpoint 52 Rich Saronite'),
+(@GUID3+51,@POOL+51,@CHANCE3, 'Icecrown Ore Spawnpoint 52 Titanium'),
+(@GUID1+52,@POOL+52,@CHANCE1, 'Icecrown Ore Spawnpoint 53 Saronite'),
+(@GUID2+52,@POOL+52,@CHANCE2, 'Icecrown Ore Spawnpoint 53 Rich Saronite'),
+(@GUID3+52,@POOL+52,@CHANCE3, 'Icecrown Ore Spawnpoint 53 Titanium'),
+(@GUID1+53,@POOL+53,@CHANCE1, 'Icecrown Ore Spawnpoint 54 Saronite'),
+(@GUID2+53,@POOL+53,@CHANCE2, 'Icecrown Ore Spawnpoint 54 Rich Saronite'),
+(@GUID3+53,@POOL+53,@CHANCE3, 'Icecrown Ore Spawnpoint 54 Titanium'),
+(@GUID1+54,@POOL+54,@CHANCE1, 'Icecrown Ore Spawnpoint 55 Saronite'),
+(@GUID2+54,@POOL+54,@CHANCE2, 'Icecrown Ore Spawnpoint 55 Rich Saronite'),
+(@GUID3+54,@POOL+54,@CHANCE3, 'Icecrown Ore Spawnpoint 55 Titanium'),
+(@GUID1+55,@POOL+55,@CHANCE1, 'Icecrown Ore Spawnpoint 56 Saronite'),
+(@GUID2+55,@POOL+55,@CHANCE2, 'Icecrown Ore Spawnpoint 56 Rich Saronite'),
+(@GUID3+55,@POOL+55,@CHANCE3, 'Icecrown Ore Spawnpoint 56 Titanium'),
+(@GUID1+56,@POOL+56,@CHANCE1, 'Icecrown Ore Spawnpoint 57 Saronite'),
+(@GUID2+56,@POOL+56,@CHANCE2, 'Icecrown Ore Spawnpoint 57 Rich Saronite'),
+(@GUID3+56,@POOL+56,@CHANCE3, 'Icecrown Ore Spawnpoint 57 Titanium'),
+(@GUID1+57,@POOL+57,@CHANCE1, 'Icecrown Ore Spawnpoint 58 Saronite'),
+(@GUID2+57,@POOL+57,@CHANCE2, 'Icecrown Ore Spawnpoint 58 Rich Saronite'),
+(@GUID3+57,@POOL+57,@CHANCE3, 'Icecrown Ore Spawnpoint 58 Titanium'),
+(@GUID1+58,@POOL+58,@CHANCE1, 'Icecrown Ore Spawnpoint 59 Saronite'),
+(@GUID2+58,@POOL+58,@CHANCE2, 'Icecrown Ore Spawnpoint 59 Rich Saronite'),
+(@GUID3+58,@POOL+58,@CHANCE3, 'Icecrown Ore Spawnpoint 59 Titanium'),
+(@GUID1+59,@POOL+59,@CHANCE1, 'Icecrown Ore Spawnpoint 60 Saronite'),
+(@GUID2+59,@POOL+59,@CHANCE2, 'Icecrown Ore Spawnpoint 60 Rich Saronite'),
+(@GUID3+59,@POOL+59,@CHANCE3, 'Icecrown Ore Spawnpoint 60 Titanium'),
+(@GUID1+60,@POOL+60,@CHANCE1, 'Icecrown Ore Spawnpoint 61 Saronite'),
+(@GUID2+60,@POOL+60,@CHANCE2, 'Icecrown Ore Spawnpoint 61 Rich Saronite'),
+(@GUID3+60,@POOL+60,@CHANCE3, 'Icecrown Ore Spawnpoint 61 Titanium'),
+(@GUID1+61,@POOL+61,@CHANCE1, 'Icecrown Ore Spawnpoint 62 Saronite'),
+(@GUID2+61,@POOL+61,@CHANCE2, 'Icecrown Ore Spawnpoint 62 Rich Saronite'),
+(@GUID3+61,@POOL+61,@CHANCE3, 'Icecrown Ore Spawnpoint 62 Titanium'),
+(@GUID1+62,@POOL+62,@CHANCE1, 'Icecrown Ore Spawnpoint 63 Saronite'),
+(@GUID2+62,@POOL+62,@CHANCE2, 'Icecrown Ore Spawnpoint 63 Rich Saronite'),
+(@GUID3+62,@POOL+62,@CHANCE3, 'Icecrown Ore Spawnpoint 63 Titanium'),
+(@GUID1+63,@POOL+63,@CHANCE1, 'Icecrown Ore Spawnpoint 64 Saronite'),
+(@GUID2+63,@POOL+63,@CHANCE2, 'Icecrown Ore Spawnpoint 64 Rich Saronite'),
+(@GUID3+63,@POOL+63,@CHANCE3, 'Icecrown Ore Spawnpoint 64 Titanium'),
+(@GUID1+64,@POOL+64,@CHANCE1, 'Icecrown Ore Spawnpoint 65 Saronite'),
+(@GUID2+64,@POOL+64,@CHANCE2, 'Icecrown Ore Spawnpoint 65 Rich Saronite'),
+(@GUID3+64,@POOL+64,@CHANCE3, 'Icecrown Ore Spawnpoint 65 Titanium'),
+(@GUID1+65,@POOL+65,@CHANCE1, 'Icecrown Ore Spawnpoint 66 Saronite'),
+(@GUID2+65,@POOL+65,@CHANCE2, 'Icecrown Ore Spawnpoint 66 Rich Saronite'),
+(@GUID3+65,@POOL+65,@CHANCE3, 'Icecrown Ore Spawnpoint 66 Titanium'),
+(@GUID1+66,@POOL+66,@CHANCE1, 'Icecrown Ore Spawnpoint 67 Saronite'),
+(@GUID2+66,@POOL+66,@CHANCE2, 'Icecrown Ore Spawnpoint 67 Rich Saronite'),
+(@GUID3+66,@POOL+66,@CHANCE3, 'Icecrown Ore Spawnpoint 67 Titanium'),
+(@GUID1+67,@POOL+67,@CHANCE1, 'Icecrown Ore Spawnpoint 68 Saronite'),
+(@GUID2+67,@POOL+67,@CHANCE2, 'Icecrown Ore Spawnpoint 68 Rich Saronite'),
+(@GUID3+67,@POOL+67,@CHANCE3, 'Icecrown Ore Spawnpoint 68 Titanium'),
+(@GUID1+68,@POOL+68,@CHANCE1, 'Icecrown Ore Spawnpoint 69 Saronite'),
+(@GUID2+68,@POOL+68,@CHANCE2, 'Icecrown Ore Spawnpoint 69 Rich Saronite'),
+(@GUID3+68,@POOL+68,@CHANCE3, 'Icecrown Ore Spawnpoint 69 Titanium'),
+(@GUID1+69,@POOL+69,@CHANCE1, 'Icecrown Ore Spawnpoint 70 Saronite'),
+(@GUID2+69,@POOL+69,@CHANCE2, 'Icecrown Ore Spawnpoint 70 Rich Saronite'),
+(@GUID3+69,@POOL+69,@CHANCE3, 'Icecrown Ore Spawnpoint 70 Titanium'),
+(@GUID1+70,@POOL+70,@CHANCE1, 'Icecrown Ore Spawnpoint 71 Saronite'),
+(@GUID2+70,@POOL+70,@CHANCE2, 'Icecrown Ore Spawnpoint 71 Rich Saronite'),
+(@GUID3+70,@POOL+70,@CHANCE3, 'Icecrown Ore Spawnpoint 71 Titanium'),
+(@GUID1+71,@POOL+71,@CHANCE1, 'Icecrown Ore Spawnpoint 72 Saronite'),
+(@GUID2+71,@POOL+71,@CHANCE2, 'Icecrown Ore Spawnpoint 72 Rich Saronite'),
+(@GUID3+71,@POOL+71,@CHANCE3, 'Icecrown Ore Spawnpoint 72 Titanium'),
+(@GUID1+72,@POOL+72,@CHANCE1, 'Icecrown Ore Spawnpoint 73 Saronite'),
+(@GUID2+72,@POOL+72,@CHANCE2, 'Icecrown Ore Spawnpoint 73 Rich Saronite'),
+(@GUID3+72,@POOL+72,@CHANCE3, 'Icecrown Ore Spawnpoint 73 Titanium'),
+(@GUID1+73,@POOL+73,@CHANCE1, 'Icecrown Ore Spawnpoint 74 Saronite'),
+(@GUID2+73,@POOL+73,@CHANCE2, 'Icecrown Ore Spawnpoint 74 Rich Saronite'),
+(@GUID3+73,@POOL+73,@CHANCE3, 'Icecrown Ore Spawnpoint 74 Titanium'),
+(@GUID1+74,@POOL+74,@CHANCE1, 'Icecrown Ore Spawnpoint 75 Saronite'),
+(@GUID2+74,@POOL+74,@CHANCE2, 'Icecrown Ore Spawnpoint 75 Rich Saronite'),
+(@GUID3+74,@POOL+74,@CHANCE3, 'Icecrown Ore Spawnpoint 75 Titanium'),
+(@GUID1+75,@POOL+75,@CHANCE1, 'Icecrown Ore Spawnpoint 76 Saronite'),
+(@GUID2+75,@POOL+75,@CHANCE2, 'Icecrown Ore Spawnpoint 76 Rich Saronite'),
+(@GUID3+75,@POOL+75,@CHANCE3, 'Icecrown Ore Spawnpoint 76 Titanium'),
+(@GUID1+76,@POOL+76,@CHANCE1, 'Icecrown Ore Spawnpoint 77 Saronite'),
+(@GUID2+76,@POOL+76,@CHANCE2, 'Icecrown Ore Spawnpoint 77 Rich Saronite'),
+(@GUID3+76,@POOL+76,@CHANCE3, 'Icecrown Ore Spawnpoint 77 Titanium'),
+(@GUID1+77,@POOL+77,@CHANCE1, 'Icecrown Ore Spawnpoint 78 Saronite'),
+(@GUID2+77,@POOL+77,@CHANCE2, 'Icecrown Ore Spawnpoint 78 Rich Saronite'),
+(@GUID3+77,@POOL+77,@CHANCE3, 'Icecrown Ore Spawnpoint 78 Titanium'),
+(@GUID1+78,@POOL+78,@CHANCE1, 'Icecrown Ore Spawnpoint 79 Saronite'),
+(@GUID2+78,@POOL+78,@CHANCE2, 'Icecrown Ore Spawnpoint 79 Rich Saronite'),
+(@GUID3+78,@POOL+78,@CHANCE3, 'Icecrown Ore Spawnpoint 79 Titanium'),
+(@GUID1+79,@POOL+79,@CHANCE1, 'Icecrown Ore Spawnpoint 80 Saronite'),
+(@GUID2+79,@POOL+79,@CHANCE2, 'Icecrown Ore Spawnpoint 80 Rich Saronite'),
+(@GUID3+79,@POOL+79,@CHANCE3, 'Icecrown Ore Spawnpoint 80 Titanium'),
+(@GUID1+80,@POOL+80,@CHANCE1, 'Icecrown Ore Spawnpoint 81 Saronite'),
+(@GUID2+80,@POOL+80,@CHANCE2, 'Icecrown Ore Spawnpoint 81 Rich Saronite'),
+(@GUID3+80,@POOL+80,@CHANCE3, 'Icecrown Ore Spawnpoint 81 Titanium'),
+(@GUID1+81,@POOL+81,@CHANCE1, 'Icecrown Ore Spawnpoint 82 Saronite'),
+(@GUID2+81,@POOL+81,@CHANCE2, 'Icecrown Ore Spawnpoint 82 Rich Saronite'),
+(@GUID3+81,@POOL+81,@CHANCE3, 'Icecrown Ore Spawnpoint 82 Titanium'),
+(@GUID1+82,@POOL+82,@CHANCE1, 'Icecrown Ore Spawnpoint 83 Saronite'),
+(@GUID2+82,@POOL+82,@CHANCE2, 'Icecrown Ore Spawnpoint 83 Rich Saronite'),
+(@GUID3+82,@POOL+82,@CHANCE3, 'Icecrown Ore Spawnpoint 83 Titanium'),
+(@GUID1+83,@POOL+83,@CHANCE1, 'Icecrown Ore Spawnpoint 84 Saronite'),
+(@GUID2+83,@POOL+83,@CHANCE2, 'Icecrown Ore Spawnpoint 84 Rich Saronite'),
+(@GUID3+83,@POOL+83,@CHANCE3, 'Icecrown Ore Spawnpoint 84 Titanium'),
+(@GUID1+84,@POOL+84,@CHANCE1, 'Icecrown Ore Spawnpoint 85 Saronite'),
+(@GUID2+84,@POOL+84,@CHANCE2, 'Icecrown Ore Spawnpoint 85 Rich Saronite'),
+(@GUID3+84,@POOL+84,@CHANCE3, 'Icecrown Ore Spawnpoint 85 Titanium'),
+(@GUID1+85,@POOL+85,@CHANCE1, 'Icecrown Ore Spawnpoint 86 Saronite'),
+(@GUID2+85,@POOL+85,@CHANCE2, 'Icecrown Ore Spawnpoint 86 Rich Saronite'),
+(@GUID3+85,@POOL+85,@CHANCE3, 'Icecrown Ore Spawnpoint 86 Titanium'),
+(@GUID1+86,@POOL+86,@CHANCE1, 'Icecrown Ore Spawnpoint 87 Saronite'),
+(@GUID2+86,@POOL+86,@CHANCE2, 'Icecrown Ore Spawnpoint 87 Rich Saronite'),
+(@GUID3+86,@POOL+86,@CHANCE3, 'Icecrown Ore Spawnpoint 87 Titanium'),
+(@GUID1+87,@POOL+87,@CHANCE1, 'Icecrown Ore Spawnpoint 88 Saronite'),
+(@GUID2+87,@POOL+87,@CHANCE2, 'Icecrown Ore Spawnpoint 88 Rich Saronite'),
+(@GUID3+87,@POOL+87,@CHANCE3, 'Icecrown Ore Spawnpoint 88 Titanium'),
+(@GUID1+88,@POOL+88,@CHANCE1, 'Icecrown Ore Spawnpoint 89 Saronite'),
+(@GUID2+88,@POOL+88,@CHANCE2, 'Icecrown Ore Spawnpoint 89 Rich Saronite'),
+(@GUID3+88,@POOL+88,@CHANCE3, 'Icecrown Ore Spawnpoint 89 Titanium'),
+(@GUID1+89,@POOL+89,@CHANCE1, 'Icecrown Ore Spawnpoint 90 Saronite'),
+(@GUID2+89,@POOL+89,@CHANCE2, 'Icecrown Ore Spawnpoint 90 Rich Saronite'),
+(@GUID3+89,@POOL+89,@CHANCE3, 'Icecrown Ore Spawnpoint 90 Titanium'),
+(@GUID1+90,@POOL+90,@CHANCE1, 'Icecrown Ore Spawnpoint 91 Saronite'),
+(@GUID2+90,@POOL+90,@CHANCE2, 'Icecrown Ore Spawnpoint 91 Rich Saronite'),
+(@GUID3+90,@POOL+90,@CHANCE3, 'Icecrown Ore Spawnpoint 91 Titanium'),
+(@GUID1+91,@POOL+91,@CHANCE1, 'Icecrown Ore Spawnpoint 92 Saronite'),
+(@GUID2+91,@POOL+91,@CHANCE2, 'Icecrown Ore Spawnpoint 92 Rich Saronite'),
+(@GUID3+91,@POOL+91,@CHANCE3, 'Icecrown Ore Spawnpoint 92 Titanium'),
+(@GUID1+92,@POOL+92,@CHANCE1, 'Icecrown Ore Spawnpoint 93 Saronite'),
+(@GUID2+92,@POOL+92,@CHANCE2, 'Icecrown Ore Spawnpoint 93 Rich Saronite'),
+(@GUID3+92,@POOL+92,@CHANCE3, 'Icecrown Ore Spawnpoint 93 Titanium'),
+(@GUID1+93,@POOL+93,@CHANCE1, 'Icecrown Ore Spawnpoint 94 Saronite'),
+(@GUID2+93,@POOL+93,@CHANCE2, 'Icecrown Ore Spawnpoint 94 Rich Saronite'),
+(@GUID3+93,@POOL+93,@CHANCE3, 'Icecrown Ore Spawnpoint 94 Titanium'),
+(@GUID1+94,@POOL+94,@CHANCE1, 'Icecrown Ore Spawnpoint 95 Saronite'),
+(@GUID2+94,@POOL+94,@CHANCE2, 'Icecrown Ore Spawnpoint 95 Rich Saronite'),
+(@GUID3+94,@POOL+94,@CHANCE3, 'Icecrown Ore Spawnpoint 95 Titanium'),
+(@GUID1+95,@POOL+95,@CHANCE1, 'Icecrown Ore Spawnpoint 96 Saronite'),
+(@GUID2+95,@POOL+95,@CHANCE2, 'Icecrown Ore Spawnpoint 96 Rich Saronite'),
+(@GUID3+95,@POOL+95,@CHANCE3, 'Icecrown Ore Spawnpoint 96 Titanium'),
+(@GUID1+96,@POOL+96,@CHANCE1, 'Icecrown Ore Spawnpoint 97 Saronite'),
+(@GUID2+96,@POOL+96,@CHANCE2, 'Icecrown Ore Spawnpoint 97 Rich Saronite'),
+(@GUID3+96,@POOL+96,@CHANCE3, 'Icecrown Ore Spawnpoint 97 Titanium'),
+(@GUID1+97,@POOL+97,@CHANCE1, 'Icecrown Ore Spawnpoint 98 Saronite'),
+(@GUID2+97,@POOL+97,@CHANCE2, 'Icecrown Ore Spawnpoint 98 Rich Saronite'),
+(@GUID3+97,@POOL+97,@CHANCE3, 'Icecrown Ore Spawnpoint 98 Titanium'),
+(@GUID1+98,@POOL+98,@CHANCE1, 'Icecrown Ore Spawnpoint 99 Saronite'),
+(@GUID2+98,@POOL+98,@CHANCE2, 'Icecrown Ore Spawnpoint 99 Rich Saronite'),
+(@GUID3+98,@POOL+98,@CHANCE3, 'Icecrown Ore Spawnpoint 99 Titanium'),
+(@GUID1+99,@POOL+99,@CHANCE1, 'Icecrown Ore Spawnpoint 100 Saronite'),
+(@GUID2+99,@POOL+99,@CHANCE2, 'Icecrown Ore Spawnpoint 100 Rich Saronite'),
+(@GUID3+99,@POOL+99,@CHANCE3, 'Icecrown Ore Spawnpoint 100 Titanium'),
+(@GUID1+100,@POOL+100,@CHANCE1, 'Icecrown Ore Spawnpoint 101 Saronite'),
+(@GUID2+100,@POOL+100,@CHANCE2, 'Icecrown Ore Spawnpoint 101 Rich Saronite'),
+(@GUID3+100,@POOL+100,@CHANCE3, 'Icecrown Ore Spawnpoint 101 Titanium'),
+(@GUID1+101,@POOL+101,@CHANCE1, 'Icecrown Ore Spawnpoint 102 Saronite'),
+(@GUID2+101,@POOL+101,@CHANCE2, 'Icecrown Ore Spawnpoint 102 Rich Saronite'),
+(@GUID3+101,@POOL+101,@CHANCE3, 'Icecrown Ore Spawnpoint 102 Titanium'),
+(@GUID1+102,@POOL+102,@CHANCE1, 'Icecrown Ore Spawnpoint 103 Saronite'),
+(@GUID2+102,@POOL+102,@CHANCE2, 'Icecrown Ore Spawnpoint 103 Rich Saronite'),
+(@GUID3+102,@POOL+102,@CHANCE3, 'Icecrown Ore Spawnpoint 103 Titanium'),
+(@GUID1+103,@POOL+103,@CHANCE1, 'Icecrown Ore Spawnpoint 104 Saronite'),
+(@GUID2+103,@POOL+103,@CHANCE2, 'Icecrown Ore Spawnpoint 104 Rich Saronite'),
+(@GUID3+103,@POOL+103,@CHANCE3, 'Icecrown Ore Spawnpoint 104 Titanium'),
+(@GUID1+104,@POOL+104,@CHANCE1, 'Icecrown Ore Spawnpoint 105 Saronite'),
+(@GUID2+104,@POOL+104,@CHANCE2, 'Icecrown Ore Spawnpoint 105 Rich Saronite'),
+(@GUID3+104,@POOL+104,@CHANCE3, 'Icecrown Ore Spawnpoint 105 Titanium'),
+(@GUID1+105,@POOL+105,@CHANCE1, 'Icecrown Ore Spawnpoint 106 Saronite'),
+(@GUID2+105,@POOL+105,@CHANCE2, 'Icecrown Ore Spawnpoint 106 Rich Saronite'),
+(@GUID3+105,@POOL+105,@CHANCE3, 'Icecrown Ore Spawnpoint 106 Titanium'),
+(@GUID1+106,@POOL+106,@CHANCE1, 'Icecrown Ore Spawnpoint 107 Saronite'),
+(@GUID2+106,@POOL+106,@CHANCE2, 'Icecrown Ore Spawnpoint 107 Rich Saronite'),
+(@GUID3+106,@POOL+106,@CHANCE3, 'Icecrown Ore Spawnpoint 107 Titanium'),
+(@GUID1+107,@POOL+107,@CHANCE1, 'Icecrown Ore Spawnpoint 108 Saronite'),
+(@GUID2+107,@POOL+107,@CHANCE2, 'Icecrown Ore Spawnpoint 108 Rich Saronite'),
+(@GUID3+107,@POOL+107,@CHANCE3, 'Icecrown Ore Spawnpoint 108 Titanium'),
+(@GUID1+108,@POOL+108,@CHANCE1, 'Icecrown Ore Spawnpoint 109 Saronite'),
+(@GUID2+108,@POOL+108,@CHANCE2, 'Icecrown Ore Spawnpoint 109 Rich Saronite'),
+(@GUID3+108,@POOL+108,@CHANCE3, 'Icecrown Ore Spawnpoint 109 Titanium'),
+(@GUID1+109,@POOL+109,@CHANCE1, 'Icecrown Ore Spawnpoint 110 Saronite'),
+(@GUID2+109,@POOL+109,@CHANCE2, 'Icecrown Ore Spawnpoint 110 Rich Saronite'),
+(@GUID3+109,@POOL+109,@CHANCE3, 'Icecrown Ore Spawnpoint 110 Titanium'),
+(@GUID1+110,@POOL+110,@CHANCE1, 'Icecrown Ore Spawnpoint 111 Saronite'),
+(@GUID2+110,@POOL+110,@CHANCE2, 'Icecrown Ore Spawnpoint 111 Rich Saronite'),
+(@GUID3+110,@POOL+110,@CHANCE3, 'Icecrown Ore Spawnpoint 111 Titanium'),
+(@GUID1+111,@POOL+111,@CHANCE1, 'Icecrown Ore Spawnpoint 112 Saronite'),
+(@GUID2+111,@POOL+111,@CHANCE2, 'Icecrown Ore Spawnpoint 112 Rich Saronite'),
+(@GUID3+111,@POOL+111,@CHANCE3, 'Icecrown Ore Spawnpoint 112 Titanium'),
+(@GUID1+112,@POOL+112,@CHANCE1, 'Icecrown Ore Spawnpoint 113 Saronite'),
+(@GUID2+112,@POOL+112,@CHANCE2, 'Icecrown Ore Spawnpoint 113 Rich Saronite'),
+(@GUID3+112,@POOL+112,@CHANCE3, 'Icecrown Ore Spawnpoint 113 Titanium'),
+(@GUID1+113,@POOL+113,@CHANCE1, 'Icecrown Ore Spawnpoint 114 Saronite'),
+(@GUID2+113,@POOL+113,@CHANCE2, 'Icecrown Ore Spawnpoint 114 Rich Saronite'),
+(@GUID3+113,@POOL+113,@CHANCE3, 'Icecrown Ore Spawnpoint 114 Titanium'),
+(@GUID1+114,@POOL+114,@CHANCE1, 'Icecrown Ore Spawnpoint 115 Saronite'),
+(@GUID2+114,@POOL+114,@CHANCE2, 'Icecrown Ore Spawnpoint 115 Rich Saronite'),
+(@GUID3+114,@POOL+114,@CHANCE3, 'Icecrown Ore Spawnpoint 115 Titanium'),
+(@GUID1+115,@POOL+115,@CHANCE1, 'Icecrown Ore Spawnpoint 116 Saronite'),
+(@GUID2+115,@POOL+115,@CHANCE2, 'Icecrown Ore Spawnpoint 116 Rich Saronite'),
+(@GUID3+115,@POOL+115,@CHANCE3, 'Icecrown Ore Spawnpoint 116 Titanium'),
+(@GUID1+116,@POOL+116,@CHANCE1, 'Icecrown Ore Spawnpoint 117 Saronite'),
+(@GUID2+116,@POOL+116,@CHANCE2, 'Icecrown Ore Spawnpoint 117 Rich Saronite'),
+(@GUID3+116,@POOL+116,@CHANCE3, 'Icecrown Ore Spawnpoint 117 Titanium'),
+(@GUID1+117,@POOL+117,@CHANCE1, 'Icecrown Ore Spawnpoint 118 Saronite'),
+(@GUID2+117,@POOL+117,@CHANCE2, 'Icecrown Ore Spawnpoint 118 Rich Saronite'),
+(@GUID3+117,@POOL+117,@CHANCE3, 'Icecrown Ore Spawnpoint 118 Titanium'),
+(@GUID1+118,@POOL+118,@CHANCE1, 'Icecrown Ore Spawnpoint 119 Saronite'),
+(@GUID2+118,@POOL+118,@CHANCE2, 'Icecrown Ore Spawnpoint 119 Rich Saronite'),
+(@GUID3+118,@POOL+118,@CHANCE3, 'Icecrown Ore Spawnpoint 119 Titanium'),
+(@GUID1+119,@POOL+119,@CHANCE1, 'Icecrown Ore Spawnpoint 120 Saronite'),
+(@GUID2+119,@POOL+119,@CHANCE2, 'Icecrown Ore Spawnpoint 120 Rich Saronite'),
+(@GUID3+119,@POOL+119,@CHANCE3, 'Icecrown Ore Spawnpoint 120 Titanium'),
+(@GUID1+120,@POOL+120,@CHANCE1, 'Icecrown Ore Spawnpoint 121 Saronite'),
+(@GUID2+120,@POOL+120,@CHANCE2, 'Icecrown Ore Spawnpoint 121 Rich Saronite'),
+(@GUID3+120,@POOL+120,@CHANCE3, 'Icecrown Ore Spawnpoint 121 Titanium'),
+(@GUID1+121,@POOL+121,@CHANCE1, 'Icecrown Ore Spawnpoint 122 Saronite'),
+(@GUID2+121,@POOL+121,@CHANCE2, 'Icecrown Ore Spawnpoint 122 Rich Saronite'),
+(@GUID3+121,@POOL+121,@CHANCE3, 'Icecrown Ore Spawnpoint 122 Titanium'),
+(@GUID1+122,@POOL+122,@CHANCE1, 'Icecrown Ore Spawnpoint 123 Saronite'),
+(@GUID2+122,@POOL+122,@CHANCE2, 'Icecrown Ore Spawnpoint 123 Rich Saronite'),
+(@GUID3+122,@POOL+122,@CHANCE3, 'Icecrown Ore Spawnpoint 123 Titanium'),
+(@GUID1+123,@POOL+123,@CHANCE1, 'Icecrown Ore Spawnpoint 124 Saronite'),
+(@GUID2+123,@POOL+123,@CHANCE2, 'Icecrown Ore Spawnpoint 124 Rich Saronite'),
+(@GUID3+123,@POOL+123,@CHANCE3, 'Icecrown Ore Spawnpoint 124 Titanium'),
+(@GUID1+124,@POOL+124,@CHANCE1, 'Icecrown Ore Spawnpoint 125 Saronite'),
+(@GUID2+124,@POOL+124,@CHANCE2, 'Icecrown Ore Spawnpoint 125 Rich Saronite'),
+(@GUID3+124,@POOL+124,@CHANCE3, 'Icecrown Ore Spawnpoint 125 Titanium'),
+(@GUID1+125,@POOL+125,@CHANCE1, 'Icecrown Ore Spawnpoint 126 Saronite'),
+(@GUID2+125,@POOL+125,@CHANCE2, 'Icecrown Ore Spawnpoint 126 Rich Saronite'),
+(@GUID3+125,@POOL+125,@CHANCE3, 'Icecrown Ore Spawnpoint 126 Titanium'),
+(@GUID1+126,@POOL+126,@CHANCE1, 'Icecrown Ore Spawnpoint 127 Saronite'),
+(@GUID2+126,@POOL+126,@CHANCE2, 'Icecrown Ore Spawnpoint 127 Rich Saronite'),
+(@GUID3+126,@POOL+126,@CHANCE3, 'Icecrown Ore Spawnpoint 127 Titanium'),
+(@GUID1+127,@POOL+127,@CHANCE1, 'Icecrown Ore Spawnpoint 128 Saronite'),
+(@GUID2+127,@POOL+127,@CHANCE2, 'Icecrown Ore Spawnpoint 128 Rich Saronite'),
+(@GUID3+127,@POOL+127,@CHANCE3, 'Icecrown Ore Spawnpoint 128 Titanium'),
+(@GUID1+128,@POOL+128,@CHANCE1, 'Icecrown Ore Spawnpoint 129 Saronite'),
+(@GUID2+128,@POOL+128,@CHANCE2, 'Icecrown Ore Spawnpoint 129 Rich Saronite'),
+(@GUID3+128,@POOL+128,@CHANCE3, 'Icecrown Ore Spawnpoint 129 Titanium'),
+(@GUID1+129,@POOL+129,@CHANCE1, 'Icecrown Ore Spawnpoint 130 Saronite'),
+(@GUID2+129,@POOL+129,@CHANCE2, 'Icecrown Ore Spawnpoint 130 Rich Saronite'),
+(@GUID3+129,@POOL+129,@CHANCE3, 'Icecrown Ore Spawnpoint 130 Titanium'),
+(@GUID1+130,@POOL+130,@CHANCE1, 'Icecrown Ore Spawnpoint 131 Saronite'),
+(@GUID2+130,@POOL+130,@CHANCE2, 'Icecrown Ore Spawnpoint 131 Rich Saronite'),
+(@GUID3+130,@POOL+130,@CHANCE3, 'Icecrown Ore Spawnpoint 131 Titanium'),
+(@GUID1+131,@POOL+131,@CHANCE1, 'Icecrown Ore Spawnpoint 132 Saronite'),
+(@GUID2+131,@POOL+131,@CHANCE2, 'Icecrown Ore Spawnpoint 132 Rich Saronite'),
+(@GUID3+131,@POOL+131,@CHANCE3, 'Icecrown Ore Spawnpoint 132 Titanium'),
+(@GUID1+132,@POOL+132,@CHANCE1, 'Icecrown Ore Spawnpoint 133 Saronite'),
+(@GUID2+132,@POOL+132,@CHANCE2, 'Icecrown Ore Spawnpoint 133 Rich Saronite'),
+(@GUID3+132,@POOL+132,@CHANCE3, 'Icecrown Ore Spawnpoint 133 Titanium'),
+(@GUID1+133,@POOL+133,@CHANCE1, 'Icecrown Ore Spawnpoint 134 Saronite'),
+(@GUID2+133,@POOL+133,@CHANCE2, 'Icecrown Ore Spawnpoint 134 Rich Saronite'),
+(@GUID3+133,@POOL+133,@CHANCE3, 'Icecrown Ore Spawnpoint 134 Titanium'),
+(@GUID1+134,@POOL+134,@CHANCE1, 'Icecrown Ore Spawnpoint 135 Saronite'),
+(@GUID2+134,@POOL+134,@CHANCE2, 'Icecrown Ore Spawnpoint 135 Rich Saronite'),
+(@GUID3+134,@POOL+134,@CHANCE3, 'Icecrown Ore Spawnpoint 135 Titanium'),
+(@GUID1+135,@POOL+135,@CHANCE1, 'Icecrown Ore Spawnpoint 136 Saronite'),
+(@GUID2+135,@POOL+135,@CHANCE2, 'Icecrown Ore Spawnpoint 136 Rich Saronite'),
+(@GUID3+135,@POOL+135,@CHANCE3, 'Icecrown Ore Spawnpoint 136 Titanium'),
+(@GUID1+136,@POOL+136,@CHANCE1, 'Icecrown Ore Spawnpoint 137 Saronite'),
+(@GUID2+136,@POOL+136,@CHANCE2, 'Icecrown Ore Spawnpoint 137 Rich Saronite'),
+(@GUID3+136,@POOL+136,@CHANCE3, 'Icecrown Ore Spawnpoint 137 Titanium'),
+(@GUID1+137,@POOL+137,@CHANCE1, 'Icecrown Ore Spawnpoint 138 Saronite'),
+(@GUID2+137,@POOL+137,@CHANCE2, 'Icecrown Ore Spawnpoint 138 Rich Saronite'),
+(@GUID3+137,@POOL+137,@CHANCE3, 'Icecrown Ore Spawnpoint 138 Titanium'),
+(@GUID1+138,@POOL+138,@CHANCE1, 'Icecrown Ore Spawnpoint 139 Saronite'),
+(@GUID2+138,@POOL+138,@CHANCE2, 'Icecrown Ore Spawnpoint 139 Rich Saronite'),
+(@GUID3+138,@POOL+138,@CHANCE3, 'Icecrown Ore Spawnpoint 139 Titanium'),
+(@GUID1+139,@POOL+139,@CHANCE1, 'Icecrown Ore Spawnpoint 140 Saronite'),
+(@GUID2+139,@POOL+139,@CHANCE2, 'Icecrown Ore Spawnpoint 140 Rich Saronite'),
+(@GUID3+139,@POOL+139,@CHANCE3, 'Icecrown Ore Spawnpoint 140 Titanium'),
+(@GUID1+140,@POOL+140,@CHANCE1, 'Icecrown Ore Spawnpoint 141 Saronite'),
+(@GUID2+140,@POOL+140,@CHANCE2, 'Icecrown Ore Spawnpoint 141 Rich Saronite'),
+(@GUID3+140,@POOL+140,@CHANCE3, 'Icecrown Ore Spawnpoint 141 Titanium'),
+(@GUID1+141,@POOL+141,@CHANCE1, 'Icecrown Ore Spawnpoint 142 Saronite'),
+(@GUID2+141,@POOL+141,@CHANCE2, 'Icecrown Ore Spawnpoint 142 Rich Saronite'),
+(@GUID3+141,@POOL+141,@CHANCE3, 'Icecrown Ore Spawnpoint 142 Titanium'),
+(@GUID1+142,@POOL+142,@CHANCE1, 'Icecrown Ore Spawnpoint 143 Saronite'),
+(@GUID2+142,@POOL+142,@CHANCE2, 'Icecrown Ore Spawnpoint 143 Rich Saronite'),
+(@GUID3+142,@POOL+142,@CHANCE3, 'Icecrown Ore Spawnpoint 143 Titanium'),
+(@GUID1+143,@POOL+143,@CHANCE1, 'Icecrown Ore Spawnpoint 144 Saronite'),
+(@GUID2+143,@POOL+143,@CHANCE2, 'Icecrown Ore Spawnpoint 144 Rich Saronite'),
+(@GUID3+143,@POOL+143,@CHANCE3, 'Icecrown Ore Spawnpoint 144 Titanium'),
+(@GUID1+144,@POOL+144,@CHANCE1, 'Icecrown Ore Spawnpoint 145 Saronite'),
+(@GUID2+144,@POOL+144,@CHANCE2, 'Icecrown Ore Spawnpoint 145 Rich Saronite'),
+(@GUID3+144,@POOL+144,@CHANCE3, 'Icecrown Ore Spawnpoint 145 Titanium'),
+(@GUID1+145,@POOL+145,@CHANCE1, 'Icecrown Ore Spawnpoint 146 Saronite'),
+(@GUID2+145,@POOL+145,@CHANCE2, 'Icecrown Ore Spawnpoint 146 Rich Saronite'),
+(@GUID3+145,@POOL+145,@CHANCE3, 'Icecrown Ore Spawnpoint 146 Titanium'),
+(@GUID1+146,@POOL+146,@CHANCE1, 'Icecrown Ore Spawnpoint 147 Saronite'),
+(@GUID2+146,@POOL+146,@CHANCE2, 'Icecrown Ore Spawnpoint 147 Rich Saronite'),
+(@GUID3+146,@POOL+146,@CHANCE3, 'Icecrown Ore Spawnpoint 147 Titanium'),
+(@GUID1+147,@POOL+147,@CHANCE1, 'Icecrown Ore Spawnpoint 148 Saronite'),
+(@GUID2+147,@POOL+147,@CHANCE2, 'Icecrown Ore Spawnpoint 148 Rich Saronite'),
+(@GUID3+147,@POOL+147,@CHANCE3, 'Icecrown Ore Spawnpoint 148 Titanium'),
+(@GUID1+148,@POOL+148,@CHANCE1, 'Icecrown Ore Spawnpoint 149 Saronite'),
+(@GUID2+148,@POOL+148,@CHANCE2, 'Icecrown Ore Spawnpoint 149 Rich Saronite'),
+(@GUID3+148,@POOL+148,@CHANCE3, 'Icecrown Ore Spawnpoint 149 Titanium'),
+(@GUID1+149,@POOL+149,@CHANCE1, 'Icecrown Ore Spawnpoint 150 Saronite'),
+(@GUID2+149,@POOL+149,@CHANCE2, 'Icecrown Ore Spawnpoint 150 Rich Saronite'),
+(@GUID3+149,@POOL+149,@CHANCE3, 'Icecrown Ore Spawnpoint 150 Titanium'),
+(@GUID1+150,@POOL+150,@CHANCE1, 'Icecrown Ore Spawnpoint 151 Saronite'),
+(@GUID2+150,@POOL+150,@CHANCE2, 'Icecrown Ore Spawnpoint 151 Rich Saronite'),
+(@GUID3+150,@POOL+150,@CHANCE3, 'Icecrown Ore Spawnpoint 151 Titanium'),
+(@GUID1+151,@POOL+151,@CHANCE1, 'Icecrown Ore Spawnpoint 152 Saronite'),
+(@GUID2+151,@POOL+151,@CHANCE2, 'Icecrown Ore Spawnpoint 152 Rich Saronite'),
+(@GUID3+151,@POOL+151,@CHANCE3, 'Icecrown Ore Spawnpoint 152 Titanium'),
+(@GUID1+152,@POOL+152,@CHANCE1, 'Icecrown Ore Spawnpoint 153 Saronite'),
+(@GUID2+152,@POOL+152,@CHANCE2, 'Icecrown Ore Spawnpoint 153 Rich Saronite'),
+(@GUID3+152,@POOL+152,@CHANCE3, 'Icecrown Ore Spawnpoint 153 Titanium'),
+(@GUID1+153,@POOL+153,@CHANCE1, 'Icecrown Ore Spawnpoint 154 Saronite'),
+(@GUID2+153,@POOL+153,@CHANCE2, 'Icecrown Ore Spawnpoint 154 Rich Saronite'),
+(@GUID3+153,@POOL+153,@CHANCE3, 'Icecrown Ore Spawnpoint 154 Titanium'),
+(@GUID1+154,@POOL+154,@CHANCE1, 'Icecrown Ore Spawnpoint 155 Saronite'),
+(@GUID2+154,@POOL+154,@CHANCE2, 'Icecrown Ore Spawnpoint 155 Rich Saronite'),
+(@GUID3+154,@POOL+154,@CHANCE3, 'Icecrown Ore Spawnpoint 155 Titanium'),
+(@GUID1+155,@POOL+155,@CHANCE1, 'Icecrown Ore Spawnpoint 156 Saronite'),
+(@GUID2+155,@POOL+155,@CHANCE2, 'Icecrown Ore Spawnpoint 156 Rich Saronite'),
+(@GUID3+155,@POOL+155,@CHANCE3, 'Icecrown Ore Spawnpoint 156 Titanium'),
+(@GUID1+156,@POOL+156,@CHANCE1, 'Icecrown Ore Spawnpoint 157 Saronite'),
+(@GUID2+156,@POOL+156,@CHANCE2, 'Icecrown Ore Spawnpoint 157 Rich Saronite'),
+(@GUID3+156,@POOL+156,@CHANCE3, 'Icecrown Ore Spawnpoint 157 Titanium'),
+(@GUID1+157,@POOL+157,@CHANCE1, 'Icecrown Ore Spawnpoint 158 Saronite'),
+(@GUID2+157,@POOL+157,@CHANCE2, 'Icecrown Ore Spawnpoint 158 Rich Saronite'),
+(@GUID3+157,@POOL+157,@CHANCE3, 'Icecrown Ore Spawnpoint 158 Titanium'),
+(@GUID1+158,@POOL+158,@CHANCE1, 'Icecrown Ore Spawnpoint 159 Saronite'),
+(@GUID2+158,@POOL+158,@CHANCE2, 'Icecrown Ore Spawnpoint 159 Rich Saronite'),
+(@GUID3+158,@POOL+158,@CHANCE3, 'Icecrown Ore Spawnpoint 159 Titanium'),
+(@GUID1+159,@POOL+159,@CHANCE1, 'Icecrown Ore Spawnpoint 160 Saronite'),
+(@GUID2+159,@POOL+159,@CHANCE2, 'Icecrown Ore Spawnpoint 160 Rich Saronite'),
+(@GUID3+159,@POOL+159,@CHANCE3, 'Icecrown Ore Spawnpoint 160 Titanium'),
+(@GUID1+160,@POOL+160,@CHANCE1, 'Icecrown Ore Spawnpoint 161 Saronite'),
+(@GUID2+160,@POOL+160,@CHANCE2, 'Icecrown Ore Spawnpoint 161 Rich Saronite'),
+(@GUID3+160,@POOL+160,@CHANCE3, 'Icecrown Ore Spawnpoint 161 Titanium'),
+(@GUID1+161,@POOL+161,@CHANCE1, 'Icecrown Ore Spawnpoint 162 Saronite'),
+(@GUID2+161,@POOL+161,@CHANCE2, 'Icecrown Ore Spawnpoint 162 Rich Saronite'),
+(@GUID3+161,@POOL+161,@CHANCE3, 'Icecrown Ore Spawnpoint 162 Titanium'),
+(@GUID1+162,@POOL+162,@CHANCE1, 'Icecrown Ore Spawnpoint 163 Saronite'),
+(@GUID2+162,@POOL+162,@CHANCE2, 'Icecrown Ore Spawnpoint 163 Rich Saronite'),
+(@GUID3+162,@POOL+162,@CHANCE3, 'Icecrown Ore Spawnpoint 163 Titanium'),
+(@GUID1+163,@POOL+163,@CHANCE1, 'Icecrown Ore Spawnpoint 164 Saronite'),
+(@GUID2+163,@POOL+163,@CHANCE2, 'Icecrown Ore Spawnpoint 164 Rich Saronite'),
+(@GUID3+163,@POOL+163,@CHANCE3, 'Icecrown Ore Spawnpoint 164 Titanium'),
+(@GUID1+164,@POOL+164,@CHANCE1, 'Icecrown Ore Spawnpoint 165 Saronite'),
+(@GUID2+164,@POOL+164,@CHANCE2, 'Icecrown Ore Spawnpoint 165 Rich Saronite'),
+(@GUID3+164,@POOL+164,@CHANCE3, 'Icecrown Ore Spawnpoint 165 Titanium'),
+(@GUID1+165,@POOL+165,@CHANCE1, 'Icecrown Ore Spawnpoint 166 Saronite'),
+(@GUID2+165,@POOL+165,@CHANCE2, 'Icecrown Ore Spawnpoint 166 Rich Saronite'),
+(@GUID3+165,@POOL+165,@CHANCE3, 'Icecrown Ore Spawnpoint 166 Titanium'),
+(@GUID1+166,@POOL+166,@CHANCE1, 'Icecrown Ore Spawnpoint 167 Saronite'),
+(@GUID2+166,@POOL+166,@CHANCE2, 'Icecrown Ore Spawnpoint 167 Rich Saronite'),
+(@GUID3+166,@POOL+166,@CHANCE3, 'Icecrown Ore Spawnpoint 167 Titanium'),
+(@GUID1+167,@POOL+167,@CHANCE1, 'Icecrown Ore Spawnpoint 168 Saronite'),
+(@GUID2+167,@POOL+167,@CHANCE2, 'Icecrown Ore Spawnpoint 168 Rich Saronite'),
+(@GUID3+167,@POOL+167,@CHANCE3, 'Icecrown Ore Spawnpoint 168 Titanium'),
+(@GUID1+168,@POOL+168,@CHANCE1, 'Icecrown Ore Spawnpoint 169 Saronite'),
+(@GUID2+168,@POOL+168,@CHANCE2, 'Icecrown Ore Spawnpoint 169 Rich Saronite'),
+(@GUID3+168,@POOL+168,@CHANCE3, 'Icecrown Ore Spawnpoint 169 Titanium'),
+(@GUID1+169,@POOL+169,@CHANCE1, 'Icecrown Ore Spawnpoint 170 Saronite'),
+(@GUID2+169,@POOL+169,@CHANCE2, 'Icecrown Ore Spawnpoint 170 Rich Saronite'),
+(@GUID3+169,@POOL+169,@CHANCE3, 'Icecrown Ore Spawnpoint 170 Titanium'),
+(@GUID1+170,@POOL+170,@CHANCE1, 'Icecrown Ore Spawnpoint 171 Saronite'),
+(@GUID2+170,@POOL+170,@CHANCE2, 'Icecrown Ore Spawnpoint 171 Rich Saronite'),
+(@GUID3+170,@POOL+170,@CHANCE3, 'Icecrown Ore Spawnpoint 171 Titanium'),
+(@GUID1+171,@POOL+171,@CHANCE1, 'Icecrown Ore Spawnpoint 172 Saronite'),
+(@GUID2+171,@POOL+171,@CHANCE2, 'Icecrown Ore Spawnpoint 172 Rich Saronite'),
+(@GUID3+171,@POOL+171,@CHANCE3, 'Icecrown Ore Spawnpoint 172 Titanium'),
+(@GUID1+172,@POOL+172,@CHANCE1, 'Icecrown Ore Spawnpoint 173 Saronite'),
+(@GUID2+172,@POOL+172,@CHANCE2, 'Icecrown Ore Spawnpoint 173 Rich Saronite'),
+(@GUID3+172,@POOL+172,@CHANCE3, 'Icecrown Ore Spawnpoint 173 Titanium'),
+(@GUID1+173,@POOL+173,@CHANCE1, 'Icecrown Ore Spawnpoint 174 Saronite'),
+(@GUID2+173,@POOL+173,@CHANCE2, 'Icecrown Ore Spawnpoint 174 Rich Saronite'),
+(@GUID3+173,@POOL+173,@CHANCE3, 'Icecrown Ore Spawnpoint 174 Titanium'),
+(@GUID1+174,@POOL+174,@CHANCE1, 'Icecrown Ore Spawnpoint 175 Saronite'),
+(@GUID2+174,@POOL+174,@CHANCE2, 'Icecrown Ore Spawnpoint 175 Rich Saronite'),
+(@GUID3+174,@POOL+174,@CHANCE3, 'Icecrown Ore Spawnpoint 175 Titanium'),
+(@GUID1+175,@POOL+175,@CHANCE1, 'Icecrown Ore Spawnpoint 176 Saronite'),
+(@GUID2+175,@POOL+175,@CHANCE2, 'Icecrown Ore Spawnpoint 176 Rich Saronite'),
+(@GUID3+175,@POOL+175,@CHANCE3, 'Icecrown Ore Spawnpoint 176 Titanium'),
+(@GUID1+176,@POOL+176,@CHANCE1, 'Icecrown Ore Spawnpoint 177 Saronite'),
+(@GUID2+176,@POOL+176,@CHANCE2, 'Icecrown Ore Spawnpoint 177 Rich Saronite'),
+(@GUID3+176,@POOL+176,@CHANCE3, 'Icecrown Ore Spawnpoint 177 Titanium'),
+(@GUID1+177,@POOL+177,@CHANCE1, 'Icecrown Ore Spawnpoint 178 Saronite'),
+(@GUID2+177,@POOL+177,@CHANCE2, 'Icecrown Ore Spawnpoint 178 Rich Saronite'),
+(@GUID3+177,@POOL+177,@CHANCE3, 'Icecrown Ore Spawnpoint 178 Titanium'),
+(@GUID1+178,@POOL+178,@CHANCE1, 'Icecrown Ore Spawnpoint 179 Saronite'),
+(@GUID2+178,@POOL+178,@CHANCE2, 'Icecrown Ore Spawnpoint 179 Rich Saronite'),
+(@GUID3+178,@POOL+178,@CHANCE3, 'Icecrown Ore Spawnpoint 179 Titanium'),
+(@GUID1+179,@POOL+179,@CHANCE1, 'Icecrown Ore Spawnpoint 180 Saronite'),
+(@GUID2+179,@POOL+179,@CHANCE2, 'Icecrown Ore Spawnpoint 180 Rich Saronite'),
+(@GUID3+179,@POOL+179,@CHANCE3, 'Icecrown Ore Spawnpoint 180 Titanium'),
+(@GUID1+180,@POOL+180,@CHANCE1, 'Icecrown Ore Spawnpoint 181 Saronite'),
+(@GUID2+180,@POOL+180,@CHANCE2, 'Icecrown Ore Spawnpoint 181 Rich Saronite'),
+(@GUID3+180,@POOL+180,@CHANCE3, 'Icecrown Ore Spawnpoint 181 Titanium'),
+(@GUID1+181,@POOL+181,@CHANCE1, 'Icecrown Ore Spawnpoint 182 Saronite'),
+(@GUID2+181,@POOL+181,@CHANCE2, 'Icecrown Ore Spawnpoint 182 Rich Saronite'),
+(@GUID3+181,@POOL+181,@CHANCE3, 'Icecrown Ore Spawnpoint 182 Titanium'),
+(@GUID1+182,@POOL+182,@CHANCE1, 'Icecrown Ore Spawnpoint 183 Saronite'),
+(@GUID2+182,@POOL+182,@CHANCE2, 'Icecrown Ore Spawnpoint 183 Rich Saronite'),
+(@GUID3+182,@POOL+182,@CHANCE3, 'Icecrown Ore Spawnpoint 183 Titanium'),
+(@GUID1+183,@POOL+183,@CHANCE1, 'Icecrown Ore Spawnpoint 184 Saronite'),
+(@GUID2+183,@POOL+183,@CHANCE2, 'Icecrown Ore Spawnpoint 184 Rich Saronite'),
+(@GUID3+183,@POOL+183,@CHANCE3, 'Icecrown Ore Spawnpoint 184 Titanium'),
+(@GUID1+184,@POOL+184,@CHANCE1, 'Icecrown Ore Spawnpoint 185 Saronite'),
+(@GUID2+184,@POOL+184,@CHANCE2, 'Icecrown Ore Spawnpoint 185 Rich Saronite'),
+(@GUID3+184,@POOL+184,@CHANCE3, 'Icecrown Ore Spawnpoint 185 Titanium'),
+(@GUID1+185,@POOL+185,@CHANCE1, 'Icecrown Ore Spawnpoint 186 Saronite'),
+(@GUID2+185,@POOL+185,@CHANCE2, 'Icecrown Ore Spawnpoint 186 Rich Saronite'),
+(@GUID3+185,@POOL+185,@CHANCE3, 'Icecrown Ore Spawnpoint 186 Titanium'),
+(@GUID1+186,@POOL+186,@CHANCE1, 'Icecrown Ore Spawnpoint 187 Saronite'),
+(@GUID2+186,@POOL+186,@CHANCE2, 'Icecrown Ore Spawnpoint 187 Rich Saronite'),
+(@GUID3+186,@POOL+186,@CHANCE3, 'Icecrown Ore Spawnpoint 187 Titanium'),
+(@GUID1+187,@POOL+187,@CHANCE1, 'Icecrown Ore Spawnpoint 188 Saronite'),
+(@GUID2+187,@POOL+187,@CHANCE2, 'Icecrown Ore Spawnpoint 188 Rich Saronite'),
+(@GUID3+187,@POOL+187,@CHANCE3, 'Icecrown Ore Spawnpoint 188 Titanium'),
+(@GUID1+188,@POOL+188,@CHANCE1, 'Icecrown Ore Spawnpoint 189 Saronite'),
+(@GUID2+188,@POOL+188,@CHANCE2, 'Icecrown Ore Spawnpoint 189 Rich Saronite'),
+(@GUID3+188,@POOL+188,@CHANCE3, 'Icecrown Ore Spawnpoint 189 Titanium'),
+(@GUID1+189,@POOL+189,@CHANCE1, 'Icecrown Ore Spawnpoint 190 Saronite'),
+(@GUID2+189,@POOL+189,@CHANCE2, 'Icecrown Ore Spawnpoint 190 Rich Saronite'),
+(@GUID3+189,@POOL+189,@CHANCE3, 'Icecrown Ore Spawnpoint 190 Titanium'),
+(@GUID1+190,@POOL+190,@CHANCE1, 'Icecrown Ore Spawnpoint 191 Saronite'),
+(@GUID2+190,@POOL+190,@CHANCE2, 'Icecrown Ore Spawnpoint 191 Rich Saronite'),
+(@GUID3+190,@POOL+190,@CHANCE3, 'Icecrown Ore Spawnpoint 191 Titanium'),
+(@GUID1+191,@POOL+191,@CHANCE1, 'Icecrown Ore Spawnpoint 192 Saronite'),
+(@GUID2+191,@POOL+191,@CHANCE2, 'Icecrown Ore Spawnpoint 192 Rich Saronite'),
+(@GUID3+191,@POOL+191,@CHANCE3, 'Icecrown Ore Spawnpoint 192 Titanium'),
+(@GUID1+192,@POOL+192,@CHANCE1, 'Icecrown Ore Spawnpoint 193 Saronite'),
+(@GUID2+192,@POOL+192,@CHANCE2, 'Icecrown Ore Spawnpoint 193 Rich Saronite'),
+(@GUID3+192,@POOL+192,@CHANCE3, 'Icecrown Ore Spawnpoint 193 Titanium'),
+(@GUID1+193,@POOL+193,@CHANCE1, 'Icecrown Ore Spawnpoint 194 Saronite'),
+(@GUID2+193,@POOL+193,@CHANCE2, 'Icecrown Ore Spawnpoint 194 Rich Saronite'),
+(@GUID3+193,@POOL+193,@CHANCE3, 'Icecrown Ore Spawnpoint 194 Titanium'),
+(@GUID1+194,@POOL+194,@CHANCE1, 'Icecrown Ore Spawnpoint 195 Saronite'),
+(@GUID2+194,@POOL+194,@CHANCE2, 'Icecrown Ore Spawnpoint 195 Rich Saronite'),
+(@GUID3+194,@POOL+194,@CHANCE3, 'Icecrown Ore Spawnpoint 195 Titanium'),
+(@GUID1+195,@POOL+195,@CHANCE1, 'Icecrown Ore Spawnpoint 196 Saronite'),
+(@GUID2+195,@POOL+195,@CHANCE2, 'Icecrown Ore Spawnpoint 196 Rich Saronite'),
+(@GUID3+195,@POOL+195,@CHANCE3, 'Icecrown Ore Spawnpoint 196 Titanium'),
+(@GUID1+196,@POOL+196,@CHANCE1, 'Icecrown Ore Spawnpoint 197 Saronite'),
+(@GUID2+196,@POOL+196,@CHANCE2, 'Icecrown Ore Spawnpoint 197 Rich Saronite'),
+(@GUID3+196,@POOL+196,@CHANCE3, 'Icecrown Ore Spawnpoint 197 Titanium'),
+(@GUID1+197,@POOL+197,@CHANCE1, 'Icecrown Ore Spawnpoint 198 Saronite'),
+(@GUID2+197,@POOL+197,@CHANCE2, 'Icecrown Ore Spawnpoint 198 Rich Saronite'),
+(@GUID3+197,@POOL+197,@CHANCE3, 'Icecrown Ore Spawnpoint 198 Titanium'),
+(@GUID1+198,@POOL+198,@CHANCE1, 'Icecrown Ore Spawnpoint 199 Saronite'),
+(@GUID2+198,@POOL+198,@CHANCE2, 'Icecrown Ore Spawnpoint 199 Rich Saronite'),
+(@GUID3+198,@POOL+198,@CHANCE3, 'Icecrown Ore Spawnpoint 199 Titanium'),
+(@GUID1+199,@POOL+199,@CHANCE1, 'Icecrown Ore Spawnpoint 200 Saronite'),
+(@GUID2+199,@POOL+199,@CHANCE2, 'Icecrown Ore Spawnpoint 200 Rich Saronite'),
+(@GUID3+199,@POOL+199,@CHANCE3, 'Icecrown Ore Spawnpoint 200 Titanium'),
+(@GUID1+200,@POOL+200,@CHANCE1, 'Icecrown Ore Spawnpoint 201 Saronite'),
+(@GUID2+200,@POOL+200,@CHANCE2, 'Icecrown Ore Spawnpoint 201 Rich Saronite'),
+(@GUID3+200,@POOL+200,@CHANCE3, 'Icecrown Ore Spawnpoint 201 Titanium'),
+(@GUID1+201,@POOL+201,@CHANCE1, 'Icecrown Ore Spawnpoint 202 Saronite'),
+(@GUID2+201,@POOL+201,@CHANCE2, 'Icecrown Ore Spawnpoint 202 Rich Saronite'),
+(@GUID3+201,@POOL+201,@CHANCE3, 'Icecrown Ore Spawnpoint 202 Titanium'),
+(@GUID1+202,@POOL+202,@CHANCE1, 'Icecrown Ore Spawnpoint 203 Saronite'),
+(@GUID2+202,@POOL+202,@CHANCE2, 'Icecrown Ore Spawnpoint 203 Rich Saronite'),
+(@GUID3+202,@POOL+202,@CHANCE3, 'Icecrown Ore Spawnpoint 203 Titanium'),
+(@GUID1+203,@POOL+203,@CHANCE1, 'Icecrown Ore Spawnpoint 204 Saronite'),
+(@GUID2+203,@POOL+203,@CHANCE2, 'Icecrown Ore Spawnpoint 204 Rich Saronite'),
+(@GUID3+203,@POOL+203,@CHANCE3, 'Icecrown Ore Spawnpoint 204 Titanium'),
+(@GUID1+204,@POOL+204,@CHANCE1, 'Icecrown Ore Spawnpoint 205 Saronite'),
+(@GUID2+204,@POOL+204,@CHANCE2, 'Icecrown Ore Spawnpoint 205 Rich Saronite'),
+(@GUID3+204,@POOL+204,@CHANCE3, 'Icecrown Ore Spawnpoint 205 Titanium'),
+(@GUID1+205,@POOL+205,@CHANCE1, 'Icecrown Ore Spawnpoint 206 Saronite'),
+(@GUID2+205,@POOL+205,@CHANCE2, 'Icecrown Ore Spawnpoint 206 Rich Saronite'),
+(@GUID3+205,@POOL+205,@CHANCE3, 'Icecrown Ore Spawnpoint 206 Titanium'),
+(@GUID1+206,@POOL+206,@CHANCE1, 'Icecrown Ore Spawnpoint 207 Saronite'),
+(@GUID2+206,@POOL+206,@CHANCE2, 'Icecrown Ore Spawnpoint 207 Rich Saronite'),
+(@GUID3+206,@POOL+206,@CHANCE3, 'Icecrown Ore Spawnpoint 207 Titanium'),
+(@GUID1+207,@POOL+207,@CHANCE1, 'Icecrown Ore Spawnpoint 208 Saronite'),
+(@GUID2+207,@POOL+207,@CHANCE2, 'Icecrown Ore Spawnpoint 208 Rich Saronite'),
+(@GUID3+207,@POOL+207,@CHANCE3, 'Icecrown Ore Spawnpoint 208 Titanium'),
+(@GUID1+208,@POOL+208,@CHANCE1, 'Icecrown Ore Spawnpoint 209 Saronite'),
+(@GUID2+208,@POOL+208,@CHANCE2, 'Icecrown Ore Spawnpoint 209 Rich Saronite'),
+(@GUID3+208,@POOL+208,@CHANCE3, 'Icecrown Ore Spawnpoint 209 Titanium'),
+(@GUID1+209,@POOL+209,@CHANCE1, 'Icecrown Ore Spawnpoint 210 Saronite'),
+(@GUID2+209,@POOL+209,@CHANCE2, 'Icecrown Ore Spawnpoint 210 Rich Saronite'),
+(@GUID3+209,@POOL+209,@CHANCE3, 'Icecrown Ore Spawnpoint 210 Titanium'),
+(@GUID1+210,@POOL+210,@CHANCE1, 'Icecrown Ore Spawnpoint 211 Saronite'),
+(@GUID2+210,@POOL+210,@CHANCE2, 'Icecrown Ore Spawnpoint 211 Rich Saronite'),
+(@GUID3+210,@POOL+210,@CHANCE3, 'Icecrown Ore Spawnpoint 211 Titanium'),
+(@GUID1+211,@POOL+211,@CHANCE1, 'Icecrown Ore Spawnpoint 212 Saronite'),
+(@GUID2+211,@POOL+211,@CHANCE2, 'Icecrown Ore Spawnpoint 212 Rich Saronite'),
+(@GUID3+211,@POOL+211,@CHANCE3, 'Icecrown Ore Spawnpoint 212 Titanium'),
+(@GUID1+212,@POOL+212,@CHANCE1, 'Icecrown Ore Spawnpoint 213 Saronite'),
+(@GUID2+212,@POOL+212,@CHANCE2, 'Icecrown Ore Spawnpoint 213 Rich Saronite'),
+(@GUID3+212,@POOL+212,@CHANCE3, 'Icecrown Ore Spawnpoint 213 Titanium'),
+(@GUID1+213,@POOL+213,@CHANCE1, 'Icecrown Ore Spawnpoint 214 Saronite'),
+(@GUID2+213,@POOL+213,@CHANCE2, 'Icecrown Ore Spawnpoint 214 Rich Saronite'),
+(@GUID3+213,@POOL+213,@CHANCE3, 'Icecrown Ore Spawnpoint 214 Titanium'),
+(@GUID1+214,@POOL+214,@CHANCE1, 'Icecrown Ore Spawnpoint 215 Saronite'),
+(@GUID2+214,@POOL+214,@CHANCE2, 'Icecrown Ore Spawnpoint 215 Rich Saronite'),
+(@GUID3+214,@POOL+214,@CHANCE3, 'Icecrown Ore Spawnpoint 215 Titanium'),
+(@GUID1+215,@POOL+215,@CHANCE1, 'Icecrown Ore Spawnpoint 216 Saronite'),
+(@GUID2+215,@POOL+215,@CHANCE2, 'Icecrown Ore Spawnpoint 216 Rich Saronite'),
+(@GUID3+215,@POOL+215,@CHANCE3, 'Icecrown Ore Spawnpoint 216 Titanium'),
+(@GUID1+216,@POOL+216,@CHANCE1, 'Icecrown Ore Spawnpoint 217 Saronite'),
+(@GUID2+216,@POOL+216,@CHANCE2, 'Icecrown Ore Spawnpoint 217 Rich Saronite'),
+(@GUID3+216,@POOL+216,@CHANCE3, 'Icecrown Ore Spawnpoint 217 Titanium'),
+(@GUID1+217,@POOL+217,@CHANCE1, 'Icecrown Ore Spawnpoint 218 Saronite'),
+(@GUID2+217,@POOL+217,@CHANCE2, 'Icecrown Ore Spawnpoint 218 Rich Saronite'),
+(@GUID3+217,@POOL+217,@CHANCE3, 'Icecrown Ore Spawnpoint 218 Titanium'),
+(@GUID1+218,@POOL+218,@CHANCE1, 'Icecrown Ore Spawnpoint 219 Saronite'),
+(@GUID2+218,@POOL+218,@CHANCE2, 'Icecrown Ore Spawnpoint 219 Rich Saronite'),
+(@GUID3+218,@POOL+218,@CHANCE3, 'Icecrown Ore Spawnpoint 219 Titanium'),
+(@GUID1+219,@POOL+219,@CHANCE1, 'Icecrown Ore Spawnpoint 220 Saronite'),
+(@GUID2+219,@POOL+219,@CHANCE2, 'Icecrown Ore Spawnpoint 220 Rich Saronite'),
+(@GUID3+219,@POOL+219,@CHANCE3, 'Icecrown Ore Spawnpoint 220 Titanium'),
+(@GUID1+220,@POOL+220,@CHANCE1, 'Icecrown Ore Spawnpoint 221 Saronite'),
+(@GUID2+220,@POOL+220,@CHANCE2, 'Icecrown Ore Spawnpoint 221 Rich Saronite'),
+(@GUID3+220,@POOL+220,@CHANCE3, 'Icecrown Ore Spawnpoint 221 Titanium'),
+(@GUID1+221,@POOL+221,@CHANCE1, 'Icecrown Ore Spawnpoint 222 Saronite'),
+(@GUID2+221,@POOL+221,@CHANCE2, 'Icecrown Ore Spawnpoint 222 Rich Saronite'),
+(@GUID3+221,@POOL+221,@CHANCE3, 'Icecrown Ore Spawnpoint 222 Titanium'),
+(@GUID1+222,@POOL+222,@CHANCE1, 'Icecrown Ore Spawnpoint 223 Saronite'),
+(@GUID2+222,@POOL+222,@CHANCE2, 'Icecrown Ore Spawnpoint 223 Rich Saronite'),
+(@GUID3+222,@POOL+222,@CHANCE3, 'Icecrown Ore Spawnpoint 223 Titanium'),
+(@GUID1+223,@POOL+223,@CHANCE1, 'Icecrown Ore Spawnpoint 224 Saronite'),
+(@GUID2+223,@POOL+223,@CHANCE2, 'Icecrown Ore Spawnpoint 224 Rich Saronite'),
+(@GUID3+223,@POOL+223,@CHANCE3, 'Icecrown Ore Spawnpoint 224 Titanium'),
+(@GUID1+224,@POOL+224,@CHANCE1, 'Icecrown Ore Spawnpoint 225 Saronite'),
+(@GUID2+224,@POOL+224,@CHANCE2, 'Icecrown Ore Spawnpoint 225 Rich Saronite'),
+(@GUID3+224,@POOL+224,@CHANCE3, 'Icecrown Ore Spawnpoint 225 Titanium'),
+(@GUID1+225,@POOL+225,@CHANCE1, 'Icecrown Ore Spawnpoint 226 Saronite'),
+(@GUID2+225,@POOL+225,@CHANCE2, 'Icecrown Ore Spawnpoint 226 Rich Saronite'),
+(@GUID3+225,@POOL+225,@CHANCE3, 'Icecrown Ore Spawnpoint 226 Titanium'),
+(@GUID1+226,@POOL+226,@CHANCE1, 'Icecrown Ore Spawnpoint 227 Saronite'),
+(@GUID2+226,@POOL+226,@CHANCE2, 'Icecrown Ore Spawnpoint 227 Rich Saronite'),
+(@GUID3+226,@POOL+226,@CHANCE3, 'Icecrown Ore Spawnpoint 227 Titanium'),
+(@GUID1+227,@POOL+227,@CHANCE1, 'Icecrown Ore Spawnpoint 228 Saronite'),
+(@GUID2+227,@POOL+227,@CHANCE2, 'Icecrown Ore Spawnpoint 228 Rich Saronite'),
+(@GUID3+227,@POOL+227,@CHANCE3, 'Icecrown Ore Spawnpoint 228 Titanium'),
+(@GUID1+228,@POOL+228,@CHANCE1, 'Icecrown Ore Spawnpoint 229 Saronite'),
+(@GUID2+228,@POOL+228,@CHANCE2, 'Icecrown Ore Spawnpoint 229 Rich Saronite'),
+(@GUID3+228,@POOL+228,@CHANCE3, 'Icecrown Ore Spawnpoint 229 Titanium'),
+(@GUID1+229,@POOL+229,@CHANCE1, 'Icecrown Ore Spawnpoint 230 Saronite'),
+(@GUID2+229,@POOL+229,@CHANCE2, 'Icecrown Ore Spawnpoint 230 Rich Saronite'),
+(@GUID3+229,@POOL+229,@CHANCE3, 'Icecrown Ore Spawnpoint 230 Titanium'),
+(@GUID1+230,@POOL+230,@CHANCE1, 'Icecrown Ore Spawnpoint 231 Saronite'),
+(@GUID2+230,@POOL+230,@CHANCE2, 'Icecrown Ore Spawnpoint 231 Rich Saronite'),
+(@GUID3+230,@POOL+230,@CHANCE3, 'Icecrown Ore Spawnpoint 231 Titanium'),
+(@GUID1+231,@POOL+231,@CHANCE1, 'Icecrown Ore Spawnpoint 232 Saronite'),
+(@GUID2+231,@POOL+231,@CHANCE2, 'Icecrown Ore Spawnpoint 232 Rich Saronite'),
+(@GUID3+231,@POOL+231,@CHANCE3, 'Icecrown Ore Spawnpoint 232 Titanium'),
+(@GUID1+232,@POOL+232,@CHANCE1, 'Icecrown Ore Spawnpoint 233 Saronite'),
+(@GUID2+232,@POOL+232,@CHANCE2, 'Icecrown Ore Spawnpoint 233 Rich Saronite'),
+(@GUID3+232,@POOL+232,@CHANCE3, 'Icecrown Ore Spawnpoint 233 Titanium'),
+(@GUID1+233,@POOL+233,@CHANCE1, 'Icecrown Ore Spawnpoint 234 Saronite'),
+(@GUID2+233,@POOL+233,@CHANCE2, 'Icecrown Ore Spawnpoint 234 Rich Saronite'),
+(@GUID3+233,@POOL+233,@CHANCE3, 'Icecrown Ore Spawnpoint 234 Titanium'),
+(@GUID1+234,@POOL+234,@CHANCE1, 'Icecrown Ore Spawnpoint 235 Saronite'),
+(@GUID2+234,@POOL+234,@CHANCE2, 'Icecrown Ore Spawnpoint 235 Rich Saronite'),
+(@GUID3+234,@POOL+234,@CHANCE3, 'Icecrown Ore Spawnpoint 235 Titanium');
+-- Add each pool to pool template
+DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@POOL+0,1, 'Icecrown Ore Spawnpoint 1'),
+(@POOL+1,1, 'Icecrown Ore Spawnpoint 2'),
+(@POOL+2,1, 'Icecrown Ore Spawnpoint 3'),
+(@POOL+3,1, 'Icecrown Ore Spawnpoint 4'),
+(@POOL+4,1, 'Icecrown Ore Spawnpoint 5'),
+(@POOL+5,1, 'Icecrown Ore Spawnpoint 6'),
+(@POOL+6,1, 'Icecrown Ore Spawnpoint 7'),
+(@POOL+7,1, 'Icecrown Ore Spawnpoint 8'),
+(@POOL+8,1, 'Icecrown Ore Spawnpoint 9'),
+(@POOL+9,1, 'Icecrown Ore Spawnpoint 10'),
+(@POOL+10,1, 'Icecrown Ore Spawnpoint 11'),
+(@POOL+11,1, 'Icecrown Ore Spawnpoint 12'),
+(@POOL+12,1, 'Icecrown Ore Spawnpoint 13'),
+(@POOL+13,1, 'Icecrown Ore Spawnpoint 14'),
+(@POOL+14,1, 'Icecrown Ore Spawnpoint 15'),
+(@POOL+15,1, 'Icecrown Ore Spawnpoint 16'),
+(@POOL+16,1, 'Icecrown Ore Spawnpoint 17'),
+(@POOL+17,1, 'Icecrown Ore Spawnpoint 18'),
+(@POOL+18,1, 'Icecrown Ore Spawnpoint 19'),
+(@POOL+19,1, 'Icecrown Ore Spawnpoint 20'),
+(@POOL+20,1, 'Icecrown Ore Spawnpoint 21'),
+(@POOL+21,1, 'Icecrown Ore Spawnpoint 22'),
+(@POOL+22,1, 'Icecrown Ore Spawnpoint 23'),
+(@POOL+23,1, 'Icecrown Ore Spawnpoint 24'),
+(@POOL+24,1, 'Icecrown Ore Spawnpoint 25'),
+(@POOL+25,1, 'Icecrown Ore Spawnpoint 26'),
+(@POOL+26,1, 'Icecrown Ore Spawnpoint 27'),
+(@POOL+27,1, 'Icecrown Ore Spawnpoint 28'),
+(@POOL+28,1, 'Icecrown Ore Spawnpoint 29'),
+(@POOL+29,1, 'Icecrown Ore Spawnpoint 30'),
+(@POOL+30,1, 'Icecrown Ore Spawnpoint 31'),
+(@POOL+31,1, 'Icecrown Ore Spawnpoint 32'),
+(@POOL+32,1, 'Icecrown Ore Spawnpoint 33'),
+(@POOL+33,1, 'Icecrown Ore Spawnpoint 34'),
+(@POOL+34,1, 'Icecrown Ore Spawnpoint 35'),
+(@POOL+35,1, 'Icecrown Ore Spawnpoint 36'),
+(@POOL+36,1, 'Icecrown Ore Spawnpoint 37'),
+(@POOL+37,1, 'Icecrown Ore Spawnpoint 38'),
+(@POOL+38,1, 'Icecrown Ore Spawnpoint 39'),
+(@POOL+39,1, 'Icecrown Ore Spawnpoint 40'),
+(@POOL+40,1, 'Icecrown Ore Spawnpoint 41'),
+(@POOL+41,1, 'Icecrown Ore Spawnpoint 42'),
+(@POOL+42,1, 'Icecrown Ore Spawnpoint 43'),
+(@POOL+43,1, 'Icecrown Ore Spawnpoint 44'),
+(@POOL+44,1, 'Icecrown Ore Spawnpoint 45'),
+(@POOL+45,1, 'Icecrown Ore Spawnpoint 46'),
+(@POOL+46,1, 'Icecrown Ore Spawnpoint 47'),
+(@POOL+47,1, 'Icecrown Ore Spawnpoint 48'),
+(@POOL+48,1, 'Icecrown Ore Spawnpoint 49'),
+(@POOL+49,1, 'Icecrown Ore Spawnpoint 50'),
+(@POOL+50,1, 'Icecrown Ore Spawnpoint 51'),
+(@POOL+51,1, 'Icecrown Ore Spawnpoint 52'),
+(@POOL+52,1, 'Icecrown Ore Spawnpoint 53'),
+(@POOL+53,1, 'Icecrown Ore Spawnpoint 54'),
+(@POOL+54,1, 'Icecrown Ore Spawnpoint 55'),
+(@POOL+55,1, 'Icecrown Ore Spawnpoint 56'),
+(@POOL+56,1, 'Icecrown Ore Spawnpoint 57'),
+(@POOL+57,1, 'Icecrown Ore Spawnpoint 58'),
+(@POOL+58,1, 'Icecrown Ore Spawnpoint 59'),
+(@POOL+59,1, 'Icecrown Ore Spawnpoint 60'),
+(@POOL+60,1, 'Icecrown Ore Spawnpoint 61'),
+(@POOL+61,1, 'Icecrown Ore Spawnpoint 62'),
+(@POOL+62,1, 'Icecrown Ore Spawnpoint 63'),
+(@POOL+63,1, 'Icecrown Ore Spawnpoint 64'),
+(@POOL+64,1, 'Icecrown Ore Spawnpoint 65'),
+(@POOL+65,1, 'Icecrown Ore Spawnpoint 66'),
+(@POOL+66,1, 'Icecrown Ore Spawnpoint 67'),
+(@POOL+67,1, 'Icecrown Ore Spawnpoint 68'),
+(@POOL+68,1, 'Icecrown Ore Spawnpoint 69'),
+(@POOL+69,1, 'Icecrown Ore Spawnpoint 70'),
+(@POOL+70,1, 'Icecrown Ore Spawnpoint 71'),
+(@POOL+71,1, 'Icecrown Ore Spawnpoint 72'),
+(@POOL+72,1, 'Icecrown Ore Spawnpoint 73'),
+(@POOL+73,1, 'Icecrown Ore Spawnpoint 74'),
+(@POOL+74,1, 'Icecrown Ore Spawnpoint 75'),
+(@POOL+75,1, 'Icecrown Ore Spawnpoint 76'),
+(@POOL+76,1, 'Icecrown Ore Spawnpoint 77'),
+(@POOL+77,1, 'Icecrown Ore Spawnpoint 78'),
+(@POOL+78,1, 'Icecrown Ore Spawnpoint 79'),
+(@POOL+79,1, 'Icecrown Ore Spawnpoint 80'),
+(@POOL+80,1, 'Icecrown Ore Spawnpoint 81'),
+(@POOL+81,1, 'Icecrown Ore Spawnpoint 82'),
+(@POOL+82,1, 'Icecrown Ore Spawnpoint 83'),
+(@POOL+83,1, 'Icecrown Ore Spawnpoint 84'),
+(@POOL+84,1, 'Icecrown Ore Spawnpoint 85'),
+(@POOL+85,1, 'Icecrown Ore Spawnpoint 86'),
+(@POOL+86,1, 'Icecrown Ore Spawnpoint 87'),
+(@POOL+87,1, 'Icecrown Ore Spawnpoint 88'),
+(@POOL+88,1, 'Icecrown Ore Spawnpoint 89'),
+(@POOL+89,1, 'Icecrown Ore Spawnpoint 90'),
+(@POOL+90,1, 'Icecrown Ore Spawnpoint 91'),
+(@POOL+91,1, 'Icecrown Ore Spawnpoint 92'),
+(@POOL+92,1, 'Icecrown Ore Spawnpoint 93'),
+(@POOL+93,1, 'Icecrown Ore Spawnpoint 94'),
+(@POOL+94,1, 'Icecrown Ore Spawnpoint 95'),
+(@POOL+95,1, 'Icecrown Ore Spawnpoint 96'),
+(@POOL+96,1, 'Icecrown Ore Spawnpoint 97'),
+(@POOL+97,1, 'Icecrown Ore Spawnpoint 98'),
+(@POOL+98,1, 'Icecrown Ore Spawnpoint 99'),
+(@POOL+99,1, 'Icecrown Ore Spawnpoint 100'),
+(@POOL+100,1, 'Icecrown Ore Spawnpoint 101'),
+(@POOL+101,1, 'Icecrown Ore Spawnpoint 102'),
+(@POOL+102,1, 'Icecrown Ore Spawnpoint 103'),
+(@POOL+103,1, 'Icecrown Ore Spawnpoint 104'),
+(@POOL+104,1, 'Icecrown Ore Spawnpoint 105'),
+(@POOL+105,1, 'Icecrown Ore Spawnpoint 106'),
+(@POOL+106,1, 'Icecrown Ore Spawnpoint 107'),
+(@POOL+107,1, 'Icecrown Ore Spawnpoint 108'),
+(@POOL+108,1, 'Icecrown Ore Spawnpoint 109'),
+(@POOL+109,1, 'Icecrown Ore Spawnpoint 110'),
+(@POOL+110,1, 'Icecrown Ore Spawnpoint 111'),
+(@POOL+111,1, 'Icecrown Ore Spawnpoint 112'),
+(@POOL+112,1, 'Icecrown Ore Spawnpoint 113'),
+(@POOL+113,1, 'Icecrown Ore Spawnpoint 114'),
+(@POOL+114,1, 'Icecrown Ore Spawnpoint 115'),
+(@POOL+115,1, 'Icecrown Ore Spawnpoint 116'),
+(@POOL+116,1, 'Icecrown Ore Spawnpoint 117'),
+(@POOL+117,1, 'Icecrown Ore Spawnpoint 118'),
+(@POOL+118,1, 'Icecrown Ore Spawnpoint 119'),
+(@POOL+119,1, 'Icecrown Ore Spawnpoint 120'),
+(@POOL+120,1, 'Icecrown Ore Spawnpoint 121'),
+(@POOL+121,1, 'Icecrown Ore Spawnpoint 122'),
+(@POOL+122,1, 'Icecrown Ore Spawnpoint 123'),
+(@POOL+123,1, 'Icecrown Ore Spawnpoint 124'),
+(@POOL+124,1, 'Icecrown Ore Spawnpoint 125'),
+(@POOL+125,1, 'Icecrown Ore Spawnpoint 126'),
+(@POOL+126,1, 'Icecrown Ore Spawnpoint 127'),
+(@POOL+127,1, 'Icecrown Ore Spawnpoint 128'),
+(@POOL+128,1, 'Icecrown Ore Spawnpoint 129'),
+(@POOL+129,1, 'Icecrown Ore Spawnpoint 130'),
+(@POOL+130,1, 'Icecrown Ore Spawnpoint 131'),
+(@POOL+131,1, 'Icecrown Ore Spawnpoint 132'),
+(@POOL+132,1, 'Icecrown Ore Spawnpoint 133'),
+(@POOL+133,1, 'Icecrown Ore Spawnpoint 134'),
+(@POOL+134,1, 'Icecrown Ore Spawnpoint 135'),
+(@POOL+135,1, 'Icecrown Ore Spawnpoint 136'),
+(@POOL+136,1, 'Icecrown Ore Spawnpoint 137'),
+(@POOL+137,1, 'Icecrown Ore Spawnpoint 138'),
+(@POOL+138,1, 'Icecrown Ore Spawnpoint 139'),
+(@POOL+139,1, 'Icecrown Ore Spawnpoint 140'),
+(@POOL+140,1, 'Icecrown Ore Spawnpoint 141'),
+(@POOL+141,1, 'Icecrown Ore Spawnpoint 142'),
+(@POOL+142,1, 'Icecrown Ore Spawnpoint 143'),
+(@POOL+143,1, 'Icecrown Ore Spawnpoint 144'),
+(@POOL+144,1, 'Icecrown Ore Spawnpoint 145'),
+(@POOL+145,1, 'Icecrown Ore Spawnpoint 146'),
+(@POOL+146,1, 'Icecrown Ore Spawnpoint 147'),
+(@POOL+147,1, 'Icecrown Ore Spawnpoint 148'),
+(@POOL+148,1, 'Icecrown Ore Spawnpoint 149'),
+(@POOL+149,1, 'Icecrown Ore Spawnpoint 150'),
+(@POOL+150,1, 'Icecrown Ore Spawnpoint 151'),
+(@POOL+151,1, 'Icecrown Ore Spawnpoint 152'),
+(@POOL+152,1, 'Icecrown Ore Spawnpoint 153'),
+(@POOL+153,1, 'Icecrown Ore Spawnpoint 154'),
+(@POOL+154,1, 'Icecrown Ore Spawnpoint 155'),
+(@POOL+155,1, 'Icecrown Ore Spawnpoint 156'),
+(@POOL+156,1, 'Icecrown Ore Spawnpoint 157'),
+(@POOL+157,1, 'Icecrown Ore Spawnpoint 158'),
+(@POOL+158,1, 'Icecrown Ore Spawnpoint 159'),
+(@POOL+159,1, 'Icecrown Ore Spawnpoint 160'),
+(@POOL+160,1, 'Icecrown Ore Spawnpoint 161'),
+(@POOL+161,1, 'Icecrown Ore Spawnpoint 162'),
+(@POOL+162,1, 'Icecrown Ore Spawnpoint 163'),
+(@POOL+163,1, 'Icecrown Ore Spawnpoint 164'),
+(@POOL+164,1, 'Icecrown Ore Spawnpoint 165'),
+(@POOL+165,1, 'Icecrown Ore Spawnpoint 166'),
+(@POOL+166,1, 'Icecrown Ore Spawnpoint 167'),
+(@POOL+167,1, 'Icecrown Ore Spawnpoint 168'),
+(@POOL+168,1, 'Icecrown Ore Spawnpoint 169'),
+(@POOL+169,1, 'Icecrown Ore Spawnpoint 170'),
+(@POOL+170,1, 'Icecrown Ore Spawnpoint 171'),
+(@POOL+171,1, 'Icecrown Ore Spawnpoint 172'),
+(@POOL+172,1, 'Icecrown Ore Spawnpoint 173'),
+(@POOL+173,1, 'Icecrown Ore Spawnpoint 174'),
+(@POOL+174,1, 'Icecrown Ore Spawnpoint 175'),
+(@POOL+175,1, 'Icecrown Ore Spawnpoint 176'),
+(@POOL+176,1, 'Icecrown Ore Spawnpoint 177'),
+(@POOL+177,1, 'Icecrown Ore Spawnpoint 178'),
+(@POOL+178,1, 'Icecrown Ore Spawnpoint 179'),
+(@POOL+179,1, 'Icecrown Ore Spawnpoint 180'),
+(@POOL+180,1, 'Icecrown Ore Spawnpoint 181'),
+(@POOL+181,1, 'Icecrown Ore Spawnpoint 182'),
+(@POOL+182,1, 'Icecrown Ore Spawnpoint 183'),
+(@POOL+183,1, 'Icecrown Ore Spawnpoint 184'),
+(@POOL+184,1, 'Icecrown Ore Spawnpoint 185'),
+(@POOL+185,1, 'Icecrown Ore Spawnpoint 186'),
+(@POOL+186,1, 'Icecrown Ore Spawnpoint 187'),
+(@POOL+187,1, 'Icecrown Ore Spawnpoint 188'),
+(@POOL+188,1, 'Icecrown Ore Spawnpoint 189'),
+(@POOL+189,1, 'Icecrown Ore Spawnpoint 190'),
+(@POOL+190,1, 'Icecrown Ore Spawnpoint 191'),
+(@POOL+191,1, 'Icecrown Ore Spawnpoint 192'),
+(@POOL+192,1, 'Icecrown Ore Spawnpoint 193'),
+(@POOL+193,1, 'Icecrown Ore Spawnpoint 194'),
+(@POOL+194,1, 'Icecrown Ore Spawnpoint 195'),
+(@POOL+195,1, 'Icecrown Ore Spawnpoint 196'),
+(@POOL+196,1, 'Icecrown Ore Spawnpoint 197'),
+(@POOL+197,1, 'Icecrown Ore Spawnpoint 198'),
+(@POOL+198,1, 'Icecrown Ore Spawnpoint 199'),
+(@POOL+199,1, 'Icecrown Ore Spawnpoint 200'),
+(@POOL+200,1, 'Icecrown Ore Spawnpoint 201'),
+(@POOL+201,1, 'Icecrown Ore Spawnpoint 202'),
+(@POOL+202,1, 'Icecrown Ore Spawnpoint 203'),
+(@POOL+203,1, 'Icecrown Ore Spawnpoint 204'),
+(@POOL+204,1, 'Icecrown Ore Spawnpoint 205'),
+(@POOL+205,1, 'Icecrown Ore Spawnpoint 206'),
+(@POOL+206,1, 'Icecrown Ore Spawnpoint 207'),
+(@POOL+207,1, 'Icecrown Ore Spawnpoint 208'),
+(@POOL+208,1, 'Icecrown Ore Spawnpoint 209'),
+(@POOL+209,1, 'Icecrown Ore Spawnpoint 210'),
+(@POOL+210,1, 'Icecrown Ore Spawnpoint 211'),
+(@POOL+211,1, 'Icecrown Ore Spawnpoint 212'),
+(@POOL+212,1, 'Icecrown Ore Spawnpoint 213'),
+(@POOL+213,1, 'Icecrown Ore Spawnpoint 214'),
+(@POOL+214,1, 'Icecrown Ore Spawnpoint 215'),
+(@POOL+215,1, 'Icecrown Ore Spawnpoint 216'),
+(@POOL+216,1, 'Icecrown Ore Spawnpoint 217'),
+(@POOL+217,1, 'Icecrown Ore Spawnpoint 218'),
+(@POOL+218,1, 'Icecrown Ore Spawnpoint 219'),
+(@POOL+219,1, 'Icecrown Ore Spawnpoint 220'),
+(@POOL+220,1, 'Icecrown Ore Spawnpoint 221'),
+(@POOL+221,1, 'Icecrown Ore Spawnpoint 222'),
+(@POOL+222,1, 'Icecrown Ore Spawnpoint 223'),
+(@POOL+223,1, 'Icecrown Ore Spawnpoint 224'),
+(@POOL+224,1, 'Icecrown Ore Spawnpoint 225'),
+(@POOL+225,1, 'Icecrown Ore Spawnpoint 226'),
+(@POOL+226,1, 'Icecrown Ore Spawnpoint 227'),
+(@POOL+227,1, 'Icecrown Ore Spawnpoint 228'),
+(@POOL+228,1, 'Icecrown Ore Spawnpoint 229'),
+(@POOL+229,1, 'Icecrown Ore Spawnpoint 230'),
+(@POOL+230,1, 'Icecrown Ore Spawnpoint 231'),
+(@POOL+231,1, 'Icecrown Ore Spawnpoint 232'),
+(@POOL+232,1, 'Icecrown Ore Spawnpoint 233'),
+(@POOL+233,1, 'Icecrown Ore Spawnpoint 234'),
+(@POOL+234,1, 'Icecrown Ore Spawnpoint 235');
+-- Add mother pool to pool template
+DELETE FROM `pool_template` WHERE `entry`=@MOTHER;
+INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES
+(@MOTHER,@ACTIVE, 'Icecrown Ore Mother pool');
+-- Add each pool to pool_pool
+DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL AND @POOL+@LASTGUID;
+INSERT INTO `pool_pool` (`pool_id`,`mother_pool`,`chance`,`description`) VALUES
+(@POOL+0,@MOTHER,0, 'Icecrown Ore Spawnpoint 1'),
+(@POOL+1,@MOTHER,0, 'Icecrown Ore Spawnpoint 2'),
+(@POOL+2,@MOTHER,0, 'Icecrown Ore Spawnpoint 3'),
+(@POOL+3,@MOTHER,0, 'Icecrown Ore Spawnpoint 4'),
+(@POOL+4,@MOTHER,0, 'Icecrown Ore Spawnpoint 5'),
+(@POOL+5,@MOTHER,0, 'Icecrown Ore Spawnpoint 6'),
+(@POOL+6,@MOTHER,0, 'Icecrown Ore Spawnpoint 7'),
+(@POOL+7,@MOTHER,0, 'Icecrown Ore Spawnpoint 8'),
+(@POOL+8,@MOTHER,0, 'Icecrown Ore Spawnpoint 9'),
+(@POOL+9,@MOTHER,0, 'Icecrown Ore Spawnpoint 10'),
+(@POOL+10,@MOTHER,0, 'Icecrown Ore Spawnpoint 11'),
+(@POOL+11,@MOTHER,0, 'Icecrown Ore Spawnpoint 12'),
+(@POOL+12,@MOTHER,0, 'Icecrown Ore Spawnpoint 13'),
+(@POOL+13,@MOTHER,0, 'Icecrown Ore Spawnpoint 14'),
+(@POOL+14,@MOTHER,0, 'Icecrown Ore Spawnpoint 15'),
+(@POOL+15,@MOTHER,0, 'Icecrown Ore Spawnpoint 16'),
+(@POOL+16,@MOTHER,0, 'Icecrown Ore Spawnpoint 17'),
+(@POOL+17,@MOTHER,0, 'Icecrown Ore Spawnpoint 18'),
+(@POOL+18,@MOTHER,0, 'Icecrown Ore Spawnpoint 19'),
+(@POOL+19,@MOTHER,0, 'Icecrown Ore Spawnpoint 20'),
+(@POOL+20,@MOTHER,0, 'Icecrown Ore Spawnpoint 21'),
+(@POOL+21,@MOTHER,0, 'Icecrown Ore Spawnpoint 22'),
+(@POOL+22,@MOTHER,0, 'Icecrown Ore Spawnpoint 23'),
+(@POOL+23,@MOTHER,0, 'Icecrown Ore Spawnpoint 24'),
+(@POOL+24,@MOTHER,0, 'Icecrown Ore Spawnpoint 25'),
+(@POOL+25,@MOTHER,0, 'Icecrown Ore Spawnpoint 26'),
+(@POOL+26,@MOTHER,0, 'Icecrown Ore Spawnpoint 27'),
+(@POOL+27,@MOTHER,0, 'Icecrown Ore Spawnpoint 28'),
+(@POOL+28,@MOTHER,0, 'Icecrown Ore Spawnpoint 29'),
+(@POOL+29,@MOTHER,0, 'Icecrown Ore Spawnpoint 30'),
+(@POOL+30,@MOTHER,0, 'Icecrown Ore Spawnpoint 31'),
+(@POOL+31,@MOTHER,0, 'Icecrown Ore Spawnpoint 32'),
+(@POOL+32,@MOTHER,0, 'Icecrown Ore Spawnpoint 33'),
+(@POOL+33,@MOTHER,0, 'Icecrown Ore Spawnpoint 34'),
+(@POOL+34,@MOTHER,0, 'Icecrown Ore Spawnpoint 35'),
+(@POOL+35,@MOTHER,0, 'Icecrown Ore Spawnpoint 36'),
+(@POOL+36,@MOTHER,0, 'Icecrown Ore Spawnpoint 37'),
+(@POOL+37,@MOTHER,0, 'Icecrown Ore Spawnpoint 38'),
+(@POOL+38,@MOTHER,0, 'Icecrown Ore Spawnpoint 39'),
+(@POOL+39,@MOTHER,0, 'Icecrown Ore Spawnpoint 40'),
+(@POOL+40,@MOTHER,0, 'Icecrown Ore Spawnpoint 41'),
+(@POOL+41,@MOTHER,0, 'Icecrown Ore Spawnpoint 42'),
+(@POOL+42,@MOTHER,0, 'Icecrown Ore Spawnpoint 43'),
+(@POOL+43,@MOTHER,0, 'Icecrown Ore Spawnpoint 44'),
+(@POOL+44,@MOTHER,0, 'Icecrown Ore Spawnpoint 45'),
+(@POOL+45,@MOTHER,0, 'Icecrown Ore Spawnpoint 46'),
+(@POOL+46,@MOTHER,0, 'Icecrown Ore Spawnpoint 47'),
+(@POOL+47,@MOTHER,0, 'Icecrown Ore Spawnpoint 48'),
+(@POOL+48,@MOTHER,0, 'Icecrown Ore Spawnpoint 49'),
+(@POOL+49,@MOTHER,0, 'Icecrown Ore Spawnpoint 50'),
+(@POOL+50,@MOTHER,0, 'Icecrown Ore Spawnpoint 51'),
+(@POOL+51,@MOTHER,0, 'Icecrown Ore Spawnpoint 52'),
+(@POOL+52,@MOTHER,0, 'Icecrown Ore Spawnpoint 53'),
+(@POOL+53,@MOTHER,0, 'Icecrown Ore Spawnpoint 54'),
+(@POOL+54,@MOTHER,0, 'Icecrown Ore Spawnpoint 55'),
+(@POOL+55,@MOTHER,0, 'Icecrown Ore Spawnpoint 56'),
+(@POOL+56,@MOTHER,0, 'Icecrown Ore Spawnpoint 57'),
+(@POOL+57,@MOTHER,0, 'Icecrown Ore Spawnpoint 58'),
+(@POOL+58,@MOTHER,0, 'Icecrown Ore Spawnpoint 59'),
+(@POOL+59,@MOTHER,0, 'Icecrown Ore Spawnpoint 60'),
+(@POOL+60,@MOTHER,0, 'Icecrown Ore Spawnpoint 61'),
+(@POOL+61,@MOTHER,0, 'Icecrown Ore Spawnpoint 62'),
+(@POOL+62,@MOTHER,0, 'Icecrown Ore Spawnpoint 63'),
+(@POOL+63,@MOTHER,0, 'Icecrown Ore Spawnpoint 64'),
+(@POOL+64,@MOTHER,0, 'Icecrown Ore Spawnpoint 65'),
+(@POOL+65,@MOTHER,0, 'Icecrown Ore Spawnpoint 66'),
+(@POOL+66,@MOTHER,0, 'Icecrown Ore Spawnpoint 67'),
+(@POOL+67,@MOTHER,0, 'Icecrown Ore Spawnpoint 68'),
+(@POOL+68,@MOTHER,0, 'Icecrown Ore Spawnpoint 69'),
+(@POOL+69,@MOTHER,0, 'Icecrown Ore Spawnpoint 70'),
+(@POOL+70,@MOTHER,0, 'Icecrown Ore Spawnpoint 71'),
+(@POOL+71,@MOTHER,0, 'Icecrown Ore Spawnpoint 72'),
+(@POOL+72,@MOTHER,0, 'Icecrown Ore Spawnpoint 73'),
+(@POOL+73,@MOTHER,0, 'Icecrown Ore Spawnpoint 74'),
+(@POOL+74,@MOTHER,0, 'Icecrown Ore Spawnpoint 75'),
+(@POOL+75,@MOTHER,0, 'Icecrown Ore Spawnpoint 76'),
+(@POOL+76,@MOTHER,0, 'Icecrown Ore Spawnpoint 77'),
+(@POOL+77,@MOTHER,0, 'Icecrown Ore Spawnpoint 78'),
+(@POOL+78,@MOTHER,0, 'Icecrown Ore Spawnpoint 79'),
+(@POOL+79,@MOTHER,0, 'Icecrown Ore Spawnpoint 80'),
+(@POOL+80,@MOTHER,0, 'Icecrown Ore Spawnpoint 81'),
+(@POOL+81,@MOTHER,0, 'Icecrown Ore Spawnpoint 82'),
+(@POOL+82,@MOTHER,0, 'Icecrown Ore Spawnpoint 83'),
+(@POOL+83,@MOTHER,0, 'Icecrown Ore Spawnpoint 84'),
+(@POOL+84,@MOTHER,0, 'Icecrown Ore Spawnpoint 85'),
+(@POOL+85,@MOTHER,0, 'Icecrown Ore Spawnpoint 86'),
+(@POOL+86,@MOTHER,0, 'Icecrown Ore Spawnpoint 87'),
+(@POOL+87,@MOTHER,0, 'Icecrown Ore Spawnpoint 88'),
+(@POOL+88,@MOTHER,0, 'Icecrown Ore Spawnpoint 89'),
+(@POOL+89,@MOTHER,0, 'Icecrown Ore Spawnpoint 90'),
+(@POOL+90,@MOTHER,0, 'Icecrown Ore Spawnpoint 91'),
+(@POOL+91,@MOTHER,0, 'Icecrown Ore Spawnpoint 92'),
+(@POOL+92,@MOTHER,0, 'Icecrown Ore Spawnpoint 93'),
+(@POOL+93,@MOTHER,0, 'Icecrown Ore Spawnpoint 94'),
+(@POOL+94,@MOTHER,0, 'Icecrown Ore Spawnpoint 95'),
+(@POOL+95,@MOTHER,0, 'Icecrown Ore Spawnpoint 96'),
+(@POOL+96,@MOTHER,0, 'Icecrown Ore Spawnpoint 97'),
+(@POOL+97,@MOTHER,0, 'Icecrown Ore Spawnpoint 98'),
+(@POOL+98,@MOTHER,0, 'Icecrown Ore Spawnpoint 99'),
+(@POOL+99,@MOTHER,0, 'Icecrown Ore Spawnpoint 100'),
+(@POOL+100,@MOTHER,0, 'Icecrown Ore Spawnpoint 101'),
+(@POOL+101,@MOTHER,0, 'Icecrown Ore Spawnpoint 102'),
+(@POOL+102,@MOTHER,0, 'Icecrown Ore Spawnpoint 103'),
+(@POOL+103,@MOTHER,0, 'Icecrown Ore Spawnpoint 104'),
+(@POOL+104,@MOTHER,0, 'Icecrown Ore Spawnpoint 105'),
+(@POOL+105,@MOTHER,0, 'Icecrown Ore Spawnpoint 106'),
+(@POOL+106,@MOTHER,0, 'Icecrown Ore Spawnpoint 107'),
+(@POOL+107,@MOTHER,0, 'Icecrown Ore Spawnpoint 108'),
+(@POOL+108,@MOTHER,0, 'Icecrown Ore Spawnpoint 109'),
+(@POOL+109,@MOTHER,0, 'Icecrown Ore Spawnpoint 110'),
+(@POOL+110,@MOTHER,0, 'Icecrown Ore Spawnpoint 111'),
+(@POOL+111,@MOTHER,0, 'Icecrown Ore Spawnpoint 112'),
+(@POOL+112,@MOTHER,0, 'Icecrown Ore Spawnpoint 113'),
+(@POOL+113,@MOTHER,0, 'Icecrown Ore Spawnpoint 114'),
+(@POOL+114,@MOTHER,0, 'Icecrown Ore Spawnpoint 115'),
+(@POOL+115,@MOTHER,0, 'Icecrown Ore Spawnpoint 116'),
+(@POOL+116,@MOTHER,0, 'Icecrown Ore Spawnpoint 117'),
+(@POOL+117,@MOTHER,0, 'Icecrown Ore Spawnpoint 118'),
+(@POOL+118,@MOTHER,0, 'Icecrown Ore Spawnpoint 119'),
+(@POOL+119,@MOTHER,0, 'Icecrown Ore Spawnpoint 120'),
+(@POOL+120,@MOTHER,0, 'Icecrown Ore Spawnpoint 121'),
+(@POOL+121,@MOTHER,0, 'Icecrown Ore Spawnpoint 122'),
+(@POOL+122,@MOTHER,0, 'Icecrown Ore Spawnpoint 123'),
+(@POOL+123,@MOTHER,0, 'Icecrown Ore Spawnpoint 124'),
+(@POOL+124,@MOTHER,0, 'Icecrown Ore Spawnpoint 125'),
+(@POOL+125,@MOTHER,0, 'Icecrown Ore Spawnpoint 126'),
+(@POOL+126,@MOTHER,0, 'Icecrown Ore Spawnpoint 127'),
+(@POOL+127,@MOTHER,0, 'Icecrown Ore Spawnpoint 128'),
+(@POOL+128,@MOTHER,0, 'Icecrown Ore Spawnpoint 129'),
+(@POOL+129,@MOTHER,0, 'Icecrown Ore Spawnpoint 130'),
+(@POOL+130,@MOTHER,0, 'Icecrown Ore Spawnpoint 131'),
+(@POOL+131,@MOTHER,0, 'Icecrown Ore Spawnpoint 132'),
+(@POOL+132,@MOTHER,0, 'Icecrown Ore Spawnpoint 133'),
+(@POOL+133,@MOTHER,0, 'Icecrown Ore Spawnpoint 134'),
+(@POOL+134,@MOTHER,0, 'Icecrown Ore Spawnpoint 135'),
+(@POOL+135,@MOTHER,0, 'Icecrown Ore Spawnpoint 136'),
+(@POOL+136,@MOTHER,0, 'Icecrown Ore Spawnpoint 137'),
+(@POOL+137,@MOTHER,0, 'Icecrown Ore Spawnpoint 138'),
+(@POOL+138,@MOTHER,0, 'Icecrown Ore Spawnpoint 139'),
+(@POOL+139,@MOTHER,0, 'Icecrown Ore Spawnpoint 140'),
+(@POOL+140,@MOTHER,0, 'Icecrown Ore Spawnpoint 141'),
+(@POOL+141,@MOTHER,0, 'Icecrown Ore Spawnpoint 142'),
+(@POOL+142,@MOTHER,0, 'Icecrown Ore Spawnpoint 143'),
+(@POOL+143,@MOTHER,0, 'Icecrown Ore Spawnpoint 144'),
+(@POOL+144,@MOTHER,0, 'Icecrown Ore Spawnpoint 145'),
+(@POOL+145,@MOTHER,0, 'Icecrown Ore Spawnpoint 146'),
+(@POOL+146,@MOTHER,0, 'Icecrown Ore Spawnpoint 147'),
+(@POOL+147,@MOTHER,0, 'Icecrown Ore Spawnpoint 148'),
+(@POOL+148,@MOTHER,0, 'Icecrown Ore Spawnpoint 149'),
+(@POOL+149,@MOTHER,0, 'Icecrown Ore Spawnpoint 150'),
+(@POOL+150,@MOTHER,0, 'Icecrown Ore Spawnpoint 151'),
+(@POOL+151,@MOTHER,0, 'Icecrown Ore Spawnpoint 152'),
+(@POOL+152,@MOTHER,0, 'Icecrown Ore Spawnpoint 153'),
+(@POOL+153,@MOTHER,0, 'Icecrown Ore Spawnpoint 154'),
+(@POOL+154,@MOTHER,0, 'Icecrown Ore Spawnpoint 155'),
+(@POOL+155,@MOTHER,0, 'Icecrown Ore Spawnpoint 156'),
+(@POOL+156,@MOTHER,0, 'Icecrown Ore Spawnpoint 157'),
+(@POOL+157,@MOTHER,0, 'Icecrown Ore Spawnpoint 158'),
+(@POOL+158,@MOTHER,0, 'Icecrown Ore Spawnpoint 159'),
+(@POOL+159,@MOTHER,0, 'Icecrown Ore Spawnpoint 160'),
+(@POOL+160,@MOTHER,0, 'Icecrown Ore Spawnpoint 161'),
+(@POOL+161,@MOTHER,0, 'Icecrown Ore Spawnpoint 162'),
+(@POOL+162,@MOTHER,0, 'Icecrown Ore Spawnpoint 163'),
+(@POOL+163,@MOTHER,0, 'Icecrown Ore Spawnpoint 164'),
+(@POOL+164,@MOTHER,0, 'Icecrown Ore Spawnpoint 165'),
+(@POOL+165,@MOTHER,0, 'Icecrown Ore Spawnpoint 166'),
+(@POOL+166,@MOTHER,0, 'Icecrown Ore Spawnpoint 167'),
+(@POOL+167,@MOTHER,0, 'Icecrown Ore Spawnpoint 168'),
+(@POOL+168,@MOTHER,0, 'Icecrown Ore Spawnpoint 169'),
+(@POOL+169,@MOTHER,0, 'Icecrown Ore Spawnpoint 170'),
+(@POOL+170,@MOTHER,0, 'Icecrown Ore Spawnpoint 171'),
+(@POOL+171,@MOTHER,0, 'Icecrown Ore Spawnpoint 172'),
+(@POOL+172,@MOTHER,0, 'Icecrown Ore Spawnpoint 173'),
+(@POOL+173,@MOTHER,0, 'Icecrown Ore Spawnpoint 174'),
+(@POOL+174,@MOTHER,0, 'Icecrown Ore Spawnpoint 175'),
+(@POOL+175,@MOTHER,0, 'Icecrown Ore Spawnpoint 176'),
+(@POOL+176,@MOTHER,0, 'Icecrown Ore Spawnpoint 177'),
+(@POOL+177,@MOTHER,0, 'Icecrown Ore Spawnpoint 178'),
+(@POOL+178,@MOTHER,0, 'Icecrown Ore Spawnpoint 179'),
+(@POOL+179,@MOTHER,0, 'Icecrown Ore Spawnpoint 180'),
+(@POOL+180,@MOTHER,0, 'Icecrown Ore Spawnpoint 181'),
+(@POOL+181,@MOTHER,0, 'Icecrown Ore Spawnpoint 182'),
+(@POOL+182,@MOTHER,0, 'Icecrown Ore Spawnpoint 183'),
+(@POOL+183,@MOTHER,0, 'Icecrown Ore Spawnpoint 184'),
+(@POOL+184,@MOTHER,0, 'Icecrown Ore Spawnpoint 185'),
+(@POOL+185,@MOTHER,0, 'Icecrown Ore Spawnpoint 186'),
+(@POOL+186,@MOTHER,0, 'Icecrown Ore Spawnpoint 187'),
+(@POOL+187,@MOTHER,0, 'Icecrown Ore Spawnpoint 188'),
+(@POOL+188,@MOTHER,0, 'Icecrown Ore Spawnpoint 189'),
+(@POOL+189,@MOTHER,0, 'Icecrown Ore Spawnpoint 190'),
+(@POOL+190,@MOTHER,0, 'Icecrown Ore Spawnpoint 191'),
+(@POOL+191,@MOTHER,0, 'Icecrown Ore Spawnpoint 192'),
+(@POOL+192,@MOTHER,0, 'Icecrown Ore Spawnpoint 193'),
+(@POOL+193,@MOTHER,0, 'Icecrown Ore Spawnpoint 194'),
+(@POOL+194,@MOTHER,0, 'Icecrown Ore Spawnpoint 195'),
+(@POOL+195,@MOTHER,0, 'Icecrown Ore Spawnpoint 196'),
+(@POOL+196,@MOTHER,0, 'Icecrown Ore Spawnpoint 197'),
+(@POOL+197,@MOTHER,0, 'Icecrown Ore Spawnpoint 198'),
+(@POOL+198,@MOTHER,0, 'Icecrown Ore Spawnpoint 199'),
+(@POOL+199,@MOTHER,0, 'Icecrown Ore Spawnpoint 200'),
+(@POOL+200,@MOTHER,0, 'Icecrown Ore Spawnpoint 201'),
+(@POOL+201,@MOTHER,0, 'Icecrown Ore Spawnpoint 202'),
+(@POOL+202,@MOTHER,0, 'Icecrown Ore Spawnpoint 203'),
+(@POOL+203,@MOTHER,0, 'Icecrown Ore Spawnpoint 204'),
+(@POOL+204,@MOTHER,0, 'Icecrown Ore Spawnpoint 205'),
+(@POOL+205,@MOTHER,0, 'Icecrown Ore Spawnpoint 206'),
+(@POOL+206,@MOTHER,0, 'Icecrown Ore Spawnpoint 207'),
+(@POOL+207,@MOTHER,0, 'Icecrown Ore Spawnpoint 208'),
+(@POOL+208,@MOTHER,0, 'Icecrown Ore Spawnpoint 209'),
+(@POOL+209,@MOTHER,0, 'Icecrown Ore Spawnpoint 210'),
+(@POOL+210,@MOTHER,0, 'Icecrown Ore Spawnpoint 211'),
+(@POOL+211,@MOTHER,0, 'Icecrown Ore Spawnpoint 212'),
+(@POOL+212,@MOTHER,0, 'Icecrown Ore Spawnpoint 213'),
+(@POOL+213,@MOTHER,0, 'Icecrown Ore Spawnpoint 214'),
+(@POOL+214,@MOTHER,0, 'Icecrown Ore Spawnpoint 215'),
+(@POOL+215,@MOTHER,0, 'Icecrown Ore Spawnpoint 216'),
+(@POOL+216,@MOTHER,0, 'Icecrown Ore Spawnpoint 217'),
+(@POOL+217,@MOTHER,0, 'Icecrown Ore Spawnpoint 218'),
+(@POOL+218,@MOTHER,0, 'Icecrown Ore Spawnpoint 219'),
+(@POOL+219,@MOTHER,0, 'Icecrown Ore Spawnpoint 220'),
+(@POOL+220,@MOTHER,0, 'Icecrown Ore Spawnpoint 221'),
+(@POOL+221,@MOTHER,0, 'Icecrown Ore Spawnpoint 222'),
+(@POOL+222,@MOTHER,0, 'Icecrown Ore Spawnpoint 223'),
+(@POOL+223,@MOTHER,0, 'Icecrown Ore Spawnpoint 224'),
+(@POOL+224,@MOTHER,0, 'Icecrown Ore Spawnpoint 225'),
+(@POOL+225,@MOTHER,0, 'Icecrown Ore Spawnpoint 226'),
+(@POOL+226,@MOTHER,0, 'Icecrown Ore Spawnpoint 227'),
+(@POOL+227,@MOTHER,0, 'Icecrown Ore Spawnpoint 228'),
+(@POOL+228,@MOTHER,0, 'Icecrown Ore Spawnpoint 229'),
+(@POOL+229,@MOTHER,0, 'Icecrown Ore Spawnpoint 230'),
+(@POOL+230,@MOTHER,0, 'Icecrown Ore Spawnpoint 231'),
+(@POOL+231,@MOTHER,0, 'Icecrown Ore Spawnpoint 232'),
+(@POOL+232,@MOTHER,0, 'Icecrown Ore Spawnpoint 233'),
+(@POOL+233,@MOTHER,0, 'Icecrown Ore Spawnpoint 234'),
+(@POOL+234,@MOTHER,0, 'Icecrown Ore Spawnpoint 235');
+
diff --git a/sql/old/3.3.5a/2011_11_13_03_world_npc_trainer.sql b/sql/old/3.3.5a/2011_11_13_03_world_npc_trainer.sql
new file mode 100644
index 00000000000..0db753c008b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_03_world_npc_trainer.sql
@@ -0,0 +1,5 @@
+-- Remove Manual: Netherweave Bandage & and Manual: Heavy Netherweave Bandage from vendors (Patch 3.1.0)
+DELETE FROM `npc_vendor` WHERE `item` IN (21992,21991);
+-- Update reqskillvalue for Netherweave Bandage & Heavy Netherweave Bandage (Patch 3.1.0)
+UPDATE `npc_trainer` SET `reqskillvalue`=300 WHERE spell=27032;
+UPDATE `npc_trainer` SET `reqskillvalue`=330 WHERE spell=27033;
diff --git a/sql/old/3.3.5a/2011_11_13_04_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_04_world_creature_loot_template.sql
new file mode 100644
index 00000000000..b68d12a031d
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_04_world_creature_loot_template.sql
@@ -0,0 +1,4 @@
+DELETE FROM `creature_loot_template` WHERE `entry` IN (4356,4357) AND `item`=33085;
+INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(4356,33085,-37,1,0,1,1), -- Feathers drop from Bloodfen Razormaw
+(4357,33085,-33,1,0,1,1); -- Feathers drop from Bloodfen Lashtail
diff --git a/sql/old/3.3.5a/2011_11_13_05_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_05_world_creature_loot_template.sql
new file mode 100644
index 00000000000..722027bd343
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_05_world_creature_loot_template.sql
@@ -0,0 +1,4 @@
+-- Add Jormungar Egg Sac on Deep Jormungar
+DELETE FROM `creature_loot_template` WHERE `entry`=34920 AND `item`=46889;
+INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(34920,46889,-100,1,0,1,1); -- Jormungar Egg Sac
diff --git a/sql/old/3.3.5a/2011_11_13_06_world_reference_loot_template.sql b/sql/old/3.3.5a/2011_11_13_06_world_reference_loot_template.sql
new file mode 100644
index 00000000000..efb2fec72f3
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_06_world_reference_loot_template.sql
@@ -0,0 +1,9 @@
+SET @Ref = 10020;
+DELETE FROM `reference_loot_template` WHERE `entry`=@Ref AND `item`IN (34000,34001,34002,34003,33292,37606);
+INSERT INTO `reference_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(@REF,34000,0.8,1,0,1,1), -- Flimsy Female Blood Elf Mask
+(@REF,34001,0.8,1,0,1,1), -- Flimsy Female Draenei Mask
+(@REF,34002,0.8,1,0,1,1), -- Flimsy Male Blood Elf Mask
+(@REF,34003,0.8,1,0,1,1), -- Flimsy Male Draenei Mask
+(@REF,37606,11,1,0,1,1), -- Penny Pouch
+(@REF,33292,2,1,0,1,1); -- Hallowed Helm
diff --git a/sql/old/3.3.5a/2011_11_13_07_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_07_world_creature_loot_template.sql
new file mode 100644
index 00000000000..728ce731313
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_07_world_creature_loot_template.sql
@@ -0,0 +1,5 @@
+-- Add Formula: Enchant Cloak - Superior Arcane Resistance to Frostbrood Spawn & Cult Researcher
+DELETE FROM `creature_loot_template` WHERE `entry` IN (31702,32297) AND `item`=37330;
+INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(31702,37330,1.5,1,0,1,1), -- Formula: Enchant Cloak - Superior Arcane Resistance
+(32297,37330,0.8,1,0,1,1); -- Formula: Enchant Cloak - Superior Arcane Resistance
diff --git a/sql/old/3.3.5a/2011_11_13_08_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_08_world_creature_loot_template.sql
new file mode 100644
index 00000000000..55f58d4fbba
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_08_world_creature_loot_template.sql
@@ -0,0 +1,2 @@
+-- Update Dropchance for Narain's Scrying Goggles
+UPDATE `creature_loot_template` SET `ChanceOrQuestChance`=100 WHERE `item`=20951;
diff --git a/sql/old/3.3.5a/2011_11_13_09_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_09_world_creature_loot_template.sql
new file mode 100644
index 00000000000..6356c93a9ba
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_09_world_creature_loot_template.sql
@@ -0,0 +1,2 @@
+-- None of the creatures should drop Scarlet Cannonball
+DELETE FROM `creature_loot_template` WHERE `item`=12973;
diff --git a/sql/old/3.3.5a/2011_11_13_10_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_10_world_creature_loot_template.sql
new file mode 100644
index 00000000000..3052ba96745
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_10_world_creature_loot_template.sql
@@ -0,0 +1,2 @@
+-- Drakkari Offerings should also drop when NOT on a quest:
+UPDATE `creature_loot_template` SET `ChanceOrQuestChance`=ABS(`ChanceOrQuestChance`) WHERE `item`=38551;
diff --git a/sql/old/3.3.5a/2011_11_13_11_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_11_world_creature_loot_template.sql
new file mode 100644
index 00000000000..9f753577844
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_11_world_creature_loot_template.sql
@@ -0,0 +1,6 @@
+-- Add Orders From Kael'thas to the following creatures
+DELETE FROM `creature_loot_template` WHERE `item`=29797;
+INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(18860,29797,-80,1,0,1,1), -- Daughter of Destiny
+(20285,29797,-80,1,0,1,1), -- Gan'arg Warp-Tinker
+(20326,29797,-80,1,0,1,1); -- Mo'arg Warp-Master
diff --git a/sql/old/3.3.5a/2011_11_13_12_world_creature_loot_template.sql b/sql/old/3.3.5a/2011_11_13_12_world_creature_loot_template.sql
new file mode 100644
index 00000000000..7982910cee6
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_13_12_world_creature_loot_template.sql
@@ -0,0 +1,4 @@
+-- Add Heavy Scorpid Vest to Shadowsworn Thug and remove from Portal Seeker
+DELETE FROM `creature_loot_template` WHERE `item`=15727;
+INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(6005,15727,0.5,1,0,1,1); -- Shadowsworn Thug
diff --git a/sql/old/3.3.5a/2011_11_20_00_world_command.sql b/sql/old/3.3.5a/2011_11_20_00_world_command.sql
new file mode 100644
index 00000000000..73d52974766
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_00_world_command.sql
@@ -0,0 +1 @@
+UPDATE `command` SET `help`='Syntax: .tele name [#playername] #location\n\nTeleport the given character to a given location. Character can be offline.\n\nTo teleport to homebind, set #location to "$home" (without quotes).' WHERE `name` = 'tele name';
diff --git a/sql/old/3.3.5a/2011_11_20_01_world_sai.sql b/sql/old/3.3.5a/2011_11_20_01_world_sai.sql
new file mode 100644
index 00000000000..dbb4f39a499
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_01_world_sai.sql
@@ -0,0 +1,45 @@
+-- [Q] Laying Waste to the Unwanted
+
+-- Invis Horde Siege Engine - West SAI
+SET @ENTRY := 19009;
+SET @SPELL_IGNITE_SIEGE := 32979;
+SET @SPELL_HELLFIRE_FIRE := 34386;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `position_x`=-183.947998,`position_y`=2773.389893,`position_z`=49.198399 WHERE `guid`=68321 AND `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL_IGNITE_SIEGE,0,60000,60000,11,@SPELL_HELLFIRE_FIRE,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - West - On Spellhit - Cast Create Hellfire Fire"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,33,@ENTRY,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - West - On Spellhit - Quest Credit");
+
+-- Invis Horde Siege Engine - West 02 SAI
+SET @ENTRY := 21236;
+SET @SPELL_IGNITE_SIEGE := 32979;
+SET @SPELL_HELLFIRE_FIRE := 34386;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `position_z`=43.094120 WHERE `guid`=74454 AND `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL_IGNITE_SIEGE,0,60000,60000,11,@SPELL_HELLFIRE_FIRE,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - West 02 - On Spellhit - Cast Create Hellfire Fire"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,33,@ENTRY,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - West 02 - On Spellhit - Quest Credit");
+
+-- Invis Horde Siege Engine - East SAI
+SET @ENTRY := 21237;
+SET @SPELL_IGNITE_SIEGE := 32979;
+SET @SPELL_HELLFIRE_FIRE := 34386;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `position_x`=-157.329712,`position_y`=2518.655273,`position_z`=58.221237 WHERE `guid`=67186 AND `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL_IGNITE_SIEGE,0,60000,60000,11,@SPELL_HELLFIRE_FIRE,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - East - On Spellhit - Cast Create Hellfire Fire"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,33,@ENTRY,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - East - On Spellhit - Quest Credit");
+
+-- Invis Horde Siege Engine - East 02 SAI
+SET @ENTRY := 18818;
+SET @SPELL_IGNITE_SIEGE := 32979;
+SET @SPELL_HELLFIRE_FIRE := 34386;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `position_x`=-152.163116,`position_y`=2662.497314,`position_z`=60.728378 WHERE `guid`=74455 AND `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL_IGNITE_SIEGE,0,60000,60000,11,@SPELL_HELLFIRE_FIRE,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - East 02 - On Spellhit - Cast Create Hellfire Fire"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,33,@ENTRY,0,0,0,0,0,1,0,0,0,0,0,0,0,"Invis Horde Siege Engine - East 02 - On Spellhit - Quest Credit");
diff --git a/sql/old/3.3.5a/2011_11_20_02_world_sai.sql b/sql/old/3.3.5a/2011_11_20_02_world_sai.sql
new file mode 100644
index 00000000000..f064aa67f9f
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_02_world_sai.sql
@@ -0,0 +1,45 @@
+-- [Q] Fel Spirits
+
+-- Port Fel Spirit's EAI to creature_template_addon
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=22454;
+DELETE FROM `creature_template_addon` WHERE `entry`=22454;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (22454,0,0,1,0,"39205");
+UPDATE `creature_template` SET `AIName`='',`unit_flags`=32768,`baseattacktime`=2000 WHERE `entry`=22454;
+
+-- Shattered Hand Berserker SAI
+SET @ENTRY := 16878;
+SET @SPELL_CHARGE := 35570;
+SET @SPELL_ENRAGE := 8599;
+SET @SPELL_SUMMON := 39206;
+SET @SPELL_CONTRITION := 39184;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,@SPELL_CHARGE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Shattered Hand Berserker - On Aggro - Cast Charge"),
+(@ENTRY,0,1,0,8,0,100,0,@SPELL_CONTRITION,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shattered Hand Berserker - On Spellhit - Set Phase 1"),
+(@ENTRY,0,2,0,6,1,100,0,0,0,0,0,11,@SPELL_SUMMON,2,0,0,0,0,1,0,0,0,0,0,0,0,"Shattered Hand Berserker - On Death (P1) - Cast Summon Fel Spirit"),
+(@ENTRY,0,3,4,2,0,100,1,0,30,0,0,11,@SPELL_ENRAGE,1,0,0,0,0,1,0,0,0,0,0,0,0,"Shattered Hand Berserker - At 30% HP - Cast Enrage"),
+(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Shattered Hand Berserker - At 30% HP - Say Line 0");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s becomes enraged!",16,0,100,0,0,0,"Shattered Hand Berserker");
+
+-- Anchorite Relic Bunny SAI
+SET @ENTRY := 22444;
+SET @SPELL_CONTRITION := 39184;
+UPDATE `creature_template` SET `AIName`='SmartAI',`exp`=2,`minlevel`=35,`maxlevel`=35,`baseattacktime`=2000,`unit_flags`=`unit_flags`|2048 WHERE `entry`=@ENTRY;
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,0,1,0, NULL);
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Anchorite Relic Bunny - Just Summoned - Prevent Combat Movemenet"),
+(@ENTRY,0,1,0,60,0,100,0,1000,3000,15000,20000,11,@SPELL_CONTRITION,0,0,0,0,0,11,16878,0,0,0,0,0,0,"Anchorite Relic Bunny - On Update - Cast Anchorite Contrition");
+
+-- Condition for spell Anchorite Contrition
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (@SPELL_CONTRITION,@SPELL_SUMMON);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,0,@SPELL_CONTRITION,0,18,1,16878,0,0,'',"Spell Anchorite Contrition targets Shattered Hand Berserker"),
+(13,0,@SPELL_SUMMON,0,18,1,22444,0,0,'',"Spell Summon Fel Spirit targets Anchorite Relic Bunny");
diff --git a/sql/old/3.3.5a/2011_11_20_03_world_sai.sql b/sql/old/3.3.5a/2011_11_20_03_world_sai.sql
new file mode 100644
index 00000000000..bd47430acd8
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_03_world_sai.sql
@@ -0,0 +1,49 @@
+-- [Q] Hard to Swallow
+
+-- Hulking Jormungar SAI
+SET @ENTRY := 26293;
+SET @SPELL_CORROSIVE_POISON := 50293;
+SET @SPELL_GRENADE := 47305;
+SET @SPELL_EXPLOSION := 47311;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,6000,7000,11000,13000,11,@SPELL_CORROSIVE_POISON,0,0,0,0,0,2,0,0,0,0,0,0,0,"Hulking Jormungar - In Combat - Cast Corrode Flesh"),
+(@ENTRY,0,1,0,2,0,100,1,0,80,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Hulking Jormungar - At 80% HP - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Hulking Jormungar - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Hulking Jormungar - On Script - Set Phase 1"),
+(@ENTRY*100,9,2,0,0,0,100,0,5000,5000,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Hulking Jormungar - On Script - Set Phase 0"),
+(@ENTRY,0,2,0,8,1,100,0,@SPELL_GRENADE,0,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Hulking Jormungar - On Spellhit (P1) - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,3000,3000,0,0,11,@SPELL_EXPLOSION,0,0,0,0,0,1,0,0,0,0,0,0,0,"Hulking Jormungar - On Script - Cast Quest - Jormungar Explosion Spell Spawner"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Hulking Jormungar - On Script - Die");
+
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"The Hulking Jormungar falters for a moment, opening its mouth wide.",41,0,100,0,0,0,"Hulking Jormungar");
+
+-- Potent Explosive Charge conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@SPELL_GRENADE;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,0,@SPELL_GRENADE,0,18,1,@ENTRY,0,0,'',"Potent Explosive Charge only targets Hulking Jormungar"),
+(13,0,@SPELL_GRENADE,0,20,80,0,0,0,'',"Potent Explosive Charge requires target to be below 80% HP");
+
+-- Quest - Jormungar Explosion Spell Spawner triggers the meat throw spells
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=@SPELL_EXPLOSION;
+INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES
+(@SPELL_EXPLOSION,47925,0,"Quest - Jormungar Explosion Spell Spawner triggers Quest - Jormungar Explosion Summon Object"),
+(@SPELL_EXPLOSION,47924,0,"Quest - Jormungar Explosion Spell Spawner triggers Quest - Jormungar Explosion Summon Object"),
+(@SPELL_EXPLOSION,47309,0,"Quest - Jormungar Explosion Spell Spawner triggers Quest - Jormungar Explosion Summon Object");
+
+-- Jormungar Meat SAI
+SET @ENTRY := 26699;
+UPDATE `creature_template` SET `AIname`='SmartAI',`unit_flags`=`unit_flags`|33554432,`flags_extra`=`flags_extra`|128 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,50,188434,120000,0,0,0,0,1,0,0,0,0,0,0,0,"Jormungar Meat - Just Summoned - Summon Jormungar Meat");
+
+-- Give Jormungar Meat quest item loot
+DELETE FROM `gameobject_loot_template` WHERE `entry`=23442;
+INSERT INTO `gameobject_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(23442,36731,-100,1,0,1,1);
diff --git a/sql/old/3.3.5a/2011_11_20_04_world_sai.sql b/sql/old/3.3.5a/2011_11_20_04_world_sai.sql
new file mode 100644
index 00000000000..e362b0d0866
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_04_world_sai.sql
@@ -0,0 +1,24 @@
+-- [Q] The Might of the Horde
+
+-- Warsong Battle Standard SAI
+SET @ENTRY := 26678;
+SET @QUEST := 12053;
+UPDATE `creature_template` SET `AIName`='SmartAI',`minlevel`=70,`maxlevel`=71,`exp`=1 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - On Spawn - Set React State Passive"), -- We shouldn't EVER attack back or move
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,6,@QUEST,0,0,0,0,0,23,0,0,0,0,0,0,0,"Warsong Battle Standard - On Death - Fail Quest"),
+(@ENTRY,0,2,0,54,0,100,0,0,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - Just Summoned - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,5000,15000,0,0,12,26676,1,30000,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - On Script - Summon Anub'ar Invader"),
+(@ENTRY*100,9,1,0,0,0,100,0,8000,15000,0,0,12,26676,1,30000,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - On Script - Summon Anub'ar Invader"),
+(@ENTRY*100,9,2,0,0,0,100,0,8000,15000,0,0,12,26676,1,30000,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - On Script - Summon Anub'ar Invader"),
+(@ENTRY*100,9,3,0,0,0,100,0,8000,15000,0,0,12,26676,1,30000,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - On Script - Summon Anub'ar Invader"),
+(@ENTRY*100,9,4,0,0,0,100,0,8000,15000,0,0,12,26676,1,30000,0,0,0,1,0,0,0,0,0,0,0,"Warsong Battle Standard - On Script - Summon Anub'ar Invader"),
+(@ENTRY*100,9,5,0,0,0,100,0,4000,4000,0,0,15,@QUEST,0,0,0,0,0,23,0,0,0,0,0,0,0,"Warsong Battle Standard - On Script - Quest Credit");
+
+-- Anub'ar Invader SAI
+SET @ENTRY := 26676;
+UPDATE `creature_template` SET `AIName`='SmartAI',`faction_A`=2018,`faction_H`=2018 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,1,0,0,0,0,49,0,0,0,0,0,0,23,0,0,0,0,0,0,0,"Anub'ar Invader - Just Summoned - Attack Summoner");
diff --git a/sql/old/3.3.5a/2011_11_20_05_world_sai.sql b/sql/old/3.3.5a/2011_11_20_05_world_sai.sql
new file mode 100644
index 00000000000..464d0635bb8
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_05_world_sai.sql
@@ -0,0 +1,78 @@
+-- [Q] Jack Likes His Drink
+-- We are making Jack dance through SAI instead of creature(_template)_addon so we can cancel it in the actual SAI
+
+-- Olga, the Scalawag Wench SAI
+SET @ENTRY_OLGA := 24639;
+SET @ENTRY_JACK := 24788;
+SET @GOSSIP := 9015;
+SET @QUEST := 11466;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@ENTRY_OLGA,@ENTRY_JACK);
+UPDATE `creature_template` SET `gossip_menu_id`=@GOSSIP+10 WHERE `entry`=@ENTRY_JACK;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY_OLGA,@ENTRY_OLGA*100,@ENTRY_OLGA*100+1,@ENTRY_OLGA*100+2,@ENTRY_JACK,@ENTRY_JACK*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY_OLGA,0,0,0,62,0,100,0,@GOSSIP+1,0,0,0,80,@ENTRY_OLGA*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Gossip Select - Run Script"),
+(@ENTRY_OLGA*100,9,0,0,0,0,100,0,0,0,0,0,53,0,@ENTRY_OLGA,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script - Start WP"),
+(@ENTRY_OLGA*100,9,1,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script - Close Gossip"),
+(@ENTRY_OLGA*100,9,2,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script - Whisper Line 0"),
+(@ENTRY_OLGA*100,9,3,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script - Remove Gossip Flag"),
+
+(@ENTRY_OLGA,0,1,0,40,0,100,0,2,@ENTRY_OLGA,0,0,80,@ENTRY_OLGA*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On WP 2 - Run Script 2"),
+(@ENTRY_OLGA*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,11,@ENTRY_JACK,15,0,0,0,0,0,"Olga, the Scalawag Wench - On Script 2 - Face Jack Adams"),
+(@ENTRY_OLGA*100+1,9,1,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script 2 - Say Line 1"),
+(@ENTRY_OLGA*100+1,9,2,0,0,0,100,0,3000,3000,0,0,45,1,1,0,0,0,0,19,@ENTRY_JACK,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script 2 - Set Data 1 1 Jack Adams"),
+(@ENTRY_OLGA*100+1,9,3,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script 2 - Say Line 2"),
+(@ENTRY_OLGA*100+1,9,4,0,0,0,100,0,4000,4000,0,0,45,2,2,0,0,0,0,19,@ENTRY_JACK,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Script 2 - Set Data 2 2 Jack Adams"),
+(@ENTRY_OLGA,0,2,0,38,0,100,0,3,3,0,0,53,0,@ENTRY_OLGA*10,0,0,0,0,1,0,0,0,0,0,0,0,"Olga, the Scalawag Wench - On Data 3 3 Set - Start WP 2"),
+
+(@ENTRY_JACK,0,0,0,1,0,100,1,0,0,0,0,5,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - Out of Combat - Start Dancing"),
+(@ENTRY_JACK,0,1,2,38,0,100,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Data 1 1 Set - Say Line 0"),
+(@ENTRY_JACK,0,2,0,61,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Data 1 1 Set - Set Faction 35"),
+(@ENTRY_JACK,0,3,4,62,0,100,0,@GOSSIP+10,0,0,0,56,34116,1,0,0,0,0,7,0,0,0,0,0,0,0,"Jack Adams - On Gossip Select - Give Quest Item"),
+(@ENTRY_JACK,0,4,5,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Jack Adams - On Gossip Select - Close Gossip"),
+(@ENTRY_JACK,0,5,6,61,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Gossip Select - Remove Gossip Flag"), -- To prevent getting more than one item per event
+(@ENTRY_JACK,0,6,0,61,0,100,0,0,0,0,0,45,3,3,0,0,0,0,19,@ENTRY_OLGA,0,0,0,0,0,0,"Jack Adams - On Gossip Select - Set Data Olga, the Scalawag Wench"),
+
+(@ENTRY_JACK,0,7,0,38,0,100,0,2,2,0,0,80,@ENTRY_JACK*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Data 2 2 Set - Run Script"),
+(@ENTRY_JACK*100,9,0,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Say Line 1"),
+(@ENTRY_JACK*100,9,1,0,0,0,100,0,0,0,0,0,5,26,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Stop Dancing"),
+(@ENTRY_JACK*100,9,2,0,0,0,100,0,2000,2000,0,0,5,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - EMOTE_ONESHOT_KNEEL"),
+(@ENTRY_JACK*100,9,3,0,0,0,100,0,4000,4000,0,0,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - EMOTE_ONESHOT_EAT"),
+(@ENTRY_JACK*100,9,4,0,0,0,100,0,4000,4000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Say Line 2"),
+(@ENTRY_JACK*100,9,5,0,0,0,100,0,4000,4000,0,0,11,43391,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Cast Vomit"),
+(@ENTRY_JACK*100,9,6,0,0,0,100,0,3000,3000,0,0,11,29266,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Cast Permanent Feign Death"),
+(@ENTRY_JACK*100,9,7,0,0,0,100,0,0,0,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Add Gossip Flag"),
+(@ENTRY_JACK*100,9,8,0,0,0,100,0,0,0,0,0,41,30000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jack Adams - On Script - Forced Despawn");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry` IN (@ENTRY_OLGA,@ENTRY_JACK);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY_OLGA,0,0,"Keep quiet, will you? If anyone catches on, we're both dead.",15,0,100,0,0,0,"Olga, the Scalawag Wench"),
+(@ENTRY_OLGA,1,0,"All right, fellas! Who ordered the spiced rum? Was it you, Jackie boy?",12,0,100,0,0,0,"Olga, the Scalawag Wench"),
+(@ENTRY_OLGA,2,0,"It's okay, sweetheart. This one's on the house.",12,0,100,0,0,0,"Olga, the Scalawag Wench"),
+
+(@ENTRY_JACK,0,0,"Sure thing, love. Put it on Harry's tab, will ya? He owes me a drink!",12,0,100,0,0,0,"Jack Adams"),
+(@ENTRY_JACK,1,0,"Free rum? Why... that's me favorite kind!",12,0,100,0,0,0,"Jack Adams"),
+(@ENTRY_JACK,2,0,"Sweet Neptulon! That was... one drink... too many!",12,0,100,0,0,0,"Jack Adams");
+
+-- Insert option menu
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (@GOSSIP,@GOSSIP+1,@GOSSIP+10);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`box_money`,`box_text`) VALUES
+(@GOSSIP+0,0,0,"I'd like to buy Jack a drink. Perhaps something... extra strong.",1,1,@GOSSIP+1,0,''),
+(@GOSSIP+1,0,0,"Here's a gold, buy yourself something nice.",1,1,0,10000,'Do you really want to bribe Olga?'),
+(@GOSSIP+10,0,0,"<Discreetly search the pirate's pockets for Taruk's payment.>",1,1,0,0,'');
+
+-- Waypoints for Olga, the Scalawag Wench
+DELETE FROM `waypoints` WHERE `entry` IN (@ENTRY_OLGA,@ENTRY_OLGA*10);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY_OLGA,1,-89.466621,-3539.939941,7.715524,'Olga, the Scalawag Wench'),
+(@ENTRY_OLGA,2,-86.451447,-3544.374268,7.716601,'Olga, the Scalawag Wench'),
+
+(@ENTRY_OLGA*10,1,-86.451447,-3544.374268,7.716601,'Olga, the Scalawag Wench'),
+(@ENTRY_OLGA*10,2,-89.466621,-3539.939941,7.715524,'Olga, the Scalawag Wench');
+
+-- Only show first gossip if player is on quest Gambling Debt
+DELETE FROM `conditions` WHERE `SourceGroup` IN (@GOSSIP+0,@GOSSIP+10) AND `ConditionValue1` IN (@QUEST);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@GOSSIP+0,0,0,9,@QUEST,0,0,0,'',"Only show first gossip if player is on quest Gambling Debt"),
+
+(15,@GOSSIP+10,0,0,9,@QUEST,0,0,0,'',"Only show first gossip if player is on quest Gambling Debt");
diff --git a/sql/old/3.3.5a/2011_11_20_06_world_sai.sql b/sql/old/3.3.5a/2011_11_20_06_world_sai.sql
new file mode 100644
index 00000000000..68bffade858
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_06_world_sai.sql
@@ -0,0 +1,57 @@
+-- Tapper Swindlekeg SAI
+SET @ENTRY := 24711;
+SET @SPELL_GROW := 50551;
+SET @SPELL_DRINK := 50552;
+SET @SPELL_FINISH := 50555;
+SET @QUEST_DIRE_BREW := 12492;
+UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|2 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,20,0,100,0,@QUEST_DIRE_BREW,0,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tapper Swindlekeg - On Quest Complete - Run Script"),
+(@ENTRY*100+0,9,0,0,0,0,100,0,1500,1500,0,0,1,0,0,0,0,0,0,0,7,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Say Line 0"),
+(@ENTRY*100+0,9,1,0,0,0,100,0,0,0,0,0,11,@SPELL_DRINK,0,0,0,0,0,0,1,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Cast Questgiver Tries Dire Brew"),
+(@ENTRY*100+0,9,2,0,0,0,100,0,8500,8500,0,0,11,@SPELL_FINISH,0,0,0,0,0,0,1,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Cast Questgiver Finishes Drinking"),
+(@ENTRY*100+0,9,3,0,0,0,100,0,0,0,0,0,28,@SPELL_GROW,0,0,0,0,0,0,1,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Remove Growth Aura"),
+(@ENTRY*100+0,9,4,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,0,7,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Say Line 1"),
+(@ENTRY*100+0,9,5,0,0,0,100,0,3500,3500,0,0,1,2,0,0,0,0,0,0,7,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Say Line 2"),
+(@ENTRY*100+0,9,6,0,0,0,100,0,3500,3500,0,0,1,3,0,0,0,0,0,0,7,0,0,0,0,0,0,"Tapper Swindlekeg - On Script - Say Line 3");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Well time's money, and time's wasting! Let's have that drink...",12,0,100,1,0,0,"Tapper Swindlekeg"),
+(@ENTRY,1,0,"Wow! This really greases the steamplugs!",12,0,100,1,0,0,"Tapper Swindlekeg"),
+(@ENTRY,2,0,"If I were an honest goblin, I'd say this was the best beer of the festival...",12,0,100,1,0,0,"Tapper Swindlekeg"),
+(@ENTRY,3,0,"Too bad Coren's dead. If I could buy that brew from him and resell it - watered down and rebottled under my own label, of course - I'd be rich!",12,0,100,1,0,0,"Tapper Swindlekeg"),
+-- These three are used in areatrigger script
+(@ENTRY,4,0,"Hey there, and welcome to Brewfest. Come in and have a drink or three!",12,1,100,3,0,0,"Tapper Swindlekeg"),
+(@ENTRY,4,1,"What's up, friend? Welcome to the Brewfest Grounds! Now go buy some drinks!",12,1,100,3,0,0,"Tapper Swindlekeg"),
+(@ENTRY,4,2,"Hey hey, it's another $r! Welcome to my annual Brewfest celebration... now go feast and drink some!",12,1,100,3,0,0,"Tapper Swindlekeg");
+
+-- Ipfelkofer Ironkeg SAI
+SET @ENTRY := 24710;
+SET @SPELL_GROW := 50551;
+SET @SPELL_DRINK := 50552;
+SET @SPELL_FINISH := 50555;
+SET @QUEST_DIRE_BREW := 12491;
+UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|2 WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,20,0,100,0,@QUEST_DIRE_BREW,0,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Quest Complete - Run Script"),
+(@ENTRY*100+0,9,0,0,0,0,100,0,1500,1500,0,0,1,0,0,0,0,0,0,0,7,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Say Line 0"),
+(@ENTRY*100+0,9,1,0,0,0,100,0,0,0,0,0,11,@SPELL_DRINK,0,0,0,0,0,0,1,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Cast Questgiver Tries Dire Brew"),
+(@ENTRY*100+0,9,2,0,0,0,100,0,8500,8500,0,0,11,@SPELL_FINISH,0,0,0,0,0,0,1,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Cast Questgiver Finishes Drinking"),
+(@ENTRY*100+0,9,3,0,0,0,100,0,0,0,0,0,28,@SPELL_GROW,0,0,0,0,0,0,1,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Remove Growth Aura"),
+(@ENTRY*100+0,9,4,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,0,7,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Say Line 1"),
+(@ENTRY*100+0,9,5,0,0,0,100,0,3500,3500,0,0,1,2,0,0,0,0,0,0,7,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Say Line 2"),
+(@ENTRY*100+0,9,6,0,0,0,100,0,3500,3500,0,0,1,3,0,0,0,0,0,0,7,0,0,0,0,0,0,"Ipfelkofer Ironkeg - On Script - Say Line 3");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Right! Let's try this so-called dire brew...",12,0,100,0,0,0,"Ipfelkofer Ironkeg"),
+(@ENTRY,1,0,"Bronzebeard's beard! What a drink!",12,0,100,0,0,0,"Ipfelkofer Ironkeg"),
+(@ENTRY,2,0,"$N, this beer... well, it might be the best of Brewfest!",12,0,100,15,0,0,"Ipfelkofer Ironkeg"),
+(@ENTRY,3,0,"It is a shame Coren's Dire Brew can't quench more thirsting throats! It's blasphemy, I know, but I envy those Dark Iron dwarves!",12,0,100,274,0,0,"Ipfelkofer Ironkeg"),
+-- These three are used in areatrigger script
+(@ENTRY,4,0,"Ho there, and welcome to Brewfest!",12,7,100,3,0,0,"Ipfelkofer Ironkeg"),
+(@ENTRY,4,1,"Hello, friend! Welcome to the Brewfest Grounds!",12,7,100,3,0,0,"Ipfelkofer Ironkeg"),
+(@ENTRY,4,2,"Hail, good $c! Welcome to Ironforge's annual Brewfest celebration!",12,7,100,3,0,0,"Ipfelkofer Ironkeg");
diff --git a/sql/old/3.3.5a/2011_11_20_07_world_sai.sql b/sql/old/3.3.5a/2011_11_20_07_world_sai.sql
new file mode 100644
index 00000000000..efb89f6ba5a
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_07_world_sai.sql
@@ -0,0 +1,212 @@
+-- [Q] [A/H] Ring of Blood
+-- Gurghthock SAI
+SET @ENTRY_GURTHOCK := 18471;
+SET @ENTRY_BROKENTOE := 18398;
+SET @ENTRY_TWIN := 18399;
+SET @ENTRY_ROKDAR := 18400;
+SET @ENTRY_SKRAGATH := 18401;
+SET @ENTRY_WARMAUL := 18402;
+SET @ENTRY_MOGOR := 18069;
+SET @QUEST_BROKENTOE := 9962;
+SET @QUEST_BLUE_BROTHERS := 9967;
+SET @QUEST_ROKDAR := 9970;
+SET @QUEST_SKRAGATH := 9972;
+SET @QUEST_WARMAUL := 9973;
+SET @QUEST_MOGOR := 9977;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY_GURTHOCK;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0,`SpecialFlags`=2 WHERE `entry` IN (@QUEST_BROKENTOE,@QUEST_BLUE_BROTHERS,@QUEST_ROKDAR,@QUEST_SKRAGATH,@QUEST_WARMAUL,@QUEST_MOGOR);
+DELETE FROM `quest_start_scripts` WHERE `id` IN (@QUEST_BROKENTOE,@QUEST_BLUE_BROTHERS,@QUEST_ROKDAR,@QUEST_SKRAGATH,@QUEST_WARMAUL,@QUEST_MOGOR);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY_GURTHOCK,@ENTRY_GURTHOCK*100+0,@ENTRY_GURTHOCK*100+1,@ENTRY_GURTHOCK*100+2,@ENTRY_GURTHOCK*100+3,@ENTRY_GURTHOCK*100+4);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY_GURTHOCK,0,0,1,19,0,100,0,@QUEST_BROKENTOE,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Say Line 0"),
+(@ENTRY_GURTHOCK,0,1,0,61,0,100,0,0,0,0,0,80,@ENTRY_GURTHOCK*100+0,0,2,0,0,0,1,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Run Script"),
+(@ENTRY_GURTHOCK,0,2,3,19,0,100,0,@QUEST_BLUE_BROTHERS,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Say Line 0"),
+(@ENTRY_GURTHOCK,0,3,0,61,0,100,0,0,0,0,0,80,@ENTRY_GURTHOCK*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Run Script"),
+(@ENTRY_GURTHOCK,0,4,5,19,0,100,0,@QUEST_ROKDAR,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Say Line 0"),
+(@ENTRY_GURTHOCK,0,5,0,61,0,100,0,0,0,0,0,80,@ENTRY_GURTHOCK*100+2,0,2,0,0,0,1,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Run Script"),
+(@ENTRY_GURTHOCK,0,6,7,19,0,100,0,@QUEST_SKRAGATH,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Say Line 0"),
+(@ENTRY_GURTHOCK,0,7,0,61,0,100,0,0,0,0,0,80,@ENTRY_GURTHOCK*100+3,0,2,0,0,0,1,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Run Script"),
+(@ENTRY_GURTHOCK,0,8,9,19,0,100,0,@QUEST_WARMAUL,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Say Line 0"),
+(@ENTRY_GURTHOCK,0,9,0,61,0,100,0,0,0,0,0,80,@ENTRY_GURTHOCK*100+4,0,2,0,0,0,1,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Run Script"),
+(@ENTRY_GURTHOCK*100+0,9,0,0,0,0,100,0,13000,13000,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurgthock - On Script - Say Line 1"),
+(@ENTRY_GURTHOCK*100+0,9,1,0,0,0,100,0,5000,5000,0,0,12,@ENTRY_BROKENTOE,1,120000,0,0,0,8,0,0,0,-704.669,7871.08,45.0387,1.59531,"Gurghthock - On Script - Summon Brokentoe"),
+(@ENTRY_GURTHOCK*100+1,9,0,0,0,0,100,0,13000,13000,0,0,1,3,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurgthock - On Script - Say Line 3"),
+(@ENTRY_GURTHOCK*100+1,9,1,0,0,0,100,0,5000,5000,0,0,12,@ENTRY_TWIN,1,120000,0,0,0,8,0,0,0,-717.852356,7877.326660,45.547367,1.599185,"Gurghthock - On Script - Summon Murkblood Twin"),
+(@ENTRY_GURTHOCK*100+1,9,2,0,0,0,100,0,0,0,0,0,12,@ENTRY_TWIN,1,120000,0,0,0,8,0,0,0,-695.944275,7880.357910,47.097507,2.084561,"Gurghthock - On Script - Summon Murkblood Twin"),
+(@ENTRY_GURTHOCK*100+2,9,0,0,0,0,100,0,13000,13000,0,0,1,5,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurgthock - On Script - Say Line 5"),
+(@ENTRY_GURTHOCK*100+2,9,1,0,0,0,100,0,5000,5000,0,0,12,@ENTRY_ROKDAR,1,120000,0,0,0,8,0,0,0,-704.669,7871.08,45.0387,1.59531,"Gurghthock - On Script - Summon Rokdar the Sundered Lord"),
+(@ENTRY_GURTHOCK*100+3,9,0,0,0,0,100,0,13000,13000,0,0,1,7,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurgthock - On Script - Say Line 7"),
+(@ENTRY_GURTHOCK*100+3,9,1,0,0,0,100,0,5000,5000,0,0,12,@ENTRY_SKRAGATH,1,120000,0,0,0,8,0,0,0,-704.669,7871.08,45.0387,1.59531,"Gurghthock - On Script - Summon Skra'gath"),
+(@ENTRY_GURTHOCK*100+4,9,0,0,0,0,100,0,13000,13000,0,0,1,9,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurgthock - On Script - Say Line 9"),
+(@ENTRY_GURTHOCK*100+4,9,1,0,0,0,100,0,5000,5000,0,0,12,@ENTRY_WARMAUL,1,120000,0,0,0,8,0,0,0,-704.669,7871.08,45.0387,1.59531,"Gurghthock - On Script - Summon Warmaul Champion"),
+(@ENTRY_GURTHOCK,0,10,11,19,0,100,0,@QUEST_MOGOR,0,0,0,1,11,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Say Line 11"),
+(@ENTRY_GURTHOCK,0,11,0,61,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,@ENTRY_MOGOR,0,0,0,0,0,0,"Gurghthock - On Quest Accept - Set Data Mogor"),
+(@ENTRY_GURTHOCK,0,12,0,38,0,100,0,10,10,0,0,1,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Data Set - Say Line 2"), -- Brokentoe's death
+(@ENTRY_GURTHOCK,0,13,0,38,0,100,0,11,11,0,0,1,4,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Data Set - Say Line 4"), -- Murkblood Twins death
+(@ENTRY_GURTHOCK,0,14,15,38,0,100,0,12,12,0,0,1,6,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Data Set - Say Line 6"), -- Rokdar the Sundered Lord's death
+(@ENTRY_GURTHOCK,0,15,0,61,0,100,0,0,0,0,0,45,12,12,0,0,0,0,19,18069,0,0,0,0,0,0,"Gurghthock - On Data Set - Set Data Mogor"), -- Rokdar the Sundered Lord's death
+(@ENTRY_GURTHOCK,0,16,17,38,0,100,0,13,13,0,0,1,8,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Data Set - Say Line 8"), -- Skra'gath's death
+(@ENTRY_GURTHOCK,0,17,0,61,0,100,0,0,0,0,0,45,13,13,0,0,0,0,19,18069,0,0,0,0,0,0,"Gurghthock - On Data Set - Set Data Mogor"), -- Skra'gath's death
+(@ENTRY_GURTHOCK,0,18,19,38,0,100,0,14,14,0,0,1,10,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gurghthock - On Data Set - Say Line 10"), -- Warmaul Champion's death
+(@ENTRY_GURTHOCK,0,19,0,61,0,100,0,0,0,0,0,45,14,14,0,0,0,0,19,18069,0,0,0,0,0,0,"Gurghthock - On Data Set - Set Data Mogor"); -- Warmaul Champion's death
+-- Text
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000001,2000000002,2000000003,2000000102,2000000103,2000000104);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY_GURTHOCK;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY_GURTHOCK,0,0,"Get in the Ring of Blood, $N. The fight is about to start!",12,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,1,0,"The battle is about to begin! $N versus the ferocious clefthoof, Brokentoe!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,2,0,"$N has defeated Brokentoe!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,3,0,"The battle is about to begin! The unmerciful Murkblood twins versus $N!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,4,0,"Unbelievable! $N has defeated the Murkblood Twins!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,5,0,"Hailing from the mountains of Blade's Edge comes Rokdar the Sundered Lord! $N is in for the fight of $g his:her; life.",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,6,0,"$N is victorious once more!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,7,0,"From parts unkown: Skra'gath! Can $N possibly survive the onslaught of void energies?",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,8,0,"$N is victorious once more!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,9,0,"This is the moment we've all been waiting for! The Warmaul champion is about to make $g his:her; first showing at the Ring of Blood in weeks! Will $N go down in defeat as easily as the champion's other opponents? We shall see...",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,10,0,"$N is victorious once more!",14,0,100,0,0,0,"Gurgthock"),
+(@ENTRY_GURTHOCK,11,0,"Mogor has challenged you. You have to accept! Get in the ring if you are ready to fight.",12,0,100,0,0,0,"Gurgthock");
+-- Mogor SAI
+SET @ENTRY := 18069;
+SET @QUEST := 9977;
+SET @SPELL_CHAIN_LIGHTNING := 16033;
+SET @SPELL_FLAME_SHOCK := 39529;
+SET @SPELL_HEALING_WAVE := 15982;
+SET @SPELL_FRENZY := 28747;
+SET @SPELL_REVIVE_SELF := 32343;
+UPDATE `creature_template` SET `AIName`="SmartAI",`faction_A`=35,`faction_H`=35 WHERE `entry`=@ENTRY;
+DELETE FROM `creature` WHERE `id`=@ENTRY;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES
+(1022681,@ENTRY,530,1,1,0,0,-714.823,7931.65,58.8672,4.3693,300,0,0,60720,29330,0,0,0,0);
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,3500,3500,11,@SPELL_CHAIN_LIGHTNING,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mogor - In Combat - Cast Chain Lightning"),
+(@ENTRY,0,1,0,0,0,100,0,4000,4000,11000,13000,11,@SPELL_FLAME_SHOCK,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mogor - In Combat - Cast Flame Shock"),
+(@ENTRY,0,2,0,2,0,100,1,0,60,0,0,11,@SPELL_HEALING_WAVE,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - At 60% HP - Cast Healing Wave"),
+(@ENTRY,0,3,0,2,0,100,1,0,30,0,0,11,@SPELL_FRENZY,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - At 30% HP - Cast Frenzy"),
+(@ENTRY,0,4,0,2,0,100,1,0,30,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mogor - At 30% HP - Say Line 0"),
+(@ENTRY,0,5,0,6,0,100,1,0,0,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Death - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,2000,2000,0,0,11,@SPELL_REVIVE_SELF,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Script - Cast Revive Self"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,1000,1000,0,0,70,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Script - Revive Self"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,1000,1000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Script - Say Line 5"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,500,500,0,0,49,0,0,0,0,0,0,21,0,0,0,0,0,0,0,"Mogor - On Script - Attack Closest Player"),
+(@ENTRY,0,6,0,38,0,100,0,12,12,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Data Set - Say Line 1"), -- Rokdar the Sundered Lord's death
+(@ENTRY,0,7,0,38,0,100,0,13,13,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Data Set - Say Line 2"), -- Skra'gath's death
+(@ENTRY,0,8,0,38,0,100,0,14,14,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Data Set - Say Line 6"), -- Warmaul Champion's death
+(@ENTRY,0,9,10,38,0,100,0,1,1,0,0,53,0,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Data Set - Start WP"),
+(@ENTRY,0,10,0,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,7,0,0,0,0,0,0,0,"Mogor - On Data Set - Say Line 3"),
+(@ENTRY,0,11,12,40,0,100,0,4,@ENTRY,0,0,54,100000,0,2,0,0,0,1,0,0,0,0,0,0,0,"Mogor - At WP 4 - Pause Path"),
+(@ENTRY,0,12,0,61,0,100,0,0,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Mogor - At WP 4 - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Script - Say Line 4"),
+(@ENTRY*100,9,1,0,0,0,100,0,5000,5000,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Script - Set Faction Aggressive"),
+(@ENTRY*100,9,2,0,0,0,100,0,9,9,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - On Script - Set React State Aggressive"),
+(@ENTRY,0,13,0,21,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mogor - Reached Home - Set Faction Friendly"); -- To prevent issues =)
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,-715.036621,7922.948730,59.506184,"Mogor"),
+(@ENTRY,2,-720.282532,7916.268066,57.146416,"Mogor"),
+(@ENTRY,3,-724.706299,7909.140137,51.817696,"Mogor"),
+(@ENTRY,4,-717.016479,7896.937500,48.460430,"Mogor");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000001,2000000002,2000000003);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s goes into a frenzy!",16,0,100,0,0,0,"Mogor"),
+(@ENTRY,1,0,"Dat was poop! Mogor could put up much better fight den dat!",14,0,100,0,0,0,"Mogor"),
+(@ENTRY,2,0,"Mogor not impressed! Skra'gath wuz made of da air and shadow! Soft like da squishy orcies!",14,0,100,0,0,0,"Mogor"),
+(@ENTRY,3,0,"Now you face da true champion! I give you chance to run away little one. Run away now before Mogor decim... destyor... Run away before Mogor KILL!",14,0,100,0,0,0,"Mogor"),
+(@ENTRY,4,0,"No more chances! Now you pay da ogre!",14,0,100,15,0,0,"Mogor"), -- ONESHOT_ROAR
+(@ENTRY,5,0,"No more nice ogre! You hurt Mogor!",14,0,100,0,0,0,"Mogor"),
+(@ENTRY,6,0,"WUT!? UNPOSSIBLE!! You fight Mogor now! Mogor destroy!",14,0,100,0,0,0,"Mogor");
+-- Brokentoe SAI
+SET @ENTRY := 18398;
+SET @QUEST := 9962;
+SET @SPELL_HOOF_STOMP := 32023;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,1000,1000,9000,11000,11,@SPELL_HOOF_STOMP,0,0,0,0,0,2,0,0,0,0,0,0,0,"Brokentoe - In Combat - Cast Hoof Stomp"),
+(@ENTRY,0,1,2,6,0,100,1,0,0,0,0,15,@QUEST,0,0,0,0,0,24,0,0,0,0,0,0,0,"Brokentoe - On Death - Give Quest Credit"),
+(@ENTRY,0,2,0,61,0,100,1,0,0,0,0,45,10,10,0,0,0,0,19,18471,0,0,0,0,0,0,"Brokentoe - On Death - Set Data Gurghthock");
+-- Murkblood Twin SAI
+SET @ENTRY := 18399;
+SET @QUEST := 9967;
+SET @SPELL_EVISCERATE := 15691;
+SET @SPELL_MUTILATE := 32319;
+SET @SPELL_SINISTER_STRIKE := 14873;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Murkblood Twin - On Aggro - Say Line 0"),
+(@ENTRY,0,1,0,0,0,100,0,1000,1000,2000,2000,11,@SPELL_SINISTER_STRIKE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Murkblood Twin - In Combat - Cast Sinister Strike"),
+(@ENTRY,0,2,0,0,0,100,0,5000,6000,11000,12000,11,@SPELL_EVISCERATE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Murkblood Twin - In Combat - Cast Eviscerate"),
+(@ENTRY,0,3,0,0,0,100,0,8000,9000,15000,16000,11,@SPELL_MUTILATE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Murkblood Twin - In Combat - Cast Gouge"),
+(@ENTRY,0,4,5,6,0,100,1,0,0,0,0,15,@QUEST,0,0,0,0,0,24,0,0,0,0,0,0,0,"Murkblood Twin - On Death - Give Quest Credit"),
+(@ENTRY,0,5,0,61,0,100,1,0,0,0,0,45,11,11,0,0,0,0,19,18471,0,0,0,0,0,0,"Murkblood Twin - On Death - Set Data Gurghthock");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Blue brothers reign supreme!",12,0,100,0,0,0,"Murkblood Twin");
+-- Rokdar the Sundered Lord SAI
+SET @ENTRY := 18400;
+SET @QUEST := 9970;
+SET @SPELL_WAR_STOMP := 16727;
+SET @SPELL_PUNCTURE := 15976;
+SET @SPELL_KNOCK_AWAY := 31389;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rokdar the Sundered Lord - Out of Combat - Say Line"),
+(@ENTRY,0,1,0,0,0,100,0,1000,1000,9000,11000,11,@SPELL_WAR_STOMP,0,0,0,0,0,2,0,0,0,0,0,0,0,"Rokdar the Sundered Lord - In Combat - Cast War Stomp"),
+(@ENTRY,0,2,0,31,0,100,0,@SPELL_KNOCK_AWAY,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Rokdar the Sundered Lord - On Target Spellhit War Stomp - Say Line"),
+(@ENTRY,0,3,0,0,0,100,0,6000,6000,12000,12000,11,@SPELL_KNOCK_AWAY,0,0,0,0,0,2,0,0,0,0,0,0,0,"Rokdar the Sundered Lord - In Combat - Cast Knock Away"),
+(@ENTRY,0,4,0,0,0,100,0,20000,20000,25000,25000,11,@SPELL_PUNCTURE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Rokdar the Sundered Lord - In Combat - Cast Puncture"),
+(@ENTRY,0,5,6,6,0,100,1,0,0,0,0,15,@QUEST,0,0,0,0,0,24,0,0,0,0,0,0,0,"Rokdar the Sundered Lord - On Death - Give Quest Credit"),
+(@ENTRY,0,6,0,61,0,100,1,0,0,0,0,45,12,12,0,0,0,0,19,18471,0,0,0,0,0,0,"Rokdar the Sundered Lord - On Death - Set Data Gurghthock");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"ROKDAR SMASH PUNY %t!",14,0,100,0,0,0,"Rokdar the Sundered Lord");
+-- Skra'gath SAI
+SET @ENTRY := 18401;
+SET @QUEST := 9972;
+SET @SPELL_DRAINING_TOUCH := 29299;
+SET @SPELL_SHADOW_BURST := 32324;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,11,@SPELL_DRAINING_TOUCH,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skra'gath - Out of Combat - Cast Draining Touch"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Skra'gath - On Aggro - Say Line"),
+(@ENTRY,0,2,0,0,0,100,0,6000,6000,12000,12000,11,@SPELL_SHADOW_BURST,0,0,0,0,0,2,0,0,0,0,0,0,0,"Skra'gath - In Combat - Cast Shadow Burst"),
+(@ENTRY,0,3,4,6,0,100,1,0,0,0,0,15,@QUEST,0,0,0,0,0,24,0,0,0,0,0,0,0,"Skra'gath - On Death - Give Quest Credit"),
+(@ENTRY,0,4,0,61,0,100,1,0,0,0,0,45,13,13,0,0,0,0,19,18471,0,0,0,0,0,0,"Skra'gath - On Death - Set Data Gurgthock");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Closer... Come closer... See what the void brings!",14,0,100,0,0,0,"Skra'gath");
+-- Warmaul Champion SAI
+SET @ENTRY := 18402;
+SET @QUEST := 9973;
+SET @SPELL_BATTLE_SHOUT := 31403;
+SET @SPELL_CHARGE := 32323;
+SET @SPELL_MORTAL_STRIKE := 15708;
+SET @SPELL_SUNDERING_CLEAVE := 17963;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Warmaul Champion - On Aggro - Say Line"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,11,@SPELL_BATTLE_SHOUT,1,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Champion - On Aggro - Cast Battle Shout"),
+(@ENTRY,0,2,0,9,0,100,1,5,30,1500,2000,11,@SPELL_CHARGE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Champion - On Player Range - Cast Charge"),
+(@ENTRY,0,3,0,0,0,100,0,3000,4000,6000,7000,11,@SPELL_MORTAL_STRIKE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Champion - In Combat - Cast Mortal Strike"),
+(@ENTRY,0,4,0,0,0,100,0,1000,1000,9000,11000,11,@SPELL_SUNDERING_CLEAVE,1,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Champion - In Combat - Cast Sundering Cleave"),
+(@ENTRY,0,4,5,6,0,100,1,0,0,0,0,15,@QUEST,0,0,0,0,0,24,0,0,0,0,0,0,0,"Warmaul Champion - On Death - Give Quest Credit"),
+(@ENTRY,0,5,0,61,0,100,1,0,0,0,0,45,14,14,0,0,0,0,19,18471,0,0,0,0,0,0,"Warmaul Champion - On Death - Set Data Gurgthock");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Piece by piece I will tear this challenger apart... PIECE BY PIECE!",14,0,100,0,0,0,"Warmaul Champion");
diff --git a/sql/old/3.3.5a/2011_11_20_08_world_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_11_20_08_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..6e121274acb
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_08_world_achievement_criteria_data.sql
@@ -0,0 +1,5 @@
+-- G.N.E.R.D. Rage
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=3882;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES
+(3882,5,48890,0,''), -- The aura
+(3882,16,324,0,''); -- Holiday must be active
diff --git a/sql/old/3.3.5a/2011_11_20_09_world_sai.sql b/sql/old/3.3.5a/2011_11_20_09_world_sai.sql
new file mode 100644
index 00000000000..8931a7084d9
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_09_world_sai.sql
@@ -0,0 +1,35 @@
+-- [Q] Maintaining Discipline
+
+-- Exhausted Vrykul SAI
+SET @ENTRY := 30146;
+SET @SPELL_DESPERATE_BLOW := 57395;
+SET @SPELL_DISCIPLINING_ROD := 42837;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100+0,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,0,0,0,0,0,90,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exhausted Vrykul - Out of Combat - Set Bytes1 Sit"), -- Not doing this in creature_addon(_template) so that we can cancel this in SAI
+(@ENTRY,0,1,2,8,0,100,0,@SPELL_DISCIPLINING_ROD,0,0,0,87,@ENTRY*100+0,@ENTRY*100+1,0,0,0,0,1,0,0,0,0,0,0,0,"Exhausted Vrykul - On Spellhit - Run Random Script"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exhausted Vrykul - On Spellhit - Set Phase 1"), -- To prevent the same one to give more credits
+(@ENTRY*100+0,9,0,0,0,0,100,0,0,0,0,0,49,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Exhausted Vrykul - On Script - Attack Player"),
+(@ENTRY*100+0,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Exhausted Vrykul - On Script - Say Line 0 (random)"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Exhausted Vrykul - On Script - Say Line 1 (random)"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,91,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exhausted Vrykul - On Script - Stand Up"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,0,0,0,0,5,233,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exhausted Vrykul - On Script - Emote Work"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,0,0,0,0,33,29886,0,0,0,0,0,7,0,0,0,0,0,0,0,"Exhausted Vrykul - On Script - Kill Credit"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,11,@SPELL_DESPERATE_BLOW,0,0,0,0,0,2,0,0,0,0,0,0,0,"Exhausted Vrykul - At 15% HP - Cast Desperate Blow");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Curse you! You will not treat me like a beast!",12,0,100,1,0,0,"Exhausted Vrykul"),
+(@ENTRY,0,1,"Enough! I will teach you some manners, wench!",12,0,100,1,0,0,"Exhausted Vrykul"),
+(@ENTRY,0,2,"I'd rather die fighting than live like a slave!",12,0,100,1,0,0,"Exhausted Vrykul"),
+
+(@ENTRY,1,0,"Back... to work...",12,0,100,1,0,0,"Exhausted Vrykul"),
+(@ENTRY,1,1,"We will have revenge... some day.",12,0,100,1,0,0,"Exhausted Vrykul"),
+(@ENTRY,1,2,"You treat us worse than animals!",12,0,100,1,0,0,"Exhausted Vrykul");
+
+-- Captive Vrykul should be mining
+DELETE FROM `creature_template_addon` WHERE `entry`=29427;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (29427,0,0,1,233,NULL);
diff --git a/sql/old/3.3.5a/2011_11_20_10_world_sai.sql b/sql/old/3.3.5a/2011_11_20_10_world_sai.sql
new file mode 100644
index 00000000000..b56fd826e95
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_10_world_sai.sql
@@ -0,0 +1,55 @@
+-- [Q] [A/H] The Skettis Offensive
+-- Defender Grashna SAI
+SET @ENTRY := 22373;
+SET @QUEST := 10879;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0,`SpecialFlags`=2 WHERE `entry`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Defender Grashna - On Quest Accept - Run Script"),
+-- Wave one - no text
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+-- Wave two
+(@ENTRY*100,9,2,0,0,0,100,0,30000,30000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Defender Grashna - On Script - Say Line 0"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+-- Wave three
+(@ENTRY*100,9,5,0,0,0,100,0,30000,30000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Defender Grashna - On Script - Say Line 1"),
+(@ENTRY*100,9,6,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+(@ENTRY*100,9,7,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+(@ENTRY*100,9,8,0,0,0,100,0,0,0,0,0,12,22376,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Minion of Terokk"),
+-- Wave four
+(@ENTRY*100,9,9,0,0,0,100,0,30000,30000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Defender Grashna - On Script - Say Line 2"),
+(@ENTRY*100,9,10,0,0,0,100,0,0,0,0,0,12,22375,1,60000,0,0,0,8,0,0,0,-1626.12,5402.47,-42.31,2.08131,"Defender Grashna - On Script - Summon Avatar of Terokk"),
+(@ENTRY,0,1,0,38,0,100,0,1,1,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Defender Grashna - On Data Set - Say Line 3");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000022,2000000023,2000000024,2000000025);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"More Minions of Terokk are coming!",12,0,100,0,0,0,"Defender Grashna"),
+(@ENTRY,1,0,"The invaders persist! Hold them off!",12,0,100,0,0,0,"Defender Grashna"),
+(@ENTRY,2,0,"An Avatar of Terokk!! To arms!",12,0,100,0,0,0,"Defender Grashna"),
+(@ENTRY,3,0,"The Avatar of Terokk has been defeated! Death to Terokk! Death to Skettis!",12,0,100,0,0,0,"Defender Grashna");
+-- Minion of Terokk SAI
+SET @ENTRY := 22376;
+SET @SPELL_SCREECH := 38021;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-1647.329956,5443.410156,-40.911999,2.254425,"Minion of Terokk - Just Summoned - Move To Pos"),
+(@ENTRY,0,1,0,0,0,100,1,3000,4000,8000,8000,11,@SPELL_SCREECH,0,0,0,0,0,2,0,0,0,0,0,0,0,"Minion of Terokk - In Combat - Cast Terrifying Screech");
+-- Avatar of Terokk SAI
+SET @ENTRY := 22375;
+SET @SPELL_CHARGE := 24193;
+SET @SPELL_FEATHER_BURST := 39068;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-1641.118652,5436.648926,-43.344521,0.803601,"Avatar of Terokk - Just Summoned - Move To Pos"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-1641.118652,5436.648926,-43.344521,0.803601,"Avatar of Terokk - Just Summoned - Move To Pos"),
+(@ENTRY,0,2,3,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,6546,0,0,0,0,0,0,"Avatar of Terokk - On Death - Set Data Defender Grashna"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Avatar of Terokk - On Death - Quest Credit"),
+(@ENTRY,0,4,0,4,0,100,1,0,0,0,0,11,@SPELL_CHARGE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Avatar of Terokk - On Aggro - Cast Charge"),
+(@ENTRY,0,5,0,0,0,100,0,6000,9000,11000,14000,11,@SPELL_FEATHER_BURST,0,0,0,0,0,2,0,0,0,0,0,0,0,"Avatar of Terokk - In Combat - Cast Feather Burst");
diff --git a/sql/old/3.3.5a/2011_11_20_11_world_sai.sql b/sql/old/3.3.5a/2011_11_20_11_world_sai.sql
new file mode 100644
index 00000000000..a05b26e6831
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_11_world_sai.sql
@@ -0,0 +1,9 @@
+-- [Q] A Carver and a Croaker
+
+-- Scalawag Frog SAI
+SET @ENTRY := 26503;
+UPDATE `creature_template` SET `AIName`='SmartAI',`npcflag`=`npcflag`|1,`IconName`='LootAll' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,64,0,100,0,0,0,0,0,56,35803,1,0,0,0,0,7,0,0,0,0,0,0,0,"Scalawag Frog - Gossip Hello - Create Item Scalawag Frog"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scalawag Frog - Gossip Hello - Force Despawn");
diff --git a/sql/old/3.3.5a/2011_11_20_12_world_sai.sql b/sql/old/3.3.5a/2011_11_20_12_world_sai.sql
new file mode 100644
index 00000000000..527db0e02e7
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_12_world_sai.sql
@@ -0,0 +1,30 @@
+-- [Q] Rivenwood Captives
+
+-- Riven Widow Cocoon SAI
+SET @ENTRY := 24210;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `MovementType`=0,`spawndist`=0 WHERE `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,6,0,25,0,0,0,0,0,12,24211,2,8000,0,0,0,1,0,0,0,0,0,0,0,"Riven Widow Cocoon - On Death - Summon Freed Winterhoof Longrunner (25%)"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,33,24211,0,0,0,0,0,7,0,0,0,0,0,0,0,"Riven Widow Cocoon - On Death - Quest Credit");
+
+-- Freed Winterhoof Longrunner SAI
+SET @ENTRY := 24211;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,54,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Freed Winterhoof Longrunner - Just Summoned - Say Line 0"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,41,6000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Freed Winterhoof Longrunner - Just Summoned - Forced Desoawn");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Blessings of the spirits of the land and air upon you.",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,1,"I must return. Good hunting to you.",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,2,"I owe you a life debt, stranger.",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,3,"Strange ghosts walk the land. Be careful!",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,4,"Thank you, stranger.",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,5,"They took us one by one. I'm sure there are other survivors.",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,6,"We should never have traveled through the Rivenwood. Everyone knows this!",12,0,100,1,0,0,"Freed Winterhoof Longrunner"),
+(@ENTRY,0,7,"You saved me from certain death. I owe you.",12,0,100,1,0,0,"Freed Winterhoof Longrunner");
diff --git a/sql/old/3.3.5a/2011_11_20_13_world_sai.sql b/sql/old/3.3.5a/2011_11_20_13_world_sai.sql
new file mode 100644
index 00000000000..c4cd10912a3
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_13_world_sai.sql
@@ -0,0 +1,15 @@
+-- [Q] Elixir of Pain
+-- Stanley SAI
+SET @ENTRY := 2274;
+SET @QUEST := 502;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,20,0,100,0,@QUEST,0,0,0,36,2275,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stanley - On Quest Complete - Update Entry");
+-- Enraged Standley SAI
+SET @ENTRY := 2275;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,0,0,0,0,0,0,0,"Enraged Standley - Just Summoned - Attack Closest Player");
diff --git a/sql/old/3.3.5a/2011_11_20_14_world_revert.sql b/sql/old/3.3.5a/2011_11_20_14_world_revert.sql
new file mode 100644
index 00000000000..067c750b694
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_14_world_revert.sql
@@ -0,0 +1,4 @@
+-- revert 2011_11_20_11_world_sai.sql
+SET @ENTRY := 26503;
+UPDATE `creature_template` SET `AIName`='',`npcflag`=`npcflag`&~1,`IconName`='' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`= @ENTRY AND `source_type`=0;
diff --git a/sql/old/3.3.5a/2011_11_20_15_world_sai.sql b/sql/old/3.3.5a/2011_11_20_15_world_sai.sql
new file mode 100644
index 00000000000..8e0b4141379
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_20_15_world_sai.sql
@@ -0,0 +1,41 @@
+-- [Q] [A/H] Cleansing of the Orb of Orahil
+-- [Q] [A/H] Mana Surges
+-- Tabetha SAI
+SET @ENTRY := 6546;
+SET @QUEST_CLEANSING := 4961;
+SET @QUEST_MANA_SURGE := 1957;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `entry` IN (@QUEST_CLEANSING,@QUEST_MANA_SURGE);
+DELETE FROM `quest_start_scripts` WHERE `id` IN (@QUEST_CLEANSING,@QUEST_MANA_SURGE);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3) AND `source_type` IN (0,9);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST_CLEANSING,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Tabetha - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tabetha - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,2000,2000,0,0,11,9097,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tabetha - On Script - Cast Summon Demon of the Orb"),
+
+(@ENTRY,0,1,0,20,0,100,0,@QUEST_MANA_SURGE,0,0,0,9,0,0,0,0,0,0,14,28294,103680,0,0,0,0,0,"Tabetha - On Quest Complete - Deactivate Mana Rift (GO)"), -- Make it stop being visual
+(@ENTRY,0,2,3,19,0,100,0,@QUEST_MANA_SURGE,0,0,0,9,0,0,0,0,0,0,14,28294,103680,0,0,0,0,0,"Tabetha - On Quest Accept - Activate Mana Rift (GO)"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,87,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3,0,0,0,1,0,0,0,0,0,0,0,"Tabetha - On Quest Accept - Run Random Script"),
+(@ENTRY,0,4,0,38,0,100,0,1,1,0,0,87,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3,0,0,0,1,0,0,0,0,0,0,0,"Tabetha - On Data Set - Run Random Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4019.22,-3383.91,38.2265,2.7963,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4019.22,-3383.91,38.2265,2.7963,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4019.22,-3383.91,38.2265,2.7963,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+2,9,0,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4019.99,-3394.54,38.5507,1.8342,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+2,9,1,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4019.99,-3394.54,38.5507,1.8342,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+3,9,0,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4013.29,-3385.14,38.4656,2.3801,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+3,9,1,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4013.29,-3385.14,38.4656,2.3801,"Tabetha - On Random Script - Summon Mana Surge"),
+(@ENTRY*100+3,9,2,0,0,0,100,0,0,0,0,0,12,6550,1,600000,0,0,0,8,0,0,0,-4013.29,-3385.14,38.4656,2.3801,"Tabetha - On Random Script - Summon Mana Surge");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry`=2000000032;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Grid yourself, $N. The demon in this orb is a fel beast.",12,0,100,0,0,0,"Tabetha");
+-- Mana Surge SAI
+SET @ENTRY := 6550;
+SET @SPELL_SHOCK := 11824;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,1,0,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mana Surge - On Just Summoned - Set Random Movement"),
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,6546,0,0,0,0,0,0,"Mana Surge - On Death - Set Data Tabetha"),
+(@ENTRY,0,2,0,0,0,100,0,3000,4000,8000,8000,11,@SPELL_SHOCK,0,0,0,0,0,2,0,0,0,0,0,0,0,'Mana Surge - In Combat - Cast Shock');
diff --git a/sql/old/3.3.5a/2011_11_21_00_world_db_errors.sql b/sql/old/3.3.5a/2011_11_21_00_world_db_errors.sql
new file mode 100644
index 00000000000..d3ae6fb197b
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_21_00_world_db_errors.sql
@@ -0,0 +1,11 @@
+UPDATE `creature_template` SET `lootid`=0 WHERE `entry`=11054;
+UPDATE `conditions` SET `SourceTypeOrReferenceId`=17 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=47305 AND `ConditionTypeOrReference`=20;
+UPDATE `conditions` SET `SourceTypeOrReferenceId`=18, `SourceEntry`=36732, `ConditionTypeOrReference`=24 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=47305 AND `ConditionTypeOrReference`=18;
+UPDATE `smart_scripts` SET `target_param1`=35 WHERE `entryorguid`=2275 AND `source_type`=0 AND `id`=0;
+UPDATE `smart_scripts` SET `target_param1`=35 WHERE `entryorguid`=1806901 AND `source_type`=9 AND `id`=3;
+
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000102, 2000000103, 2000000104);
+INSERT INTO `db_script_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES
+(2000000102,'Oh, darn...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(2000000103,'Ok, let''s get started!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+(2000000104,'... oops.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql/old/3.3.5a/2011_11_21_01_pilgrim_achievement_reward.sql b/sql/old/3.3.5a/2011_11_21_01_pilgrim_achievement_reward.sql
new file mode 100644
index 00000000000..7083107a8c2
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_21_01_pilgrim_achievement_reward.sql
@@ -0,0 +1 @@
+UPDATE `achievement_reward` SET `item`=44810, `sender`=28951, `subject`='A Gobbler not yet Gobbled', `text` = 'Can you believe this Plump Turkey made it through November alive?$B$BSince all this friends have been served up on Bountiful Tables with sides of Cranberry Chutney and Spice Bread Stuffing and... ooo... I''m getting hungry. But anyhow! He''s all alone, now, so I was hoping you might be willing to take care of him. There simply isn''t enough room left in my shop!$B$BJust keep him away from cooking fires, please. He gets this strange look in his eyes around them...' WHERE `entry` IN (3478,3656); -- Pilgrim achievement (A/H)
diff --git a/sql/old/3.3.5a/2011_11_21_02_pilgrim_achievement_criteria_data.sql b/sql/old/3.3.5a/2011_11_21_02_pilgrim_achievement_criteria_data.sql
new file mode 100644
index 00000000000..589dbb0b2a4
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_21_02_pilgrim_achievement_criteria_data.sql
@@ -0,0 +1,11 @@
+-- Achievement: Turkey Lurkey
+DELETE FROM `achievement_criteria_data` WHERE `type`=2 AND `criteria_id` IN (11158,11159,11160,11161,11162,11163,11164,11165);
+INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`) VALUES
+(11158, 2, 4, 1), -- Human Rogue
+(11159, 2, 4, 4), -- Night Elf Rogue
+(11160, 2, 4, 2), -- Orc Rogue
+(11161, 2, 4, 8), -- Troll Rogue
+(11162, 2, 4, 5), -- Undead Rogue
+(11163, 2, 4, 10), -- Blood Elf Rogue
+(11164, 2, 4, 3), -- Dwarf Rogue
+(11165, 2, 4, 7); -- Gnome Rogue
diff --git a/sql/old/3.3.5a/2011_11_21_03_pilgrim_misc.sql b/sql/old/3.3.5a/2011_11_21_03_pilgrim_misc.sql
new file mode 100644
index 00000000000..6547fe9a53a
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_21_03_pilgrim_misc.sql
@@ -0,0 +1,145 @@
+-- Misc stuffz
+UPDATE `npc_text` SET `WDBVerified`=12340 WHERE `ID`=14648; -- "A Bountiful Table is laid out..."
+
+-- Template updates
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=3, `unit_flags`=33536 WHERE `entry`=34654; -- Bountiful Feast Hostess
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34678; -- Dokin Farplain
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34684; -- Laha Farplain
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35343; -- Bountiful Barrel
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34685; -- Dalni Tallgrass
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35342; -- Bountiful Barrel
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34713; -- Ondani Greatmill
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34787; -- John Rigsdale
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34786; -- Alice Rigsdale
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34677; -- Miles Standish
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34712; -- Roberta Carter
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34683; -- Rose Standish
+UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35341; -- Bountiful Barrel
+
+UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34819; -- The Stuffing Chair
+UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34824; -- The Sweet Potato Chair
+UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34823; -- The Cranberry Chair
+UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34812; -- The Turkey Chair
+UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34822; -- The Pie Chair
+
+UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29330; -- Bountiful Feast Hostess
+UPDATE `creature_model_info` SET `bounding_radius`=0.9747,`combat_reach`=4.05,`gender`=0 WHERE `modelid`=29339; -- Dokin Farplain
+UPDATE `creature_model_info` SET `bounding_radius`=1,`combat_reach`=0,`gender`=0 WHERE `modelid`=29775; -- Bountiful Barrel
+UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29342; -- Laha Farplain
+UPDATE `creature_model_info` SET `bounding_radius`=1.6,`combat_reach`=0,`gender`=2 WHERE `modelid`=29205; -- Chairs
+UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29397; -- Dalni Tallgrass
+UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29401; -- Ondani Greatmill
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29428; -- John Rigsdale
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29427; -- Alice Rigsdale
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29338; -- Miles Standish
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29365; -- Roberta Carter
+UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29340; -- Rose Standish
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (34654,34678,35343,34684,34819,34824,34823,34812,34822,34685,35342,34713,34787,34786,34677,34712,34683,35341);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(34654,0,0,1,0, NULL), -- Bountiful Feast Hostess
+(34678,0,0,2,0, NULL), -- Dokin Farplain
+(35343,0,0,1,0, NULL), -- Bountiful Barrel (TB)
+(34684,0,0,1,0, NULL), -- Laha Farplain
+(34685,0,0,1,0, NULL), -- Dalni Tallgrass
+(35342,0,0,1,0, NULL), -- Bountiful Barrel (OG)
+(34713,0,0,2,0, NULL), -- Ondani Greatmill
+(34787,0,0,1,0, NULL), -- John Rigsdale
+(34786,0,0,2,0, NULL), -- Alice Rigsdale
+(34677,0,0,2,0, NULL), -- Miles Standish
+(34712,0,0,2,0, NULL), -- Roberta Carter
+(34683,0,0,1,0, NULL), -- Rose Standish
+(35341,0,0,1,0, NULL), -- Bountiful Barrel
+(34819,0,0,1,0, '61795'), -- The Stuffing Chair (Stuffing Server)
+(34824,0,0,1,0, '61797'), -- The Sweet Potato Chair (Sweet Potatoes Server)
+(34823,0,0,1,0, '61793'), -- The Cranberry Chair (Cranberry Server)
+(34812,0,0,1,0, '61796'), -- The Turkey Chair (Turkey Server)
+(34822,0,0,1,0, '61794'); -- The Pie Chair (Pie Server)
+
+-- Vehicles
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (34819,34824,34823,34812,34822);
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `quest_start`, `quest_start_active`, `quest_end`, `cast_flags`, `aura_required`, `aura_forbidden`, `user_type`) VALUES
+(34819, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Stuffing Chair (Ride Vehicle)
+(34824, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Sweet Potato Chair (Ride Vehicle)
+(34823, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Cranberry Chair (Ride Vehicle)
+(34812, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Turkey Chair (Ride Vehicle)
+(34822, 65403, 0, 0, 0, 1, 0, 0, 0); -- The Pie Chair (Ride Vehicle)
+
+-- Gossips
+UPDATE `creature_template` SET `gossip_menu_id`=10575 WHERE `entry`=34654; -- Bountiful Feast Hostess
+DELETE FROM `gossip_menu` WHERE `entry`=10575 AND `text_id`=14633;
+DELETE FROM `gossip_menu` WHERE `entry`=10589 AND `text_id`=14648;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(10575, 14633),
+(10589, 14648);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=10575 AND `id`=0;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES
+(10575, 0, 0, 'How do the Bountiful Tables work?', 1, 1, 10589, 0, 0, 0, NULL);
+
+-- Vendor tables
+UPDATE `item_template` SET `BuyCount`=5 WHERE `entry` IN (44835,44853,46797,46793,46796); -- Autumnal Herbs, Honey, Mulgore Sweet Potato, Tangy Southfury Cranberries, Ripe Tirisfal Pumpkin
+DELETE FROM `npc_vendor` WHERE `entry` IN (35343,34684,35342,34685,34787,35341,34683);
+INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `ExtendedCost`) VALUES
+-- 35343 (Bountiful Barrel)
+(35343, 1, 46810, 0, 0), -- Bountiful Cookbook
+(35343, 2, 46797, 0, 0), -- Mulgore Sweet Potato
+(35343, 3, 44835, 0, 0), -- Autumnal Herbs
+(35343, 4, 44853, 0, 0), -- Honey
+(35343, 5, 159, 0, 0), -- Refreshing Spring Water
+(35343, 6, 2678, 0, 0), -- Mild Spices
+(35343, 7, 30817, 0, 0), -- Simple Flour
+(35343, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34684 (Laha Farplain)
+(34684, 1, 46810, 0, 0), -- Bountiful Cookbook
+(34684, 2, 46797, 0, 0), -- Mulgore Sweet Potato
+(34684, 3, 44835, 0, 0), -- Autumnal Herbs
+(34684, 4, 44853, 0, 0), -- Honey
+(34684, 5, 159, 0, 0), -- Refreshing Spring Water
+(34684, 6, 2678, 0, 0), -- Mild Spices
+(34684, 7, 30817, 0, 0), -- Simple Flour
+(34684, 8, 46888, 0, 0), -- Bountiful Basket
+-- 35342 (Bountiful Barrel)
+(35342, 1, 46810, 0, 0), -- Bountiful Cookbook
+(35342, 2, 46793, 0, 0), -- Tangy Southfury Cranberries
+(35342, 3, 44835, 0, 0), -- Autumnal Herbs
+(35342, 4, 44853, 0, 0), -- Honey
+(35342, 5, 159, 0, 0), -- Refreshing Spring Water
+(35342, 6, 2678, 0, 0), -- Mild Spices
+(35342, 7, 30817, 0, 0), -- Simple Flour
+(35342, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34685 (Dalni Tallgrass)
+(34685, 1, 46810, 0, 0), -- Bountiful Cookbook
+(34685, 2, 46793, 0, 0), -- Tangy Southfury Cranberries
+(34685, 3, 44835, 0, 0), -- Autumnal Herbs
+(34685, 4, 44853, 0, 0), -- Honey
+(34685, 5, 159, 0, 0), -- Refreshing Spring Water
+(34685, 6, 2678, 0, 0), -- Mild Spices
+(34685, 7, 30817, 0, 0), -- Simple Flour
+(34685, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34787 (John Rigsdale)
+(34787, 1, 46810, 0, 0), -- Bountiful Cookbook
+(34787, 2, 44835, 0, 0), -- Autumnal Herbs
+(34787, 3, 44853, 0, 0), -- Honey
+(34787, 4, 159, 0, 0), -- Refreshing Spring Water
+(34787, 5, 2678, 0, 0), -- Mild Spices
+(34787, 6, 30817, 0, 0), -- Simple Flour
+(34787, 7, 46888, 0, 0), -- Bountiful Basket
+-- 35341 (Bountiful Barrel)
+(35341, 1, 46810, 0, 0), -- Bountiful Cookbook
+(35341, 2, 46796, 0, 0), -- Ripe Tirisfal Pumpkin
+(35341, 3, 44835, 0, 0), -- Autumnal Herbs
+(35341, 4, 44853, 0, 0), -- Honey
+(35341, 5, 159, 0, 0), -- Refreshing Spring Water
+(35341, 6, 2678, 0, 0), -- Mild Spices
+(35341, 7, 30817, 0, 0), -- Simple Flour
+(35341, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34683 (Rose Standish)
+(34683, 1, 46810, 0, 0), -- Bountiful Cookbook
+(34683, 2, 46796, 0, 0), -- Ripe Tirisfal Pumpkin
+(34683, 3, 44835, 0, 0), -- Autumnal Herbs
+(34683, 4, 44853, 0, 0), -- Honey
+(34683, 5, 159, 0, 0), -- Refreshing Spring Water
+(34683, 6, 2678, 0, 0), -- Mild Spices
+(34683, 7, 30817, 0, 0), -- Simple Flour
+(34683, 8, 46888, 0, 0); -- Bountiful Basket
diff --git a/sql/old/3.3.5a/2011_11_21_04_pilgrim_misc.sql b/sql/old/3.3.5a/2011_11_21_04_pilgrim_misc.sql
new file mode 100644
index 00000000000..194c084ebc5
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_21_04_pilgrim_misc.sql
@@ -0,0 +1,109 @@
+DELETE FROM `creature_template_addon` WHERE `entry` IN (32823,34645,34783,34682,35337,35338,35340,34711,34676,34708,34644,34744,34710,34675);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(32823,0,0,1,0, NULL), -- Bountiful Table
+(34645,0,0,1,0, NULL), -- Elizabeth Barker Winslow
+(34783,0,0,1,0, NULL), -- Ranisa Whitebough
+(34682,0,0,1,0, NULL), -- Wilmina Holbeck
+(35337,0,0,1,0, NULL), -- Bountiful Barrel
+(35338,0,0,1,0, NULL), -- Bountiful Barrel
+(35340,0,0,1,0, NULL), -- Bountiful Barrel
+(34711,0,0,2,0, NULL), -- Mary Allerton
+(34676,0,0,2,0, NULL), -- Isaac Allerton
+(34708,0,0,2,0, NULL), -- Caitrin Ironkettle
+(34644,0,0,2,0, NULL), -- Edward Winslow
+(34744,0,0,1,0, NULL), -- Jasper Moore
+(34710,0,0,1,0, NULL), -- Ellen Moore
+(34675,0,0,2,0, NULL); -- Gregory Tabor
+
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34783; -- Ranisa Whitebough
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34645; -- Elizabeth Barker Winslow
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34681; -- Ikaneba Summerset
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34682; -- Wilmina Holbeck
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35337; -- Bountiful Barrel
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35338; -- Bountiful Barrel
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35340; -- Bountiful Barrel
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34711; -- Mary Allerton
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34676; -- Isaac Allerton
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34708; -- Caitrin Ironkettle
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34644; -- Edward Winslow
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=3,`unit_flags`=33536 WHERE `entry`=34744; -- Jasper Moore
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34710; -- Ellen Moore
+UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34675; -- Gregory Tabor
+
+UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29394; -- Elizabeth Barker Winslow
+UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29430; -- Ranisa Whitebough
+UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29393; -- Ikaneba Summerset
+UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29329; -- Wilmina Holbeck
+UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29388; -- Mary Allerton
+UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29391; -- Isaac Allerton
+UPDATE `creature_model_info` SET `bounding_radius`=0.347,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29324; -- Caitrin Ironkettle
+UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29392; -- Edward Winslow
+UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29444; -- Jasper Moore
+UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29400; -- Ellen Moore
+UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29337; -- Gregory Tabor
+
+UPDATE `item_template` SET `BuyCount`=5 WHERE `entry` IN (44854,46784,44855);
+DELETE FROM `npc_vendor` WHERE `entry` IN (34645, 34783, 35337, 35338, 35340, 34681, 34682);
+INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `ExtendedCost`) VALUES
+-- 34645 (Elizabeth Barker Winslow)
+(34645, 1, 46809, 0, 0), -- Bountiful Cookbook
+(34645, 2, 44854, 0, 0), -- Tangy Wetland Cranberries
+(34645, 3, 44835, 0, 0), -- Autumnal Herbs
+(34645, 4, 44853, 0, 0), -- Honey
+(34645, 5, 159, 0, 0), -- Refreshing Spring Water
+(34645, 6, 2678, 0, 0), -- Mild Spices
+(34645, 7, 30817, 0, 0), -- Simple Flour
+(34645, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34783 (Ranisa Whitebough)
+(34783, 1, 46809, 0, 0), -- Bountiful Cookbook
+(34783, 2, 44835, 0, 0), -- Autumnal Herbs
+(34783, 3, 44853, 0, 0), -- Honey
+(34783, 4, 159, 0, 0), -- Refreshing Spring Water
+(34783, 5, 2678, 0, 0), -- Mild Spices
+(34783, 6, 30817, 0, 0), -- Simple Flour
+(34783, 7, 46888, 0, 0), -- Bountiful Basket
+-- 35337 (Bountiful Barrel)
+(35337, 1, 46809, 0, 0), -- Bountiful Cookbook
+(35337, 2, 46784, 0, 0), -- Ripe Elwynn Pumpkin
+(35337, 3, 44835, 0, 0), -- Autumnal Herbs
+(35337, 4, 44853, 0, 0), -- Honey
+(35337, 5, 159, 0, 0), -- Refreshing Spring Water
+(35337, 6, 2678, 0, 0), -- Mild Spices
+(35337, 7, 30817, 0, 0), -- Simple Flour
+(35337, 8, 46888, 0, 0), -- Bountiful Basket
+-- 35338 (Bountiful Barrel)
+(35338, 1, 46809, 0, 0), -- Bountiful Cookbook
+(35338, 2, 44855, 0, 0), -- Teldrassil Sweet Potato
+(35338, 3, 44835, 0, 0), -- Autumnal Herbs
+(35338, 4, 44853, 0, 0), -- Honey
+(35338, 5, 159, 0, 0), -- Refreshing Spring Water
+(35338, 6, 2678, 0, 0), -- Mild Spices
+(35338, 7, 30817, 0, 0), -- Simple Flour
+(35338, 8, 46888, 0, 0), -- Bountiful Basket
+-- 35340 (Bountiful Barrel)
+(35340, 1, 46809, 0, 0), -- Bountiful Cookbook
+(35340, 2, 44854, 0, 0), -- Tangy Wetland Cranberries
+(35340, 3, 44835, 0, 0), -- Autumnal Herbs
+(35340, 4, 44853, 0, 0), -- Honey
+(35340, 5, 159, 0, 0), -- Refreshing Spring Water
+(35340, 6, 2678, 0, 0), -- Mild Spices
+(35340, 7, 30817, 0, 0), -- Simple Flour
+(35340, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34681 (Ikaneba Summerset)
+(34681, 1, 46809, 0, 0), -- Bountiful Cookbook
+(34681, 2, 44855, 0, 0), -- Teldrassil Sweet Potato
+(34681, 3, 44835, 0, 0), -- Autumnal Herbs
+(34681, 4, 44853, 0, 0), -- Honey
+(34681, 5, 159, 0, 0), -- Refreshing Spring Water
+(34681, 6, 2678, 0, 0), -- Mild Spices
+(34681, 7, 30817, 0, 0), -- Simple Flour
+(34681, 8, 46888, 0, 0), -- Bountiful Basket
+-- 34682 (Wilmina Holbeck)
+(34682, 1, 46809, 0, 0), -- Bountiful Cookbook
+(34682, 2, 46784, 0, 0), -- Ripe Elwynn Pumpkin
+(34682, 3, 44835, 0, 0), -- Autumnal Herbs
+(34682, 4, 44853, 0, 0), -- Honey
+(34682, 5, 159, 0, 0), -- Refreshing Spring Water
+(34682, 6, 2678, 0, 0), -- Mild Spices
+(34682, 7, 30817, 0, 0), -- Simple Flour
+(34682, 8, 46888, 0, 0); -- Bountiful Basket
diff --git a/sql/old/3.3.5a/2011_11_21_05_pilgrim_tables.sql b/sql/old/3.3.5a/2011_11_21_05_pilgrim_tables.sql
new file mode 100644
index 00000000000..18881e14eaf
--- /dev/null
+++ b/sql/old/3.3.5a/2011_11_21_05_pilgrim_tables.sql
@@ -0,0 +1,52 @@
+UPDATE `creature_template` SET `unit_flags`=33555200,`VehicleId`=323 WHERE `entry`=32830; -- Food Holder
+UPDATE `creature_template` SET `unit_flags`=33555200,`VehicleId`=325 WHERE `entry`=32840; -- Plate Holder
+UPDATE `creature_template` SET `unit_flags`=33554432,`speed_run`=1,`VehicleId`=320 WHERE `entry`=32823; -- Bountiful Table
+UPDATE `creature_template` SET `unit_flags`=33554432,`speed_run`=1 WHERE `entry`=32839; -- Sturdy Plate
+UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32824; -- [PH] Pilgrim's Bounty Table - Turkey
+UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32827; -- [PH] Pilgrim's Bounty Table - Cranberry Sauce
+UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32831; -- [PH] Pilgrim's Bounty Table - Stuffing
+UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32825; -- [PH] Pilgrim's Bounty Table - Yams
+UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32829; -- [PH] Pilgrim's Bounty Table - Pie
+
+UPDATE `creature_model_info` SET `bounding_radius`=1.8,`combat_reach`=0,`gender`=2 WHERE `modelid`=28293; -- Bountiful Table
+UPDATE `creature_model_info` SET `bounding_radius`=1.75,`combat_reach`=0,`gender`=2 WHERE `modelid`=28310; -- Sturdy Plate
+UPDATE `creature_model_info` SET `bounding_radius`=0.125,`combat_reach`=0.25,`gender`=2 WHERE `modelid`=17188; -- [PH] Pilgrim's Bounty Table - X
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (32830,32840,32839,32824,32827,32831,32829,32825);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(32830,0,0,1,0, NULL), -- Food Holder
+(32840,0,0,1,0, NULL), -- Plate Holder
+(32839,0,0,1,0, NULL), -- Sturdy Plate
+(32824,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Turkey
+(32827,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Cranberry Sauce
+(32831,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Stuffing
+(32825,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Yams
+(32829,0,0,1,0, NULL); -- [PH] Pilgrim's Bounty Table - Pie
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (32823,32830,32840);
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `quest_start`, `quest_start_active`, `quest_end`, `cast_flags`, `aura_required`, `aura_forbidden`, `user_type`) VALUES
+(32823, 46598, 0, 0, 0, 1, 0, 0, 0), -- Bountiful Table (Ride Vehicle Hardcoded)
+(32830, 46598, 0, 0, 0, 1, 0, 0, 0), -- Food Holder (Ride Vehicle Hardcoded)
+(32840, 46598, 0, 0, 0, 1, 0, 0, 0); -- Plate Holder (Ride Vehicle Hardcoded)
+
+DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (32823,32830,32840);
+INSERT INTO `vehicle_template_accessory` (`entry`, `accessory_entry`, `seat_id`, `minion`, `description`, `summontype`, `summontimer`) VALUES
+(32823, 34812, 0, 1, 'Bountiful Table - The Turkey Chair', 8, 0),
+(32823, 34823, 1, 1, 'Bountiful Table - The Cranberry Chair', 8, 0),
+(32823, 34819, 2, 1, 'Bountiful Table - The Stuffing Chair', 8, 0),
+(32823, 34824, 3, 1, 'Bountiful Table - The Sweet Potato Chair', 8, 0),
+(32823, 34822, 4, 1, 'Bountiful Table - The Pie Chair', 8, 0),
+(32823, 32830, 5, 1, 'Bountiful Table - Food Holder', 8, 0),
+(32823, 32840, 6, 1, 'Bountiful Table - Plate Holder', 8, 0),
+--
+(32830, 32824, 0, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Turkey', 8, 0),
+(32830, 32827, 1, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Cranberry Sauce', 8, 0),
+(32830, 32831, 2, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Stuffing', 8, 0),
+(32830, 32825, 3, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Yams', 8, 0),
+(32830, 32829, 4, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Pie', 8, 0),
+--
+(32840, 32839, 0, 1, 'Plate Holder - Sturdy Plate', 8, 0),
+(32840, 32839, 1, 1, 'Plate Holder - Sturdy Plate', 8, 0),
+(32840, 32839, 2, 1, 'Plate Holder - Sturdy Plate', 8, 0),
+(32840, 32839, 3, 1, 'Plate Holder - Sturdy Plate', 8, 0),
+(32840, 32839, 4, 1, 'Plate Holder - Sturdy Plate', 8, 0);
diff --git a/sql/updates/characters/2012_01_04_00_characters_character_queststatus_seasonal.sql b/sql/updates/characters/2012_01_04_00_characters_character_queststatus_seasonal.sql
new file mode 100644
index 00000000000..f9ae71b65a7
--- /dev/null
+++ b/sql/updates/characters/2012_01_04_00_characters_character_queststatus_seasonal.sql
@@ -0,0 +1,8 @@
+DROP TABLE IF EXISTS `character_queststatus_seasonal`;
+CREATE TABLE `character_queststatus_seasonal` (
+ `guid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier',
+ `quest` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Quest Identifier',
+ `event` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Event Identifier',
+ PRIMARY KEY (`guid`,`quest`),
+ KEY `idx_guid` (`guid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System';
diff --git a/sql/updates/world/2011_11_24_00_world_version.sql b/sql/updates/world/2011_11_24_00_world_version.sql
new file mode 100644
index 00000000000..ad2396f29e1
--- /dev/null
+++ b/sql/updates/world/2011_11_24_00_world_version.sql
@@ -0,0 +1 @@
+UPDATE `version` SET `db_version`='TDB 335.11.44' LIMIT 1;
diff --git a/sql/updates/world/2011_11_25_00_world_quest_template.sql b/sql/updates/world/2011_11_25_00_world_quest_template.sql
new file mode 100644
index 00000000000..eee92a3761b
--- /dev/null
+++ b/sql/updates/world/2011_11_25_00_world_quest_template.sql
@@ -0,0 +1,38 @@
+ALTER TABLE `quest_template` ADD COLUMN `RequiredClasses` smallint(5) unsigned NOT NULL default '0' AFTER `Type`;
+
+UPDATE `quest_template`
+ SET `RequiredClasses` = `RequiredClasses`|
+ CASE `SkillOrClassMask`
+ WHEN -1 THEN 1 -- warrior
+ WHEN -2 THEN 2 -- paladin
+ WHEN -3 THEN 4 -- hunter
+ WHEN -4 THEN 8 -- rogue
+ WHEN -5 THEN 16 -- priest
+ WHEN -6 THEN 32 -- dk
+ WHEN -7 THEN 64 -- shaman
+ WHEN -8 THEN 128 -- mage
+ WHEN -9 THEN 256 -- warlock
+ WHEN -11 THEN 1024 -- druid
+ ELSE 0
+ END
+ WHERE `SkillOrClassMask` < 0;
+
+UPDATE `quest_template`
+ SET `RequiredClasses` = `RequiredClasses`|
+ CASE `ZoneOrSort`
+ WHEN -81 THEN 1 -- warrior
+ WHEN -141 THEN 2 -- paladin
+ WHEN -261 THEN 4 -- hunter
+ WHEN -162 THEN 8 -- rogue
+ WHEN -262 THEN 16 -- priest
+ WHEN -372 THEN 32 -- dk
+ WHEN -82 THEN 64 -- shaman
+ WHEN -161 THEN 128 -- mage
+ WHEN -61 THEN 256 -- warlock
+ WHEN -263 THEN 1024 -- druid
+ ELSE 0
+ END
+ WHERE `ZoneOrSort` < 0;
+
+UPDATE `quest_template` SET `SkillOrClassMask`=0 WHERE `SkillOrClassMask`<0;
+ALTER TABLE `quest_template` CHANGE COLUMN `SkillOrClassMask` `RequiredSkill` smallint(5) unsigned NOT NULL default '0' AFTER `RequiredRaces`;
diff --git a/sql/updates/world/2011_11_25_01_world_quest_template.sql b/sql/updates/world/2011_11_25_01_world_quest_template.sql
new file mode 100644
index 00000000000..f7e4555f093
--- /dev/null
+++ b/sql/updates/world/2011_11_25_01_world_quest_template.sql
@@ -0,0 +1 @@
+UPDATE `quest_template` SET `RequiredClasses`=0 WHERE `entry`=8249; -- Junkboxes Needed
diff --git a/sql/updates/world/2011_11_25_02_world_creature.sql b/sql/updates/world/2011_11_25_02_world_creature.sql
new file mode 100644
index 00000000000..0b26187f196
--- /dev/null
+++ b/sql/updates/world/2011_11_25_02_world_creature.sql
@@ -0,0 +1,4 @@
+-- re-guid
+DELETE FROM `creature` WHERE `guid`=1022681 OR (`guid`=48191 AND `id`=18069);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES
+(48191, 18069, 530, 1, 1, 0, 0, -714.823, 7931.65, 58.8672, 4.3693, 300, 0, 0, 60720, 29330, 0, 0, 0, 0);
diff --git a/sql/updates/world/2011_11_26_00_world_quest_template.sql b/sql/updates/world/2011_11_26_00_world_quest_template.sql
new file mode 100644
index 00000000000..6a7834e0a76
--- /dev/null
+++ b/sql/updates/world/2011_11_26_00_world_quest_template.sql
@@ -0,0 +1,177 @@
+-- Naming
+ALTER TABLE `quest_template`
+ CHANGE `entry` `Id` mediumint(8) UNSIGNED NOT NULL default '0',
+ CHANGE `QuestLevel` `Level` smallint(3) NOT NULL DEFAULT '1',
+ CHANGE `RequiredSkill` `RequiredSkillId` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
+ CHANGE `RequiredSkillValue` `RequiredSkillPoints` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
+ CHANGE `RepObjectiveFaction` `RequiredFactionId1` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
+ CHANGE `RepObjectiveFaction2` `RequiredFactionId2` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
+ CHANGE `RepObjectiveValue` `RequiredFactionValue1` mediumint(9) default '0' NOT NULL,
+ CHANGE `RepObjectiveValue2` `RequiredFactionValue2` mediumint(9) default '0' NOT NULL,
+ CHANGE `QuestFlags` `Flags` int(10) UNSIGNED default '0' NOT NULL,
+ CHANGE `SpecialFlags` `SpecialFlags` tinyint(3) UNSIGNED default '0' NOT NULL,
+ CHANGE `CharTitleId` `RewardTitleId` tinyint(3) UNSIGNED default '0' NOT NULL,
+ CHANGE `PlayersSlain` `RequiredPlayerKills` tinyint(3) UNSIGNED default '0' NOT NULL,
+ CHANGE `BonusTalents` `RewardTalents` tinyint(3) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewardArenaPoints` `RewardArenaPoints` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `NextQuestInChain` `NextQuestIdChain` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewXPId` `RewardXPId` tinyint(2) UNSIGNED default '0' NOT NULL,
+ CHANGE `SrcItemId` `SourceItemId` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `SrcItemCount` `SourceItemCount` tinyint(3) UNSIGNED default '0' NOT NULL,
+ CHANGE `SrcSpell` `SourceSpellId` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemId1` `RequiredItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemId2` `RequiredItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemId3` `RequiredItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemId4` `RequiredItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemId5` `RequiredItemId5` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemId6` `RequiredItemId6` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemCount1` `RequiredItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemCount2` `RequiredItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemCount3` `RequiredItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemCount4` `RequiredItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemCount5` `RequiredItemCount5` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqItemCount6` `RequiredItemCount6` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceId1` `RequiredSourceItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceId2` `RequiredSourceItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceId3` `RequiredSourceItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceId4` `RequiredSourceItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceCount1` `RequiredSourceItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceCount2` `RequiredSourceItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceCount3` `RequiredSourceItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSourceCount4` `RequiredSourceItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOId1` `RequiredNpcOrGo1` mediumint(9) default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOId2` `RequiredNpcOrGo2` mediumint(9) default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOId3` `RequiredNpcOrGo3` mediumint(9) default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOId4` `RequiredNpcOrGo4` mediumint(9) default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOCount1` `RequiredNpcOrGoCount1` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOCount2` `RequiredNpcOrGoCount2` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOCount3` `RequiredNpcOrGoCount3` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqCreatureOrGOCount4` `RequiredNpcOrGoCount4` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSpellCast1` `RequiredSpellCast1` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSpellCast2` `RequiredSpellCast2` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSpellCast3` `RequiredSpellCast3` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `ReqSpellCast4` `RequiredSpellCast4` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemId1` `RewardChoiceItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemId2` `RewardChoiceItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemId3` `RewardChoiceItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemId4` `RewardChoiceItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemId5` `RewardChoiceItemId5` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemId6` `RewardChoiceItemId6` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemCount1` `RewardChoiceItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemCount2` `RewardChoiceItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemCount3` `RewardChoiceItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemCount4` `RewardChoiceItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemCount5` `RewardChoiceItemCount5` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewChoiceItemCount6` `RewardChoiceItemCount6` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemId1` `RewardItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemId2` `RewardItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemId3` `RewardItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemId4` `RewardItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemCount1` `RewardItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemCount2` `RewardItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemCount3` `RewardItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewItemCount4` `RewardItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewRepFaction1` `RewardFactionId1` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
+ CHANGE `RewRepFaction2` `RewardFactionId2` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
+ CHANGE `RewRepFaction3` `RewardFactionId3` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
+ CHANGE `RewRepFaction4` `RewardFactionId4` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
+ CHANGE `RewRepFaction5` `RewardFactionId5` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
+ CHANGE `RewRepValueId1` `RewardFactionValueId1` mediumint(6) default '0' NOT NULL,
+ CHANGE `RewRepValueId2` `RewardFactionValueId2` mediumint(6) default '0' NOT NULL,
+ CHANGE `RewRepValueId3` `RewardFactionValueId3` mediumint(6) default '0' NOT NULL,
+ CHANGE `RewRepValueId4` `RewardFactionValueId4` mediumint(6) default '0' NOT NULL,
+ CHANGE `RewRepValueId5` `RewardFactionValueId5` mediumint(6) default '0' NOT NULL,
+ CHANGE `RewRepValue1` `RewardFactionValueIdOverride1` mediumint(9) default '0' NOT NULL,
+ CHANGE `RewRepValue2` `RewardFactionValueIdOverride2` mediumint(9) default '0' NOT NULL,
+ CHANGE `RewRepValue3` `RewardFactionValueIdOverride3` mediumint(9) default '0' NOT NULL,
+ CHANGE `RewRepValue4` `RewardFactionValueIdOverride4` mediumint(9) default '0' NOT NULL,
+ CHANGE `RewRepValue5` `RewardFactionValueIdOverride5` mediumint(9) default '0' NOT NULL,
+ CHANGE `RewHonorAddition` `RewardHonor` int(10) default '0' NOT NULL,
+ CHANGE `RewHonorMultiplier` `RewardHonorMultiplier` float default '1' NOT NULL,
+ CHANGE `RewOrReqMoney` `RewardOrRequiredMoney` int(11) default '0' NOT NULL,
+ CHANGE `RewMoneyMaxLevel` `RewardMoneyMaxLevel` int(10) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewSpell` `RewardSpell` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewSpellCast` `RewardSpellCast` int(11) default '0' NOT NULL,
+ CHANGE `RewMailTemplateId` `RewardMailTemplateId` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `RewMailDelaySecs` `RewardMailDelay` int(11) UNSIGNED default '0' NOT NULL,
+ CHANGE `PointOpt` `PointOption` mediumint(8) UNSIGNED default '0' NOT NULL,
+ CHANGE `DetailsEmote1` `DetailsEmote1` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `IncompleteEmote` `EmoteOnIncomplete` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `CompleteEmote` `EmoteOnComplete` smallint(5) UNSIGNED default '0' NOT NULL,
+ CHANGE `unk0` `Unknown0` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0';
+
+-- Order
+ALTER TABLE `quest_template` CHANGE COLUMN `Level` `Level` SMALLINT(3) NOT NULL DEFAULT '1' AFTER `Method`,
+ CHANGE COLUMN `ZoneOrSort` `ZoneOrSort` SMALLINT(6) NOT NULL DEFAULT '0' AFTER `MaxLevel`,
+ CHANGE COLUMN `SuggestedPlayers` `SuggestedPlayers` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `Type`,
+ CHANGE COLUMN `LimitTime` `LimitTime` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SuggestedPlayers`,
+ CHANGE COLUMN `RequiredFactionId2` `RequiredFactionId2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredFactionId1`,
+ CHANGE COLUMN `RequiredMaxRepFaction` `RequiredMaxRepFaction` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredMinRepFaction`,
+ CHANGE COLUMN `RewardOrRequiredMoney` `RewardOrRequiredMoney` INT(11) NOT NULL DEFAULT '0' AFTER `RewardXPId`,
+ CHANGE COLUMN `RewardMoneyMaxLevel` `RewardMoneyMaxLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardOrRequiredMoney`,
+ CHANGE COLUMN `RewardSpell` `RewardSpell` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardMoneyMaxLevel`,
+ CHANGE COLUMN `RewardSpellCast` `RewardSpellCast` INT(11) NOT NULL DEFAULT '0' AFTER `RewardSpell`,
+ CHANGE COLUMN `RewardHonor` `RewardHonor` INT(10) NOT NULL DEFAULT '0' AFTER `RewardSpellCast`,
+ CHANGE COLUMN `RewardHonorMultiplier` `RewardHonorMultiplier` FLOAT NOT NULL DEFAULT '1' AFTER `RewardHonor`,
+ CHANGE COLUMN `RewardMailTemplateId` `RewardMailTemplateId` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardHonorMultiplier`,
+ CHANGE COLUMN `RewardMailDelay` `RewardMailDelay` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardMailTemplateId`,
+ CHANGE COLUMN `Flags` `Flags` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SourceSpellId`,
+ CHANGE COLUMN `SpecialFlags` `SpecialFlags` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `Flags`,
+ CHANGE COLUMN `RewardTitleId` `RewardTitleId` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `SpecialFlags`,
+ CHANGE COLUMN `RequiredPlayerKills` `RequiredPlayerKills` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardTitleId`,
+ CHANGE COLUMN `RewardTalents` `RewardTalents` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredPlayerKills`,
+ CHANGE COLUMN `RewardArenaPoints` `RewardArenaPoints` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardTalents`,
+ CHANGE COLUMN `RewardItemId1` `RewardItemId1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardArenaPoints`,
+ CHANGE COLUMN `RewardItemId2` `RewardItemId2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId1`,
+ CHANGE COLUMN `RewardItemId3` `RewardItemId3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId2`,
+ CHANGE COLUMN `RewardItemId4` `RewardItemId4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId3`,
+ CHANGE COLUMN `RewardItemCount1` `RewardItemCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId4`,
+ CHANGE COLUMN `RewardItemCount2` `RewardItemCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemCount1`,
+ CHANGE COLUMN `RewardItemCount3` `RewardItemCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemCount2`,
+ CHANGE COLUMN `RewardItemCount4` `RewardItemCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemCount3`,
+ CHANGE COLUMN `Title` `Title` TEXT NULL DEFAULT NULL AFTER `PointOption`,
+ CHANGE COLUMN `Objectives` `Objectives` TEXT NULL DEFAULT NULL AFTER `Title`,
+ CHANGE COLUMN `Details` `Details` TEXT NULL DEFAULT NULL AFTER `Objectives`,
+ CHANGE COLUMN `EndText` `EndText` TEXT NULL DEFAULT NULL AFTER `Details`,
+ CHANGE COLUMN `OfferRewardText` `OfferRewardText` TEXT NULL DEFAULT NULL AFTER `EndText`,
+ CHANGE COLUMN `RequestItemsText` `RequestItemsText` TEXT NULL DEFAULT NULL AFTER `OfferRewardText`,
+ CHANGE COLUMN `CompletedText` `CompletedText` TEXT NULL DEFAULT NULL AFTER `RequestItemsText`,
+ CHANGE COLUMN `RequiredNpcOrGo1` `RequiredNpcOrGo1` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `CompletedText`,
+ CHANGE COLUMN `RequiredNpcOrGo2` `RequiredNpcOrGo2` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo1`,
+ CHANGE COLUMN `RequiredNpcOrGo3` `RequiredNpcOrGo3` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo2`,
+ CHANGE COLUMN `RequiredNpcOrGo4` `RequiredNpcOrGo4` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo3`,
+ CHANGE COLUMN `RequiredNpcOrGoCount1` `RequiredNpcOrGoCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo4`,
+ CHANGE COLUMN `RequiredNpcOrGoCount2` `RequiredNpcOrGoCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount1`,
+ CHANGE COLUMN `RequiredNpcOrGoCount3` `RequiredNpcOrGoCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount2`,
+ CHANGE COLUMN `RequiredNpcOrGoCount4` `RequiredNpcOrGoCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount3`,
+ CHANGE COLUMN `RequiredSourceItemId1` `RequiredSourceItemId1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount4`,
+ CHANGE COLUMN `RequiredSourceItemId2` `RequiredSourceItemId2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId1`,
+ CHANGE COLUMN `RequiredSourceItemId3` `RequiredSourceItemId3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId2`,
+ CHANGE COLUMN `RequiredSourceItemId4` `RequiredSourceItemId4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId3`,
+ CHANGE COLUMN `RequiredSourceItemCount1` `RequiredSourceItemCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId4`,
+ CHANGE COLUMN `RequiredSourceItemCount2` `RequiredSourceItemCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount1`,
+ CHANGE COLUMN `RequiredSourceItemCount3` `RequiredSourceItemCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount2`,
+ CHANGE COLUMN `RequiredSourceItemCount4` `RequiredSourceItemCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount3`,
+ CHANGE COLUMN `RequiredItemId1` `RequiredItemId1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount4`,
+ CHANGE COLUMN `RequiredItemId2` `RequiredItemId2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId1`,
+ CHANGE COLUMN `RequiredItemId3` `RequiredItemId3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId2`,
+ CHANGE COLUMN `RequiredItemId4` `RequiredItemId4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId3`,
+ CHANGE COLUMN `RequiredItemId5` `RequiredItemId5` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId4`,
+ CHANGE COLUMN `RequiredItemId6` `RequiredItemId6` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId5`,
+ CHANGE COLUMN `RequiredItemCount1` `RequiredItemCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId6`,
+ CHANGE COLUMN `RequiredItemCount2` `RequiredItemCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount1`,
+ CHANGE COLUMN `RequiredItemCount3` `RequiredItemCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount2`,
+ CHANGE COLUMN `RequiredItemCount4` `RequiredItemCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount3`,
+ CHANGE COLUMN `RequiredItemCount5` `RequiredItemCount5` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount4`,
+ CHANGE COLUMN `RequiredItemCount6` `RequiredItemCount6` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount5`,
+ CHANGE COLUMN `RequiredSpellCast1` `RequiredSpellCast1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount6`,
+ CHANGE COLUMN `RequiredSpellCast2` `RequiredSpellCast2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast1`,
+ CHANGE COLUMN `RequiredSpellCast3` `RequiredSpellCast3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast2`,
+ CHANGE COLUMN `RequiredSpellCast4` `RequiredSpellCast4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast3`,
+ CHANGE COLUMN `Unknown0` `Unknown0` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast4`,
+ CHANGE COLUMN `ObjectiveText1` `ObjectiveText1` TEXT NULL DEFAULT NULL AFTER `Unknown0`,
+ CHANGE COLUMN `ObjectiveText2` `ObjectiveText2` TEXT NULL DEFAULT NULL AFTER `ObjectiveText1`,
+ CHANGE COLUMN `ObjectiveText3` `ObjectiveText3` TEXT NULL DEFAULT NULL AFTER `ObjectiveText2`,
+ CHANGE COLUMN `ObjectiveText4` `ObjectiveText4` TEXT NULL DEFAULT NULL AFTER `ObjectiveText3`;
+
+-- Note: These two ALTER could have been merged into one
diff --git a/sql/updates/world/2011_11_26_01_world_quest_template.sql b/sql/updates/world/2011_11_26_01_world_quest_template.sql
new file mode 100644
index 00000000000..5b08d57860b
--- /dev/null
+++ b/sql/updates/world/2011_11_26_01_world_quest_template.sql
@@ -0,0 +1 @@
+UPDATE `quest_template` SET `RequiredRaces`=0 WHERE `Id`=14171;
diff --git a/sql/updates/world/2011_11_26_02_world_spell_group.sql b/sql/updates/world/2011_11_26_02_world_spell_group.sql
new file mode 100644
index 00000000000..71ad2eaf9fb
--- /dev/null
+++ b/sql/updates/world/2011_11_26_02_world_spell_group.sql
@@ -0,0 +1,7 @@
+-- Blessing of Sanctuary + Grace
+DELETE FROM `spell_group` WHERE `id`>=1091 AND `id`<=1093 LIMIT 4;
+DELETE FROM `spell_group_stack_rules` WHERE `group_id`=1093 LIMIT 1;
+
+-- Ebon Plague + Curse of Elements + Earth and Moon
+DELETE FROM `spell_group` WHERE `id`>=1040 AND `id`<=1043 LIMIT 6;
+DELETE FROM `spell_group_stack_rules` WHERE `group_id`=1043 LIMIT 1;
diff --git a/sql/updates/world/2011_11_26_03_world_spell_proc_event.sql b/sql/updates/world/2011_11_26_03_world_spell_proc_event.sql
new file mode 100644
index 00000000000..36837be8ab6
--- /dev/null
+++ b/sql/updates/world/2011_11_26_03_world_spell_proc_event.sql
@@ -0,0 +1,2 @@
+-- Misery
+UPDATE `spell_proc_event` SET `SpellFamilyMask2` = `SpellFamilyMask2` | 64 WHERE `entry` = 33193;
diff --git a/sql/updates/world/2011_11_26_04_world_achievement_criteria_data.sql b/sql/updates/world/2011_11_26_04_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..b037bf58349
--- /dev/null
+++ b/sql/updates/world/2011_11_26_04_world_achievement_criteria_data.sql
@@ -0,0 +1,3 @@
+DELETE FROM `achievement_criteria_data` WHERE `type` = 11 AND `criteria_id` = 7363;
+INSERT INTO `achievement_criteria_data` VALUES
+(7363, 11, 0, 0, 'achievement_snakes_whyd_it_have_to_be_snakes');
diff --git a/sql/updates/world/2011_11_26_04_world_disables.sql b/sql/updates/world/2011_11_26_04_world_disables.sql
new file mode 100644
index 00000000000..4722f248656
--- /dev/null
+++ b/sql/updates/world/2011_11_26_04_world_disables.sql
@@ -0,0 +1 @@
+DELETE FROM `disables` WHERE entry = 7363 AND sourceType = 4;
diff --git a/sql/updates/world/2011_11_26_05_world_ulduar_gameobject.sql b/sql/updates/world/2011_11_26_05_world_ulduar_gameobject.sql
new file mode 100644
index 00000000000..60ba0aefbeb
--- /dev/null
+++ b/sql/updates/world/2011_11_26_05_world_ulduar_gameobject.sql
@@ -0,0 +1,2 @@
+-- Set all gameobjects in Ulduar (excluding chests, including veins and herbs) spawned in 10 and 25 man difficult.
+UPDATE `gameobject` SET `spawnMask` = 3 WHERE `id` IN (194555, 194232, 194675, 194560, 194569, 194370, 194371, 194630, 194631, 194375, 194377, 194634, 194635, 194636, 194637, 194904, 194905, 194907, 194398, 194399, 194400, 194401, 194402, 194914, 194403, 194915, 194404, 194405, 194406, 194407, 194663, 194408, 194664, 194665, 194409, 194666, 194410, 194411, 194412, 194413, 194414, 194415, 194416, 194437, 194441, 194442, 194704, 194705, 194706, 194707, 194481, 194484, 194235, 194236, 194750, 194506, 194255, 194773, 194261, 194262, 194264, 194553, 194554, 194556, 194557, 194558, 194559, 194565, 194912, 194913, 194739, 194740, 194741, 194742, 194743, 194744, 194745, 194746, 194747, 194748, 194749, 194774, 194775, 194776) AND `map` = 603;
diff --git a/sql/updates/world/2011_11_26_06_world_sai.sql b/sql/updates/world/2011_11_26_06_world_sai.sql
new file mode 100644
index 00000000000..9396222e8be
--- /dev/null
+++ b/sql/updates/world/2011_11_26_06_world_sai.sql
@@ -0,0 +1,18 @@
+-- [Q] [H] Teron Gorefiend, I am...
+-- Ancient Shadowmoon Spirit SAI
+SET @ENTRY := 21797;
+SET @QUEST := 10639;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `Id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Ancient Shadowmoon Spirit - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ancient Shadowmoon Spirit - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,5000,5000,0,0,12,21877,1,300000,0,0,0,8,0,0,0,-4536.58,1028.76,8.8266,3.72963,"Ancient Shadowmoon Spirit - On Script - Summon Karsius the Ancient Watcher");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry`=2000000031;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Your body is mine! Our fates are forever intertwined!",14,0,100,0,0,0,"Ancient Shadowmoon Spirit");
diff --git a/sql/updates/world/2011_11_27_00_world_creature_template.sql b/sql/updates/world/2011_11_27_00_world_creature_template.sql
new file mode 100644
index 00000000000..f29586ea142
--- /dev/null
+++ b/sql/updates/world/2011_11_27_00_world_creature_template.sql
@@ -0,0 +1,4 @@
+UPDATE `creature_template` SET `mindmg`=509,`maxdmg`=683,`attackpower`=805,`dmg_multiplier`=150 WHERE `entry`=36597; -- The Lich King 10N
+UPDATE `creature_template` SET `mindmg`=509,`maxdmg`=683,`attackpower`=805,`dmg_multiplier`=180 WHERE `entry`=39166; -- The Lich King 25N
+UPDATE `creature_template` SET `mindmg`=509,`maxdmg`=683,`attackpower`=805,`dmg_multiplier`=180 WHERE `entry`=39167; -- The Lich King 10H
+UPDATE `creature_template` SET `mindmg`=509,`maxdmg`=683,`attackpower`=805,`dmg_multiplier`=225 WHERE `entry`=39168; -- The Lich King 25H
diff --git a/sql/updates/world/2011_11_27_00_world_spell_script.sql b/sql/updates/world/2011_11_27_00_world_spell_script.sql
new file mode 100644
index 00000000000..5411d660c2b
--- /dev/null
+++ b/sql/updates/world/2011_11_27_00_world_spell_script.sql
@@ -0,0 +1,6 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_damage_reduction_aura';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(20911,'spell_gen_damage_reduction_aura'), -- Blessing of Sanctuary
+(25899,'spell_gen_damage_reduction_aura'), -- Greater Blessing of Sanctuary
+(63944,'spell_gen_damage_reduction_aura'), -- Renewed Hope
+(50720,'spell_gen_damage_reduction_aura'); -- Vigilance
diff --git a/sql/updates/world/2011_11_28_00_world_achievement_criteria_data.sql b/sql/updates/world/2011_11_28_00_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..9fea807a97c
--- /dev/null
+++ b/sql/updates/world/2011_11_28_00_world_achievement_criteria_data.sql
@@ -0,0 +1,3 @@
+DELETE FROM achievement_criteria_data WHERE criteria_id = 3693;
+INSERT INTO achievement_criteria_data VALUES
+(3693, 11, 0, 0, 'achievement_bg_control_all_nodes');
diff --git a/sql/updates/world/2011_11_29_00_world_spell_script.sql b/sql/updates/world/2011_11_29_00_world_spell_script.sql
new file mode 100644
index 00000000000..ff87ebff788
--- /dev/null
+++ b/sql/updates/world/2011_11_29_00_world_spell_script.sql
@@ -0,0 +1,4 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_damage_reduction_aura' AND `spell_id`=50720;
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_warr_vigilance';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(50720,'spell_warr_vigilance'); -- Vigilance
diff --git a/sql/updates/world/2011_12_03_00_world_gameobject.sql b/sql/updates/world/2011_12_03_00_world_gameobject.sql
new file mode 100644
index 00000000000..5707ee28d12
--- /dev/null
+++ b/sql/updates/world/2011_12_03_00_world_gameobject.sql
@@ -0,0 +1,4 @@
+DELETE FROM `gameobject` WHERE `guid` IN (207,215) AND `id`=300245; -- TEMP Forgemaster''s Anvil
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
+(207, 300245, 658, 3, 1, 637.954, -209.544, 533.269, 3.53903, 0, 0, 0.980321, -0.197413, 300, 0, 1),
+(215, 300245, 658, 3, 1, 726.268, -237.654, 534.13, 5.5732, 0, 0, 0.347582, -0.93765, 300, 0, 1);
diff --git a/sql/updates/world/2011_12_08_00_world_gossip.sql b/sql/updates/world/2011_12_08_00_world_gossip.sql
new file mode 100644
index 00000000000..f6195d9d66e
--- /dev/null
+++ b/sql/updates/world/2011_12_08_00_world_gossip.sql
@@ -0,0 +1,12 @@
+-- fixing conflict in number of gossip_menu_option.menu_id -- compare 2011_10_23_04_world_sai.sql with 2011_10_23_07_world_sai.sql
+SET @ENTRY := 18417;
+SET @OLDGOSSIP := 21304;
+SET @NEWGOSSIP := 21312;
+SET @QUEST_PUPIL := 10646;
+-- Fixing smart_scripts
+UPDATE `smart_scripts` SET `event_param1`=@NEWGOSSIP WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2 AND `action_param1`=@QUEST_PUPIL;
+-- Fixing gossip_menu_option
+UPDATE `gossip_menu_option` SET `action_menu_id`=@NEWGOSSIP WHERE `menu_id`=@OLDGOSSIP+5;
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@NEWGOSSIP;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
+(@NEWGOSSIP,0,0,"There was something else I wanted to ask you, Altruis.",1,3,@OLDGOSSIP+0);
diff --git a/sql/updates/world/2011_12_08_00_world_player_factionchange_achievement.sql b/sql/updates/world/2011_12_08_00_world_player_factionchange_achievement.sql
new file mode 100644
index 00000000000..7a19fa2cad0
--- /dev/null
+++ b/sql/updates/world/2011_12_08_00_world_player_factionchange_achievement.sql
@@ -0,0 +1,71 @@
+-- Missing achievement data (checked via DBC files)
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (35,41,58,202,206,220,225,230,246,388,433,434,435,436,437,438,439,440,441,442,470,471,472,473,707,764,907,908,1167,1169,1172,1262,1466,1563,1681,1737,1752,1757,1762,1782,2016,2194,2536,2760,2761,2762,2763,2764,2770,2777,2778,2779,2780,2781,2782,2817,3356,3478,3676,3846,3851,3856,3857,4156,4296,4298,4784,4786);
+INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
+(35,1359),
+(41,1360),
+(58,593),
+(202,1502),
+(206,1252),
+(220,873),
+(225,1164),
+(230,1175),
+(246,1005),
+(388,1006),
+(433,443),
+(434,445),
+(435,444),
+(436,447),
+(437,448),
+(438,469),
+(439,451),
+(440,452),
+(441,450),
+(442,454),
+(470,468),
+(471,453),
+(472,449),
+(473,446),
+(707,706),
+(764,763),
+(907,714),
+(908,909),
+(1167,1168),
+(1169,1170),
+(1172,1173),
+(1262,1274),
+(1466,926),
+(1563,1784),
+(1681,1682),
+(1737,2476),
+(1752,2776),
+(1757,2200),
+(1762,2192),
+(1782,1783),
+(2016,2017),
+(2194,2195),
+(2536,2537),
+(2760,2768),
+(2761,2767),
+(2762,2766),
+(2763,2769),
+(2764,2765),
+(2770,2771),
+(2777,2786),
+(2778,2785),
+(2779,2784),
+(2780,2787),
+(2781,2783),
+(2782,2788),
+(2817,2816),
+(3356,3357),
+(3478,3656),
+(3676,3677),
+(3846,4176),
+(3851,4177),
+(3856,4256),
+(3857,3957),
+(4156,4079),
+(4296,3778),
+(4298,4297),
+(4784,4785),
+(4786,4790);
diff --git a/sql/updates/world/2011_12_08_01_world_creature_template_addon.sql b/sql/updates/world/2011_12_08_01_world_creature_template_addon.sql
new file mode 100644
index 00000000000..e8a464146e0
--- /dev/null
+++ b/sql/updates/world/2011_12_08_01_world_creature_template_addon.sql
@@ -0,0 +1,11 @@
+-- Fix the HP sharing of Twin Valkyr - All Modes
+DELETE FROM `creature_template_addon` WHERE `entry` IN (34497,35350,35351,35352,34496,35347,35348,35349);
+INSERT INTO `creature_template_addon` (`entry`,`auras`) VALUES
+(34497,'66133'),
+(35350,'66133'),
+(35351,'66133'),
+(35352,'66133'),
+(34496,'66132'),
+(35347,'66132'),
+(35348,'66132'),
+(35349,'66132');
diff --git a/sql/updates/world/2011_12_10_00_world_spell_proc_event.sql b/sql/updates/world/2011_12_10_00_world_spell_proc_event.sql
new file mode 100644
index 00000000000..957a2e76b70
--- /dev/null
+++ b/sql/updates/world/2011_12_10_00_world_spell_proc_event.sql
@@ -0,0 +1,2 @@
+-- Bloodsurge
+UPDATE `spell_proc_event` SET `procEx` = 0x0040000 WHERE `entry` = 46915;
diff --git a/sql/updates/world/2011_12_10_01_world_achievement_criteria_data.sql b/sql/updates/world/2011_12_10_01_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..70e4a4fc544
--- /dev/null
+++ b/sql/updates/world/2011_12_10_01_world_achievement_criteria_data.sql
@@ -0,0 +1,23 @@
+DELETE FROM `achievement_criteria_data` WHERE criteria_id IN (5220, 5215, 5218, 5221, 5216, 5219, 5213, 5018, 5217, 5214, 5233, 5235, 5232, 5234, 5238, 5236, 5229, 5237, 5230, 5231);
+-- Classes
+INSERT INTO `achievement_criteria_data` VALUES (5220, 2, 1, 0, ''); -- Realm First! Level 80 Warrior
+INSERT INTO `achievement_criteria_data` VALUES (5215, 2, 2, 0, ''); -- Realm First! Level 80 Paladin
+INSERT INTO `achievement_criteria_data` VALUES (5218, 2, 3, 0, ''); -- Realm First! Level 80 Hunter
+INSERT INTO `achievement_criteria_data` VALUES (5221, 2, 4, 0, ''); -- Realm First! Level 80 Rogue
+INSERT INTO `achievement_criteria_data` VALUES (5216, 2, 5, 0, ''); -- Realm First! Level 80 Priest
+INSERT INTO `achievement_criteria_data` VALUES (5219, 2, 6, 0, ''); -- Realm First! Level 80 Death Knight
+INSERT INTO `achievement_criteria_data` VALUES (5213, 2, 7, 0, ''); -- Realm First! Level 80 Shaman
+INSERT INTO `achievement_criteria_data` VALUES (5018, 2, 8, 0, ''); -- Realm First! Level 80 Mage
+INSERT INTO `achievement_criteria_data` VALUES (5217, 2, 9, 0, ''); -- Realm First! Level 80 Warlock
+INSERT INTO `achievement_criteria_data` VALUES (5214, 2, 11, 0, ''); -- Realm First! Level 80 Druid
+-- Races
+INSERT INTO `achievement_criteria_data` VALUES (5233, 2, 0, 1, ''); -- Realm First! Level 80 Human
+INSERT INTO `achievement_criteria_data` VALUES (5235, 2, 0, 2, ''); -- Realm First! Level 80 Orc
+INSERT INTO `achievement_criteria_data` VALUES (5232, 2, 0, 3, ''); -- Realm First! Level 80 Dwarf
+INSERT INTO `achievement_criteria_data` VALUES (5234, 2, 0, 4, ''); -- Realm First! Level 80 Night Elf
+INSERT INTO `achievement_criteria_data` VALUES (5238, 2, 0, 5, ''); -- Realm First! Level 80 Undead
+INSERT INTO `achievement_criteria_data` VALUES (5236, 2, 0, 6, ''); -- Realm First! Level 80 Tauren
+INSERT INTO `achievement_criteria_data` VALUES (5229, 2, 0, 7, ''); -- Realm First! Level 80 Gnome
+INSERT INTO `achievement_criteria_data` VALUES (5237, 2, 0, 8, ''); -- Realm First! Level 80 Troll
+INSERT INTO `achievement_criteria_data` VALUES (5230, 2, 0, 10, ''); -- Realm First! Level 80 Blood Elf
+INSERT INTO `achievement_criteria_data` VALUES (5231, 2, 0, 11, ''); -- Realm First! Level 80 Draenei
diff --git a/sql/updates/world/2011_12_12_00_world_spell_bonus_data.sql b/sql/updates/world/2011_12_12_00_world_spell_bonus_data.sql
new file mode 100644
index 00000000000..cb728e70dd9
--- /dev/null
+++ b/sql/updates/world/2011_12_12_00_world_spell_bonus_data.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_bonus_data` WHERE `entry` IN (52042,5672);
+INSERT INTO `spell_bonus_data` (`entry`,`direct_bonus`,`dot_bonus`,`ap_bonus`,`ap_dot_bonus`,`comments`) VALUES
+(5672,0.0827,-1,-1,-1, 'Shaman - Healing Stream Totem Rank 1');
diff --git a/sql/updates/world/2011_12_13_00_world_misc.sql b/sql/updates/world/2011_12_13_00_world_misc.sql
new file mode 100644
index 00000000000..13958e75761
--- /dev/null
+++ b/sql/updates/world/2011_12_13_00_world_misc.sql
@@ -0,0 +1,6 @@
+DELETE FROM `creature_text` WHERE `entry`=28012;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(28012,0,0,'The trickster Mage-Lord Urom protects the third ring. He will appear alone and defenseless, but do not be fooled by appearences! Urom is a powerful conjurer who commands a menagerie of Phantasmal creatures. Seek him out above.',12,0,0,0,0,0,''),
+(28012,1,1,'Your greatest challenge lies ahead. Ley-Guardian Eregos is a Blue dragon of immense power. You will find him flying above the uppermost ring.',12,0,0,0,0,0,'');
+
+UPDATE `creature_template` SET `ScriptName`='npc_image_belgaristrasz' WHERE `entry`=28012;
diff --git a/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql b/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..89bbfc7126d
--- /dev/null
+++ b/sql/updates/world/2011_12_13_01_world_achievement_criteria_data.sql
@@ -0,0 +1,12 @@
+-- Experienced Drake Rider Achiev
+
+DELETE FROM `disables` WHERE `entry` IN (7177,7178,7179);
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7177,7178,7179);
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES
+(7177,5,49460,1,''), -- Amber Drake
+(7177,12,1,0, ''), -- hc mode only
+(7178,5,49346,1,''), -- Emerald Drake
+(7178,12,1,0, ''), -- hc mode only
+(7179,5,49464,1,''), -- Ruby Drake
+(7179,12,1,0, ''); -- hc mode only
diff --git a/sql/updates/world/2011_12_13_02_world_creature_template_addon.sql b/sql/updates/world/2011_12_13_02_world_creature_template_addon.sql
new file mode 100644
index 00000000000..f1dc473bdd7
--- /dev/null
+++ b/sql/updates/world/2011_12_13_02_world_creature_template_addon.sql
@@ -0,0 +1,2 @@
+-- Fix speed of oculus drakes
+UPDATE `creature_template_addon` SET `auras`='50325' WHERE `entry` IN (27755,27692,27756);
diff --git a/sql/updates/world/2011_12_14_00_world_command.sql b/sql/updates/world/2011_12_14_00_world_command.sql
new file mode 100644
index 00000000000..e871a82d89d
--- /dev/null
+++ b/sql/updates/world/2011_12_14_00_world_command.sql
@@ -0,0 +1,4 @@
+DELETE FROM `trinity_string` WHERE `entry` IN(19,20); # unused entries
+INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
+(19,'Update time diff: %u.'),
+(20,'Time left until shutdown/restart: %s');
diff --git a/sql/updates/world/2011_12_14_01_world_gameobject_template.sql b/sql/updates/world/2011_12_14_01_world_gameobject_template.sql
new file mode 100644
index 00000000000..52c04703acc
--- /dev/null
+++ b/sql/updates/world/2011_12_14_01_world_gameobject_template.sql
@@ -0,0 +1 @@
+UPDATE `gameobject_template` SET `scriptName` = 'go_ethereal_teleport_pad' WHERE `entry` = 184073; -- Update Ethereal Teleport Pad scriptname
diff --git a/sql/updates/world/2011_12_16_00_world_creature_template.sql b/sql/updates/world/2011_12_16_00_world_creature_template.sql
new file mode 100644
index 00000000000..3ff9d630c54
--- /dev/null
+++ b/sql/updates/world/2011_12_16_00_world_creature_template.sql
@@ -0,0 +1,4 @@
+-- Greater Fire Elemental script
+UPDATE `creature_template` SET `ScriptName`='npc_fire_elemental' WHERE `entry`=15438;
+-- Greater Earth Elemental script
+UPDATE `creature_template` SET `ScriptName`='npc_earth_elemental' WHERE `entry`=15352;
diff --git a/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql b/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql
new file mode 100644
index 00000000000..5864b9ac042
--- /dev/null
+++ b/sql/updates/world/2011_12_16_00_world_spell_bonus_data.sql
@@ -0,0 +1,5 @@
+-- Bounus coef for Greater Fire Elemental spells
+DELETE FROM `spell_bonus_data` WHERE `entry` IN (13376,57984);
+INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`,`ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
+(13376,0.032,-1,-1,-1,'Greater Fire Elemental - Fire Shield'),
+(57984,0.4289,-1,-1,-1,'Greater Fire Elemental - Fire Blast');
diff --git a/sql/updates/world/2011_12_17_00_world_creature.sql b/sql/updates/world/2011_12_17_00_world_creature.sql
new file mode 100644
index 00000000000..0126561da01
--- /dev/null
+++ b/sql/updates/world/2011_12_17_00_world_creature.sql
@@ -0,0 +1,974 @@
+-- -------------
+-- UBRS FIXUP --
+-- -------------
+SET @GUID := 137817; -- 289 required
+DELETE FROM `creature` WHERE `map`=229 AND `id` IN (9098,9257,9258,9416,9045,9097,10339,9096,10083,10366,10371,10372,10680,10681,9816,9817,9818,9819,10317,10316,10740,16048,10430,10509,10363,10429,10318,10319,10742,10762,10899,10683,10264,10162);
+DELETE FROM `creature` WHERE `guid` BETWEEN @GUID AND @GUID+288;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`) VALUES
+-- Pyroguard Emberseer
+(@GUID,9816,229,1,1,0,0,144.438171,-258.034149,96.40662,4.677482,1000000,0,0,1,0,0),
+-- Rage Talon Dragonspawn
+(@GUID+1,9096,229,1,1,0,0,100.742607,-246.0053,106.518906,2.65290046,7200,0,0,1,0,0),
+(@GUID+2,9096,229,1,1,0,0,101.678032,-237.6665,106.518906,3.54301834,7200,0,0,1,0,0),
+(@GUID+3,9096,229,1,1,0,0,102.156441,-253.07338,106.5189,4.72320032,7200,0,0,1,0,0),
+(@GUID+4,9096,229,1,1,0,0,103.098129,-364.3394,116.925743,5.86430645,7200,0,0,1,0,0),
+(@GUID+5,9096,229,1,1,0,0,105.175392,-327.1109,106.518906,2.53072739,7200,0,0,1,0,0),
+(@GUID+6,9096,229,1,1,0,0,128.020447,-315.29,111.029076,2.984513,7200,0,0,1,0,0),
+(@GUID+7,9096,229,1,1,0,0,136.037247,-338.207458,111.043625,0.6457718,7200,0,0,1,0,0),
+(@GUID+8,9096,229,1,1,0,0,136.2818,-308.682281,111.073242,0.279252678,7200,0,0,1,0,0),
+(@GUID+9,9096,229,1,1,0,0,136.424042,-316.1892,111.063728,0.0174532924,7200,0,0,1,0,0),
+(@GUID+10,9096,229,1,1,0,0,138.315643,-395.08606,122.058578,4.764749,7200,0,0,1,0,0),
+(@GUID+11,9096,229,1,1,0,0,142.593109,-342.274048,111.040665,1.39626336,7200,0,0,1,0,0),
+(@GUID+12,9096,229,1,1,0,0,147.042328,-312.391449,71.03966,5.550147,7200,10,0,1,0,1),
+(@GUID+13,9096,229,1,1,0,0,153.89537,-332.387146,70.95632,3.14905024,7200,0,0,1,0,0),
+(@GUID+14,9096,229,1,1,0,0,161.09,-316.201721,70.95632,1.913126,7200,10,0,1,0,1),
+(@GUID+15,9096,229,1,1,0,0,165.520889,-394.921417,122.058556,4.677482,7200,0,0,1,0,0),
+(@GUID+16,9096,229,1,1,0,0,167.774048,-338.655426,111.0341,2.79252672,7200,0,0,1,0,0),
+(@GUID+17,9096,229,1,1,0,0,193.480331,-314.875244,77.0207748,5.375614,7200,10,0,1,0,1),
+(@GUID+18,9096,229,1,1,0,0,195.986176,-291.863159,76.93301,2.74624467,7200,10,0,1,0,1),
+(@GUID+19,9096,229,1,1,0,0,92.24497,-427.635468,111.006088,3.159046,7200,0,0,1,0,0),
+(@GUID+20,9096,229,1,1,0,0,94.5186539,-256.702728,91.53693,6.265732,7200,0,0,1,0,0),
+(@GUID+21,9096,229,1,1,0,0,96.17891,-268.540375,91.53113,1.37881,7200,0,0,1,0,0),
+(@GUID+22,9096,229,1,1,0,0,97.91753,-333.680664,106.5189,1.93731546,7200,0,0,1,0,0),
+-- Rage Talon Flamescale
+(@GUID+23,10083,229,1,1,0,0,102.801758,-332.1205,106.518906,2.21656823,7200,0,0,1,0,0),
+(@GUID+24,10083,229,1,1,0,0,141.698181,-394.829071,122.058556,4.86946869,7200,0,0,1,0,0),
+(@GUID+25,10083,229,1,1,0,0,151.5985,-312.834961,110.825859,1.583788,7200,0,0,1,0,0),
+(@GUID+26,10083,229,1,1,0,0,157.517059,-366.047333,116.844231,6.27482271,7200,0,0,1,0,0),
+(@GUID+27,10083,229,1,1,0,0,161.314163,-393.648651,122.058533,4.86946869,7200,0,0,1,0,0),
+(@GUID+28,10083,229,1,1,0,0,161.339554,-343.435425,111.039314,1.850049,7200,0,0,1,0,0),
+(@GUID+29,10083,229,1,1,0,0,74.99681,-316.2664,91.52034,5.86179638,7200,7,0,1,0,1),
+(@GUID+30,10083,229,1,1,0,0,81.0063858,-284.352936,91.53317,5.951573,7200,7,0,1,0,1),
+-- Rage Talon Dragon Guard
+(@GUID+31,10366,229,1,1,0,0,11.332943,-492.121582,111.022545,0.7330383,7200,0,0,1,0,0),
+(@GUID+32,10366,229,1,1,0,0,165.272675,-475.4804,116.842445,0.01255145,7200,0,0,1,0,0),
+(@GUID+33,10366,229,1,1,0,0,27.6826859,-426.0668,111.009117,5.480334,7200,0,0,1,0,0),
+(@GUID+34,10366,229,1,1,0,0,31.2498379,-497.100922,111.035072,1.27409029,7200,0,0,1,0,0),
+(@GUID+35,10366,229,1,1,0,0,39.75237,-426.769226,111.010643,3.96189737,7200,0,0,1,0,0),
+(@GUID+36,10366,229,1,1,0,0,43.22777,-449.182983,111.026749,3.85717773,7200,0,0,1,0,0),
+(@GUID+37,10366,229,1,1,0,0,8.27626,-487.534119,111.013985,0.436332315,7200,0,0,1,0,0),
+(@GUID+38,10366,229,1,1,0,0,92.84775,-489.693024,116.925728,1.58824956,7200,0,0,1,0,0),
+-- Goraluk Anvilcrack <Blackhand Legion Armorsmith>
+(@GUID+39,10899,229,1,1,0,0,147.684921,-242.757523,111.004608,1.7652961,7200,0,0,1,0,0),
+-- Rage Talon Captain
+(@GUID+40,10371,229,1,1,0,0,-10.6942663,-350.008,111.026779,0.8552113,7200,0,0,1,0,0),
+(@GUID+41,10371,229,1,1,0,0,-16.02218,-263.335266,111.026764,5.70722675,7200,0,0,1,0,0),
+(@GUID+42,10371,229,1,1,0,0,20.24981,-263.2449,111.026764,3.651049,7200,0,0,1,0,0),
+(@GUID+43,10371,229,1,1,0,0,33.96815,-327.537231,111.026779,4.729842,7200,0,0,1,0,0),
+(@GUID+44,10371,229,1,1,0,0,8.802712,-450.5478,111.020157,5.689773,7200,0,0,1,0,0),
+-- Rage Talon Fire Tongue
+(@GUID+45,10372,229,1,1,0,0,-15.58145,-344.314941,111.026779,0.715585,7200,0,0,1,0,0),
+(@GUID+46,10372,229,1,1,0,0,16.30601,-449.322784,111.029114,4.468043,7200,0,0,1,0,0),
+(@GUID+47,10372,229,1,1,0,0,21.4282932,-475.194733,111.038452,1.76278257,7200,0,0,1,0,0),
+(@GUID+48,10372,229,1,1,0,0,23.7180157,-258.2444,111.030754,3.46037364,7200,0,0,1,0,0),
+(@GUID+49,10372,229,1,1,0,0,26.412632,-327.414429,111.026779,4.79965544,7200,0,0,1,0,0),
+(@GUID+50,10372,229,1,1,0,0,6.645312,-460.464966,111.016,0.418879032,7200,0,0,1,0,0),
+(@GUID+51,10372,229,1,1,0,0,86.68403,-480.173737,116.925743,0.8552113,7200,0,0,1,0,0),
+-- Blackhand Summoner <Blackhand Legion>
+(@GUID+52,9818,229,1,1,0,0,124.871681,-334.522583,71.04309,4.694936,7200,0,0,1,0,0),
+(@GUID+53,9818,229,1,1,0,0,128.321472,-295.045166,71.06125,3.874631,7200,0,0,1,0,0),
+(@GUID+54,9818,229,1,1,0,0,130.4315,-340.0683,71.0431061,3.17649913,7200,0,0,1,0,0),
+(@GUID+55,9818,229,1,1,0,0,151.102859,-358.37,71.02174,1.20427716,7200,0,0,1,0,0),
+(@GUID+56,9818,229,1,1,0,0,156.814621,-283.34024,71.03544,1.98967528,7200,0,0,1,0,0),
+(@GUID+57,9818,229,1,1,0,0,162.630127,-243.073456,111.034378,4.32841635,7200,0,0,1,0,0),
+(@GUID+58,9818,229,1,1,0,0,170.605957,-362.35318,116.924133,4.86946869,7200,0,0,1,0,0),
+(@GUID+59,9818,229,1,1,0,0,179.994781,-365.8944,116.925758,3.19395256,7200,0,0,1,0,0),
+(@GUID+60,9818,229,1,1,0,0,188.856033,-258.8772,77.03584,6.07374573,7200,0,0,1,0,0),
+(@GUID+61,9818,229,1,1,0,0,212.137329,-339.792267,76.9862747,1.15191734,7200,0,0,1,0,0),
+(@GUID+62,9818,229,1,1,0,0,217.200012,-259.563751,82.1870956,6.265732,7200,0,0,1,0,0),
+(@GUID+63,9818,229,1,1,0,0,223.7043,-297.484253,77.05145,5.46288061,7200,0,0,1,0,0),
+(@GUID+64,9818,229,1,1,0,0,224.405029,-307.493042,77.05062,0.7853982,7200,0,0,1,0,0),
+(@GUID+65,9818,229,1,1,0,0,87.17487,-363.085022,117.796295,4.729842,7200,0,0,1,0,0),
+(@GUID+66,9818,229,1,1,0,0,90.10163,-419.203979,111.006088,0.994837642,7200,0,0,1,0,0),
+-- Blackhand Veteran <Blackhand Legion>
+(@GUID+67,9819,229,1,1,0,0,113.70948,-366.072266,116.932022,5.82939959,7200,0,0,1,0,0),
+(@GUID+68,9819,229,1,1,0,0,120.166054,-295.048645,71.06183,5.497787,7200,0,0,1,0,0),
+(@GUID+69,9819,229,1,1,0,0,121.719147,-301.576538,71.0559845,0.75049156,7200,0,0,1,0,0),
+(@GUID+70,9819,229,1,1,0,0,141.709488,-299.4828,111.032074,0.0349065848,7200,0,0,1,0,0),
+(@GUID+71,9819,229,1,1,0,0,141.762787,-302.243439,111.031624,0.122173049,7200,0,0,1,0,0),
+(@GUID+72,9819,229,1,1,0,0,141.79213,-296.809937,111.031372,6.23082542,7200,0,0,1,0,0),
+(@GUID+73,9819,229,1,1,0,0,142.861816,-272.084259,111.026764,6.213372,7200,0,0,1,0,0),
+(@GUID+74,9819,229,1,1,0,0,142.902451,-275.0304,111.026955,0.0349065848,7200,0,0,1,0,0),
+(@GUID+75,9819,229,1,1,0,0,142.97287,-277.891327,111.027122,0.139626339,7200,0,0,1,0,0),
+(@GUID+76,9819,229,1,1,0,0,144.939285,-257.132019,110.919548,5.82939959,7200,0,0,1,0,0),
+(@GUID+77,9819,229,1,1,0,0,149.200531,-252.04541,110.907585,1.20427716,7200,0,0,1,0,0),
+(@GUID+78,9819,229,1,1,0,0,149.248459,-249.036591,110.907883,4.86946869,7200,0,0,1,0,0),
+(@GUID+79,9819,229,1,1,0,0,150.514359,-354.057831,71.0197,5.21853447,7200,0,0,1,0,0),
+(@GUID+80,9819,229,1,1,0,0,157.248657,-291.7521,71.0334,1.69296932,7200,0,0,1,0,0),
+(@GUID+81,9819,229,1,1,0,0,157.8796,-359.290649,71.0255661,1.53588974,7200,0,0,1,0,0),
+(@GUID+82,9819,229,1,1,0,0,159.268585,-245.612747,111.026138,6.23082542,7200,0,0,1,0,0),
+(@GUID+83,9819,229,1,1,0,0,161.448456,-317.885559,111.022552,3.17649913,7200,0,0,1,0,0),
+(@GUID+84,9819,229,1,1,0,0,161.471252,-314.998138,111.022469,3.19395256,7200,0,0,1,0,0),
+(@GUID+85,9819,229,1,1,0,0,161.5384,-320.877258,111.025208,3.12413931,7200,0,0,1,0,0),
+(@GUID+86,9819,229,1,1,0,0,168.431061,-288.5739,111.0254,2.91469979,7200,0,0,1,0,0),
+(@GUID+87,9819,229,1,1,0,0,168.467117,-285.357452,111.0254,3.159046,7200,0,0,1,0,0),
+(@GUID+88,9819,229,1,1,0,0,168.529587,-282.207245,111.0254,3.38593864,7200,0,0,1,0,0),
+(@GUID+89,9819,229,1,1,0,0,172.878586,-365.445526,116.925789,2.84488654,7200,0,0,1,0,0),
+(@GUID+90,9819,229,1,1,0,0,178.113251,-364.08963,116.925758,4.956735,7200,0,0,1,0,0),
+(@GUID+91,9819,229,1,1,0,0,191.3293,-272.009766,77.03062,5.61996031,7200,0,0,1,0,0),
+(@GUID+92,9819,229,1,1,0,0,194.615189,-255.948486,77.019455,4.310963,7200,0,0,1,0,0),
+(@GUID+93,9819,229,1,1,0,0,195.222046,-271.912567,77.03062,3.78736448,7200,0,0,1,0,0),
+(@GUID+94,9819,229,1,1,0,0,212.101151,-336.132416,76.955864,5.096361,7200,0,0,1,0,0),
+(@GUID+95,9819,229,1,1,0,0,222.666229,-334.5855,77.01298,3.07177949,7200,0,0,1,0,0),
+(@GUID+96,9819,229,1,1,0,0,225.916336,-261.5317,82.1132355,4.103862,7200,0,0,1,0,0),
+(@GUID+97,9819,229,1,1,0,0,85.73412,-373.6244,116.925743,0.6806784,7200,0,0,1,0,0),
+(@GUID+98,9819,229,1,1,0,0,87.50004,-426.620819,111.006088,5.916666,7200,0,0,1,0,0),
+(@GUID+99,9819,229,1,1,0,0,90.02657,-367.4056,117.518463,2.51327419,7200,0,0,1,0,0),
+(@GUID+100,9819,229,1,1,0,0,92.1094,-415.1748,111.006096,4.59021568,7200,0,0,1,0,0),
+(@GUID+101,9819,229,1,1,0,0,106.9291,-367.275757,116.925743,2.30383468,7200,0,0,1,0,0),
+-- Awbee
+(@GUID+102,10740,229,1,1,0,0,70.54358,-420.442535,110.846558,0.75049156,7200,0,0,1,0,0),
+-- Blackhand Incarcerator <Blackhand Legion>
+(@GUID+103,10316,229,1,1,0,0,126.3072,-258.6249,91.637146,0.0349065848,7200,0,0,1,0,0),
+(@GUID+104,10316,229,1,1,0,0,126.446983,-276.596771,91.6375656,0.820304751,7200,0,0,1,0,0),
+(@GUID+105,10316,229,1,1,0,0,126.507553,-240.895081,91.62151,5.532694,7200,0,0,1,0,0),
+(@GUID+106,10316,229,1,1,0,0,144.283234,-240.993958,91.62266,4.729842,7200,0,0,1,0,0),
+(@GUID+107,10316,229,1,1,0,0,162.216324,-240.97139,91.68952,3.89208412,7200,0,0,1,0,0),
+(@GUID+108,10316,229,1,1,0,0,162.327271,-276.7592,91.69608,2.32128787,7200,0,0,1,0,0),
+(@GUID+109,10316,229,1,1,0,0,162.459671,-258.961456,91.61771,3.08923268,7200,0,0,1,0,0),
+-- Lord Valthalak Trigger
+(@GUID+110,16048,229,1,1,0,0,50.1153679,-534.537354,111.019806,6.161012,7200,0,0,1,0,0),
+-- Blackhand Dreadweaver <Blackhand Legion>
+(@GUID+111,9817,229,1,1,0,0,119.028313,-340.441254,71.04595,0.0349065848,7200,0,0,1,0,0),
+(@GUID+112,9817,229,1,1,0,0,122.051933,-293.15744,71.06183,5.497787,7200,0,0,1,0,0),
+(@GUID+113,9817,229,1,1,0,0,125.033432,-346.358124,71.04615,1.60570288,7200,0,0,1,0,0),
+(@GUID+114,9817,229,1,1,0,0,154.42865,-289.456,71.02977,6.17846537,7200,0,0,1,0,0),
+(@GUID+116,9817,229,1,1,0,0,159.006119,-347.022461,71.01292,0.802851439,7200,0,0,1,0,0),
+(@GUID+117,9817,229,1,1,0,0,159.043167,-288.595856,71.03185,3.64773822,7200,0,0,1,0,0),
+(@GUID+118,9817,229,1,1,0,0,163.503326,-247.513779,111.025925,2.09439516,7200,0,0,1,0,0),
+(@GUID+119,9817,229,1,1,0,0,169.915909,-367.141479,116.925789,1.134464,7200,0,0,1,0,0),
+(@GUID+120,9817,229,1,1,0,0,177.830521,-367.561035,116.925758,1.15191734,7200,0,0,1,0,0),
+(@GUID+121,9817,229,1,1,0,0,190.633072,-263.9589,77.03324,0.9599311,7200,0,0,1,0,0),
+(@GUID+122,9817,229,1,1,0,0,215.519485,-337.73288,76.95243,3.106686,7200,0,0,1,0,0),
+(@GUID+123,9817,229,1,1,0,0,221.517853,-258.423828,82.12929,3.04173565,7200,0,0,1,0,0),
+(@GUID+124,9817,229,1,1,0,0,225.8605,-266.1465,82.087326,3.30034256,7200,0,0,1,0,0),
+(@GUID+125,9817,229,1,1,0,0,232.839737,-297.4911,77.0545654,4.08407,7200,0,0,1,0,0),
+(@GUID+126,9817,229,1,1,0,0,234.324112,-306.76416,77.06055,2.443461,7200,0,0,1,0,0),
+(@GUID+127,9817,229,1,1,0,0,85.6391449,-366.950134,116.925743,0.802851439,7200,0,0,1,0,0),
+(@GUID+128,9817,229,1,1,0,0,93.9203949,-417.965485,111.006088,2.79252672,7200,0,0,1,0,0),
+-- Blackhand Thug
+(@GUID+129,10762,229,1,1,0,0,71.6325,-421.34613,110.794823,1.74532926,7200,0,0,1,0,0),
+(@GUID+130,10762,229,1,1,0,0,71.74594,-419.1056,111.144218,4.694936,7200,0,0,1,0,0),
+-- Blackhand Elite <Blackhand Legion>
+(@GUID+131,10317,229,1,1,0,0,119.342194,-567.1412,107.25071,5.916666,7200,0,0,1,0,0),
+(@GUID+132,10317,229,1,1,0,0,120.0068,-563.2474,107.453323,5.846853,7200,0,0,1,0,0),
+(@GUID+133,10317,229,1,1,0,0,144.60112,-299.439117,110.735207,3.08923268,7200,0,0,1,0,0),
+(@GUID+134,10317,229,1,1,0,0,146.275345,-275.0636,111.0268,3.106686,7200,0,0,1,0,0),
+(@GUID+135,10317,229,1,1,0,0,15.7085686,-269.44873,110.943428,3.70086622,7200,0,0,1,0,0),
+(@GUID+136,10317,229,1,1,0,0,158.335342,-317.906342,110.734566,0.0349065848,7200,0,0,1,0,0),
+(@GUID+137,10317,229,1,1,0,0,11.4635525,-262.667877,110.943428,3.70086479,7200,0,0,1,0,0),
+(@GUID+138,10317,229,1,1,0,0,164.433945,-285.266144,111.025864,0,7200,0,0,1,0,0),
+(@GUID+139,10317,229,1,1,0,0,-18.404726,-338.186249,111.026764,0.5934119,7200,0,0,1,0,0),
+(@GUID+140,10317,229,1,1,0,0,20.7244225,-468.8023,111.035339,4.834562,7200,0,0,1,0,0),
+(@GUID+141,10317,229,1,1,0,0,24.4351749,-268.222015,111.026764,2.830616,7200,0,0,1,0,0),
+(@GUID+142,10317,229,1,1,0,0,29.5069962,-385.555267,110.747688,5.42797375,7200,0,0,1,0,0),
+(@GUID+143,10317,229,1,1,0,0,-3.292078,-259.9108,111.026764,5.480334,7200,0,0,1,0,0),
+(@GUID+144,10317,229,1,1,0,0,30.4171047,-332.906921,111.026779,4.764749,7200,0,0,1,0,0),
+(@GUID+145,10317,229,1,1,0,0,35.48675,-492.949921,111.035957,3.054326,7200,0,0,1,0,0),
+(@GUID+146,10317,229,1,1,0,0,37.333168,-333.77887,111.026779,4.660029,7200,0,0,1,0,0),
+(@GUID+147,10317,229,1,1,0,0,37.9199028,-451.0573,111.028809,0.08726646,7200,0,0,1,0,0),
+(@GUID+148,10317,229,1,1,0,0,-5.026564,-352.542572,111.026779,0.9599311,7200,0,0,1,0,0),
+(@GUID+149,10317,229,1,1,0,0,97.21676,-476.817535,116.925743,5.23598766,7200,0,0,1,0,0),
+-- Lord Victor Nefarius <Lord of Blackrock>
+(@GUID+150,10162,229,1,1,0,0,163.168335,-444.165,122.058609,3.12413931,7200,0,0,1,0,0),
+-- Warchief Rend Blackhand
+(@GUID+151,10429,229,1,1,0,0,159.276138,-443.619049,122.058609,6.265732,7200,0,0,1,0,0),
+-- The Beast
+(@GUID+152,10430,229,1,1,0,0,124.21048,-563.799438,107.4246,2.75762,7200,0,0,1,0,0),
+-- Jed Runewatcher <Blackhand Legion> RARE
+(@GUID+153,10509,229,1,1,0,0,165.09407,-341.9633,110.951019,1.588817,7200,0,0,1,0,0),
+-- General Drakkisath
+(@GUID+154,10363,229,1,1,0,0,36.4508629,-285.993561,111.036224,3.14159274,7200,0,0,1,0,0),
+-- Blackhand Assassin <Blackhand Legion>
+(@GUID+155,10318,229,1,1,0,0,117.948341,-569.3336,107.13662,5.98647928,7200,0,0,1,0,0),
+(@GUID+156,10318,229,1,1,0,0,18.2123585,-471.40033,111.030594,6.17846537,7200,0,0,1,0,0),
+(@GUID+157,10318,229,1,1,0,0,23.50665,-470.537872,111.03933,3.56047153,7200,0,0,1,0,0),
+(@GUID+158,10318,229,1,1,0,0,31.8534851,-490.6625,111.036209,4.32841635,7200,0,0,1,0,0),
+(@GUID+159,10318,229,1,1,0,0,38.164032,-385.480133,110.797859,4.18879032,7200,0,0,1,0,0),
+(@GUID+160,10318,229,1,1,0,0,40.42038,-453.613342,111.024033,1.34390354,7200,0,0,1,0,0),
+(@GUID+161,10318,229,1,1,0,0,-6.880112,-252.370468,111.026764,5.42797375,7200,0,0,1,0,0),
+(@GUID+162,10318,229,1,1,0,0,71.493454,-474.6056,115.778786,6.27848864,7200,0,0,1,0,0),
+(@GUID+163,10318,229,1,1,0,0,99.72865,-479.4235,116.925743,2.75762,7200,0,0,1,0,0),
+-- Blackhand Iron Guard <Blackhand Legion>
+(@GUID+164,10319,229,1,1,0,0,10.1526937,-457.006958,111.020668,4.502949,7200,0,0,1,0,0),
+(@GUID+165,10319,229,1,1,0,0,11.7395382,-460.466461,111.021942,2.80998015,7200,0,0,1,0,0),
+(@GUID+166,10319,229,1,1,0,0,124.05793,-470.958618,116.925743,3.85717773,7200,0,0,1,0,0),
+(@GUID+167,10319,229,1,1,0,0,124.094147,-478.257874,116.925743,2.37364769,7200,0,0,1,0,0),
+(@GUID+168,10319,229,1,1,0,0,-13.7761574,-274.925873,111.026764,5.899213,7200,0,0,1,0,0),
+(@GUID+169,10319,229,1,1,0,0,137.4377,-458.1639,121.873993,1.61019349,7200,0,0,1,0,0),
+(@GUID+170,10319,229,1,1,0,0,172.060364,-470.11795,116.907768,3.38593864,7200,0,0,1,0,0),
+(@GUID+171,10319,229,1,1,0,0,172.2113,-479.1257,116.922729,2.77507353,7200,0,0,1,0,0),
+(@GUID+172,10319,229,1,1,0,0,25.9503689,-431.148,111.036423,3.455752,7200,0,0,1,0,0),
+(@GUID+173,10319,229,1,1,0,0,27.20901,-487.106232,110.948944,5.92132044,7200,0,0,1,0,0),
+(@GUID+174,10319,229,1,1,0,0,30.4782486,-381.1838,110.765739,4.97418833,7200,0,0,1,0,0),
+(@GUID+175,10319,229,1,1,0,0,32.98562,-441.197968,110.947975,4.68552542,7200,0,0,1,0,0),
+(@GUID+177,10319,229,1,1,0,0,40.66904,-330.527466,111.026779,4.62512255,7200,0,0,1,0,0),
+(@GUID+178,10319,229,1,1,0,0,42.51416,-431.718781,111.029396,5.934119,7200,0,0,1,0,0),
+(@GUID+179,10319,229,1,1,0,0,-8.141677,-341.8935,111.026779,0.7679449,7200,0,0,1,0,0),
+(@GUID+180,10319,229,1,1,0,0,-9.265498,-265.802856,111.026764,5.67232,7200,0,0,1,0,0),
+-- Scarshield Acolyte <Scarshield Legion>
+(@GUID+181,9045,229,1,1,0,0,107.023872,-306.314117,54.00366,4.22369671,7200,0,0,1,0,0),
+(@GUID+182,9045,229,1,1,0,0,107.412292,-329.5834,54.003273,5.20108128,7200,0,0,1,0,0),
+(@GUID+183,9045,229,1,1,0,0,14.1215773,-259.2284,65.43308,2.3561945,7200,0,0,1,0,0),
+(@GUID+184,9045,229,1,1,0,0,18.0154171,-276.733521,65.375824,1.0306716,7200,4,0,1,0,1),
+(@GUID+185,9045,229,1,1,0,0,46.5601959,-453.7283,26.3562088,2.40855432,7200,0,0,1,0,0),
+(@GUID+186,9045,229,1,1,0,0,48.0624542,-257.406921,65.45917,0.418879032,7200,0,0,1,0,0),
+(@GUID+187,9045,229,1,1,0,0,5.471476,-520.6829,29.48178,3.4382987,7200,0,0,1,0,0),
+(@GUID+188,9045,229,1,1,0,0,52.8444061,-312.8106,54.00366,0.575958669,7200,0,0,1,0,0),
+(@GUID+189,9045,229,1,1,0,0,69.2313843,-439.3284,41.19126,3.159046,7200,0,0,1,0,0),
+(@GUID+190,9045,229,1,1,0,0,75.6738052,-319.729126,55.8668,1.71042264,7200,5,0,1,0,1),
+(@GUID+191,9045,229,1,1,0,0,79.86551,-353.9204,60.78536,0.87266463,7200,4,0,1,0,1),
+-- Scarshield Legionnaire <Scarshield Legion>
+(@GUID+192,9097,229,1,1,0,0,-1.888463,-585.6428,29.2742,2.49582076,7200,0,0,1,0,0),
+(@GUID+193,9097,229,1,1,0,0,102.429573,-314.697754,54.00119,1.06465089,7200,0,0,1,0,0),
+(@GUID+194,9097,229,1,1,0,0,107.2788,-324.246582,54.00367,3.50811172,7200,0,0,1,0,0),
+(@GUID+195,9097,229,1,1,0,0,107.6331,-311.3865,54.00366,2.67035365,7200,0,0,1,0,0),
+(@GUID+196,9097,229,1,1,0,0,12.8929729,-329.7429,48.8472366,3.159046,7200,0,0,1,0,0),
+(@GUID+197,9097,229,1,1,0,0,12.9406261,-279.607941,65.45197,5.969026,7200,5,0,1,0,1),
+(@GUID+198,9097,229,1,1,0,0,18.7627659,-284.2841,65.45917,2.12930179,7200,5,0,1,0,1),
+(@GUID+199,9097,229,1,1,0,0,-2.931882,-524.657837,29.27372,0.5934119,7200,0,0,1,0,0),
+(@GUID+200,9097,229,1,1,0,0,-28.38935,-563.0387,29.2742,2.86234,7200,0,0,1,0,0),
+(@GUID+201,9097,229,1,1,0,0,30.9195728,-399.682678,48.7868233,3.00196624,7200,0,0,1,0,0),
+(@GUID+202,9097,229,1,1,0,0,-31.5340881,-564.217163,29.2742,1.16937053,7200,0,0,1,0,0),
+(@GUID+203,9097,229,1,1,0,0,-34.0393829,-585.6407,29.2742,6.19591856,7200,0,0,1,0,0),
+(@GUID+204,9097,229,1,1,0,0,-37.9832726,-585.003052,29.2742,1.50098312,7200,0,0,1,0,0),
+(@GUID+205,9097,229,1,1,0,0,43.5522041,-274.521637,65.45917,6.108652,7200,4,0,1,0,1),
+(@GUID+206,9097,229,1,1,0,0,45.7239571,-449.172668,27.6064148,3.700098,7200,0,0,1,0,0),
+(@GUID+207,9097,229,1,1,0,0,45.8465,-279.354,65.3547,1.03702569,7200,4,0,1,0,1),
+(@GUID+208,9097,229,1,1,0,0,51.89088,-287.3514,65.45917,3.03687286,7200,0,0,1,0,0),
+(@GUID+209,9097,229,1,1,0,0,54.68561,-325.345245,54.00365,1.39626336,7200,0,0,1,0,0),
+(@GUID+210,9097,229,1,1,0,0,55.91653,-459.1569,24.6387119,4.74729538,7200,0,0,1,0,0),
+(@GUID+211,9097,229,1,1,0,0,57.3262329,-569.6453,30.678772,0.191986218,7200,0,0,1,0,0),
+(@GUID+212,9097,229,1,1,0,0,57.5051956,-314.922241,54.0019226,2.268928,7200,0,0,1,0,0),
+(@GUID+213,9097,229,1,1,0,0,57.8382835,-310.131531,54.00148,3.577925,7200,0,0,1,0,0),
+(@GUID+214,9097,229,1,1,0,0,59.3199,-507.905,29.2652359,6.05629253,7200,0,0,1,0,0),
+(@GUID+215,9097,229,1,1,0,0,6.909,-271.977539,65.41073,0.209439516,7200,0,0,1,0,0),
+(@GUID+216,9097,229,1,1,0,0,61.8540535,-560.6797,30.6882877,3.49065852,7200,0,0,1,0,0),
+(@GUID+217,9097,229,1,1,0,0,63.39378,-505.4025,29.2684975,4.57276249,7200,0,0,1,0,0),
+(@GUID+218,9097,229,1,1,0,0,66.23844,-274.531647,60.73464,6.23082542,7200,0,0,1,0,0),
+(@GUID+219,9097,229,1,1,0,0,66.43544,-435.9842,42.10328,4.32841635,7200,0,0,1,0,0),
+(@GUID+220,9097,229,1,1,0,0,69.6397,-278.3183,60.67765,0.296705961,7200,0,0,1,0,0),
+(@GUID+221,9097,229,1,1,0,0,-7.64752,-586.2085,29.2742,0.9250245,7200,0,0,1,0,0),
+(@GUID+222,9097,229,1,1,0,0,71.6458054,-586.649231,30.686348,6.265732,7200,0,0,1,0,0),
+(@GUID+223,9097,229,1,1,0,0,79.0274353,-287.054626,60.77396,1.98967528,7200,5,0,1,0,1),
+(@GUID+224,9097,229,1,1,0,0,8.43384,-253.37677,65.4404,5.46288061,7200,0,0,1,0,0),
+(@GUID+225,9097,229,1,1,0,0,82.27611,-580.576843,30.6900673,4.118977,7200,0,0,1,0,0),
+(@GUID+226,9097,229,1,1,0,0,82.37819,-315.5727,55.78426,2.65947676,7200,5,0,1,0,1),
+(@GUID+227,9097,229,1,1,0,0,85.21238,-357.96698,60.78536,6.05629253,7200,4,0,1,0,1),
+(@GUID+228,9097,229,1,1,0,0,86.74077,-283.049225,60.610733,2.49932933,7200,0,0,1,0,0),
+(@GUID+229,9097,229,1,1,0,0,87.000885,-316.9617,65.48379,3.38828468,7200,0,0,1,0,0),
+(@GUID+230,9097,229,1,1,0,0,87.48928,-318.901154,65.49227,3.38828754,7200,0,0,1,0,0),
+(@GUID+231,9097,229,1,1,0,0,9.058154,-257.7314,65.41364,0.6981317,7200,0,0,1,0,0),
+(@GUID+232,9097,229,1,1,0,0,9.251252,-332.5572,48.7950478,1.23918378,7200,0,0,1,0,0),
+(@GUID+233,9097,229,1,1,0,0,90.2249146,-280.722229,60.6818237,4.834562,7200,0,0,1,0,0),
+(@GUID+234,9097,229,1,1,0,0,91.53687,-361.906,60.7020264,1.54308629,7200,4,0,1,0,1),
+(@GUID+235,9097,229,1,1,0,0,94.65439,-275.0468,60.7526,3.14159274,7200,0,0,1,0,0),
+(@GUID+236,9097,229,1,1,0,0,-52.07244,-586.2182,29.2742,2.96705961,7200,0,0,1,0,0),
+(@GUID+237,9097,229,1,1,0,0,-55.7421837,-581.55426,29.2742,4.24115,7200,0,0,1,0,0),
+(@GUID+238,9097,229,1,1,0,0,-63.33937,-572.386353,29.2742,0.122173049,7200,0,0,1,0,0),
+(@GUID+239,9097,229,1,1,0,0,-67.22875,-535.405151,29.2742,3.874631,7200,0,0,1,0,0),
+(@GUID+240,9097,229,1,1,0,0,-70.01909,-575.8177,29.2742,1.16937053,7200,0,0,1,0,0),
+-- Scarshield Spellbinder <Scarshield Legion>
+(@GUID+241,9098,229,1,1,0,0,-1.331627,-519.548645,29.3309135,5.42797375,7200,0,0,1,0,0),
+(@GUID+242,9098,229,1,1,0,0,102.172279,-308.9317,54.0021477,5.916666,7200,0,0,1,0,0),
+(@GUID+243,9098,229,1,1,0,0,105.506432,-332.577332,54.0027466,6.23082542,7200,0,0,1,0,0),
+(@GUID+244,9098,229,1,1,0,0,14.2493792,-254.139786,65.4354858,3.68264461,7200,0,0,1,0,0),
+(@GUID+245,9098,229,1,1,0,0,-2.807793,-580.5389,29.2742,3.94444418,7200,0,0,1,0,0),
+(@GUID+246,9098,229,1,1,0,0,29.0991611,-396.495331,48.80111,4.537856,7200,0,0,1,0,0),
+(@GUID+247,9098,229,1,1,0,0,-31.529623,-559.1773,29.2742,5.480334,7200,0,0,1,0,0),
+(@GUID+248,9098,229,1,1,0,0,40.8953743,-448.450134,27.932621,5.497787,7200,0,0,1,0,0),
+(@GUID+249,9098,229,1,1,0,0,47.6854668,-270.914276,65.3638,6.241553,7200,4,0,1,0,1),
+(@GUID+250,9098,229,1,1,0,0,52.1842651,-307.34,54.0018921,5.253441,7200,0,0,1,0,0),
+(@GUID+251,9098,229,1,1,0,0,52.41355,-255.366913,65.45917,3.63028479,7200,0,0,1,0,0),
+(@GUID+252,9098,229,1,1,0,0,54.9745064,-327.755585,54.00365,1.41371667,7200,0,0,1,0,0),
+(@GUID+253,9098,229,1,1,0,0,55.53388,-464.8595,24.94574,1.4486233,7200,0,0,1,0,0),
+(@GUID+254,9098,229,1,1,0,0,57.2190132,-562.799744,30.6716766,0.418879032,7200,0,0,1,0,0),
+(@GUID+255,9098,229,1,1,0,0,65.42762,-510.3604,29.3167419,2.565634,7200,0,0,1,0,0),
+(@GUID+256,9098,229,1,1,0,0,67.43828,-443.5344,40.726696,2.09439516,7200,0,0,1,0,0),
+(@GUID+257,9098,229,1,1,0,0,8.843101,-326.523132,48.8573074,5.113815,7200,0,0,1,0,0),
+(@GUID+258,9098,229,1,1,0,0,80.25544,-584.6707,30.6894226,1.2566371,7200,0,0,1,0,0),
+(@GUID+259,9098,229,1,1,0,0,81.61091,-325.340729,55.8671455,1.79768908,7200,6,0,1,0,1),
+(@GUID+260,9098,229,1,1,0,0,90.11126,-354.347534,60.78536,4.485496,7200,4,0,1,0,1),
+-- Scarshield Worg <Scarshield Legion>
+(@GUID+261,9416,229,1,1,0,0,15.70567,-319.694763,48.9296379,4.81710863,7200,0,0,1,0,0),
+(@GUID+262,9416,229,1,1,0,0,21.6263542,-319.307526,48.921833,4.59021568,7200,0,0,1,0,0),
+(@GUID+263,9416,229,1,1,0,0,39.9757576,-401.308,48.73395,1.37881,7200,0,0,1,0,0),
+(@GUID+264,9416,229,1,1,0,0,-43.9925423,-560.761658,29.2742,5.77704,7200,0,0,1,0,0),
+(@GUID+265,9416,229,1,1,0,0,44.2465363,-401.749878,48.8481827,1.41371667,7200,0,0,1,0,0),
+(@GUID+266,9416,229,1,1,0,0,-44.5054626,-555.940247,29.2742,5.44542742,7200,0,0,1,0,0),
+(@GUID+267,9416,229,1,1,0,0,45.85862,-503.317871,29.2189922,0.628318548,7200,0,0,1,0,0),
+(@GUID+268,9416,229,1,1,0,0,48.7350845,-507.5874,29.2278786,0.802851439,7200,0,0,1,0,0),
+(@GUID+269,9416,229,1,1,0,0,54.7811,-477.6601,26.7370472,2.51327419,7200,0,0,1,0,0),
+(@GUID+270,9416,229,1,1,0,0,57.44511,-472.058868,25.8572731,2.740167,7200,0,0,1,0,0),
+(@GUID+271,9416,229,1,1,0,0,-62.07272,-550.186646,29.2742,0.9075712,7200,0,0,1,0,0),
+(@GUID+273,9416,229,1,1,0,0,-65.6472,-544.931946,29.2742,0.575958669,7200,0,0,1,0,0),
+-- Scarshield Raider <Scarshield Legion>
+(@GUID+274,9258,229,1,1,0,0,18.6335163,-319.563538,48.92536,4.694936,7200,0,0,1,0,0),
+(@GUID+275,9258,229,1,1,0,0,42.2404366,-400.899567,48.78902,1.39626336,7200,0,0,1,0,0),
+(@GUID+276,9258,229,1,1,0,0,-43.1253738,-558.9627,29.2742,5.61996031,7200,0,0,1,0,0),
+(@GUID+277,9258,229,1,1,0,0,48.0036926,-504.871857,29.22562,0.715585,7200,0,0,1,0,0),
+(@GUID+278,9258,229,1,1,0,0,55.2906952,-474.477264,26.0807571,2.61799383,7200,0,0,1,0,0),
+(@GUID+279,9258,229,1,1,0,0,-62.76482,-546.4872,29.2742,0.75049156,7200,0,0,1,0,0),
+-- Scarshield Warlock <Scarshield Legion>
+(@GUID+280,9257,229,1,1,0,0,26.0838318,-398.5821,48.8247757,6.07374573,7200,0,0,1,0,0),
+(@GUID+281,9257,229,1,1,0,0,3.1376,-524.950745,29.456665,2.23402143,7200,0,0,1,0,0),
+(@GUID+282,9257,229,1,1,0,0,41.2527657,-453.779816,26.4869156,1.012291,7200,0,0,1,0,0),
+(@GUID+283,9257,229,1,1,0,0,60.2924347,-460.7934,24.84539,3.2986722,7200,0,0,1,0,0),
+(@GUID+284,9257,229,1,1,0,0,62.5478935,-437.094635,42.1535568,5.532694,7200,0,0,1,0,0),
+(@GUID+285,9257,229,1,1,0,0,62.9071541,-569.002136,30.6996365,3.106686,7200,0,0,1,0,0),
+(@GUID+286,9257,229,1,1,0,0,75.31803,-587.21405,30.68769,2.86234,7200,0,0,1,0,0),
+(@GUID+287,9257,229,1,1,0,0,-8.240628,-580.9951,29.2742,5.67232,7200,0,0,1,0,0),
+(@GUID+288,9257,229,1,1,0,0,-56.70842,-586.1366,29.2742,1.2915436,7200,0,0,1,0,0);
+
+-- Add sitting to some Scarshield Legionnaires
+DELETE FROM `creature_addon` WHERE `guid` IN (209318,209333,209315,209337,209308,209312,209331,209320,209335);
+INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`) VALUES
+(209318,1,1),(209333,1,1),(209315,1,1),(209337,1,1),(209308,1,1),(209312,1,1),(209331,1,1),(209320,1,1),(209335,1,1);
+
+-- Pathing for Blackhand Dreadweaver Entry: 9817
+SET @NPC := @GUID+116;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=156.027,`position_y`=-256.98,`position_z`=110.873 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,156.655,-261.057,110.911,0,0,0,100,0),
+(@PATH,2,156.697,-270.709,110.945,0,0,0,100,0),
+(@PATH,3,157.437,-283.381,110.653,0,0,0,100,0),
+(@PATH,4,156.721,-302.091,110.655,0,0,0,100,0),
+(@PATH,5,155.393,-316.954,110.658,0,0,0,100,0),
+(@PATH,6,145.795,-316.889,110.658,0,0,0,100,0),
+(@PATH,7,138.546,-312.556,110.971,0,0,0,100,0),
+(@PATH,8,128.11,-312.561,110.948,0,0,0,100,0),
+(@PATH,9,113.444,-312.323,106.436,0,0,0,100,0),
+(@PATH,10,107.291,-311.159,106.436,0,0,0,100,0),
+(@PATH,11,107.143,-305.034,106.436,0,0,0,100,0),
+(@PATH,12,107.968,-294.352,106.436,0,0,0,100,0),
+(@PATH,13,108.13,-273.961,106.436,0,0,0,100,0),
+(@PATH,14,108.325,-262.696,106.436,0,0,0,100,0),
+(@PATH,15,113.576,-260.461,106.436,0,0,0,100,0),
+(@PATH,16,119.512,-259.629,108.912,0,0,0,100,0),
+(@PATH,17,126.887,-258.807,110.95,0,0,0,100,0),
+(@PATH,18,134.264,-256.577,110.872,0,0,0,100,0),
+(@PATH,19,142.107,-253.858,110.808,0,0,0,100,0),
+(@PATH,20,149.232,-254.785,110.835,0,0,0,100,0),
+(@PATH,21,156.027,-256.98,110.873,0,0,0,100,0);
+
+-- Pathing for Rage Talon Dragonspawn Entry: 9096
+SET @NPC := @GUID+13;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=141.415,`position_y`=-328.32,`position_z`=70.9563 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,137.036,-318.309,70.9563,0,0,0,100,0),
+(@PATH,2,139.625,-311.595,70.9563,0,0,0,100,0),
+(@PATH,3,145.022,-306.612,70.9563,0,0,0,100,0),
+(@PATH,4,155.634,-307.226,70.9563,0,0,0,100,0),
+(@PATH,5,165.665,-309.29,70.9563,0,0,0,100,0),
+(@PATH,6,179.918,-308.349,75.0044,0,0,0,100,0),
+(@PATH,7,186.484,-307.375,76.8804,0,0,0,100,0),
+(@PATH,8,190.417,-303.615,76.8863,0,0,0,100,0),
+(@PATH,9,190,-295.833,76.9324,0,0,0,100,0),
+(@PATH,10,192.748,-284.944,76.9366,0,0,0,100,0),
+(@PATH,11,197.221,-281.635,76.9372,0,0,0,100,0),
+(@PATH,12,205.403,-280.035,76.9363,0,0,0,100,0),
+(@PATH,13,206.769,-288.047,76.9327,0,0,0,100,0),
+(@PATH,14,206.049,-300.881,76.9044,0,0,0,100,0),
+(@PATH,15,203.805,-308.685,76.8987,0,0,0,100,0),
+(@PATH,16,200.091,-314.903,76.892,0,0,0,100,0),
+(@PATH,17,196.037,-321.532,76.8849,0,0,0,100,0),
+(@PATH,18,187.264,-325.25,76.8738,0,0,0,100,0),
+(@PATH,19,172.508,-330.708,71.6636,0,0,0,100,0),
+(@PATH,20,157.819,-330.472,70.9563,0,0,0,100,0),
+(@PATH,21,151.347,-332.406,70.9563,0,0,0,100,0),
+(@PATH,22,141.415,-328.32,70.9563,0,0,0,100,0);
+
+-- Pathing for Rage Talon Dragonspawn Entry: 9096
+SET @NPC := @GUID+3;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=102.111,`position_y`=-255.036,`position_z`=106.436 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,102.492,-284.08,106.436,0,0,0,100,0),
+(@PATH,2,103.388,-312.501,106.436,0,0,0,100,0),
+(@PATH,3,102.492,-284.08,106.436,0,0,0,100,0),
+(@PATH,4,102.111,-255.036,106.436,0,0,0,100,0);
+
+-- Pathing for Rage Talon Flamescale Entry: 10083
+SET @NPC := @GUID+25;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=151.43,`position_y`=-299.848,`position_z`=110.655 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,151.483,-266.668,110.941,0,0,0,100,0),
+(@PATH,2,151.43,-299.848,110.655,0,0,0,100,0),
+(@PATH,3,151.826,-337.478,110.948,0,0,0,100,0),
+(@PATH,4,151.43,-299.848,110.655,0,0,0,100,0);
+
+-- Pathing for Rage Talon Flamescale Entry: 10083
+SET @NPC := @GUID+26;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=159.69,`position_y`=-366.065,`position_z`=116.844 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,164.673,-366.137,116.844,0,0,0,100,0),
+(@PATH,2,159.69,-366.065,116.844,0,0,0,100,0),
+(@PATH,3,134.314,-365.853,116.844,0,0,0,100,0),
+(@PATH,4,113.681,-366.227,116.844,0,0,0,100,0),
+(@PATH,5,134.314,-365.853,116.844,0,0,0,100,0),
+(@PATH,6,159.69,-366.065,116.844,0,0,0,100,0);
+
+-- Pathing for Blackhand Veteran Entry: 9819
+SET @NPC := @GUID+77;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=151.986,`position_y`=-343.381,`position_z`=110.952 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,156.734,-340.574,110.949,0,0,0,100,0),
+(@PATH,2,161.285,-330.085,110.941,0,0,0,100,0),
+(@PATH,3,164.349,-321.437,110.935,0,0,0,100,0),
+(@PATH,4,164.066,-307.895,110.926,0,0,0,100,0),
+(@PATH,5,161.931,-295.254,110.937,0,0,0,100,0),
+(@PATH,6,161.54,-286.843,110.94,0,0,0,100,0),
+(@PATH,7,161.626,-276.16,110.942,0,0,0,100,0),
+(@PATH,8,162.619,-260.48,110.922,0,0,0,100,0),
+(@PATH,9,160.883,-251.074,110.911,0,0,0,100,0),
+(@PATH,10,153.333,-254.239,110.841,0,0,0,100,0),
+(@PATH,11,147.933,-256.874,110.85,0,0,0,100,0),
+(@PATH,12,144.41,-258.089,110.852,0,0,0,100,0),
+(@PATH,13,142.226,-262.721,110.888,0,0,0,100,0),
+(@PATH,14,139.325,-272.981,110.928,0,0,0,100,0),
+(@PATH,15,139.064,-292.411,110.964,0,0,0,100,0),
+(@PATH,16,138.366,-304.562,110.976,0,0,0,100,0),
+(@PATH,17,140.202,-318.19,110.956,0,0,0,100,0),
+(@PATH,18,141.56,-328.348,110.948,0,0,0,100,0),
+(@PATH,19,145.867,-339.175,110.95,0,0,0,100,0),
+(@PATH,20,151.986,-343.381,110.952,0,0,0,100,0);
+
+-- Pathing for Blackhand Veteran Entry: 9819
+SET @NPC := @GUID+68;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=137.681,`position_y`=-374.135,`position_z`=116.807 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,137.932,-365.946,116.844,0,0,0,100,0),
+(@PATH,2,119.13,-366.058,116.848,0,0,0,100,0),
+(@PATH,3,137.932,-365.946,116.844,0,0,0,100,0),
+(@PATH,4,137.681,-374.135,116.807,0,0,0,100,0),
+(@PATH,5,138.003,-383.829,121.975,0,0,0,100,0),
+(@PATH,6,137.621,-374.032,116.807,0,0,0,100,0),
+(@PATH,7,137.28,-358.897,116.838,0,0,0,100,0),
+(@PATH,8,138.01,-349.646,111.285,0,0,0,100,0),
+(@PATH,9,138.504,-339.926,110.965,0,0,0,100,0),
+(@PATH,10,138.055,-349.128,110.97,0,0,0,100,0),
+(@PATH,11,137.272,-358.828,116.838,0,0,0,100,0),
+(@PATH,12,137.975,-366.027,116.844,0,0,0,100,0),
+(@PATH,13,151.988,-365.319,116.844,0,0,0,100,0),
+(@PATH,14,168.97,-365.253,116.844,0,0,0,100,0),
+(@PATH,15,151.988,-365.319,116.844,0,0,0,100,0),
+(@PATH,16,137.975,-366.027,116.844,0,0,0,100,0),
+(@PATH,17,137.263,-358.934,116.838,0,0,0,100,0),
+(@PATH,18,138.048,-349.209,110.971,0,0,0,100,0),
+(@PATH,19,138.504,-339.926,110.965,0,0,0,100,0),
+(@PATH,20,138.01,-349.646,111.285,0,0,0,100,0),
+(@PATH,21,137.286,-358.828,116.838,0,0,0,100,0),
+(@PATH,22,137.621,-374.032,116.807,0,0,0,100,0),
+(@PATH,23,138.003,-383.829,121.975,0,0,0,100,0),
+(@PATH,24,137.681,-374.135,116.807,0,0,0,100,0);
+
+-- Pathing for Rage Talon Dragon Guard Entry: 10366
+SET @NPC := @GUID+32;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=137.109,`position_y`=-474.652,`position_z`=116.842 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,150.917,-475.661,116.826,0,0,0,100,0),
+(@PATH,2,165.273,-475.48,116.842,0,0,0,100,0),
+(@PATH,3,150.917,-475.661,116.826,0,0,0,100,0),
+(@PATH,4,137.109,-474.652,116.842,0,0,0,100,0),
+(@PATH,5,120.161,-474.673,116.842,0,0,0,100,0),
+(@PATH,6,106.258,-474.643,116.842,0,0,0,100,0),
+(@PATH,7,94.7496,-473.079,116.842,0,0,0,100,0),
+(@PATH,8,83.6851,-474.242,116.842,0,0,0,100,0),
+(@PATH,9,77.1173,-474.496,116.842,0,0,0,100,0),
+(@PATH,10,65.0976,-474.578,113.951,0,0,0,100,0),
+(@PATH,11,51.9036,-474.688,110.923,0,0,0,100,0),
+(@PATH,12,64.8587,-474.58,113.951,0,0,0,100,0),
+(@PATH,13,77.1173,-474.496,116.842,0,0,0,100,0),
+(@PATH,14,83.4094,-474.271,116.842,0,0,0,100,0),
+(@PATH,15,94.7496,-473.079,116.842,0,0,0,100,0),
+(@PATH,16,106.258,-474.643,116.842,0,0,0,100,0),
+(@PATH,17,120.161,-474.673,116.842,0,0,0,100,0),
+(@PATH,18,137.109,-474.652,116.842,0,0,0,100,0);
+
+-- Pathing for Jed Runewatcher Entry: 10509 "RARE"
+SET @NPC := @GUID+153;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=165.094,`position_y`=-341.963,`position_z`=110.951 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,143.081,-332.039,110.946,0,0,0,100,0),
+(@PATH,2,137.568,-346.437,110.972,0,0,0,100,0),
+(@PATH,3,137.582,-349.249,110.999,0,0,0,100,0),
+(@PATH,4,137.404,-357.640,116.838,0,0,0,100,0),
+(@PATH,5,137.005,-366.262,116.844,0,0,0,100,0),
+(@PATH,6,137.173,-374.983,116.807,0,0,0,100,0),
+(@PATH,7,137.252,-383.108,121.975,0,0,0,100,0),
+(@PATH,8,137.299,-392.334,121.975,0,0,0,100,0),
+(@PATH,9,151.393,-392.988,121.975,0,0,0,100,0),
+(@PATH,10,165.537,-392.823,121.975,0,0,0,100,0),
+(@PATH,11,165.440,-383.058,121.975,0,0,0,100,0),
+(@PATH,12,165.651,-374.907,116.807,0,0,0,100,0),
+(@PATH,13,165.556,-367.59,116.845,0,0,0,100,0),
+(@PATH,14,165.415,-357.528,116.837,0,0,0,100,0),
+(@PATH,15,165.545,-348.847,110.969,0,0,0,100,0),
+(@PATH,16,165.094,-341.963,110.951,0,0,0,100,0),
+(@PATH,17,160.784,-330.969,110.941,0,0,0,100,0),
+(@PATH,18,160.191,-309.153,110.656,0,0,0,100,0),
+(@PATH,19,160.079,-280.562,110.652,0,0,0,100,0),
+(@PATH,20,144.032,-280.615,110.653,0,0,0,100,0),
+(@PATH,21,142.987,-312.006,110.658,0,0,0,100,0);
+
+-- Pathing for Blackhand Assassin Entry: 10318
+SET @NPC := @GUID+173;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=70.90186,`position_y`=-474.6028,`position_z`=115.4964 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '22766');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,83.54216,-474.6622,116.8424,0,0,0,100,0),
+(@PATH,2,93.11698,-476.8058,116.8424,0,0,0,100,0),
+(@PATH,3,93.16169,-492.36,116.8424,0,0,0,100,0),
+(@PATH,4,93.11698,-476.8058,116.8424,0,0,0,100,0),
+(@PATH,5,83.68505,-474.6942,116.8424,0,0,0,100,0),
+(@PATH,6,70.90186,-474.6028,115.4964,0,0,0,100,0),
+(@PATH,7,60.60706,-474.3578,112.1393,0,0,0,100,0),
+(@PATH,8,45.0526,-476.1751,110.926,0,0,0,100,0),
+(@PATH,9,36.50502,-483.8639,110.9392,0,0,0,100,0),
+(@PATH,10,24.51036,-485.5788,110.9466,0,0,0,100,0),
+(@PATH,11,12.32181,-481.5825,110.9355,0,0,0,100,0),
+(@PATH,12,10.06764,-472.9978,110.9354,0,0,0,100,0),
+(@PATH,13,17.3661,-456.8065,110.9467,0,0,0,100,0),
+(@PATH,14,29.56967,-454.026,110.9595,0,0,0,100,0),
+(@PATH,15,35.45218,-454.5979,110.943,0,0,0,100,0),
+(@PATH,16,34.74645,-442.8175,110.945,0,0,0,100,0),
+(@PATH,17,33.50422,-417.918,110.7123,0,0,0,100,0),
+(@PATH,18,34.74645,-442.8175,110.945,0,0,0,100,0),
+(@PATH,19,35.45218,-454.5979,110.943,0,0,0,100,0),
+(@PATH,20,29.56967,-454.026,110.9595,0,0,0,100,0),
+(@PATH,21,17.3661,-456.8065,110.9467,0,0,0,100,0),
+(@PATH,22,10.06764,-472.9978,110.9354,0,0,0,100,0),
+(@PATH,23,12.32181,-481.5825,110.9355,0,0,0,100,0),
+(@PATH,24,24.51036,-485.5788,110.9466,0,0,0,100,0),
+(@PATH,25,36.50502,-483.8639,110.9392,0,0,0,100,0),
+(@PATH,26,45.0526,-476.1751,110.926,0,0,0,100,0),
+(@PATH,27,60.60706,-474.3578,112.1393,0,0,0,100,0),
+(@PATH,28,70.90186,-474.6028,115.4964,0,0,0,100,0);
+-- 0xF13000284E0957D1 .go 83.54216 -474.6622 116.8424
+
+-- Pathing for Blackhand Assassin Entry: 10318
+SET @NPC := @GUID+155;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=117.2911,`position_y`=-562.6133,`position_z`=107.403 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,117.5151,-567.9547,107.125,0,0,0,100,0),
+(@PATH,2,117.2911,-562.6133,107.403,0,0,0,100,0),
+(@PATH,3,112.9668,-557.6212,107.6628,0,0,0,100,0),
+(@PATH,4,105.0914,-557.2451,107.6823,0,0,0,100,0),
+(@PATH,5,96.04835,-553.9485,110.5781,0,0,0,100,0),
+(@PATH,6,87.70401,-550.9095,110.9234,0,0,0,100,0),
+(@PATH,7,79.952,-545.0425,110.9392,0,0,0,100,0),
+(@PATH,8,71.74578,-539.9948,110.9404,0,0,0,100,0),
+(@PATH,9,63.53278,-534.9427,110.9417,0,0,0,100,0),
+(@PATH,10,71.6881,-539.9797,110.9404,0,0,0,100,0),
+(@PATH,11,79.952,-545.0425,110.9392,0,0,0,100,0),
+(@PATH,12,87.70401,-550.9095,110.9234,0,0,0,100,0),
+(@PATH,13,96.04835,-553.9485,110.5781,0,0,0,100,0),
+(@PATH,14,105.0914,-557.2451,107.6823,0,0,0,100,0),
+(@PATH,15,112.9668,-557.6212,107.6628,0,0,0,100,0),
+(@PATH,16,117.2911,-562.6133,107.403,0,0,0,100,0);
+-- 0xF13000284E0957CB .go 117.5151 -567.9547 107.125
+
+-- Pathing for Blackhand Iron Guard Entry: 10319
+SET @NPC := @GUID+185;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=27.209,`position_y`=-487.106,`position_z`=110.949 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,41.0048,-479.188,110.932,0,0,0,100,0),
+(@PATH,2,40.6946,-470.055,110.934,0,0,0,100,0),
+(@PATH,3,28.987,-457.701,110.958,0,0,0,100,0),
+(@PATH,4,19.4282,-458.143,110.948,0,0,0,100,0),
+(@PATH,5,10.9487,-465.839,110.938,0,0,0,100,0),
+(@PATH,6,12.0295,-481.36,110.935,0,0,0,100,0),
+(@PATH,7,27.209,-487.106,110.949,0,0,0,100,0);
+
+-- Pathing for Blackhand Iron Guard Entry: 10319
+SET @NPC := @GUID+187;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=32.9856,`position_y`=-441.198,`position_z`=110.948 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,33.2388,-451.331,110.947,0,0,0,100,0),
+(@PATH,2,27.8349,-467.173,110.954,0,0,0,100,0),
+(@PATH,3,22.5882,-486.309,110.945,0,0,0,100,0),
+(@PATH,4,21.3946,-495.946,110.941,0,0,0,100,0),
+(@PATH,5,22.5882,-486.309,110.945,0,0,0,100,0),
+(@PATH,6,27.8349,-467.173,110.954,0,0,0,100,0),
+(@PATH,7,33.2388,-451.331,110.947,0,0,0,100,0),
+(@PATH,8,32.9856,-441.198,110.948,0,0,0,100,0),
+(@PATH,9,33.2187,-432.523,110.949,0,0,0,100,0),
+(@PATH,10,32.9856,-441.198,110.948,0,0,0,100,0);
+
+-- Pathing for Blackhand Iron Guard Entry: 10319
+SET @NPC := @GUID+180;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=137.438,`position_y`=-458.164,`position_z`=121.874 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,137.876,-449.432,121.975,0,0,0,100,0),
+(@PATH,2,142.882,-447.466,121.975,0,0,0,100,0),
+(@PATH,3,150.106,-447.552,121.975,0,0,0,100,0),
+(@PATH,4,158.939,-447.841,121.975,0,0,0,100,0),
+(@PATH,5,162.936,-450.315,121.975,0,0,0,100,0),
+(@PATH,6,164.986,-455.795,121.975,0,0,0,100,0),
+(@PATH,7,165.879,-465.25,116.954,0,0,0,100,0),
+(@PATH,8,165.223,-470.568,116.829,0,0,0,100,0),
+(@PATH,9,158.806,-470.375,116.826,0,0,0,100,0),
+(@PATH,10,148.989,-470.486,116.816,0,0,0,100,0),
+(@PATH,11,142.296,-471.539,116.839,0,0,0,100,0),
+(@PATH,12,127.625,-473.384,116.845,0,0,0,100,0),
+(@PATH,13,118.149,-473.105,116.842,0,0,0,100,0),
+(@PATH,14,109.252,-473.191,116.842,0,0,0,100,0),
+(@PATH,15,101.37,-473.117,116.842,0,0,0,100,0),
+(@PATH,16,97.2847,-470.1,116.842,0,0,0,100,0),
+(@PATH,17,93.7787,-464.77,116.842,0,0,0,100,0),
+(@PATH,18,93.1996,-456.881,116.842,0,0,0,100,0),
+(@PATH,19,93.0105,-447.581,113.951,0,0,0,100,0),
+(@PATH,20,92.7964,-437.883,110.923,0,0,0,100,0),
+(@PATH,21,92.9087,-447.432,113.951,0,0,0,100,0),
+(@PATH,22,93.261,-456.932,116.842,0,0,0,100,0),
+(@PATH,23,94.0509,-465.158,116.842,0,0,0,100,0),
+(@PATH,24,97.3934,-470.372,116.842,0,0,0,100,0),
+(@PATH,25,101.615,-473.2,116.842,0,0,0,100,0),
+(@PATH,26,109.96,-473.221,116.842,0,0,0,100,0),
+(@PATH,27,119.431,-472.966,116.842,0,0,0,100,0),
+(@PATH,28,129.714,-473.405,116.844,0,0,0,100,0),
+(@PATH,29,137.726,-471.057,116.836,0,0,0,100,0),
+(@PATH,30,137.759,-466.307,116.807,0,0,0,100,0),
+(@PATH,31,137.438,-458.164,121.874,0,0,0,100,0);
+
+-- Pathing for Goraluk Anvilcrack Entry: 10899
+SET @NPC := @GUID+39;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=145.1794,`position_y`=-242.7074,`position_z`=110.8712 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,140.8718,-243.5903,110.8264,0,0,0,100,0),
+(@PATH,2,140.0336,-244.9933,110.8045,7000,0,@PATH+1,100,0),
+(@PATH,3,140.0312,-247.3475,110.7735,0,0,0,100,0),
+(@PATH,4,142.0183,-248.9341,110.7787,0,0,0,100,0),
+(@PATH,5,144.8816,-250.2995,110.7876,0,0,0,100,0),
+(@PATH,6,148.9328,-246.4266,110.8622,0,0,0,100,0),
+(@PATH,7,152.1183,-245.3219,110.9002,0,0,0,100,0),
+(@PATH,8,159.5392,-248.6294,110.9232,48000,0,@PATH+2,100,0),
+(@PATH,9,155.1528,-243.6318,110.9261,0,0,0,100,0),
+(@PATH,10,148.9452,-243.1658,110.8972,0,0,0,100,0),
+(@PATH,11,147.2209,-242.0178,110.8953,70000,0,@PATH+3,100,0),
+(@PATH,12,144.9547,-246.9615,110.8239,0,0,0,100,0),
+(@PATH,13,147.9653,-244.2648,110.8774,0,0,0,100,0),
+(@PATH,14,149.6411,-243.5608,110.8987,0,0,0,100,0),
+(@PATH,15,147.806,-248.5052,110.8308,0,0,0,100,0),
+(@PATH,16,148.3326,-245.9803,110.8621,0,0,0,100,0),
+(@PATH,17,152.27,-246.4282,110.8896,0,0,0,100,0),
+(@PATH,18,147.7813,-243.522,110.8838,0,0,0,100,0),
+(@PATH,19,148.1721,-245.3295,110.8677,0,0,0,100,0),
+(@PATH,20,149.0415,-247.1999,110.8549,0,0,0,100,0),
+(@PATH,21,150.1232,-244.7369,110.8901,0,0,0,100,0),
+(@PATH,22,145.1794,-242.7074,110.8712,0,0,0,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2,@PATH+3);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,5.759586,89),
+(@PATH+1,3,1,69,1,0,90),
+(@PATH+2,0,30,0,0,0.715585,91),
+(@PATH+2,4,1,133,1,0,92),
+(@PATH+2,39,1,0,1,0,93),
+(@PATH+3,0,30,0,0,1.801312,94),
+(@PATH+3,1,1,28,1,0,95),
+(@PATH+3,22,1,0,1,0,96);
+
+-- Pathing for Rage Talon Captain Entry: 10371
+SET @NPC := @GUID+42;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=17.7263,`position_y`=-263.467,`position_z`=110.943 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,0.073367,-274.516,110.929,0,0,0,100,0),
+(@PATH,2,-0.197867,-320.715,110.939,0,0,0,100,0),
+(@PATH,3,32.9907,-344.613,110.943,0,0,0,100,0),
+(@PATH,4,2.70391,-335.468,110.942,0,0,0,100,0),
+(@PATH,5,21.5374,-315.253,110.945,0,0,0,100,0),
+(@PATH,6,21.8535,-266.793,110.943,0,0,0,100,0),
+(@PATH,7,21.5374,-315.253,110.945,0,0,0,100,0),
+(@PATH,8,2.70391,-335.468,110.942,0,0,0,100,0),
+(@PATH,9,32.9907,-344.613,110.943,0,0,0,100,0),
+(@PATH,10,-0.199047,-320.916,110.942,0,0,0,100,0),
+(@PATH,11,0.073367,-274.516,110.929,0,0,0,100,0),
+(@PATH,12,17.7263,-263.467,110.943,0,0,0,100,0);
+
+-- Pathing for Blackrock Drake Entry: 8964
+SET @NPC := 3343;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7502.985,`position_y`=-1091.508,`position_z`=286.4399 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-7526.111,-1065.07,290.0508,0,0,0,100,0),
+(@PATH,2,-7528.773,-1060.98,289.8008,0,0,0,100,0),
+(@PATH,3,-7554.438,-1032.648,293.9675,0,0,0,100,0),
+(@PATH,4,-7569.052,-1024.164,297.7729,0,0,0,100,0),
+(@PATH,5,-7603.773,-1019.187,303.3568,0,0,0,100,0),
+(@PATH,6,-7625.236,-1030.118,300.6064,0,0,0,100,0),
+(@PATH,7,-7652.77,-1045.974,291.5509,0,0,0,100,0),
+(@PATH,8,-7670.932,-1065.009,280.1344,0,0,0,100,0),
+(@PATH,9,-7677.66,-1074.487,277.8844,0,0,0,100,0),
+(@PATH,10,-7685.643,-1097.263,280.412,0,0,0,100,0),
+(@PATH,11,-7684.969,-1144.9,293.829,0,0,0,100,0),
+(@PATH,12,-7666.268,-1177.758,297.051,0,0,0,100,0),
+(@PATH,13,-7643.656,-1196.774,297.273,0,0,0,100,0),
+(@PATH,14,-7634.542,-1201.614,295.5235,0,0,0,100,0),
+(@PATH,15,-7597.882,-1211.088,294.7454,0,0,0,100,0),
+(@PATH,16,-7560.959,-1205.237,290.3565,0,0,0,100,0),
+(@PATH,17,-7536.037,-1191.708,287.6343,0,0,0,100,0),
+(@PATH,18,-7519.03,-1173.085,287.1065,0,0,0,100,0),
+(@PATH,19,-7502.939,-1142.821,286.4399,0,0,0,100,0),
+(@PATH,20,-7499.304,-1120.659,286.4399,0,0,0,100,0),
+(@PATH,21,-7502.985,-1091.508,286.4399,0,0,0,100,0);
+
+-- Pathing for Blackrock Drake Entry: 8964
+SET @NPC := 3344;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7587.611,`position_y`=-1127.057,`position_z`=299.0391 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`) VALUES (@NPC,@PATH,1,0);
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-7595.692,-1122.375,300.0919,0,0,0,100,0),
+(@PATH,2,-7602.509,-1119.911,298.7615,0,0,0,100,0),
+(@PATH,3,-7623.113,-1121.951,299.8724,0,0,0,100,0),
+(@PATH,4,-7624.854,-1116.178,298.9836,0,0,0,100,0),
+(@PATH,5,-7623.076,-1109.361,301.2891,0,0,0,100,0),
+(@PATH,6,-7621.203,-1101.338,301.6222,0,0,0,100,0),
+(@PATH,7,-7617.672,-1097.37,302.9557,0,0,0,100,0),
+(@PATH,8,-7612.521,-1091.614,305.2333,0,0,0,100,0),
+(@PATH,9,-7603.752,-1088.397,307.15,0,0,0,100,0),
+(@PATH,10,-7595.697,-1086.253,309.7056,0,0,0,100,0),
+(@PATH,11,-7584.765,-1084.863,313.5945,0,0,0,100,0),
+(@PATH,12,-7573.741,-1089.98,318.4,0,0,0,100,0),
+(@PATH,13,-7563.752,-1095.654,321.1225,0,0,0,100,0),
+(@PATH,14,-7561.293,-1111.069,323.0945,0,0,0,100,0),
+(@PATH,15,-7562.622,-1134.871,324.7891,0,0,0,100,0),
+(@PATH,16,-7575.259,-1146.927,321.928,0,0,0,100,0),
+(@PATH,17,-7587.246,-1150.965,322.5114,0,0,0,100,0),
+(@PATH,18,-7599.556,-1147.009,320.2891,0,0,0,100,0),
+(@PATH,19,-7609.301,-1143.611,316.2057,0,0,0,100,0),
+(@PATH,20,-7634.01,-1120.37,312.1778,0,0,0,100,0),
+(@PATH,21,-7622.606,-1101.056,311.3446,0,0,0,100,0),
+(@PATH,22,-7614.432,-1092.255,305.6779,0,0,0,100,0),
+(@PATH,23,-7582.061,-1084.941,298.7889,0,0,0,100,0),
+(@PATH,24,-7562.621,-1112.578,307.4555,0,0,0,100,0),
+(@PATH,25,-7567.333,-1126.35,304.3445,0,0,0,100,0),
+(@PATH,26,-7587.611,-1127.057,299.0391,0,0,0,100,0);
+
+-- Pathing for Scarshield Legionnaire Entry: 9097
+SET @NPC := @GUID+228;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=70.94958,`position_y`=-282.0711,`position_z`=60.60775 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,72.5072,-281.7826,60.62373,0,0,0,100,0),
+(@PATH,2,87.12473,-283.3365,60.60862,29000,0,@PATH+1,100,0),
+(@PATH,3,86.74077,-283.0492,60.61073,0,0,0,100,0),
+(@PATH,4,70.94958,-282.0711,60.60775,24000,0,@PATH+2,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,2,2,74,1,0,97),
+(@PATH+1,2,1,7,0,0,98),
+(@PATH+1,24,2,74,0,0,99),
+(@PATH+2,0,30,0,0,3.892084,100),
+(@PATH+2,7,1,69,1,0,101),
+(@PATH+2,16,1,0,1,0,102);
+
+-- Pathing for Scarshield Legionnaire Entry: 9097
+SET @NPC := @GUID+209;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=53.45955,`position_y`=-325.36,`position_z`=53.91605 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,41.51676,-327.2762,53.74633,0,0,0,100,0),
+(@PATH,2,34.57693,-329.2669,53.62961,0,0,0,100,0),
+(@PATH,3,22.06219,-329.2139,48.75629,0,0,0,100,0),
+(@PATH,4,18.71977,-332.48,48.72622,0,0,0,100,0),
+(@PATH,5,18.61024,-346.3583,48.6756,0,0,0,100,0),
+(@PATH,6,20.25173,-349.2039,48.67309,0,0,0,100,0),
+(@PATH,7,35.13033,-349.1511,48.67545,0,0,0,100,0),
+(@PATH,8,37.16372,-352.3886,48.67825,0,0,0,100,0),
+(@PATH,9,37.26665,-364.0914,48.65669,0,0,0,100,0),
+(@PATH,10,37.16372,-352.3886,48.67825,0,0,0,100,0),
+(@PATH,11,35.13033,-349.1511,48.67545,0,0,0,100,0),
+(@PATH,12,20.25173,-349.2039,48.67309,0,0,0,100,0),
+(@PATH,13,18.61024,-346.3583,48.6756,0,0,0,100,0),
+(@PATH,14,18.71977,-332.48,48.72622,0,0,0,100,0),
+(@PATH,15,22.06219,-329.2139,48.75629,0,0,0,100,0),
+(@PATH,16,34.57693,-329.2669,53.62961,0,0,0,100,0),
+(@PATH,17,41.51676,-327.2762,53.74633,0,0,0,100,0),
+(@PATH,18,53.45955,-325.36,53.91605,0,0,0,100,0);
+
+-- Pathing for Scarshield Legionnaire Entry: 9097
+SET @NPC := @GUID+229;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=81.97402,`position_y`=-288.0753,`position_z`=60.66125 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,88.13084,-288.4329,60.61533,0,0,0,100,0),
+(@PATH,2,93.48189,-291.8687,60.63227,0,0,0,100,0),
+(@PATH,3,95.94733,-296.9316,60.66517,0,0,0,100,0),
+(@PATH,4,95.94772,-309.7263,65.39042,0,0,0,100,0),
+(@PATH,5,94.99308,-314.9491,65.47927,0,0,0,100,0),
+(@PATH,6,87.00089,-316.9617,65.48379,0,0,0,100,0),
+(@PATH,7,71.71636,-319.5778,65.46734,0,0,0,100,0),
+(@PATH,8,65.58628,-320.8983,65.45923,0,0,0,100,0),
+(@PATH,9,64.69189,-327.0649,65.46348,0,0,0,100,0),
+(@PATH,10,64.73603,-340.4908,60.70201,0,0,0,100,0),
+(@PATH,11,66.16424,-345.6102,60.70203,0,0,0,100,0),
+(@PATH,12,71.37296,-346.4238,60.70203,0,0,0,100,0),
+(@PATH,13,75.15958,-346.2384,60.70203,0,0,0,100,0),
+(@PATH,14,83.80564,-346.3136,60.70203,0,0,0,100,0),
+(@PATH,15,91.50565,-346.1702,60.70203,0,0,0,100,0),
+(@PATH,16,94.48775,-344.4582,60.70203,0,0,0,100,0),
+(@PATH,17,95.49223,-340.7823,60.70203,0,0,0,100,0),
+(@PATH,18,95.32813,-327.5041,65.46348,0,0,0,100,0),
+(@PATH,19,94.68663,-322.0191,65.46594,0,0,0,100,0),
+(@PATH,20,89.48792,-319.0262,65.4938,0,0,0,100,0),
+(@PATH,21,80.78517,-319.4615,65.47144,0,0,0,100,0),
+(@PATH,22,70.61723,-318.8349,65.48348,0,0,0,100,0),
+(@PATH,23,65.92691,-314.6129,65.46348,0,0,0,100,0),
+(@PATH,24,64.53401,-310.319,65.46348,0,0,0,100,0),
+(@PATH,25,64.13761,-297.2044,60.74208,0,0,0,100,0),
+(@PATH,26,67.14284,-292.4547,60.63996,0,0,0,100,0),
+(@PATH,27,74.20583,-289.4101,60.64116,0,0,0,100,0),
+(@PATH,28,81.97402,-288.0753,60.66125,0,0,0,100,0);
+
+-- Pathing for Scarshield Legionnaire Entry: 9097
+SET @NPC := @GUID+230;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=83.98484,`position_y`=-287.0403,`position_z`=60.643 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,89.93808,-286.1351,60.59507,0,0,0,100,0),
+(@PATH,2,93.29991,-289.3597,60.59763,0,0,0,100,0),
+(@PATH,3,96.0648,-291.1504,60.62643,0,0,0,100,0),
+(@PATH,4,97.3805,-295.3065,60.67328,0,0,0,100,0),
+(@PATH,5,97.94749,-302.046,62.42866,0,0,0,100,0),
+(@PATH,6,97.94783,-313.342,65.46348,0,0,0,100,0),
+(@PATH,7,96.72861,-316.5773,65.48706,0,0,0,100,0),
+(@PATH,8,91.31343,-317.9382,65.49011,0,0,0,100,0),
+(@PATH,9,68.48672,-322.1597,65.45495,0,0,0,100,0),
+(@PATH,10,65.65896,-322.9286,65.45052,0,0,0,100,0),
+(@PATH,11,66.58692,-327.4106,65.46348,0,0,0,100,0),
+(@PATH,12,66.21835,-330.4742,64.56249,0,0,0,100,0),
+(@PATH,13,66.71193,-333.1539,63.52972,0,0,0,100,0),
+(@PATH,14,66.74886,-344.3894,60.70203,0,0,0,100,0),
+(@PATH,15,94.72881,-344.1098,60.70203,0,0,0,100,0),
+(@PATH,16,95.94814,-341.3136,60.70203,0,0,0,100,0),
+(@PATH,17,94.90443,-337.6124,61.81128,0,0,0,100,0),
+(@PATH,18,95.29044,-329.2947,65.01956,0,0,0,100,0),
+(@PATH,19,93.29169,-324.5692,65.46348,0,0,0,100,0),
+(@PATH,20,92.33022,-319.0261,65.49524,0,0,0,100,0),
+(@PATH,21,88.11071,-320.541,65.4697,0,0,0,100,0),
+(@PATH,22,77.12846,-321.647,65.46059,0,0,0,100,0),
+(@PATH,23,73.90438,-321.0413,65.46191,0,0,0,100,0),
+(@PATH,24,70.89841,-320.856,65.46152,0,0,0,100,0),
+(@PATH,25,67.89243,-320.6708,65.46112,0,0,0,100,0),
+(@PATH,26,62.8699,-314.552,65.46348,0,0,0,100,0),
+(@PATH,27,62.38148,-310.165,65.46348,0,0,0,100,0),
+(@PATH,28,62.16359,-298.0943,60.90481,0,0,0,100,0),
+(@PATH,29,62.07857,-295.2815,60.75649,0,0,0,100,0),
+(@PATH,30,66.51885,-289.6947,60.65805,0,0,0,100,0),
+(@PATH,31,71.19937,-288.5282,60.61031,0,0,0,100,0),
+(@PATH,32,76.71995,-286.1484,60.66695,0,0,0,100,0),
+(@PATH,33,83.98484,-287.0403,60.643,0,0,0,100,0);
+
+-- Pathing for Scarshield Spellbinder Entry: 9098
+SET @NPC := @GUID+252;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=36.89285,`position_y`=-331.2767,`position_z`=53.68202 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,39.96936,-329.8007,53.7379,0,0,0,100,0),
+(@PATH,2,57.18673,-326.7872,53.91625,0,0,0,100,0),
+(@PATH,3,34.34272,-331.2659,53.48465,0,0,0,100,0),
+(@PATH,4,26.80801,-331.241,48.74844,0,0,0,100,0),
+(@PATH,5,23.99778,-331.2221,48.75055,0,0,0,100,0),
+(@PATH,6,18.19567,-331.1975,48.73712,0,0,0,100,0),
+(@PATH,7,18.45785,-335.4669,48.70008,0,0,0,100,0),
+(@PATH,8,20.61245,-337.6364,48.681,0,0,0,100,0),
+(@PATH,9,20.58323,-349.7892,48.67257,0,0,0,100,0),
+(@PATH,10,23.55131,-350.9213,48.67374,0,0,0,100,0),
+(@PATH,11,26.39461,-347.1821,48.68155,0,0,0,100,0),
+(@PATH,12,38.42376,-347.1394,48.67081,0,0,0,100,0),
+(@PATH,13,39.21199,-357.8676,48.65726,0,0,0,100,0),
+(@PATH,14,39.29136,-366.8922,48.65531,0,0,0,100,0),
+(@PATH,15,39.13438,-349.0444,48.67277,0,0,0,100,0),
+(@PATH,16,35.49154,-345.9659,48.6712,0,0,0,100,0),
+(@PATH,17,29.60406,-347.1707,48.68155,0,0,0,100,0),
+(@PATH,18,17.56905,-347.2134,48.6734,0,0,0,100,0),
+(@PATH,19,20.65288,-340.964,48.6903,0,0,0,100,0),
+(@PATH,20,20.74783,-328.9321,48.7581,0,0,0,100,0),
+(@PATH,21,24.81668,-329.3186,48.77163,0,0,0,100,0),
+(@PATH,22,28.94844,-331.2431,50.09388,0,0,0,100,0),
+(@PATH,23,31.78614,-331.2551,51.87762,0,0,0,100,0),
+(@PATH,24,34.34272,-331.2659,53.48465,0,0,0,100,0),
+(@PATH,25,36.89285,-331.2767,53.68202,0,0,0,100,0);
diff --git a/sql/updates/world/2011_12_17_00_world_gameobject.sql b/sql/updates/world/2011_12_17_00_world_gameobject.sql
new file mode 100644
index 00000000000..98752a1b7ec
--- /dev/null
+++ b/sql/updates/world/2011_12_17_00_world_gameobject.sql
@@ -0,0 +1,384 @@
+-- Add missing Go spawns for UBRS & LBRS
+SET @OGUID := 87602; -- 261 required
+DELETE FROM `gameobject` WHERE `map`=229 AND `id` IN (153464,175124,175194,175195,175196,175197,175198,175199,175200,175266,175267,175268,175269,175270,175271,175272,175706,175244,175187,175153,175705,175185,175186,164726,
+164726,175382,175385,175528,175529,175530,175531,175532,175533,175946,175947,175970,176447,176448,176449,176450,176451,176452,136950,136952,136955,176459,176460,176461,176462,176463,136922,136923,136925,136926,136927,
+136928,136929,136930,136931,136932,136933,136934,136935,136936,136937,136938,136939,136940,136941,136942,136943,136944,136945,136946,136947,136948,136949,136951,136954,136957,136959,136961,136962,136963,136964,153469,
+164725,175334,175571,175584,175588,175606,175607,175608,175609,175886,175949,175950,176089,176090,176425,176426,176427,176428,176429,176430,176431,176432,176433,176434,176435,176436,176437,176438,176439,176440,176441,
+176442,176443,176444,176445,176446,176454,176455,176456,176457,176458);
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@OGUID,175124,229,1,1,100.579681,-312.488953,91.4455,0.122172989,0,0,0,0,120,0,1),
+(@OGUID+1,175124,229,1,1,101.516693,-311.471344,91.4455,-1.58824873,0,0,0,0,120,0,1),
+(@OGUID+2,175124,229,1,1,102.414017,-304.376343,91.4466248,0.0174524616,0,0,0,0,120,0,1),
+(@OGUID+3,175124,229,1,1,104.212967,-289.411041,91.47319,1.50098288,0,0,0,0,120,0,1),
+(@OGUID+4,175124,229,1,1,104.316406,-302.841278,91.47408,3.07176614,0,0,0,0,120,0,1),
+(@OGUID+5,175124,229,1,1,104.403542,-299.438263,91.47574,0.6806767,0,0,0,0,120,0,1),
+(@OGUID+6,175124,229,1,1,104.601669,-287.9975,91.47882,-1.97221982,0,0,0,0,120,0,1),
+(@OGUID+7,175124,229,1,1,104.926949,-286.137817,91.48353,1.448622,0,0,0,0,120,0,1),
+(@OGUID+8,175124,229,1,1,105.029182,-300.911469,91.4845352,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+9,175124,229,1,1,106.199173,-299.793121,91.50144,-1.20427728,0,0,0,0,120,0,1),
+(@OGUID+10,175124,229,1,1,106.420288,-281.429016,91.50514,-0.593412,0,0,0,0,120,0,1),
+(@OGUID+11,175124,229,1,1,106.603729,-283.775574,91.5078,1.954769,0,0,0,0,120,0,1),
+(@OGUID+12,175124,229,1,1,107.189377,-287.659851,91.51627,0.7504908,0,0,0,0,120,0,1),
+(@OGUID+13,175124,229,1,1,107.418739,-282.511749,91.5196,-2.19911456,0,0,0,0,120,0,1),
+(@OGUID+14,175124,229,1,1,107.927856,-299.94812,91.52648,2.00712848,0,0,0,0,120,0,1),
+(@OGUID+15,175124,229,1,1,112.297363,-390.177521,110.862892,-0.122172989,0,0,0,0,120,0,1),
+(@OGUID+16,175124,229,1,1,113.017937,-451.803925,110.862892,2.82742977,0,0,0,0,120,0,1),
+(@OGUID+17,175124,229,1,1,113.929672,-389.215057,110.862892,-0.785396755,0,0,0,0,120,0,1),
+(@OGUID+18,175124,229,1,1,114.805519,-450.286,110.862892,0.767943859,0,0,0,0,120,0,1),
+(@OGUID+19,175124,229,1,1,115.410751,-389.923,110.862892,-0.8377574,0,0,0,0,120,0,1),
+(@OGUID+20,175124,229,1,1,115.812012,-453.056946,110.862892,-1.98967242,0,0,0,0,120,0,1),
+(@OGUID+21,175124,229,1,1,186.987213,-389.476227,110.862892,-1.53588951,0,0,0,0,120,0,1),
+(@OGUID+22,175124,229,1,1,187.74115,-387.874451,110.862892,1.134463,0,0,0,0,120,0,1),
+(@OGUID+23,175124,229,1,1,188.002533,-452.5383,110.862892,1.34390128,0,0,0,0,120,0,1),
+(@OGUID+24,175124,229,1,1,188.12558,-450.820068,110.862892,1.48352814,0,0,0,0,120,0,1),
+(@OGUID+25,175124,229,1,1,189.080276,-388.61087,110.862892,-0.296705216,0,0,0,0,120,0,1),
+(@OGUID+26,175124,229,1,1,189.834488,-451.310455,110.862892,-2.86233544,0,0,0,0,120,0,1),
+(@OGUID+27,175124,229,1,1,197.826462,-407.929718,110.885162,-2.16420579,0,0,0,0,120,0,1),
+(@OGUID+28,175124,229,1,1,197.889175,-409.4169,110.885162,-1.51843619,0,0,0,0,120,0,1),
+(@OGUID+29,175124,229,1,1,198.345856,-432.6916,110.885071,-2.0594883,0,0,0,0,120,0,1),
+(@OGUID+30,175124,229,1,1,199.2812,-431.4338,110.885071,-2.44346023,0,0,0,0,120,0,1),
+(@OGUID+31,175124,229,1,1,199.588242,-433.8074,110.885071,1.11700928,0,0,0,0,120,0,1),
+(@OGUID+32,175124,229,1,1,199.616272,-410.271881,110.885689,-2.932139,0,0,0,0,120,0,1),
+(@OGUID+33,175124,229,1,1,200.124588,-407.845734,110.885162,2.879789,0,0,0,0,120,0,1),
+(@OGUID+34,175124,229,1,1,200.719711,-431.708069,110.885071,1.7802341,0,0,0,0,120,0,1),
+(@OGUID+35,175124,229,1,1,200.743408,-409.405762,110.885162,-1.37880921,0,0,0,0,120,0,1),
+(@OGUID+36,175124,229,1,1,201.846771,-432.208649,110.885483,1.448622,0,0,0,0,120,0,1),
+(@OGUID+37,175124,229,1,1,202.572159,-392.328,111.153641,-1.36135614,0,0,0,0,120,0,1),
+(@OGUID+38,175124,229,1,1,202.891327,-394.92514,111.134247,-2.80997539,0,0,0,0,120,0,1),
+(@OGUID+39,175124,229,1,1,203.082092,-401.453033,111.08667,-1.06464958,0,0,0,0,120,0,1),
+(@OGUID+40,175124,229,1,1,203.280655,-398.871735,111.104973,2.86233544,0,0,0,0,120,0,1),
+(@OGUID+41,175124,229,1,1,203.856339,-403.369232,111.071358,-1.15191638,0,0,0,0,120,0,1),
+(@OGUID+42,175124,229,1,1,204.114517,-393.5981,111.141563,-0.6457717,0,0,0,0,120,0,1),
+(@OGUID+43,175124,229,1,1,204.389526,-395.494537,111.127327,-1.2915417,0,0,0,0,120,0,1),
+(@OGUID+44,175124,229,1,1,204.402267,-400.3069,111.092491,-2.19911456,0,0,0,0,120,0,1),
+(@OGUID+45,175124,229,1,1,205.198654,-401.573273,111.081833,0.261798173,0,0,0,0,120,0,1),
+(@OGUID+46,175124,229,1,1,206.9045,-419.7901,110.925056,-0.7504908,0,0,0,0,120,0,1),
+(@OGUID+47,175124,229,1,1,207.266647,-434.7158,110.886642,0.226892471,0,0,0,0,120,0,1),
+(@OGUID+48,175124,229,1,1,207.935486,-420.0201,110.930283,-0.174532115,0,0,0,0,120,0,1),
+(@OGUID+49,175124,229,1,1,208.006454,-422.068726,110.929123,-1.51843619,0,0,0,0,120,0,1),
+(@OGUID+50,175124,229,1,1,208.166092,-418.3611,110.932716,2.21656513,0,0,0,0,120,0,1),
+(@OGUID+51,175124,229,1,1,208.798172,-433.633331,110.888489,-2.82742977,0,0,0,0,120,0,1),
+(@OGUID+52,175124,229,1,1,209.071991,-435.188141,110.884933,-2.94959545,0,0,0,0,120,0,1),
+(@OGUID+53,175124,229,1,1,209.28624,-391.269562,111.14872,-2.94959545,0,0,0,0,120,0,1),
+(@OGUID+54,175124,229,1,1,209.562531,-419.839661,110.938927,-0.5410506,0,0,0,0,120,0,1),
+(@OGUID+55,175124,229,1,1,210.485046,-393.288025,111.131866,-0.122172989,0,0,0,0,120,0,1),
+(@OGUID+56,175124,229,1,1,210.653778,-391.8297,111.142113,1.91986156,0,0,0,0,120,0,1),
+(@OGUID+57,175124,229,1,1,211.61734,-434.677,110.887962,-1.55334139,0,0,0,0,120,0,1),
+(@OGUID+58,175124,229,1,1,211.90686,-420.1357,110.945183,1.93731225,0,0,0,0,120,0,1),
+(@OGUID+59,175124,229,1,1,212.066559,-392.1727,111.136993,-0.5585039,0,0,0,0,120,0,1),
+(@OGUID+60,175124,229,1,1,212.458679,-418.521362,110.9529,2.98449826,0,0,0,0,120,0,1),
+(@OGUID+61,175124,229,1,1,212.63623,-432.306061,110.89183,-0.174532115,0,0,0,0,120,0,1),
+(@OGUID+62,175124,229,1,1,213.310959,-410.503100,110.962784,2.146753,0,0,0,0,120,0,1),
+(@OGUID+63,175124,229,1,1,213.576500,-419.532900,110.949500,0.628317,0,0,0,0,120,0,1),
+(@OGUID+64,175124,229,1,1,214.320190,-408.951233,110.967888,2.967041,0,0,0,0,120,0,1),
+(@OGUID+65,175124,229,1,1,217.875015,-392.086517,111.126740,0.907570,0,0,0,0,120,0,1),
+(@OGUID+66,175124,229,1,1,218.954147,-392.578674,111.121162,1.919862,0,0,0,0,120,0,1),
+(@OGUID+67,175124,229,1,1,219.678818,-393.405100,111.113823,-1.989672,0,0,0,0,120,0,1),
+(@OGUID+68,175124,229,1,1,219.995500,-399.617200,111.068283,-2.617989,0,0,0,0,120,0,1),
+(@OGUID+69,175124,229,1,1,220.161682,-421.224945,110.948463,-1.762782,0,0,0,0,120,0,1),
+(@OGUID+70,175124,229,1,1,220.172836,-391.630066,111.125732,1.361356,0,0,0,0,120,0,1),
+(@OGUID+71,175124,229,1,1,220.181274,-401.405100,111.055000,-1.989672,0,0,0,0,120,0,1),
+(@OGUID+72,175124,229,1,1,220.601800,-418.446900,110.961227,-1.221729,0,0,0,0,120,0,1),
+(@OGUID+73,175124,229,1,1,220.823685,-398.356600,111.075851,1.989672,0,0,0,0,120,0,1),
+(@OGUID+74,175124,229,1,1,220.835770,-393.648834,111.109894,-1.972220,0,0,0,0,120,0,1),
+(@OGUID+75,175124,229,1,1,220.869781,-411.346252,110.993027,-2.478367,0,0,0,0,120,0,1),
+(@OGUID+76,175124,229,1,1,221.281387,-400.066300,111.062630,0.977383,0,0,0,0,120,0,1),
+(@OGUID+77,175124,229,1,1,221.347992,-409.122284,111.003387,-2.076939,0,0,0,0,120,0,1),
+(@OGUID+78,175124,229,1,1,221.701370,-420.444366,110.953438,1.640607,0,0,0,0,120,0,1),
+(@OGUID+79,175124,229,1,1,222.093460,-432.249939,110.901382,0.000000,0,0,0,0,120,0,1),
+(@OGUID+80,175124,229,1,1,222.151962,-411.776367,110.992393,-3.071766,0,0,0,0,120,0,1),
+(@OGUID+81,175124,229,1,1,222.218918,-428.907776,110.916351,2.792518,0,0,0,0,120,0,1),
+(@OGUID+82,175124,229,1,1,222.736313,-410.476624,110.998500,-1.204277,0,0,0,0,120,0,1),
+(@OGUID+83,175124,229,1,1,222.815536,-430.970551,110.907448,-0.261798,0,0,0,0,120,0,1),
+(@OGUID+84,175124,229,1,1,223.579010,-419.323151,110.959229,-1.884953,0,0,0,0,120,0,1),
+(@OGUID+85,175124,229,1,1,223.816528,-429.410300,110.914421,-0.174532,0,0,0,0,120,0,1),
+(@OGUID+86,175124,229,1,1,223.977676,-432.850037,110.899147,1.884953,0,0,0,0,120,0,1),
+(@OGUID+87,175124,229,1,1,224.212540,-412.156647,110.991089,1.588249,0,0,0,0,120,0,1),
+(@OGUID+88,175124,229,1,1,48.812670,-337.076050,91.530170,2.268925,0,0,0,0,120,0,1),
+(@OGUID+89,175124,229,1,1,50.171127,-316.651550,91.530350,-2.426003,0,0,0,0,120,0,1),
+(@OGUID+90,175124,229,1,1,51.266464,-338.088400,91.541910,-1.989672,0,0,0,0,120,0,1),
+(@OGUID+91,175124,229,1,1,51.575382,-315.041870,91.522530,2.146753,0,0,0,0,120,0,1),
+(@OGUID+92,175124,229,1,1,51.863476,-316.613831,91.520930,-0.593412,0,0,0,0,120,0,1),
+(@OGUID+93,175124,229,1,1,54.265644,-255.434738,96.858940,1.343901,0,0,0,0,120,0,1),
+(@OGUID+94,175124,229,1,1,54.572220,-336.735138,91.529305,-1.134463,0,0,0,0,120,0,1),
+(@OGUID+95,175124,229,1,1,55.353077,-249.984161,97.048740,-2.652894,0,0,0,0,120,0,1),
+(@OGUID+96,175124,229,1,1,55.441975,-254.350900,97.197754,0.541051,0,0,0,0,120,0,1),
+(@OGUID+97,175124,229,1,1,56.761517,-332.325000,91.465240,-1.064650,0,0,0,0,120,0,1),
+(@OGUID+98,175124,229,1,1,56.851460,-253.342600,96.962560,-0.087266,0,0,0,0,120,0,1),
+(@OGUID+99,175124,229,1,1,56.876007,-255.377335,96.968940,0.261798,0,0,0,0,120,0,1),
+(@OGUID+100,175124,229,1,1,57.859043,-336.093262,91.523320,-2.234018,0,0,0,0,120,0,1),
+(@OGUID+101,175124,229,1,1,57.860306,-256.662100,96.739450,-1.012289,0,0,0,0,120,0,1),
+(@OGUID+102,175124,229,1,1,58.117460,-253.946426,96.880950,0.506145,0,0,0,0,120,0,1),
+(@OGUID+103,175124,229,1,1,58.817844,-334.106964,91.504810,0.977383,0,0,0,0,120,0,1),
+(@OGUID+104,175124,229,1,1,59.025590,-271.140137,93.636284,-2.495818,0,0,0,0,120,0,1),
+(@OGUID+105,175124,229,1,1,59.168900,-255.102982,96.815750,1.082103,0,0,0,0,120,0,1),
+(@OGUID+106,175124,229,1,1,59.192165,-317.294067,91.480150,-0.191985,0,0,0,0,120,0,1),
+(@OGUID+107,175124,229,1,1,59.330967,-332.230164,91.472916,-1.640610,0,0,0,0,120,0,1),
+(@OGUID+108,175124,229,1,1,59.419060,-337.406500,91.535560,-0.471239,0,0,0,0,120,0,1),
+(@OGUID+109,175124,229,1,1,60.185110,-270.196200,93.681820,-2.268925,0,0,0,0,120,0,1),
+(@OGUID+110,175124,229,1,1,60.351400,-312.296539,91.522070,1.134463,0,0,0,0,120,0,1),
+(@OGUID+111,175124,229,1,1,60.664970,-268.136017,93.601850,2.356195,0,0,0,0,120,0,1),
+(@OGUID+112,175124,229,1,1,61.012710,-315.652800,91.484780,0.733038,0,0,0,0,120,0,1),
+(@OGUID+113,175124,229,1,1,61.056700,-313.921875,91.505030,-0.680679,0,0,0,0,120,0,1),
+(@OGUID+114,175124,229,1,1,61.321583,-272.012665,93.600870,-1.151916,0,0,0,0,120,0,1),
+(@OGUID+115,175124,229,1,1,62.495476,-334.331300,91.506905,-0.349065,0,0,0,0,120,0,1),
+(@OGUID+116,175124,229,1,1,63.307910,-317.114000,91.471550,-3.089183,0,0,0,0,120,0,1),
+(@OGUID+117,175124,229,1,1,63.571682,-336.638200,91.528400,0.069812,0,0,0,0,120,0,1),
+(@OGUID+118,175124,229,1,1,64.204040,-268.474300,93.245410,-1.570796,0,0,0,0,120,0,1),
+(@OGUID+119,175124,229,1,1,64.925964,-317.059448,91.461044,1.780234,0,0,0,0,120,0,1),
+(@OGUID+120,175124,229,1,1,65.296530,-267.929600,93.076380,0.349065,0,0,0,0,120,0,1),
+(@OGUID+121,175124,229,1,1,65.583550,-305.104828,91.485280,1.099556,0,0,0,0,120,0,1),
+(@OGUID+122,175124,229,1,1,65.987790,-303.633759,91.469400,-2.617989,0,0,0,0,120,0,1),
+(@OGUID+123,175124,229,1,1,66.801750,-302.481100,91.451454,3.141593,0,0,0,0,120,0,1),
+(@OGUID+124,175124,229,1,1,68.121820,-302.416382,91.438910,3.124123,0,0,0,0,120,0,1),
+(@OGUID+125,175124,229,1,1,68.251770,-314.874634,91.433460,1.361356,0,0,0,0,120,0,1),
+(@OGUID+126,175124,229,1,1,68.728424,-307.073029,91.450460,0.994837,0,0,0,0,120,0,1),
+(@OGUID+127,175124,229,1,1,69.459880,-303.626923,91.437965,-1.396262,0,0,0,0,120,0,1),
+(@OGUID+128,175124,229,1,1,69.691370,-332.161224,91.486680,1.134463,0,0,0,0,120,0,1),
+(@OGUID+129,175124,229,1,1,69.930570,-326.639800,91.458800,2.897245,0,0,0,0,120,0,1),
+(@OGUID+130,175124,229,1,1,69.991165,-329.339233,91.465836,-0.401425,0,0,0,0,120,0,1),
+(@OGUID+131,175124,229,1,1,70.507195,-334.149000,91.505200,0.610864,0,0,0,0,120,0,1),
+(@OGUID+132,175124,229,1,1,70.929120,-304.969635,91.431526,3.036838,0,0,0,0,120,0,1),
+(@OGUID+133,175124,229,1,1,71.711500,-306.066100,91.418205,-1.518436,0,0,0,0,120,0,1),
+(@OGUID+134,175124,229,1,1,71.794900,-278.164948,92.456700,2.234018,0,0,0,0,120,0,1),
+(@OGUID+135,175124,229,1,1,72.002580,-328.391968,91.461020,-1.431168,0,0,0,0,120,0,1),
+(@OGUID+136,175124,229,1,1,72.026024,-331.224518,91.472250,-2.687807,0,0,0,0,120,0,1),
+(@OGUID+137,175124,229,1,1,72.053100,-325.809235,91.454160,1.431168,0,0,0,0,120,0,1),
+(@OGUID+138,175124,229,1,1,72.068990,-276.632355,92.298294,2.617989,0,0,0,0,120,0,1),
+(@OGUID+139,175124,229,1,1,72.141040,-285.905670,91.945180,-1.012289,0,0,0,0,120,0,1),
+(@OGUID+140,175124,229,1,1,73.133210,-306.736481,91.412690,-0.645772,0,0,0,0,120,0,1),
+(@OGUID+141,175124,229,1,1,73.545160,-324.155731,91.448090,0.453785,0,0,0,0,120,0,1),
+(@OGUID+142,175124,229,1,1,74.038910,-287.330600,91.448830,-1.012289,0,0,0,0,120,0,1),
+(@OGUID+143,175124,229,1,1,74.100430,-291.836700,91.442010,-0.401425,0,0,0,0,120,0,1),
+(@OGUID+144,175124,229,1,1,74.206830,-273.590729,91.642830,-1.396262,0,0,0,0,120,0,1),
+(@OGUID+145,175124,229,1,1,74.449070,-307.402924,91.414390,-0.733038,0,0,0,0,120,0,1),
+(@OGUID+146,175124,229,1,1,74.752180,-275.849121,91.650276,0.959930,0,0,0,0,120,0,1),
+(@OGUID+147,175124,229,1,1,75.177895,-292.906250,91.444630,1.989672,0,0,0,0,120,0,1),
+(@OGUID+148,175124,229,1,1,76.242165,-277.381100,91.473785,-0.785397,0,0,0,0,120,0,1),
+(@OGUID+149,175124,229,1,1,76.649890,-263.575470,91.480260,0.767944,0,0,0,0,120,0,1),
+(@OGUID+150,175124,229,1,1,76.864716,-275.632080,91.477770,2.321287,0,0,0,0,120,0,1),
+(@OGUID+151,175124,229,1,1,77.275060,-262.142944,91.479930,-1.256636,0,0,0,0,120,0,1),
+(@OGUID+152,175124,229,1,1,77.482170,-292.279968,91.447014,-0.087266,0,0,0,0,120,0,1),
+(@OGUID+153,175124,229,1,1,77.701280,-295.117300,91.443660,-1.117009,0,0,0,0,120,0,1),
+(@OGUID+154,175124,229,1,1,78.590004,-266.496338,91.474560,2.007128,0,0,0,0,120,0,1),
+(@OGUID+155,175124,229,1,1,79.001236,-331.653259,91.471030,-2.338740,0,0,0,0,120,0,1),
+(@OGUID+156,175124,229,1,1,79.072030,-328.432700,91.452940,-0.541051,0,0,0,0,120,0,1),
+(@OGUID+157,175124,229,1,1,79.206190,-262.497070,91.475750,-2.129301,0,0,0,0,120,0,1),
+(@OGUID+158,175124,229,1,1,79.568920,-291.473877,91.449265,-0.174532,0,0,0,0,120,0,1),
+(@OGUID+159,175124,229,1,1,79.786570,-325.953278,91.445595,1.605702,0,0,0,0,120,0,1),
+(@OGUID+160,175124,229,1,1,80.484150,-316.636383,91.437960,-0.855211,0,0,0,0,120,0,1),
+(@OGUID+161,175124,229,1,1,80.788110,-253.589417,91.475460,-2.146753,0,0,0,0,120,0,1),
+(@OGUID+162,175124,229,1,1,80.916214,-328.544200,91.451100,-2.094393,0,0,0,0,120,0,1),
+(@OGUID+163,175124,229,1,1,81.006350,-332.454468,91.481350,-2.513274,0,0,0,0,120,0,1),
+(@OGUID+164,175124,229,1,1,81.010410,-264.958038,91.470480,2.757613,0,0,0,0,120,0,1),
+(@OGUID+165,175124,229,1,1,81.071785,-330.128571,91.455090,-1.029743,0,0,0,0,120,0,1),
+(@OGUID+166,175124,229,1,1,81.765560,-326.139557,91.445510,2.460913,0,0,0,0,120,0,1),
+(@OGUID+167,175124,229,1,1,81.817490,-317.400055,91.439900,0.174532,0,0,0,0,120,0,1),
+(@OGUID+168,175124,229,1,1,81.974480,-335.983826,91.522300,-1.500983,0,0,0,0,120,0,1),
+(@OGUID+169,175124,229,1,1,82.075060,-251.810257,91.472730,-1.692969,0,0,0,0,120,0,1),
+(@OGUID+170,175124,229,1,1,82.531170,-315.925079,91.436134,1.710422,0,0,0,0,120,0,1),
+(@OGUID+171,175124,229,1,1,82.764340,-267.748474,91.465096,-3.019413,0,0,0,0,120,0,1),
+(@OGUID+172,175124,229,1,1,82.941520,-330.608337,91.454190,0.698132,0,0,0,0,120,0,1),
+(@OGUID+173,175124,229,1,1,82.960050,-249.989090,91.470880,-1.640610,0,0,0,0,120,0,1),
+(@OGUID+174,175124,229,1,1,83.030556,-333.102661,91.489250,-0.209439,0,0,0,0,120,0,1),
+(@OGUID+175,175124,229,1,1,83.216140,-327.689700,91.446200,-0.296705,0,0,0,0,120,0,1),
+(@OGUID+176,175124,229,1,1,83.653244,-252.415115,91.469410,1.954769,0,0,0,0,120,0,1),
+(@OGUID+177,175124,229,1,1,83.950905,-325.865200,91.445510,-2.967041,0,0,0,0,120,0,1),
+(@OGUID+178,175124,229,1,1,83.954080,-315.109400,91.434060,-0.541051,0,0,0,0,120,0,1),
+(@OGUID+179,175124,229,1,1,84.112040,-268.795441,91.461670,-2.879789,0,0,0,0,120,0,1),
+(@OGUID+180,175124,229,1,1,84.506134,-248.377167,91.467630,1.780234,0,0,0,0,120,0,1),
+(@OGUID+181,175124,229,1,1,84.657295,-301.760900,91.443214,0.157079,0,0,0,0,120,0,1),
+(@OGUID+182,175124,229,1,1,85.563520,-293.522736,91.447860,1.308995,0,0,0,0,120,0,1),
+(@OGUID+183,175124,229,1,1,85.667694,-314.023560,91.436035,-2.076939,0,0,0,0,120,0,1),
+(@OGUID+184,175124,229,1,1,85.834040,-295.413666,91.447740,2.775069,0,0,0,0,120,0,1),
+(@OGUID+185,175124,229,1,1,85.975090,-250.809708,91.464530,-2.932139,0,0,0,0,120,0,1),
+(@OGUID+186,175124,229,1,1,86.112880,-302.506317,91.443740,0.767944,0,0,0,0,120,0,1),
+(@OGUID+187,175124,229,1,1,86.367140,-246.965225,91.463715,1.815142,0,0,0,0,120,0,1),
+(@OGUID+188,175124,229,1,1,87.226135,-252.472137,91.461900,-0.942477,0,0,0,0,120,0,1),
+(@OGUID+189,175124,229,1,1,87.281105,-254.392151,91.461790,0.034906,0,0,0,0,120,0,1),
+(@OGUID+190,175124,229,1,1,87.410990,-278.121460,91.453200,-2.565632,0,0,0,0,120,0,1),
+(@OGUID+191,175124,229,1,1,87.812740,-314.716200,91.444310,3.019413,0,0,0,0,120,0,1),
+(@OGUID+192,175124,229,1,1,87.861210,-303.151947,91.444374,-1.797689,0,0,0,0,120,0,1),
+(@OGUID+193,175124,229,1,1,87.923130,-280.001373,91.447140,-2.705255,0,0,0,0,120,0,1),
+(@OGUID+194,175124,229,1,1,88.098390,-333.163361,91.484410,1.431168,0,0,0,0,120,0,1),
+(@OGUID+195,175124,229,1,1,88.343250,-248.339035,91.459560,2.286379,0,0,0,0,120,0,1),
+(@OGUID+196,175124,229,1,1,88.691250,-301.069800,91.444680,0.366518,0,0,0,0,120,0,1),
+(@OGUID+197,175124,229,1,1,88.808876,-316.133700,91.444670,-0.698132,0,0,0,0,120,0,1),
+(@OGUID+198,175124,229,1,1,89.004050,-251.208176,91.458170,2.949595,0,0,0,0,120,0,1),
+(@OGUID+199,175124,229,1,1,89.099160,-290.132965,91.446330,1.535890,0,0,0,0,120,0,1),
+(@OGUID+200,175124,229,1,1,89.926796,-301.831146,91.445114,0.541051,0,0,0,0,120,0,1),
+(@OGUID+201,175124,229,1,1,89.958930,-318.158875,91.444320,-0.872664,0,0,0,0,120,0,1),
+(@OGUID+202,175124,229,1,1,90.307120,-332.646332,91.473750,2.617989,0,0,0,0,120,0,1),
+(@OGUID+203,175124,229,1,1,90.575424,-320.018616,91.445500,1.204277,0,0,0,0,120,0,1),
+(@OGUID+204,175124,229,1,1,91.830710,-291.348500,91.445500,-3.089183,0,0,0,0,120,0,1),
+(@OGUID+205,175124,229,1,1,91.860870,-301.934900,91.445500,0.733038,0,0,0,0,120,0,1),
+(@OGUID+206,175124,229,1,1,92.115500,-334.860800,91.506560,0.453785,0,0,0,0,120,0,1),
+(@OGUID+207,175124,229,1,1,92.125114,-279.851044,91.445500,-1.675514,0,0,0,0,120,0,1),
+(@OGUID+208,175124,229,1,1,92.600150,-288.176178,91.445500,0.436332,0,0,0,0,120,0,1),
+(@OGUID+209,175124,229,1,1,92.644230,-304.446533,91.445500,2.443460,0,0,0,0,120,0,1),
+(@OGUID+210,175124,229,1,1,93.673340,-290.120483,91.445500,-0.750491,0,0,0,0,120,0,1),
+(@OGUID+211,175124,229,1,1,93.811460,-305.536255,91.445500,1.029743,0,0,0,0,120,0,1),
+(@OGUID+212,175124,229,1,1,93.890366,-288.281036,91.445500,2.356195,0,0,0,0,120,0,1),
+(@OGUID+213,175124,229,1,1,94.564140,-281.093300,91.445500,2.513274,0,0,0,0,120,0,1),
+(@OGUID+214,175124,229,1,1,94.917090,-288.643616,91.445500,2.967041,0,0,0,0,120,0,1),
+(@OGUID+215,175124,229,1,1,95.461464,-313.583679,91.445500,0.855211,0,0,0,0,120,0,1),
+(@OGUID+216,175124,229,1,1,96.062840,-287.470337,91.445500,1.710422,0,0,0,0,120,0,1),
+(@OGUID+217,175124,229,1,1,96.341835,-280.517578,91.445500,0.139624,0,0,0,0,120,0,1),
+(@OGUID+218,175124,229,1,1,97.125830,-281.948944,91.445500,-1.274091,0,0,0,0,120,0,1),
+(@OGUID+219,175124,229,1,1,97.196310,-310.890533,91.445500,-3.036838,0,0,0,0,120,0,1),
+(@OGUID+220,175124,229,1,1,97.340485,-313.429962,91.445500,2.670348,0,0,0,0,120,0,1),
+(@OGUID+221,175124,229,1,1,98.855940,-313.048950,91.445500,-1.012289,0,0,0,0,120,0,1),
+(@OGUID+222,175194,229,1,1,192.740372,-258.394226,76.86026,0,0,0,0,0,120,0,0),
+(@OGUID+223,175195,229,1,1,124.778954,-298.037384,70.85264,0.785396755,0,0,0,0,120,0,0),
+(@OGUID+224,175196,229,1,1,228.802658,-301.542084,76.88119,-1.57079577,0,0,0,0,120,0,0),
+(@OGUID+225,175197,229,1,1,125.357704,-340.4654,70.875206,2.356195,0,0,0,0,120,0,0),
+(@OGUID+226,175198,229,1,1,215.157425,-334.733,76.81243,-2.356195,0,0,0,0,120,0,0),
+(@OGUID+227,175199,229,1,1,155.33374,-353.044769,70.83366,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+228,175200,229,1,1,155.320572,-286.073547,70.87632,0,0,0,0,0,120,0,0),
+(@OGUID+229,175266,229,1,1,144.3746,-240.826111,91.471344,0,0,0,0,0,120,0,0),
+(@OGUID+230,175267,229,1,1,126.354256,-240.769867,91.47007,0,0,0,0,0,120,0,0),
+(@OGUID+231,175268,229,1,1,162.465958,-240.764633,91.46876,0,0,0,0,0,120,0,0),
+(@OGUID+232,175269,229,1,1,126.295486,-258.731628,91.47007,0,0,0,0,0,120,0,0),
+(@OGUID+233,175270,229,1,1,162.443268,-258.9044,91.47007,0,0,0,0,0,120,0,0),
+(@OGUID+234,175271,229,1,1,126.4017,-276.79007,91.47007,0,0,0,0,0,120,0,0),
+(@OGUID+235,175272,229,1,1,162.400742,-276.823822,91.47007,0,0,0,0,0,120,0,0),
+(@OGUID+236,175706,229,1,1,144.445023,-280.941467,91.54761,1.58824873,0,0,0,0,120,0,0),
+(@OGUID+237,175244,229,1,1,216.44342,-286.135376,76.94057,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+238,175187,229,1,1,144.369614,-299.198425,91.47007,0,0,0,0,0,120,0,1),
+(@OGUID+239,175153,229,1,1,113.751076,-258.944977,91.56026,0,0,0,0,0,120,0,1),
+(@OGUID+240,175705,229,1,1,175.127151,-258.944946,91.56026,0,0,0,0,0,120,0,1),
+(@OGUID+241,175185,229,1,1,194.234833,-420.225037,110.76078,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+242,175186,229,1,1,92.959465,-435.590027,110.954376,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+243,164726,229,1,1,108.036087,-420.3313,110.954376,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+244,175382,229,1,1,67.1283,-297.421021,91.42554,-0.0349062532,0,0,0,0,120,0,1),
+(@OGUID+245,175385,229,1,1,65.41786,-280.4161,94.04653,0.06981169,0,0,0,0,120,0,1),
+(@OGUID+246,175528,229,1,1,100.25692,-313.139862,66.5452652,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+247,175529,229,1,1,100.25692,-324.880249,66.5452652,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+248,175530,229,1,1,110.21476,-324.880249,68.03545,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+249,175531,229,1,1,110.21476,-313.139862,68.03545,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+250,175532,229,1,1,120.461563,-324.880249,73.53309,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+251,175533,229,1,1,120.461563,-313.139862,73.53309,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+252,175946,229,1,1,45.1932869,-259.712219,106.532768,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+253,175947,229,1,1,45.19329,-312.5203,106.532768,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+254,175970,229,1,1,147.227539,-240.435669,112.20472,-1.64933348,0,0,0,0,120,0,1),
+(@OGUID+255,176447,229,1,1,35.2498856,-505.634277,110.91436,-3.13874269,0,0,0,0,120,0,1),
+(@OGUID+256,176448,229,1,1,31.2830067,-505.634277,110.91436,1.57142222,0,0,0,0,120,0,1),
+(@OGUID+257,176449,229,1,1,27.4453468,-505.634277,110.91436,-0.261172324,0,0,0,0,120,0,1),
+(@OGUID+258,176450,229,1,1,21.5667877,-506.580719,110.91436,-1.57016766,0,0,0,0,120,0,1),
+(@OGUID+259,176451,229,1,1,18.0824432,-505.634277,110.91436,-3.13874269,0,0,0,0,120,0,1),
+(@OGUID+260,176452,229,1,1,24.5420456,-504.7355,110.91436,-2.35556316,0,0,0,0,120,0,1),
+(@OGUID+261,136950,229,1,1,72.83732,-265.629639,60.73645,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+262,136952,229,1,1,69.97309,-329.867767,55.8721352,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+263,136955,229,1,1,56.3640633,-306.158142,54.01571,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+264,176459,229,1,1,68.64788,-270.903229,60.73748,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+265,176460,229,1,1,70.54355,-257.169067,60.74014,3.124123,0,0,0,0,120,0,1),
+(@OGUID+266,176461,229,1,1,69.3254242,-265.102051,60.60442,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+267,176462,229,1,1,90.48029,-283.217,60.70017,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+268,176463,229,1,1,91.63333,-262.053284,60.70017,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+269,136922,229,1,1,88.21516,-415.1,110.95723,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+270,136923,229,1,1,87.4498444,-468.453552,116.886841,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+271,136925,229,1,1,40.7229156,-586.7098,30.6816959,1.74532676,0,0,0,0,120,0,1),
+(@OGUID+272,136926,229,1,1,43.3148575,-572.47644,30.6816959,1.74532676,0,0,0,0,120,0,1),
+(@OGUID+273,136927,229,1,1,4.75705242,-567.072754,29.2221813,1.74532676,0,0,0,0,120,0,1),
+(@OGUID+274,136928,229,1,1,8.392041,-583.677,29.2221813,1.74532676,0,0,0,0,120,0,1),
+(@OGUID+275,136929,229,1,1,152.587021,-396.408356,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+276,136930,229,1,1,147.161285,-389.9539,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+277,136931,229,1,1,149.6765,-386.148346,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+278,136932,229,1,1,157.7783,-389.9539,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+279,136933,229,1,1,150.609192,-396.408356,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+280,136934,229,1,1,155.816116,-390.034546,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+281,136935,229,1,1,145.1764,-390.034546,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+282,136936,229,1,1,153.360245,-386.1687,121.963966,-1.57079577,0,0,0,0,120,0,1),
+(@OGUID+283,136937,229,1,1,149.569,-454.6866,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+284,136938,229,1,1,153.252762,-454.70694,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+285,136939,229,1,1,157.752838,-450.1581,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+286,136940,229,1,1,155.76796,-450.238739,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+287,136941,229,1,1,152.320068,-444.3045,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+288,136942,229,1,1,150.342224,-444.3045,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+289,136943,229,1,1,147.113144,-450.1581,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+290,136944,229,1,1,145.15094,-450.238739,121.963966,1.57079577,0,0,0,0,120,0,1),
+(@OGUID+291,136945,229,1,1,-174.133926,-342.7732,64.39388,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+292,136946,229,1,1,-172.351959,-462.842072,87.39826,-1.60570168,0,0,0,0,120,0,1),
+(@OGUID+293,136947,229,1,1,16.9936657,-253.820969,65.44975,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+294,136948,229,1,1,8.170414,-268.9804,65.44975,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+295,136949,229,1,1,51.2451057,-274.132843,65.44975,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+296,136951,229,1,1,68.8801651,-283.793518,60.73645,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+297,136954,229,1,1,16.1673641,-280.865326,9.61726,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+298,136957,229,1,1,117.4544,-254.2912,91.57107,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+299,136959,229,1,1,125.65564,-280.80777,91.57107,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+300,136961,229,1,1,46.4689255,-309.64917,91.57107,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+301,136962,229,1,1,106.176666,-265.9525,91.57107,-1.46607578,0,0,0,0,120,0,1),
+(@OGUID+302,136963,229,1,1,107.690056,-253.095154,91.57107,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+303,136964,229,1,1,82.58793,-364.5863,116.859177,2.72271276,0,0,0,0,120,0,1),
+(@OGUID+304,153464,229,1,1,-36.1175957,-583.8276,-18.8201447,1.97221982,0,0,0,0,120,0,1),
+(@OGUID+305,153469,229,1,1,-73.99849,-453.3353,-18.9350014,-3.08918333,0,0,0,0,120,0,1),
+(@OGUID+306,153469,229,1,1,-84.26773,-350.10376,70.9524155,1.91986156,0,0,0,0,120,0,1),
+(@OGUID+307,153469,229,1,1,86.85506,-587.50116,30.6085377,2.63544416,0,0,0,0,120,0,1),
+(@OGUID+308,164725,229,1,1,126.878883,-319.108551,70.93496,3.14159274,0,0,0,0,120,0,0),
+(@OGUID+309,175334,229,1,1,33.71665,-466.067383,-18.46511,-1.53588951,0,0,0,0,120,0,1),
+(@OGUID+310,175584,229,1,1,-14.3415041,-395.7287,48.5381279,2.86233544,0,0,0,0,120,0,1),
+(@OGUID+311,175588,229,1,1,-139.523071,-525.87854,6.363978,-2.4260025,0,0,0,0,120,0,1),
+(@OGUID+312,175606,229,1,1,-100.230141,-529.5372,-5.773813,-0.43633157,0,0,0,0,120,0,1),
+(@OGUID+313,175606,229,1,1,-100.324532,-523.847,10.7028713,2.111848,0,0,0,0,120,0,1),
+(@OGUID+314,175606,229,1,1,-101.885674,-521.985168,-7.841986,-0.0349062532,0,0,0,0,120,0,1),
+(@OGUID+315,175606,229,1,1,-102.4652,-575.651062,9.900889,2.478367,0,0,0,0,120,0,1),
+(@OGUID+316,175606,229,1,1,-112.209923,-569.506165,10.1991549,2.18166041,0,0,0,0,120,0,1),
+(@OGUID+317,175606,229,1,1,-125.2294,-576.6645,13.7725887,-0.296705216,0,0,0,0,120,0,1),
+(@OGUID+318,175606,229,1,1,-126.745758,-514.1637,-12.1469631,3.10665226,0,0,0,0,120,0,1),
+(@OGUID+319,175606,229,1,1,-129.513687,-441.7,24.4328327,0.9773831,0,0,0,0,120,0,1),
+(@OGUID+320,175606,229,1,1,-131.570419,-439.602051,22.8934059,-1.134463,0,0,0,0,120,0,1),
+(@OGUID+321,175606,229,1,1,-131.804932,-526.783936,6.556513,-2.28637886,0,0,0,0,120,0,1),
+(@OGUID+322,175606,229,1,1,-132.261276,-474.847717,9.822438,-2.82742977,0,0,0,0,120,0,1),
+(@OGUID+323,175606,229,1,1,-132.404343,-514.960754,-15.93743,-1.79768872,0,0,0,0,120,0,1),
+(@OGUID+324,175606,229,1,1,-138.894241,-439.497467,24.8087673,1.76278245,0,0,0,0,120,0,1),
+(@OGUID+325,175606,229,1,1,-139.15303,-434.7381,23.11234,-2.740162,0,0,0,0,120,0,1),
+(@OGUID+326,175606,229,1,1,-144.504959,-441.602783,23.1015816,0.3316107,0,0,0,0,120,0,1),
+(@OGUID+327,175606,229,1,1,-146.906982,-441.462952,22.4743786,-0.8028509,0,0,0,0,120,0,1),
+(@OGUID+328,175606,229,1,1,-147.8808,-448.5486,20.091135,1.3264482,0,0,0,0,120,0,1),
+(@OGUID+329,175606,229,1,1,-150.1039,-470.007965,16.2278,1.76278245,0,0,0,0,120,0,1),
+(@OGUID+330,175606,229,1,1,-153.787643,-515.2272,-15.9504414,-0.95993,0,0,0,0,120,0,1),
+(@OGUID+331,175606,229,1,1,-154.378235,-552.2341,9.918845,-2.0594883,0,0,0,0,120,0,1),
+(@OGUID+332,175606,229,1,1,-154.59169,-525.218567,8.161819,2.042035,0,0,0,0,120,0,1),
+(@OGUID+333,175606,229,1,1,-154.769653,-541.317,9.022168,-0.104719326,0,0,0,0,120,0,1),
+(@OGUID+334,175606,229,1,1,-154.889313,-570.3387,10.0172291,2.478367,0,0,0,0,120,0,1),
+(@OGUID+335,175607,229,1,1,20.4895344,-438.85733,-18.78273,-2.26892543,0,0,0,0,120,0,1),
+(@OGUID+336,175608,229,1,1,23.8203316,-440.8061,-18.75866,1.43116808,0,0,0,0,120,0,1),
+(@OGUID+337,175609,229,1,1,20.99143,-443.1193,-18.91834,1.08210289,0,0,0,0,120,0,1),
+(@OGUID+338,175609,229,1,1,23.7352352,-445.173035,-18.9350014,2.111848,0,0,0,0,120,0,1),
+(@OGUID+339,175609,229,1,1,25.9651279,-443.5448,-18.9203186,-2.75761318,0,0,0,0,120,0,1),
+(@OGUID+340,175886,229,1,1,-34.5386,-589.6351,30.9964237,-0.593412,0,0,0,0,120,0,1),
+(@OGUID+341,175886,229,1,1,-34.7323723,-589.6146,30.9339237,1.62315571,0,0,0,0,120,0,1),
+(@OGUID+342,175886,229,1,1,-35.6387024,-589.632263,30.9825344,-1.97221982,0,0,0,0,120,0,1),
+(@OGUID+343,175886,229,1,1,-36.297657,-589.616943,31.0103111,1.09955645,0,0,0,0,120,0,1),
+(@OGUID+344,175886,229,1,1,-37.7856445,-589.639465,30.9964237,-3.08918333,0,0,0,0,120,0,1),
+(@OGUID+345,175949,229,1,1,-128.233643,-482.381,25.4534683,-0.0174524616,0,0,0,0,120,0,1),
+(@OGUID+346,175950,229,1,1,-11.1344738,-466.205139,-16.8552532,-1.55334139,0,0,0,0,120,0,1),
+(@OGUID+347,176089,229,1,1,-18.8625946,-360.393951,-31.426754,2.513274,0,0,0,0,120,0,1),
+(@OGUID+348,176090,229,1,1,-19.0726433,-361.990631,-31.523716,-0.3490652,0,0,0,0,120,0,1),
+(@OGUID+349,176425,229,1,1,60.0723534,-511.967224,29.2142811,-3.13874269,0,0,0,0,120,0,1),
+(@OGUID+350,176426,229,1,1,56.9334679,-556.048035,30.66044,-3.13874269,0,0,0,0,120,0,1),
+(@OGUID+351,176427,229,1,1,53.1921,-461.069824,24.3897438,-3.14149952,0,0,0,0,120,0,1),
+(@OGUID+352,176428,229,1,1,-63.25678,-581.4829,29.29337,-3.14149952,0,0,0,0,120,0,1),
+(@OGUID+353,176429,229,1,1,-37.6862526,-551.8221,16.2163448,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+354,176430,229,1,1,-25.3348827,-478.438263,17.2503757,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+355,176431,229,1,1,-46.3864632,-448.609955,-18.5644283,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+356,176432,229,1,1,-2.64241648,-579.1437,-18.7608662,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+357,176433,229,1,1,26.982,-583.365234,-18.515255,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+358,176434,229,1,1,35.6424026,-550.729858,-18.41096,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+359,176435,229,1,1,33.1642647,-471.046875,-18.5059147,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+360,176436,229,1,1,31.9839039,-495.3488,-18.8984013,-3.13874269,0,0,0,0,120,0,1),
+(@OGUID+361,176437,229,1,1,-39.3852,-424.8782,-18.84707,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+362,176438,229,1,1,-23.2051277,-410.6093,-18.8984013,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+363,176439,229,1,1,-76.09747,-418.800659,-18.9234028,-1.83259165,0,0,0,0,120,0,1),
+(@OGUID+364,176440,229,1,1,-59.9712257,-409.6412,-18.8442917,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+365,176441,229,1,1,-79.5308762,-453.927216,-18.8331814,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+366,176442,229,1,1,-15.437788,-368.78067,49.49363,3.14085126,0,0,0,0,120,0,1),
+(@OGUID+367,176443,229,1,1,-121.137337,-296.445465,71.0397,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+368,176444,229,1,1,-137.26358,-305.604919,70.9605942,-1.83259165,0,0,0,0,120,0,1),
+(@OGUID+369,176445,229,1,1,-59.1198235,-339.829254,70.9605942,-1.83259165,0,0,0,0,120,0,1),
+(@OGUID+370,176446,229,1,1,-87.3357,-348.370026,71.0397,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+371,176454,229,1,1,60.57147,-562.5008,30.48111,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+372,176455,229,1,1,52.2036819,-470.448181,25.11214,3.14148068,0,0,0,0,120,0,1),
+(@OGUID+373,176456,229,1,1,-60.6475868,-584.3826,29.1114845,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+374,176457,229,1,1,-115.273315,-428.517548,-18.7010059,3.14159274,0,0,0,0,120,0,1),
+(@OGUID+375,176458,229,1,1,-114.981789,-421.896851,-18.9178715,3.14159274,0,0,0,0,120,0,1);
diff --git a/sql/updates/world/2011_12_18_00_world_creature_addon.sql b/sql/updates/world/2011_12_18_00_world_creature_addon.sql
new file mode 100644
index 00000000000..5df7f000b06
--- /dev/null
+++ b/sql/updates/world/2011_12_18_00_world_creature_addon.sql
@@ -0,0 +1,2 @@
+-- Delete addons for some creatures that has been removed
+DELETE FROM `creature_addon` WHERE `guid` IN (209318,209333,209315,209337,209308,209312,209331,209320,209335,209318,209333,209315,209337,209308,209312,209331,209320,209335);
diff --git a/sql/updates/world/2011_12_18_01_world_gossip.sql b/sql/updates/world/2011_12_18_01_world_gossip.sql
new file mode 100644
index 00000000000..eb76ffe4009
--- /dev/null
+++ b/sql/updates/world/2011_12_18_01_world_gossip.sql
@@ -0,0 +1,42 @@
+-- Gossip Menu insert from sniff
+DELETE FROM `gossip_menu` WHERE `entry`=7610 AND `text_id`=9261;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7610,9261);
+DELETE FROM `gossip_menu` WHERE `entry`=8249 AND `text_id`=10266;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (8249,10266);
+DELETE FROM `gossip_menu` WHERE `entry`=7612 AND `text_id`=9263;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7612,9263);
+DELETE FROM `gossip_menu` WHERE `entry`=7611 AND `text_id`=9262;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7611,9262);
+DELETE FROM `gossip_menu` WHERE `entry`=7588 AND `text_id`=9236;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7588,9236);
+DELETE FROM `gossip_menu` WHERE `entry`=7590 AND `text_id`=9238;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7590,9238);
+DELETE FROM `gossip_menu` WHERE `entry`=7591 AND `text_id`=9239;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7591,9239);
+DELETE FROM `gossip_menu` WHERE `entry`=7589 AND `text_id`=9237;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7589,9237);
+DELETE FROM `gossip_menu` WHERE `entry`=7526 AND `text_id`=9128;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7526,9128);
+DELETE FROM `gossip_menu` WHERE `entry`=7614 AND `text_id`=9265;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (7614,9265);
+-- Creature Gossip_menu_id Update from sniff
+UPDATE `creature_template` SET `gossip_menu_id`=7610 WHERE `entry`=18004;
+UPDATE `creature_template` SET `gossip_menu_id`=8249 WHERE `entry`=21172;
+UPDATE `creature_template` SET `gossip_menu_id`=7612 WHERE `entry`=18005;
+UPDATE `creature_template` SET `gossip_menu_id`=7611 WHERE `entry`=18006;
+UPDATE `creature_template` SET `gossip_menu_id`=7588 WHERE `entry`=18010;
+UPDATE `creature_template` SET `gossip_menu_id`=7590 WHERE `entry`=18019;
+UPDATE `creature_template` SET `gossip_menu_id`=7589 WHERE `entry`=18009;
+UPDATE `creature_template` SET `gossip_menu_id`=7614 WHERE `entry`=18003;
+-- Creature Gossip_menu_option Update from sniff
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (8249,7612,7611,7588,7590,7589,7495) AND `id`=0;
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=7590 AND `id`=1;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`) VALUES
+(8249,0,1, 'I want to browse your goods.',3,128,0,0,0,0, ''),
+(7612,0,1, 'I wish to buy from you.',3,128,0,0,0,0, ''),
+(7611,0,1, 'I would like to buy from you.',3,128,0,0,0,0, ''),
+(7588,0,1, 'Show me your wares, Maktu.',3,128,0,0,0,0, ''),
+(7590,0,1, 'Let me browse your reagents and poison supplies.',3,128,0,0,0,0, ''),
+(7590,1,0, 'Specialist, eh? Just what kind of specialist are you, anyway?',1,1,7591,0,0,0, ''),
+(7589,0,1, 'I wish to browse your wares.',3,128,0,0,0,0, ''),
+(7495,0,0, 'Watcher Leesa''oh, why are you out here?',1,1,7526,0,0,0, '');
diff --git a/sql/updates/world/2011_12_18_02_world_spell_script_names.sql b/sql/updates/world/2011_12_18_02_world_spell_script_names.sql
new file mode 100644
index 00000000000..c5f9a4376df
--- /dev/null
+++ b/sql/updates/world/2011_12_18_02_world_spell_script_names.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_luck_of_the_draw';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(72221,'spell_gen_luck_of_the_draw');
diff --git a/sql/updates/world/2011_12_18_03_world_trinity_string.sql b/sql/updates/world/2011_12_18_03_world_trinity_string.sql
new file mode 100644
index 00000000000..d26cc356cff
--- /dev/null
+++ b/sql/updates/world/2011_12_18_03_world_trinity_string.sql
@@ -0,0 +1,3 @@
+DELETE FROM `trinity_string` WHERE `entry`=5031;
+INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
+(5031, 'AIName: %s ScriptName: %s');
diff --git a/sql/updates/world/2011_12_18_04_world_misc.sql b/sql/updates/world/2011_12_18_04_world_misc.sql
new file mode 100644
index 00000000000..3404e4f285f
--- /dev/null
+++ b/sql/updates/world/2011_12_18_04_world_misc.sql
@@ -0,0 +1,87 @@
+-- Remove empty EAI Script call from the following entries
+UPDATE `creature_template` SET `AIName` = '' WHERE `entry` IN (30243,30632);
+
+-- Crimson Hammersmith summon from Blacksmithing Plans fix
+-- Black Guard Swordsmith summon from Blacksmithing Plans fix
+UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` IN (176325, 176327);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (176325, 176327) AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(176325, 1, 0, 0, 64, 0, 100, 1, 0, 0, 0, 0, 12, 11120, 6, 60000, 0, 0, 0, 8, 0, 0, 0, 3585.5, -3000.15, 125, 2.19912, 'Blacksmithing Plans - summon Crimson Hammersmith'),
+(176327, 1, 0, 0, 64, 0, 100, 1, 0, 0, 0, 0, 12, 11121, 6, 60000, 0, 0, 0, 8, 0, 0, 0, 3818.4, -3693.32, 144.242, 0.261799, 'Blacksmithing Plans - summon Black Guard Swordsmith');
+
+-- Sleeping Giants fix
+UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 24669;
+DELETE FROM `smart_scripts` WHERE (`entryorguid`=24669 AND `source_type`=0);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(24669, 0, 0, 1, 8, 0, 100, 0, 44261, 1, 0, 0, 33, 24669, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dormant Vrykul - Sleeping Giants quest credit'),
+(24669, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dormant Vrykul - Sleeping Giants despawn');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceEntry`=34083;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(18, 0, 34083, 0, 24, 1, 24669, 0, 63, '', 'Awakening Rod target limit to Dormant Vrykul'); -- changed to item script by Nay, not tested.
+
+-- Culling of Stratholme Hemotoxin SAI spell fix version
+SET @ENTRY := 28199;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE (`creature_id`=@ENTRY);
+DELETE FROM `smart_scripts` WHERE (`entryorguid`=@ENTRY);
+INSERT INTO `smart_scripts` VALUES
+(@ENTRY, 0, 0, 0, 9, 0, 25, 2, 0, 20, 5000, 8000, 11, 52522, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Tomb Stalker - Cast Hemotoxin Normal'),
+(@ENTRY, 0, 1, 0, 9, 0, 40, 4, 0, 20, 5000, 8000, 11, 58782, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Tomb Stalker - Cast Hemotoxin Heroic');
+
+DELETE FROM `creature` WHERE `id` IN (28318, 29346);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES
+(40153, 28318, 530, 1, 1, 0, 0, -1775.148438, 5548.291992, -12.428190, 4.146070, 300, 0, 0, 1, 0, 0, 0, 0, 0), -- Grand Apothecary Putress
+(40251, 29346, 530, 1, 1, 0, 0, 1925, -4123.1899, 43.1780, 4.79965, 300, 0, 0, 1, 0, 0, 0, 0, 0); -- Apothecary Karlov
+
+-- Fix NPCs falling underground when killed by nelegalno
+UPDATE `creature_template` SET `InhabitType` = 3 WHERE `entry` IN (5936, 24899); -- Orca and Scoodles
+
+-- Removes wrong restriction from G.N.E.R.D. rage
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=3882 AND `type`=16;
+
+-- Kalu'ak Fishing Derby start time fix
+UPDATE `game_event` SET `start_time` = '2011-01-01 13:00:00' WHERE `eventEntry`=63;
+UPDATE `game_event` SET `start_time` = '2011-01-01 14:00:00' WHERE `eventEntry`=64;
+
+-- Stranglethorn Fishing Extravaganza start time fix ( http://old.wowhead.com/event=301 )
+UPDATE `game_event` SET `start_time` = '2011-01-01 14:00:00' WHERE `eventEntry` IN (14, 15, 62);
+UPDATE `game_event` SET `description` = 'Stranglethorn Fishing Extravaganza Announce' WHERE `eventEntry`=14;
+UPDATE `game_event` SET `description` = 'Stranglethorn Fishing Extravaganza Fishing Pools' WHERE `eventEntry`=15;
+UPDATE `game_event` SET `description` = 'Stranglethorn Fishing Extravaganza Turn-ins' WHERE `eventEntry`=62;
+
+-- Eitrigg's Wisdom fix
+SET @GOSSIP = 21312;
+SET @NPC = 3144;
+SET @QUEST = 4941;
+-- Add gossip options for each menu id
+DELETE FROM `gossip_menu_option` WHERE `menu_id` BETWEEN @GOSSIP AND @GOSSIP+7;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES
+(@GOSSIP, 0, 0, 'Hello, Eitrigg. I bring news from Blackrock Spire.', 1, 1, @GOSSIP+1, 0, 0, 0, ''),
+(@GOSSIP+1, 0, 0, 'There is only one Warchief, Eitrigg!', 1, 1, @GOSSIP+2, 0, 0, 0, ''),
+(@GOSSIP+2, 0, 0, 'What do you mean?', 1, 1, @GOSSIP+3, 0, 0, 0, ''),
+(@GOSSIP+3, 0, 0, 'Hearthglen? But...', 1, 1, @GOSSIP+4, 0, 0, 0, ''),
+(@GOSSIP+4, 0, 0, 'I will take you up on that offer, Eitrigg.', 1, 1, @GOSSIP+5, 0, 0, 0, ''),
+(@GOSSIP+5, 0, 0, 'Ah, so that is how they pushed the Dark Iron to the lower parts of the Spire.', 1, 1, @GOSSIP+6, 0, 0, 0, ''),
+(@GOSSIP+6, 0, 0, 'Perhaps there exists a way?', 1, 1, @GOSSIP+7, 0, 0, 0, ''),
+(@GOSSIP+7, 0, 0, 'As you wish, Eitrigg.', 1, 1, 0, 0, 0, 0, '');
+-- Add gossip menus (text values already in db)
+DELETE FROM `gossip_menu` WHERE `entry`BETWEEN @GOSSIP+1 AND @GOSSIP+7;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(@GOSSIP+1, 3574),
+(@GOSSIP+2, 3575),
+(@GOSSIP+3, 3576),
+(@GOSSIP+4, 3577),
+(@GOSSIP+5, 3578),
+(@GOSSIP+6, 3579),
+(@GOSSIP+7, 3580);
+-- Add Condtion so gossip only shows when on quest
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, @GOSSIP, 0, 0, 9, 4941, 0, 0, 0, '', NULL);
+-- Add SAI for quest complete and close of gossip when last option selected
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@NPC;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@NPC;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@NPC,0,0,1,62,0,100,0,@GOSSIP+7,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0,'Eitrigg - Select As you wish, Eitrigg. - Close gossip'),
+(@NPC,0,1,0,61,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0,'Eitrigg - On link - Give credit quest (4941)');
diff --git a/sql/updates/world/2011_12_18_05_world_misc.sql b/sql/updates/world/2011_12_18_05_world_misc.sql
new file mode 100644
index 00000000000..b8435c4211e
--- /dev/null
+++ b/sql/updates/world/2011_12_18_05_world_misc.sql
@@ -0,0 +1,94 @@
+-- Quest: The Black Knight's Orders (13663) SQL fix
+-- Black Knights Camp Spawns
+SET @OGUID=100489; -- Need 10
+SET @CGUID=152277; -- Need 3
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+9;
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@OGUID+0,194357,571,1,1,9070.324,2050.733,67.21755,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+1,194357,571,1,1,9073.764,2050.120,68.15718,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+2,194357,571,1,1,9074.699,2050.709,68.17049,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+3,194357,571,1,1,9069.595,2050.349,67.21755,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+4,194357,571,1,1,9069.961,2050.538,67.21755,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+5,194357,571,1,1,9072.077,2049.292,67.78963,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+6,194357,571,1,1,9065.680,2052.618,67.28638,0,0,0,0,1,0,0,0), -- Poison Vial
+(@OGUID+7,194394,571,1,1,9083.578,2041.696,67.81812,0,0,0,0,1,0,0,0), -- Cult Rune Circle
+(@OGUID+8,195011,571,1,1,9078.471,2057.547,67.21606,0,0,0,0.9981346,0.06105176,0,0,0), -- Bonfire
+(@OGUID+9,300007,571,1,1,8523.51,566.994,552.841,2.1518,0,0,0.880019,0.474938,300,0,1); -- Spell Focus GO?
+
+DELETE FROM `creature` WHERE `id`=33537;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES
+(@CGUID+0,33537,571,1,1,0,0,9071.043,2075.388,67.21542,4.935980,120,0,0,1,0,0,0,0,0),
+(@CGUID+1,33537,571,1,1,0,0,9074.414,2049.259,67.34636,2.181662,120,0,0,1,0,0,0,0,0),
+(@CGUID+2,33537,571,1,1,0,0,9081.280,2058.925,67.38979,3.612832,120,0,0,1,0,0,0,0,0);
+
+-- Template updates
+UPDATE `creature_template` SET `unit_flags`=`unit_flags`|8,`speed_run`=4, `InhabitType`=5 WHERE `entry`=33519; -- Black Knight''s Gryphon
+UPDATE `creature_template` SET `faction_A`=2080,`faction_H`=2080,`unit_flags`=`unit_flags`|32768,`equipment_id`=823 WHERE `entry`=33537; -- Cult Conspirator
+
+-- See black knight's invisibility while on quest The Black Knight's Orders
+DELETE FROM `spell_area` WHERE `spell`=67471 AND `area` IN (4658);
+INSERT INTO `spell_area` (`spell`,`area`,`quest_start`,`quest_start_active`,`quest_end`,`aura_spell`,`racemask`,`gender`,`autocast`) VALUES
+(67471,4658,13663,1,13663,0,0,2,1); -- See Black Knight Invis
+
+-- Addon data
+DELETE FROM `creature_template_addon` WHERE `entry` IN (33519,33537);
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(33519,0,0,2049,0,NULL),-- Black Knight''s Gryphon
+(33537,0,1,1,0,NULL); -- Cult Conspirator
+
+-- SAI for Black Knight''s Gryphon
+SET @entry :=33519;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@entry;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@entry;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@entry,0,0,0,27,0,100,0,0,0,0,0,53,0,@entry,0,13663,0,0,1,0,0,0,0,0,0,0,'Black Knight''s Gryphon - On passenger - Start WP movement'),
+(@entry,0,1,0,40,0,100,0,40,@entry,0,0,33,33519,0,0,0,0,0,7,0,0,0,0,0,0,0,'Black Knight''s Gryphon - On WP 40 - Quest Credit'),
+(@entry,0,2,0,40,0,100,0,43,@entry,0,0,11,50630,0,0,0,0,0,7,0,0,0,0,0,0,0,'Black Knight''s Gryphon - On WP 43 - Dismount Spell'),
+(@entry,0,3,0,40,0,100,0,44,@entry,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Black Knight''s Gryphon - On WP 44 - Despawn');
+
+DELETE FROM `waypoints` WHERE `entry`=33519;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(33519, 1,8521.271,569.5960,552.8375,'Black Knight''s Gryphon'),
+(33519, 2,8517.864,579.1095,553.2125,'Black Knight''s Gryphon'),
+(33519, 3,8513.146,594.6724,551.2125,'Black Knight''s Gryphon'),
+(33519, 4,8505.263,606.5569,550.4177,'Black Knight''s Gryphon'),
+(33519, 5,8503.017,628.4188,547.4177,'Black Knight''s Gryphon'),
+(33519, 6,8480.271,652.7083,547.4177,'Black Knight''s Gryphon'),
+(33519, 7,8459.121,686.1427,547.4177,'Black Knight''s Gryphon'),
+(33519, 8,8436.802,713.8687,547.3428,'Black Knight''s Gryphon'),
+(33519, 9,8405.380,740.0045,547.4177,'Black Knight''s Gryphon'),
+(33519,10,8386.139,770.6009,547.5881,'Black Knight''s Gryphon'),
+(33519,11,8374.297,802.2525,547.9304,'Black Knight''s Gryphon'),
+(33519,12,8374.271,847.0363,548.0427,'Black Knight''s Gryphon'),
+(33519,13,8385.988,868.9881,548.0491,'Black Knight''s Gryphon'),
+(33519,14,8413.027,867.8573,547.2991,'Black Knight''s Gryphon'),
+(33519,15,8452.552,869.0339,547.2991,'Black Knight''s Gryphon'),
+(33519,16,8473.058,875.2012,547.2955,'Black Knight''s Gryphon'),
+(33519,17,8472.278,912.3134,547.4169,'Black Knight''s Gryphon'),
+(33519,18,8479.666,954.1650,547.3298,'Black Knight''s Gryphon'),
+(33519,19,8477.349,1001.368,547.3372,'Black Knight''s Gryphon'),
+(33519,20,8484.538,1025.797,547.4622,'Black Knight''s Gryphon'),
+(33519,21,8525.363,1029.284,547.4177,'Black Knight''s Gryphon'),
+(33519,22,8532.808,1052.904,548.1677,'Black Knight''s Gryphon'),
+(33519,23,8537.356,1077.927,554.5791,'Black Knight''s Gryphon'),
+(33519,24,8540.528,1083.379,569.6827,'Black Knight''s Gryphon'),
+(33519,25,8563.641,1140.965,569.6827,'Black Knight''s Gryphon'),
+(33519,26,8594.897,1205.458,569.6827,'Black Knight''s Gryphon'),
+(33519,27,8617.104,1257.399,566.1833,'Black Knight''s Gryphon'),
+(33519,28,8648.496,1329.349,558.0187,'Black Knight''s Gryphon'),
+(33519,29,8667.723,1388.411,546.1880,'Black Knight''s Gryphon'),
+(33519,30,8699.145,1474.898,528.2197,'Black Knight''s Gryphon'),
+(33519,31,8726.869,1546.006,501.7741,'Black Knight''s Gryphon'),
+(33519,32,8739.058,1592.157,478.5511,'Black Knight''s Gryphon'),
+(33519,33,8750.799,1636.771,455.0797,'Black Knight''s Gryphon'),
+(33519,34,8760.006,1669.482,423.2208,'Black Knight''s Gryphon'),
+(33519,35,8783.310,1701.852,375.8872,'Black Knight''s Gryphon'),
+(33519,36,8817.336,1735.731,343.3323,'Black Knight''s Gryphon'),
+(33519,37,8882.320,1789.754,301.5807,'Black Knight''s Gryphon'),
+(33519,38,8958.597,1841.807,259.9141,'Black Knight''s Gryphon'),
+(33519,39,9045.891,1908.076,233.4143,'Black Knight''s Gryphon'),
+(33519,40,9107.177,1964.594,215.9704,'Black Knight''s Gryphon'),
+(33519,41,9134.763,2036.925,175.1925,'Black Knight''s Gryphon'),
+(33519,42,9128.608,2089.091,141.3593,'Black Knight''s Gryphon'),
+(33519,43,9093.364,2128.384,99.38685,'Black Knight''s Gryphon'),
+(33519,44,9050.709,2123.656,60.24802,'Black Knight''s Gryphon');
diff --git a/sql/updates/world/2011_12_18_06_world_sai.sql b/sql/updates/world/2011_12_18_06_world_sai.sql
new file mode 100644
index 00000000000..2fce176cd0f
--- /dev/null
+++ b/sql/updates/world/2011_12_18_06_world_sai.sql
@@ -0,0 +1,14 @@
+SET @JEEVES := 35642;
+SET @SPELL_GOODBYE := 68052;
+DELETE FROM `spell_linked_spell` WHERE `spell_effect`=@SPELL_GOODBYE AND `spell_trigger`=-68054 AND `type`=0;
+INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES
+(-68054,@SPELL_GOODBYE,0, 'Jeeves - Say Goodbye');
+
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@JEEVES;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@JEEVES AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@JEEVES,0,0,0,8,0,100,0,@SPELL_GOODBYE,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Jeeves - On Spellhit - Say Line 0");
+
+DELETE FROM `creature_text` WHERE `entry`=@JEEVES;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@JEEVES,0,0,"If you'll excuse me, I'm afraid I have other business I must attend to. Please call on me again in the future.",12,0,100,3,0,0, 'Jeeves');
diff --git a/sql/updates/world/2011_12_18_07_world_conditions.sql b/sql/updates/world/2011_12_18_07_world_conditions.sql
new file mode 100644
index 00000000000..ef669dd2dbb
--- /dev/null
+++ b/sql/updates/world/2011_12_18_07_world_conditions.sql
@@ -0,0 +1,17 @@
+-- Fix condition for Bom'bay's npc_text, gossip_menu and gossip_menu_option
+-- Player must to complete quest 826 'Zalazane' to see gossip_menu_option
+DELETE FROM `gossip_menu` WHERE `entry`=3062 AND `text_id` IN (3794,3795);
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES
+(3062,3794), -- text before to complete quest 826
+(3062,3795); -- text after to complete quest 826
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=3062;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(14,3062,3794,0,14,826,0,0,0,'', "Bom'bay - show text 3794 if player does not have quest Zalazane"),
+(14,3062,3795,0,8,826,0,0,0,'', "Bom'bay - show text 3795 if player has quest Zalazane rewarded"),
+(15,3062,0,0,8,826,0,0,0,'', "Bom'bay - show gossip option 0 if player has quest Zalazane rewarded"),
+(15,3062,1,0,8,826,0,0,0,'', "Bom'bay - show gossip option 1 if player has quest Zalazane rewarded"),
+(15,3062,2,0,8,826,0,0,0,'', "Bom'bay - show gossip option 2 if player has quest Zalazane rewarded"),
+(15,3062,3,0,8,826,0,0,0,'', "Bom'bay - show gossip option 3 if player has quest Zalazane rewarded"),
+(15,3062,4,0,8,826,0,0,0,'', "Bom'bay - show gossip option 4 if player has quest Zalazane rewarded"),
+(15,3062,5,0,8,826,0,0,0,'', "Bom'bay - show gossip option 5 if player has quest Zalazane rewarded"),
+(15,3062,6,0,8,826,0,0,0,'', "Bom'bay - show gossip option 6 if player has quest Zalazane rewarded");
diff --git a/sql/updates/world/2011_12_19_00_world_conditions.sql b/sql/updates/world/2011_12_19_00_world_conditions.sql
new file mode 100644
index 00000000000..a56151a9f8f
--- /dev/null
+++ b/sql/updates/world/2011_12_19_00_world_conditions.sql
@@ -0,0 +1,7 @@
+UPDATE spell_dbc SET EffectImplicitTargetA1 = 22, EffectImplicitTargetB1 = 7 WHERE Id = 58630;
+
+DELETE FROM conditions WHERE SourceTypeOrReferenceId = 13 AND SourceEntry IN (61863, 68663);
+INSERT INTO conditions (SourceTypeOrReferenceId, SourceEntry, ConditionTypeOrReference, ConditionValue1, Comment) VALUES
+(13, 61863, 18, 1, 'The Prophet Tharon''ja - Achievement Check'),
+(13, 68663, 18, 1, 'The Black Knight - Kill Credit'),
+(13, 58630, 18, 1, 'Mal''Ganis - Kill Credit');
diff --git a/sql/updates/world/2011_12_19_01_world_quest_template.sql b/sql/updates/world/2011_12_19_01_world_quest_template.sql
new file mode 100644
index 00000000000..c04fdddfe97
--- /dev/null
+++ b/sql/updates/world/2011_12_19_01_world_quest_template.sql
@@ -0,0 +1,2 @@
+-- Quest: Arcane Refreshment only available for mages
+UPDATE `quest_template` SET `RequiredClasses`=`RequiredClasses`|128 WHERE `Id`=7463;
diff --git a/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql b/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..af7b0a9361b
--- /dev/null
+++ b/sql/updates/world/2011_12_19_02_world_achievement_criteria_data.sql
@@ -0,0 +1,11 @@
+-- Achievement Fa-la-la-la-Ogri'la
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (3936,3937,3938);
+INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
+-- requires aura
+(3936, 5, 44827, 0, ''),
+(3937, 5, 44825, 0, ''),
+(3938, 5, 44824, 0, ''),
+-- requires Holiday Winter Veil
+(3936, 16, 141, 0, ''),
+(3937, 16, 141, 0, ''),
+(3938, 16, 141, 0, '');
diff --git a/sql/updates/world/2011_12_24_00_world_misc.sql b/sql/updates/world/2011_12_24_00_world_misc.sql
new file mode 100644
index 00000000000..5e070d0771e
--- /dev/null
+++ b/sql/updates/world/2011_12_24_00_world_misc.sql
@@ -0,0 +1,10 @@
+-- Scriptname for the cages
+UPDATE `gameobject_template` SET `ScriptName`='go_veil_skith_cage' WHERE `entry` IN (185202,185203,185204,185205);
+
+-- Texts for Captive Child
+DELETE FROM `creature_text` WHERE `entry`=22314;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(22314,0,0,"Woot!",12,0,100,0,0,0,"Captive Child"),
+(22314,0,1,"I think those weird bird guys were going to eat us. Gross!",12,0,100,0,0,0,"Captive Child"),
+(22314,0,2,"Yay! We're free!",12,0,100,0,0,0,"Captive Child"),
+(22314,0,3,"Gross!",12,0,100,0,0,0,"Captive Child");
diff --git a/sql/updates/world/2011_12_24_00_world_spell_proc_event.sql b/sql/updates/world/2011_12_24_00_world_spell_proc_event.sql
new file mode 100644
index 00000000000..f25fa4c4856
--- /dev/null
+++ b/sql/updates/world/2011_12_24_00_world_spell_proc_event.sql
@@ -0,0 +1 @@
+UPDATE `spell_proc_event` SET `SpellFamilyMask0` = 0 WHERE `entry` IN (5952,51679);
diff --git a/sql/updates/world/2011_12_24_01_world_mail_loot_template.sql b/sql/updates/world/2011_12_24_01_world_mail_loot_template.sql
new file mode 100644
index 00000000000..2fc05e9cf17
--- /dev/null
+++ b/sql/updates/world/2011_12_24_01_world_mail_loot_template.sql
@@ -0,0 +1,41 @@
+-- Reward from Treats for Greatfather Winter (horde)
+SET @mail:=102; -- Set in DBC
+UPDATE quest_template SET RewardMailTemplateId=@mail, RewardMailDelay=86400 WHERE Id IN (6962); -- Set mail delivery
+DELETE FROM mail_loot_template WHERE entry=@mail;
+INSERT INTO mail_loot_template (entry,item,ChanceOrQuestChance,lootmode,groupid,mincountOrRef,maxcount) VALUES
+(@mail,17685,100,1,0,1,1); -- Attach item to mail
+
+-- Reward from Treats for Greatfather Winter (alliance)
+SET @mail:=118; -- Set in DBC
+UPDATE quest_template SET RewardMailTemplateId=@mail, RewardMailDelay=86400 WHERE Id IN (7025); -- Set mail delivery
+DELETE FROM mail_loot_template WHERE entry=@mail;
+INSERT INTO mail_loot_template (entry,item,ChanceOrQuestChance,lootmode,groupid,mincountOrRef,maxcount) VALUES
+(@mail,17685,100,1,0,1,1); -- Attach item to mail
+
+-- Reward from Stolen Winter Veil Treats (horde)
+SET @mail:=108; -- Set in DBC
+UPDATE quest_template SET RewardMailTemplateId=@mail, RewardMailDelay=86400 WHERE Id IN (6963); -- Set mail delivery
+DELETE FROM mail_loot_template WHERE entry=@mail;
+INSERT INTO mail_loot_template (entry,item,ChanceOrQuestChance,lootmode,groupid,mincountOrRef,maxcount) VALUES
+(@mail,17712,100,1,0,1,1); -- Attach item to mail
+
+-- Reward from Stolen Winter Veil Treats (alliance)
+SET @mail:=117; -- Set in DBC
+UPDATE quest_template SET RewardMailTemplateId=@mail, RewardMailDelay=86400 WHERE Id IN (7042); -- Set mail delivery
+DELETE FROM mail_loot_template WHERE entry=@mail;
+INSERT INTO mail_loot_template (entry,item,ChanceOrQuestChance,lootmode,groupid,mincountOrRef,maxcount) VALUES
+(@mail,17712,100,1,0,1,1); -- Attach item to mail
+
+-- Reward from Metzen the Reindeer (horde)
+SET @mail:=122; -- Set in DBC
+UPDATE quest_template SET RewardMailTemplateId=@mail, RewardMailDelay=86400 WHERE Id IN (8746); -- Set mail delivery
+DELETE FROM mail_loot_template WHERE entry=@mail;
+INSERT INTO mail_loot_template (entry,item,ChanceOrQuestChance,lootmode,groupid,mincountOrRef,maxcount) VALUES
+(@mail,21216,100,1,0,1,1); -- Attach item to mail
+
+-- Reward from Metzen the Reindeer (alliance)
+SET @mail:=161; -- Set in DBC
+UPDATE quest_template SET RewardMailTemplateId=@mail, RewardMailDelay=86400 WHERE Id IN (8762); -- Set mail delivery
+DELETE FROM mail_loot_template WHERE entry=@mail;
+INSERT INTO mail_loot_template (entry,item,ChanceOrQuestChance,lootmode,groupid,mincountOrRef,maxcount) VALUES
+(@mail,21216,100,1,0,1,1); -- Attach item to mail
diff --git a/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql b/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql
new file mode 100644
index 00000000000..2a16394c7fe
--- /dev/null
+++ b/sql/updates/world/2011_12_25_00_world_areatrigger_scriptnames.sql
@@ -0,0 +1,3 @@
+DELETE FROM `areatrigger_scripts` WHERE `entry`=4752;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(4752,'at_nats_landing');
diff --git a/sql/updates/world/2011_12_25_00_world_gameobject_scriptnames.sql b/sql/updates/world/2011_12_25_00_world_gameobject_scriptnames.sql
new file mode 100644
index 00000000000..c545550e129
--- /dev/null
+++ b/sql/updates/world/2011_12_25_00_world_gameobject_scriptnames.sql
@@ -0,0 +1 @@
+UPDATE `gameobject_template` SET `ScriptName`='go_demon_portal' WHERE `entry` IN (177243,177365,177369,177397,177398,177399,177400,177366,177367,177368);
diff --git a/sql/updates/world/2011_12_25_00_world_misc.sql b/sql/updates/world/2011_12_25_00_world_misc.sql
new file mode 100644
index 00000000000..8f1d3c44ceb
--- /dev/null
+++ b/sql/updates/world/2011_12_25_00_world_misc.sql
@@ -0,0 +1,9 @@
+UPDATE `gameobject_template` SET `ScriptName`='go_captain_tyralius_prison' WHERE `entry`=184588;
+UPDATE `quest_template` SET `RequiredSpellCast1`=0 WHERE `id`=10422;
+DELETE FROM `creature_text` WHERE `entry`=20787;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(20787,0,0,"You've saved me, fleshling! Ameer will hear of this noble act.",12,0,100,0,0,0,"Captain Tyralius");
+
+-- Heroes of Old
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=2702;
+DELETE FROM `quest_start_scripts` WHERE `id`=2702;
diff --git a/sql/updates/world/2011_12_25_00_world_sai.sql b/sql/updates/world/2011_12_25_00_world_sai.sql
new file mode 100644
index 00000000000..d0f1572d708
--- /dev/null
+++ b/sql/updates/world/2011_12_25_00_world_sai.sql
@@ -0,0 +1,23 @@
+-- Bloodfen Raptor SAI
+SET @ENTRY := 4351;
+SET @SPELL_ROPE := 42325;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,0,@SPELL_ROPE,0,0,0,33,23727,0,0,0,0,0,7,0,0,0,0,0,0,0,"Bloodfen Raptor - On Spellhit - Quest Credit"),
+(@ENTRY,0,1,0,2,0,100,1,0,20,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodfen Raptor - At 20% HP - Say Line 0");
+
+-- Bloodfen Screecher SAI
+SET @ENTRY := 4352;
+SET @SPELL_ROPE := 42325;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,0,@SPELL_ROPE,0,0,0,33,23727,0,0,0,0,0,7,0,0,0,0,0,0,0,"Bloodfen Screecher - On Spellhit - Quest Credit"),
+(@ENTRY,0,1,0,2,0,100,1,0,20,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodfen Screecher - At 20% HP - Say Line 0");
+
+-- Texts
+DELETE FROM `creature_text` WHERE `entry` IN (4351,4352);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(4351,0,0,"%s looks weak enough to capture.",16,0,100,0,0,0,"Bloodfen Raptor"),
+(4352,0,0,"%s looks weak enough to capture.",16,0,100,0,0,0,"Bloodfen Screecher");
diff --git a/sql/updates/world/2011_12_25_00_world_spell_script_names.sql b/sql/updates/world/2011_12_25_00_world_spell_script_names.sql
new file mode 100644
index 00000000000..dc42056f84c
--- /dev/null
+++ b/sql/updates/world/2011_12_25_00_world_spell_script_names.sql
@@ -0,0 +1,4 @@
+UPDATE `item_template` SET `ScriptName`='' WHERE `entry`=23654;
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_q9452_cast_net';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(29866,'spell_q9452_cast_net');
diff --git a/sql/updates/world/2011_12_25_01_world_areatrigger_scriptnames.sql b/sql/updates/world/2011_12_25_01_world_areatrigger_scriptnames.sql
new file mode 100644
index 00000000000..ebed9976f44
--- /dev/null
+++ b/sql/updates/world/2011_12_25_01_world_areatrigger_scriptnames.sql
@@ -0,0 +1,9 @@
+DELETE FROM `areatrigger_scripts` WHERE `ScriptName`='at_bring_your_orphan_to';
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(3551,'at_bring_your_orphan_to'),
+(3549,'at_bring_your_orphan_to'),
+(3547,'at_bring_your_orphan_to'),
+(3546,'at_bring_your_orphan_to'),
+(3552,'at_bring_your_orphan_to'),
+(3548,'at_bring_your_orphan_to'),
+(4356,'at_bring_your_orphan_to');
diff --git a/sql/updates/world/2011_12_25_01_world_misc.sql b/sql/updates/world/2011_12_25_01_world_misc.sql
new file mode 100644
index 00000000000..9e4d7e6c058
--- /dev/null
+++ b/sql/updates/world/2011_12_25_01_world_misc.sql
@@ -0,0 +1,3 @@
+-- Zuhuled the Wacked
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=10866;
+DELETE FROM `quest_start_scripts` WHERE `id`=10866;
diff --git a/sql/updates/world/2011_12_25_01_world_sai.sql b/sql/updates/world/2011_12_25_01_world_sai.sql
new file mode 100644
index 00000000000..8ae439ffe67
--- /dev/null
+++ b/sql/updates/world/2011_12_25_01_world_sai.sql
@@ -0,0 +1,19 @@
+-- Acidic Swamp Ooze SAI
+SET @ENTRY := 4393;
+SET @SPELL_END_CHANNEL := 42485;
+SET @SPELL_BUBBLING_OOZE := 43135;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,0,@SPELL_END_CHANNEL,0,0,0,33,23797,0,0,0,0,0,7,0,0,0,0,0,0,0,"Acidic Swamp Ooze - On Spellhit - Quest Credit"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,11,@SPELL_BUBBLING_OOZE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Acidic Swamp Ooze - At 15% HP - Cast Bubbling Ooze");
+
+-- Bubbling Swamp Ooze SAI
+SET @ENTRY := 4394;
+SET @SPELL_END_CHANNEL := 42485;
+SET @SPELL_BUBBLING_OOZE := 43135;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,0,@SPELL_END_CHANNEL,0,0,0,33,23797,0,0,0,0,0,7,0,0,0,0,0,0,0,"Bubbling Swamp Ooze - On Spellhit - Quest Credit"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,11,@SPELL_BUBBLING_OOZE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Bubbling Swamp Ooze - At 15% HP - Cast Bubbling Ooze");
diff --git a/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql b/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql
new file mode 100644
index 00000000000..78a1fbc98c9
--- /dev/null
+++ b/sql/updates/world/2011_12_25_02_world_areatrigger_scriptnames.sql
@@ -0,0 +1,5 @@
+-- Areatrigger scriptname for Brewfest
+DELETE FROM `areatrigger_scripts` WHERE `entry` IN (4829,4820);
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(4829,'at_brewfest'), -- Durotar
+(4820,'at_brewfest'); -- Dun Morogh
diff --git a/sql/updates/world/2011_12_25_02_world_misc.sql b/sql/updates/world/2011_12_25_02_world_misc.sql
new file mode 100644
index 00000000000..ee2fd9c1964
--- /dev/null
+++ b/sql/updates/world/2011_12_25_02_world_misc.sql
@@ -0,0 +1,89 @@
+-- Make the human versions in Pyrewood Village despawn during night and the worgens spawn during night
+SET @GUID := 152280;
+DELETE FROM `game_event_creature` WHERE `eventEntry`=25;
+INSERT INTO `game_event_creature` (`eventEntry`,`guid`) VALUES
+-- Humans
+(-25,17908),(-25,18404),(-25,18408),
+(-25,19002),(-25,19005),(-25,19084),
+(-25,19219),(-25,19222),(-25,19223),
+(-25,19224),(-25,19227),(-25,19229),
+(-25,19316),(-25,19343),(-25,18307),
+(-25,17911),(-25,17910),(-25,18236),
+(-25,18237),(-25,18239),(-25,18291),
+(-25,18306),(-25,18350),(-25,18400),
+(-25,18411),(-25,18413),(-25,18996),
+(-25,19008),(-25,19012),(-25,19015),
+(-25,19019),(-25,19220),(-25,19228),
+(-25,17663),(-25,17905),(-25,18220),
+(-25,18221),(-25,18238),(-25,18310),
+(-25,18354),(-25,18355),(-25,18405),
+(-25,18407),(-25,18409),(-25,19007),
+(-25,18235),(-25,18309),
+-- Worgens
+(25,@GUID+1),(25,@GUID+2),(25,@GUID+3),
+(25,@GUID+4),(25,@GUID+5),(25,@GUID+6),
+(25,@GUID+7),(25,@GUID+8),(25,@GUID+9),
+(25,@GUID+10),(25,@GUID+11),(25,@GUID+12),
+(25,@GUID+13),(25,@GUID+14),(25,@GUID+15),
+(25,@GUID+16),(25,@GUID+17),(25,@GUID+18),
+(25,@GUID+19),(25,@GUID+20),(25,@GUID+21),
+(25,@GUID+22),(25,@GUID+23),(25,@GUID+24),
+(25,@GUID+25),(25,@GUID+26),(25,@GUID+27),
+(25,@GUID+28),(25,@GUID+29),(25,@GUID+30),
+(25,@GUID+31),(25,@GUID+32),(25,@GUID+33),
+(25,@GUID+34),(25,@GUID+35),(25,@GUID+36),
+(25,@GUID+37),(25,@GUID+38),(25,@GUID+39),
+(25,@GUID+40),(25,@GUID+41),(25,@GUID+42),
+(25,@GUID+43),(25,@GUID+44),(25,@GUID+45),
+(25,@GUID+46),(25,@GUID+0);
+
+-- Spawn all Moonrage versions of the humans
+DELETE FROM `creature` WHERE `id` IN (3533,3531,3529,1896,1893,1892);
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES
+(@GUID+0,3533,0,1,1,0,-408.091,1604.03,18.2868,5.5676,600,0,0,300,0,0,0,0,0),
+(@GUID+1,3531,0,1,1,0,-360.278,1495.03,17.196,0.830526,600,0,0,328,0,0,0,0,0),
+(@GUID+2,3529,0,1,1,0,-345.967,1501.4,18.9875,0.942478,600,0,0,328,0,0,0,0,0),
+(@GUID+3,1896,0,1,1,0,-327.462,1555.21,25.2491,1.61376,600,0,0,276,295,0,0,0,0),
+(@GUID+4,1896,0,1,1,0,-407.955,1451.33,27.0859,0.767945,600,0,0,276,295,0,0,0,0),
+(@GUID+5,1896,0,1,1,0,-391.907,1432.23,27.0313,6.07375,600,0,0,276,295,0,0,0,0),
+(@GUID+6,1896,0,1,1,0,-344.082,1504.01,18.7918,4.18879,600,0,0,276,295,0,0,0,0),
+(@GUID+7,1896,0,1,1,0,-329.456,1545.74,30.1367,2.26893,600,0,0,276,295,0,0,0,0),
+(@GUID+8,1896,0,1,1,0,-414.124,1581.03,19.7275,6.10865,600,0,0,276,295,0,0,0,0),
+(@GUID+9,1896,0,1,1,0,-413.706,1579.64,24.2994,2.9861,600,0,0,276,295,0,0,0,0),
+(@GUID+10,1896,0,1,1,0,-423.094,1578.33,24.3098,2.98749,600,0,0,276,295,0,0,0,0),
+(@GUID+11,1896,0,1,1,0,-411.947,1517.76,19.7711,4.86947,600,0,0,276,295,0,0,0,0),
+(@GUID+12,1896,0,1,1,0,-424.202,1543.84,18.5687,6.17846,600,0,0,276,295,0,0,0,0),
+(@GUID+13,1896,0,1,1,0,-397.475,1543.61,17.1712,3.0459,600,5,0,276,295,1,0,0,0),
+(@GUID+14,1896,0,1,1,0,-378.435,1625.51,16.8077,0.694863,600,3,0,276,295,1,0,0,0),
+(@GUID+15,1893,0,1,1,0,-404.028,1460.9,31.7653,5.84685,600,0,0,300,0,0,0,0,0),
+(@GUID+16,1893,0,1,1,0,-410.983,1453.18,31.679,5.59007,600,5,0,300,0,1,0,0,0),
+(@GUID+17,1893,0,1,1,0,-333.219,1548.41,25.2864,4.7729,600,0,0,300,0,0,0,0,0),
+(@GUID+18,1893,0,1,1,0,-339.031,1547.76,30.0369,3.83411,600,3,0,300,0,1,0,0,0),
+(@GUID+19,1893,0,1,1,0,-341.711,1553.34,24.5273,3.26377,600,0,0,300,0,0,0,0,0),
+(@GUID+20,1893,0,1,1,0,-380.605,1435.24,25.7369,5.98648,600,0,0,300,0,0,0,0,0),
+(@GUID+21,1893,0,1,1,0,-378.287,1655.98,10.346,2.89725,600,3,0,300,0,1,0,0,0),
+(@GUID+22,1893,0,1,1,0,-411.642,1509.01,19.8575,1.55334,600,0,0,300,0,0,0,0,0),
+(@GUID+23,1893,0,1,1,0,-390.535,1466.63,25.9869,5.34071,600,0,0,300,0,0,0,0,0),
+(@GUID+24,1893,0,1,1,0,-391.615,1601.72,17.1706,4.86947,600,0,0,300,0,0,0,0,0),
+(@GUID+25,1893,0,1,1,0,-355.263,1580.06,18.0622,0.078739,600,0,0,300,0,0,0,0,0),
+(@GUID+26,1893,0,1,1,0,-442.388,1539.5,19.6376,4.53468,600,5,0,300,0,1,0,0,0),
+(@GUID+27,1893,0,1,1,0,-389.73,1634.41,17.4309,6.20095,600,0,0,300,0,0,0,0,0),
+(@GUID+28,1893,0,1,1,0,-385.558,1618.24,24.2887,4.07713,600,3,0,300,0,1,0,0,0),
+(@GUID+29,1893,0,1,1,0,-385.776,1632.95,24.2887,3.83402,600,0,0,300,0,0,0,0,0),
+(@GUID+30,1893,0,1,1,0,-384.391,1560.98,17.1156,2.65866,600,5,0,300,0,1,0,0,0),
+(@GUID+31,1893,0,1,1,0,-420.551,1544.65,18.3187,2.70724,600,0,0,300,0,2,0,0,0),
+(@GUID+32,1893,0,1,1,0,-372.427,1611.08,24.3721,1.32645,600,0,0,300,0,0,0,0,0),
+(@GUID+33,1892,0,1,1,0,-405.033,1458.8,27.0968,0.15708,600,0,0,300,0,0,0,0,0),
+(@GUID+34,1892,0,1,1,0,-350.427,1448.5,24.3665,4.72984,600,0,0,300,0,0,0,0,0),
+(@GUID+35,1892,0,1,1,0,-370.983,1576.35,16.981,1.98656,600,0,0,300,0,2,0,0,0),
+(@GUID+36,1892,0,1,1,0,-377.63,1491.95,18.4887,5.32325,600,0,0,300,0,0,0,0,0),
+(@GUID+37,1892,0,1,1,0,-381.301,1653.14,17.7911,4.4855,600,0,0,300,0,0,0,0,0),
+(@GUID+38,1892,0,1,1,0,-354.378,1421.62,28.2597,5.14872,600,0,0,300,0,0,0,0,0),
+(@GUID+39,1892,0,1,1,0,-432.435,1531.27,18.7313,4.20121,600,5,0,300,0,1,0,0,0),
+(@GUID+40,1892,0,1,1,0,-350.822,1606.93,18.0028,3.78911,600,0,0,300,0,0,0,0,0),
+(@GUID+41,1892,0,1,1,0,-416.268,1576.92,19.5441,3.61468,600,0,0,300,0,0,0,0,0),
+(@GUID+42,1892,0,1,1,0,-439.617,1517.84,19.5619,3.33314,600,5,0,300,0,1,0,0,0),
+(@GUID+43,1892,0,1,1,0,-358.11,1528.2,24.9468,1.18862,600,0,0,300,0,0,0,0,0),
+(@GUID+44,1892,0,1,1,0,-433.404,1564.13,19.7291,1.48262,600,5,0,300,0,1,0,0,0),
+(@GUID+45,1892,0,1,1,0,-363.818,1545.45,24.4813,3.24746,600,0,0,300,0,0,0,0,0),
+(@GUID+46,1892,0,1,1,0,-345.242,1601.84,17.0845,2.23485,600,0,0,300,0,0,0,0,0);
diff --git a/sql/updates/world/2011_12_25_02_world_sai.sql b/sql/updates/world/2011_12_25_02_world_sai.sql
new file mode 100644
index 00000000000..f0d69b04964
--- /dev/null
+++ b/sql/updates/world/2011_12_25_02_world_sai.sql
@@ -0,0 +1,47 @@
+-- Terenthis SAI
+SET @ENTRY := 3693;
+SET @QUEST := 986;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `quest_end_scripts` WHERE `id`=993; -- For some reason this entry was different..
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+-- Start quest
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,12,6086,1,25000,0,0,0,8,0,0,0,6435.25,368.004,13.9412,1.09956,"Terenthis - On Script - Summon Auberdine Sentinel"),
+(@ENTRY*100,9,1,0,0,0,100,0,5000,5000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 0"),
+(@ENTRY*100,9,2,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 1"),
+(@ENTRY*100,9,3,0,0,0,100,0,9000,9000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 2"),
+-- End quest
+(@ENTRY,0,1,0,20,0,100,0,@QUEST,0,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Quest Finish - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,12,3695,1,50000,0,0,0,8,0,0,0,6435.25,368.004,13.9412,1.09956,"Terenthis - On Script - Summon Grimclaw"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 3"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,7000,7000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 4"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,9000,9000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 5"),
+(@ENTRY*100+1,9,4,0,0,0,100,0,11000,11000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 6"),
+(@ENTRY*100+1,9,5,0,0,0,100,0,14000,14000,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Terenthis - On Script - Say Line 7");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000009,2000000010,2000000011,2000000050,2000000051,2000000052,2000000053,2000000054);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"What is happening?",12,0,0,0,0,0,"Terenthis"),
+(@ENTRY,1,0,"Volcor needs help?",12,0,0,0,0,0,"Terenthis"),
+(@ENTRY,2,0,"All right, I shall find people to help him.",12,0,0,0,0,0,"Terenthis"),
+
+(@ENTRY,3,0,"Hello Grimclaw.",12,0,0,0,0,0,"Terenthis"),
+(@ENTRY,4,0,"What is happening?",12,0,0,0,0,0,"Terenthis"),
+(@ENTRY,5,0,"Volcor needs help?",12,0,0,0,0,0,"Terenthis"),
+(@ENTRY,6,0,"You know where he is?",12,0,0,0,0,0,"Terenthis"),
+(@ENTRY,7,0,"Well, ok. I am sending people. We will need to find and help him!",12,0,0,0,0,0,"Terenthis");
+
+-- Grimclaw SAI
+SET @ENTRY := 3695;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,22,0,100,0,101,5000,5000,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grimclaw - Emote Receive 'Wave' - Emote Line 0");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Grimclaw growls in your direction before taking time to sniff you.",16,0,0,0,0,0,"Grimclaw");
diff --git a/sql/updates/world/2011_12_25_03_world_misc.sql b/sql/updates/world/2011_12_25_03_world_misc.sql
new file mode 100644
index 00000000000..a8967354a3d
--- /dev/null
+++ b/sql/updates/world/2011_12_25_03_world_misc.sql
@@ -0,0 +1,3 @@
+-- The Thunderspike
+UPDATE `gameobject_template` SET `AIName`='',`ScriptName`='go_thunderspike' WHERE `entry`=184729;
+DELETE FROM `event_scripts` WHERE `id`=13685;
diff --git a/sql/updates/world/2011_12_25_03_world_sai.sql b/sql/updates/world/2011_12_25_03_world_sai.sql
new file mode 100644
index 00000000000..e53c9f72e38
--- /dev/null
+++ b/sql/updates/world/2011_12_25_03_world_sai.sql
@@ -0,0 +1,52 @@
+-- [Q] [A] Escape Through Force
+-- [Q] [A] Escape Through Stealth
+-- Volcor SAI
+SET @ENTRY := 3692;
+SET @QUEST_FORCE := 994;
+SET @QUEST_STEALTH := 995;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id` IN (@QUEST_FORCE,@QUEST_STEALTH);
+DELETE FROM `quest_start_scripts` WHERE `id` IN (@QUEST_FORCE,@QUEST_STEALTH);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST_FORCE,0,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Volcor - On Script - Start WP"),
+(@ENTRY*100,9,2,0,0,0,100,0,135000,135000,0,0,1,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Volcor - On Script - Say Line 2"),
+(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,15,@QUEST_FORCE,0,0,0,0,7,0,0,0,0,0,0,0,0,"Volcor - On Script - Quest Credit"),
+
+(@ENTRY,0,1,0,19,0,100,0,@QUEST_STEALTH,0,0,0,80,@ENTRY*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Quest Accept - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,"Volcor - On Script - Say Line 0"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Volcor - On Script - Start WP"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,135000,135000,0,0,1,3,0,0,0,0,0,7,0,0,0,0,0,0,0,"Volcor - On Script - Say Line 3"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,0,0,0,0,15,@QUEST_STEALTH,0,0,0,0,7,0,0,0,0,0,0,0,0,"Volcor - On Script - Quest Credit"),
+
+(@ENTRY,0,2,0,40,0,100,0,15,@ENTRY*100,0,0,41,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Volcor - On WP 15 - Forced Despawn"),
+(@ENTRY,0,3,0,4,0,100,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,"Volcor - On Aggro - Say Line 1");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` BETWEEN 2000000012 AND 2000000016;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"All right, let's go.",12,0,100,0,0,0,"Volcor"),
+(@ENTRY,1,0,"Oh no! They are here!",12,0,100,0,0,0,"Volcor"),
+(@ENTRY,2,0,"OK, $N. Now I can get to the Auberdine alone. Go to Terenthis, he's waiting for you. Thanks for the help!",12,0,100,0,0,0,"Volcor"),
+(@ENTRY,3,0,"OK, good luck friend. Thanks for the help.",12,0,100,0,0,0,"Volcor");
+
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,4606.61,2.96905,69.909,"Volcor"),
+(@ENTRY,2,4615.56,19.7957,70.7951,"Volcor"),
+(@ENTRY,3,4626.26,38.1105,69.0281,"Volcor"),
+(@ENTRY,4,4633.11,48.379,67.5631,"Volcor"),
+(@ENTRY,5,4637.2,71.7156,63.3412,"Volcor"),
+(@ENTRY,6,4645.39,88.5048,60.3851,"Volcor"),
+(@ENTRY,7,4660.2,104.218,58.4603,"Volcor"),
+(@ENTRY,8,4675.33,115.93,56.8969,"Volcor"),
+(@ENTRY,9,4688.21,131.397,55.5033,"Volcor"),
+(@ENTRY,10,4701.45,145.562,53.2203,"Volcor"),
+(@ENTRY,11,4709.21,155.279,52.0846,"Volcor"),
+(@ENTRY,12,4716.9,169.528,53.5005,"Volcor"),
+(@ENTRY,13,4725.44,180.07,54.7346,"Volcor"),
+(@ENTRY,14,4734.01,194.431,55.3888,"Volcor"),
+(@ENTRY,15,4747.92,209.436,53.1076,"Volcor");
diff --git a/sql/updates/world/2011_12_26_00_world_sai.sql b/sql/updates/world/2011_12_26_00_world_sai.sql
new file mode 100644
index 00000000000..616ced60147
--- /dev/null
+++ b/sql/updates/world/2011_12_26_00_world_sai.sql
@@ -0,0 +1,44 @@
+-- [Q] [A/H] Therylune's Escape
+-- Therylune SAI
+SET @ENTRY := 3584;
+SET @QUEST := 945;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,19,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Therylune - On Quest Accept - Say Line 0"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Therylune - On Quest Accept - Start WP"),
+(@ENTRY,0,2,3,40,0,100,0,20,@ENTRY,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Therylune - On WP 20 - Say Line 1"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,7,0,0,0,0,0,0,0,0,"Therylune - On WP 20 - Quest Credit"),
+(@ENTRY,0,4,0,40,0,100,0,21,@ENTRY,0,0,41,5000,0,0,0,0,1,0,0,0,0,0,0,0,0,"Therylune - On WP 21 - Forced Despawn");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000017,2000000018);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Ok, let's go!",12,0,100,0,0,0,"Therylune"),
+(@ENTRY,1,0,"I can make it the rest of the way, $N. Thanks!",12,0,100,0,0,0,"Therylune");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,4520.4,420.235,33.5284,"Therylune"),
+(@ENTRY,2,4512.26,408.881,32.9308,"Therylune"),
+(@ENTRY,3,4507.94,396.47,32.9476,"Therylune"),
+(@ENTRY,4,4507.53,383.781,32.995,"Therylune"),
+(@ENTRY,5,4512.1,374.02,33.166,"Therylune"),
+(@ENTRY,6,4519.75,373.241,33.1574,"Therylune"),
+(@ENTRY,7,4592.41,369.127,31.4893,"Therylune"),
+(@ENTRY,8,4598.55,364.801,31.4947,"Therylune"),
+(@ENTRY,9,4602.76,357.649,32.9265,"Therylune"),
+(@ENTRY,10,4597.88,352.629,34.0317,"Therylune"),
+(@ENTRY,11,4590.23,350.9,36.2977,"Therylune"),
+(@ENTRY,12,4581.5,348.254,38.3878,"Therylune"),
+(@ENTRY,13,4572.05,348.059,42.3539,"Therylune"),
+(@ENTRY,14,4564.75,344.041,44.2463,"Therylune"),
+(@ENTRY,15,4556.63,341.003,47.6755,"Therylune"),
+(@ENTRY,16,4554.38,334.968,48.8003,"Therylune"),
+(@ENTRY,17,4557.63,329.783,49.9532,"Therylune"),
+(@ENTRY,18,4563.32,316.829,53.2409,"Therylune"),
+(@ENTRY,19,4566.09,303.127,55.0396,"Therylune"),
+(@ENTRY,20,4561.65,295.456,57.0984,"Therylune"),
+(@ENTRY,21,4551.03,293.333,57.1534,"Therylune");
diff --git a/sql/updates/world/2011_12_26_01_world_sai.sql b/sql/updates/world/2011_12_26_01_world_sai.sql
new file mode 100644
index 00000000000..50283820dc8
--- /dev/null
+++ b/sql/updates/world/2011_12_26_01_world_sai.sql
@@ -0,0 +1,39 @@
+-- [Q] [A/H] Enchanted Azsharite Fel Weaponry
+-- [Q] [A/H] Expert Blacksmith!
+-- Galvan the Ancient SAI
+SET @ENTRY := 7802;
+SET @QUEST_ENCHANTED := 3625;
+SET @QUEST_EXPERT_BS := 2765;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id` IN (@QUEST_ENCHANTED,@QUEST_EXPERT_BS);
+UPDATE `creature` SET `position_x`=-12033.400391,`position_y`=-1003.859985,`position_z`=49.779499,`orientation`=3.910880 WHERE `guid`=384 AND `id`=@ENTRY; -- Galvan the Ancient should be at a different position..
+DELETE FROM `creature` WHERE `guid`=1864 AND `id`=684; -- Flying panther in the middle of our event spot..
+DELETE FROM `creature_addon` WHERE `guid`=1864;
+DELETE FROM `quest_start_scripts` WHERE `id` IN (@QUEST_ENCHANTED,@QUEST_EXPERT_BS);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST_ENCHANTED,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.5,-1008.7,49.4,3.66,"Galvan the Ancient - On Script - Move To Anvil"),
+(@ENTRY*100,9,1,0,0,0,100,0,4000,4000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,2,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,3,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,4,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,5,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.988281,-1007.649170,49.481323,2.364430,"Galvan the Ancient - On Script - Move To Forge"),
+(@ENTRY*100,9,6,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,7,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,8,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,9,0,0,0,100,0,2000,2000,0,0,15,@QUEST_ENCHANTED,0,0,0,0,0,7,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Quest Credit"),
+(@ENTRY*100,9,10,0,0,0,100,0,5000,5000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12033.400391,-1003.859985,49.779499,3.910880,"Galvan the Ancient - On Script - Move To Homeposition"),
+
+(@ENTRY,0,1,0,19,0,100,0,@QUEST_EXPERT_BS,0,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Quest Accept - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.5,-1008.7,49.4,3.66,"Galvan the Ancient - On Script - Move To Anvil"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,4000,4000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,4,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,5,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12040.988281,-1007.649170,49.481323,2.364430,"Galvan the Ancient - On Script - Move To Forge"),
+(@ENTRY*100+1,9,6,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,7,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,8,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100+1,9,9,0,0,0,100,0,2000,2000,0,0,15,@QUEST_EXPERT_BS,0,0,0,0,0,7,0,0,0,0,0,0,0,"Galvan the Ancient - On Script - Quest Credit"),
+(@ENTRY*100+1,9,10,0,0,0,100,0,5000,5000,0,0,69,0,0,0,0,0,0,8,0,0,0,-12033.400391,-1003.859985,49.779499,3.910880,"Galvan the Ancient - On Script - Move To Homeposition");
diff --git a/sql/updates/world/2011_12_26_02_world_sai.sql b/sql/updates/world/2011_12_26_02_world_sai.sql
new file mode 100644
index 00000000000..6da23e21875
--- /dev/null
+++ b/sql/updates/world/2011_12_26_02_world_sai.sql
@@ -0,0 +1,58 @@
+-- [Q] [A/H] The Summoning
+-- Bath'rah the Windwatcher SAI
+SET @ENTRY := 6176;
+SET @QUEST := 1713;
+SET @SPELL_SUMMON := 8606;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Start WP"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Say Line 0"),
+(@ENTRY,0,1,0,0,0,100,0,7,@ENTRY,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On WP 7 - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,11,@SPELL_SUMMON,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Cast Summon Cyclonian"),
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Say Line 1"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,15000,15000,0,0,53,0,@ENTRY*10,0,0,0,2,1,0,0,0,0,0,0,0,"Bath'rah the Windwatcher - On Script - Start WP");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry` IN (@ENTRY,@ENTRY*10);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY,2,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY,3,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY,4,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY,5,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY,6,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,7,323.83,-1468.92,42.24,"Bath'rah the Windwatcher"),
+
+(@ENTRY*10,1,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY*10,2,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY*10,3,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY*10,4,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY*10,5,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY*10,6,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY*10,7,250.84,-1470.58,55.4491,"Bath'rah the Windwatcher");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000029,2000000043);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Follow me, $N. I will soon begin the summoning.",12,0,100,0,0,0,"Bath'rah the Windwatcher"),
+(@ENTRY,1,0,"%s begins a spell of summoning...",41,0,100,0,0,0,"Bath'rah the Windwatcher");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY,2,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY,3,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY,4,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY,5,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY,6,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,7,323.83,-1468.92,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,8,332.73,-1455.6,42.24,"Bath'rah the Windwatcher"),
+(@ENTRY,9,329.59,-1442.08,40.31,"Bath'rah the Windwatcher"),
+(@ENTRY,10,297.77,-1436.7,46.96,"Bath'rah the Windwatcher"),
+(@ENTRY,11,273.74,-1433.18,50.29,"Bath'rah the Windwatcher"),
+(@ENTRY,12,256.87,-1440.35,50.09,"Bath'rah the Windwatcher"),
+(@ENTRY,13,253.05,-1459.09,52.09,"Bath'rah the Windwatcher"),
+(@ENTRY,14,250.84,-1470.58,55.4491,"Bath'rah the Windwatcher");
diff --git a/sql/updates/world/2011_12_26_03_world_sai.sql b/sql/updates/world/2011_12_26_03_world_sai.sql
new file mode 100644
index 00000000000..07333e50a91
--- /dev/null
+++ b/sql/updates/world/2011_12_26_03_world_sai.sql
@@ -0,0 +1,25 @@
+-- [Q] [A/H] Freed from the Hive
+-- Zukk'ash Pod SAI
+SET @ENTRY := 164954;
+SET @QUEST := 4265;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,1,0,0,19,0,100,0,@QUEST,0,0,0,12,9546,1,25000,0,0,0,8,0,0,0,-5314.81,430.89,11.79,3.46,"Zukk'ash Pod - On Quest Accept - Summon Raschal the Courier");
+-- Raschal the Courier SAI
+SET @ENTRY := 9546;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Raschal the Courier - Just Summoned - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Say Line 1"),
+(@ENTRY*100,9,2,0,0,0,100,0,8000,8000,0,0,15,@QUEST,0,0,0,0,7,0,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Quest Credit"),
+(@ENTRY*100,9,3,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,1,0,0,0,0,0,0,0,0,"Raschal the Courier - On Script - Forced Despawn");
+-- Text
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Oh man, I thought I was dead for sure. Ugh... still dizzy...",12,0,100,0,0,0,"Raschal the Courier"),
+(@ENTRY,1,0,"I can get back to the Stronghold on my own, I think. Now that you bought me some time, I should be able to stealth out of here. Who ever you are... thank you. May Elune bless you always!",12,0,100,0,0,0,"Raschal the Courier");
diff --git a/sql/updates/world/2011_12_26_04_world_sai.sql b/sql/updates/world/2011_12_26_04_world_sai.sql
new file mode 100644
index 00000000000..c508773c51a
--- /dev/null
+++ b/sql/updates/world/2011_12_26_04_world_sai.sql
@@ -0,0 +1,28 @@
+-- [Q] [A] The Touch of Zanzil
+-- Doc Mixilpixil SAI
+SET @ENTRY := 7207;
+SET @QUEST := 2608;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,5,353,0,0,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Emote STATE_SPELLKNEELSTART"),
+(@ENTRY*100,9,1,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Say Line 0"),
+(@ENTRY*100,9,2,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Say Line 1"),
+(@ENTRY*100,9,3,0,0,0,100,0,3000,3000,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,"Doc Mixilpixil - On Script - Start WP"),
+(@ENTRY,0,1,2,40,0,100,0,3,@ENTRY,0,0,41,5000,0,0,0,0,1,0,0,0,0,0,0,0,0,"Doc Mixilpixil - On WP 3 - Make Ready To Despawn"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,7,0,0,0,0,0,0,0,0,"Doc Mixilpixil - On WP 3 - Quest Credit");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000020,2000000021);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"That's interesting...",12,0,100,0,0,0,"Doc Mixilpixil"),
+(@ENTRY,1,0,"I need to consult Noram and Horatio.",12,0,100,0,0,0,"Doc Mixilpixil");
+-- Waypoints
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@ENTRY,1,-8805.29,338.5,95.09,"Doc Mixilpixil"),
+(@ENTRY,2,-8804.15,325.58,95.09,"Doc Mixilpixil"),
+(@ENTRY,3,-8805.56,331.96,95.09,"Doc Mixilpixil");
diff --git a/sql/updates/world/2011_12_26_05_world_sai.sql b/sql/updates/world/2011_12_26_05_world_sai.sql
new file mode 100644
index 00000000000..0155c3ad39b
--- /dev/null
+++ b/sql/updates/world/2011_12_26_05_world_sai.sql
@@ -0,0 +1,25 @@
+-- [Q] [A/H] The Torch of Retribution
+-- Kalaran Windblade SAI
+SET @ENTRY := 8479;
+SET @QUEST := 3453;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,10000,10000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,1,0,0,0,100,0,8000,8000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,2,0,0,0,100,0,7000,7000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,3,0,0,0,100,0,10000,10000,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Say Line 0"),
+(@ENTRY*100,9,4,0,0,0,100,0,5000,5000,0,0,11,12511,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Cast Torch Combine"),
+(@ENTRY*100,9,5,0,0,0,100,0,1000,1000,0,0,70,0,0,0,0,0,0,14,24166,149410,0,0,0,0,0,"Kalaran Windblade - On Script - Respawn Light of Retribution (GO)"),
+(@ENTRY*100,9,6,0,0,0,100,0,2000,2000,0,0,70,0,0,0,0,0,0,14,16762,149047,0,0,0,0,0,"Kalaran Windblade - On Script - Respawn Torch of Retribution (GO)"),
+(@ENTRY*100,9,7,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Say Line 1"),
+(@ENTRY*100,9,8,0,0,0,100,0,1000,1000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kalaran Windblade - On Script - Quest Credit");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry` IN (2000000019,2000000044);
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Be patient, $N. The torch is almost done.",12,0,100,0,0,0,"Kalaran Windblade"),
+(@ENTRY,1,0,"It is done...",12,0,100,0,0,0,"Kalaran Windblade");
diff --git a/sql/updates/world/2011_12_26_06_world_sai.sql b/sql/updates/world/2011_12_26_06_world_sai.sql
new file mode 100644
index 00000000000..6335bd9f475
--- /dev/null
+++ b/sql/updates/world/2011_12_26_06_world_sai.sql
@@ -0,0 +1,27 @@
+-- [Q] [A/H] Did You Lose This?
+-- Trenton Lighthammer SAI
+SET @ENTRY := 7804;
+SET @QUEST := 3321;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `quest_end_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,20,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Trenton Lighthammer - On Quest Complete - Say Line 0"),
+(@ENTRY,0,1,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,1,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,2,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,3,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,4,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,5,0,0,0,100,0,2000,2000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.842743,"Trenton Lighthammer - On Script - Face Forge"),
+(@ENTRY*100,9,6,0,0,0,100,0,1000,1000,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,7,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,8,0,0,0,100,0,1500,1500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Emote STATE_WORK_SHEATHED"),
+(@ENTRY*100,9,9,0,0,0,100,0,2000,2000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Trenton Lighthammer - On Script - Quest Credit");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry`=2000000076;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Hear ye, denizens of Tanaris! Let it be known $N is an exalted member of the Mithril Order. A blacksmith of honor, dedication, and infinite patience. Three cheers for $N!",14,0,100,0,0,0,"Trenton Lighthammer");
diff --git a/sql/updates/world/2011_12_26_07_world_sai.sql b/sql/updates/world/2011_12_26_07_world_sai.sql
new file mode 100644
index 00000000000..ffe55b0e5f9
--- /dev/null
+++ b/sql/updates/world/2011_12_26_07_world_sai.sql
@@ -0,0 +1,18 @@
+-- [Q] [A/H] Scarlet Armies Approach...
+-- Orbaz Bloodbane SAI
+SET @ENTRY := 28914;
+SET @QUEST := 12757;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,3000,3000,0,0,11,53097,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Script - Cast Portal: Acherus");
+-- Text
+DELETE FROM `waypoint_scripts` WHERE `id`=491;
+DELETE FROM `db_script_string` WHERE `entry`=2000000008;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Make haste, $N. Use the portal!",12,0,100,25,0,0,"Orbaz Bloodlane");
diff --git a/sql/updates/world/2011_12_26_08_world_sai.sql b/sql/updates/world/2011_12_26_08_world_sai.sql
new file mode 100644
index 00000000000..6633e97f2b4
--- /dev/null
+++ b/sql/updates/world/2011_12_26_08_world_sai.sql
@@ -0,0 +1,19 @@
+-- [Q] [H] Hinott's Assistance
+-- Serge Hinott SAI
+SET @ENTRY := 2391;
+SET @QUEST := 2480;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Serge Hinott - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-4.33,-900.68,57.54,1.54,"Serge Hinott - On Script - Move To Pos"),
+(@ENTRY*100,9,1,0,0,0,100,0,18000,18000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Serge Hinott - On Script - Say Line 0"),
+(@ENTRY*100,9,2,0,0,0,100,0,10000,10000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Serge Hinott - On Script - Quest Credit"),
+(@ENTRY*100,9,3,0,0,0,100,0,1000,1000,0,0,69,0,0,0,0,0,0,8,0,0,0,-4.66,-903.92,57.54,3.48,"Serge Hinott - On Script - Move To Pos");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry`=2000000026;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Whoops!",12,0,100,113,0,0,"Serge Hinott");
diff --git a/sql/updates/world/2012_01_02_00_world_sai.sql b/sql/updates/world/2012_01_02_00_world_sai.sql
new file mode 100644
index 00000000000..3b9abd4c746
--- /dev/null
+++ b/sql/updates/world/2012_01_02_00_world_sai.sql
@@ -0,0 +1,41 @@
+-- [Q] Plan B (11658)
+SET @ENTRY_GUARD := 25342; -- Dead Caravan Guard
+SET @ENTRY_WORKER := 25343; -- Dead Caravan Worker
+SET @ITEM := 34842; -- Warsong Outfit
+SET @GOSSIP_1 := 9155;
+SET @GOSSIP_2 := 9156;
+SET @QUEST := 11658; -- Plan B
+
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP_1;
+DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP_2;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(@GOSSIP_1, 12388),
+(@GOSSIP_2, 12389);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP_1;
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP_2;
+INSERT INTO `gossip_menu_option` VALUES
+(@GOSSIP_1, 0, 0, 'Retrieve Warsong Outfit.', 1, 1, 0, 0, 0, 0, ''),
+(@GOSSIP_2, 0, 0, 'Retrieve Warsong Outfit.', 1, 1, 0, 0, 0, 0, '');
+
+UPDATE `creature_template` SET `npcflag`=`npcflag`|1 WHERE `entry` IN (@ENTRY_GUARD, @ENTRY_WORKER);
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=25342 AND `id`=2534201;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=25343 AND `id`=2534301;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@ENTRY_GUARD, @ENTRY_WORKER);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY_GUARD AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY_WORKER AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`)
+VALUES
+(@ENTRY_GUARD, 0, 0, 1, 62, 0, 100, 0, @GOSSIP_1, 0, 0, 0, 56, @ITEM, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Guard - On Gossip Select - Add Item Warsong Outfit'),
+(@ENTRY_GUARD, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Guard - On Gossip Select - Forced Despawn'),
+(@ENTRY_WORKER, 0, 0, 1, 62, 0, 100, 0, @GOSSIP_2, 0, 0, 0, 56, @ITEM, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Worker - On Gossip Select - Add Item Warsong Outfit'),
+(@ENTRY_WORKER, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dead Caravan Worker - On Gossip Select - Forced Despawn');
+
+-- Conditions
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP_1;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP_2;
+INSERT INTO `conditions` VALUES
+(15, @GOSSIP_1, 0, 0, 9, @QUEST, 0, 0, 0, '', 'Only show gossip if player has quest Plan B'),
+(15, @GOSSIP_2, 0, 0, 9, @QUEST, 0, 0, 0, '', 'Only show gossip if player has quest Plan B'),
+(15, @GOSSIP_1, 0, 0, 2, @ITEM, 10, 0, 0, '', 'Only show gossip if player has less then 10 outfits'),
+(15, @GOSSIP_2, 0, 0, 2, @ITEM, 10, 0, 0, '', 'Only show gossip if player has less then 10 outfits');
diff --git a/sql/updates/world/2012_01_02_01_world_game_event.sql b/sql/updates/world/2012_01_02_01_world_game_event.sql
new file mode 100644
index 00000000000..11267a6b296
--- /dev/null
+++ b/sql/updates/world/2012_01_02_01_world_game_event.sql
@@ -0,0 +1,4 @@
+-- More Darkmoon Faerie synchronization
+UPDATE `game_event` SET `start_time`='2012-02-05 00:01:00' WHERE `eventEntry`=3;
+UPDATE `game_event` SET `start_time`='2012-03-04 00:01:00' WHERE `eventEntry`=4;
+UPDATE `game_event` SET `start_time`='2012-01-01 00:01:00' WHERE `eventEntry`=5;
diff --git a/sql/updates/world/2012_01_02_02_world_creature_template.sql b/sql/updates/world/2012_01_02_02_world_creature_template.sql
new file mode 100644
index 00000000000..ed95c4450fd
--- /dev/null
+++ b/sql/updates/world/2012_01_02_02_world_creature_template.sql
@@ -0,0 +1,21 @@
+-- Kill xp exploit, mobs spawned by portal keepers don't gives xp on retail. (ie mobs 30662, 30664)
+UPDATE `creature_template` SET `flags_extra`= `flags_extra`|64 WHERE `entry` IN (
+-- NORMAL
+30661, -- CREATURE_AZURE_INVADER_1
+30961, -- CREATURE_AZURE_INVADER_2
+30662, -- CREATURE_AZURE_SPELLBREAKER_1
+30962, -- CREATURE_AZURE_SPELLBREAKER_2
+30663, -- CREATURE_AZURE_BINDER_1
+30918, -- CREATURE_AZURE_BINDER_2
+30664, -- CREATURE_AZURE_MAGE_SLAYER_1
+30963, -- CREATURE_AZURE_MAGE_SLAYER_2
+-- HEROIC:
+31487, -- Azure Invader
+31494, -- Azure Spellbreaker
+31483, -- Azure Binder
+31497, -- Azure Mage Slayer
+31484, -- Azure Binder
+31488, -- Azure Invader
+31495, -- Azure Spellbreaker
+31498 -- Azure Mage Slayer
+);
diff --git a/sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql b/sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql
new file mode 100644
index 00000000000..282fc58dd3b
--- /dev/null
+++ b/sql/updates/world/2012_01_02_03_world_creature_onkill_reputation.sql
@@ -0,0 +1,57 @@
+-- The Oculus hero
+DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (31558, 31561, 31560, 31559, 30901, 30902, 30903, 30904, 30905, 30906, 30907, 30908, 30909, 30910, 30911, 30912, 30913, 30914, 30991, 30915, 30916, 30879);
+INSERT INTO `creature_onkill_reputation` VALUES
+(31558, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(31561, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(31560, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(31559, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30901, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30902, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30903, 1037, 1052, 7, 0, 30, 7, 0, 30, 1),
+(30904, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30905, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30991, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30906, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30907, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30908, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30909, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30910, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30911, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30912, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30913, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30914, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30879, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30915, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30916, 1037, 1052, 7, 0, 15, 7, 0, 15, 1);
+
+-- Utgarde Pinnacle hero
+DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (30774, 30788, 30807, 30810, 30756, 30762, 30764, 30765, 30766, 30767, 30770, 30772, 30779, 30790, 30803, 30775, 30791, 30804, 30806, 30809, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823);
+INSERT INTO `creature_onkill_reputation` VALUES
+(30774, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30788, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30807, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30810, 1037, 1052, 7, 0, 250, 7, 0, 250, 1),
+(30756, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30762, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30764, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30765, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30766, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30767, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30770, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30772, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30779, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30790, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30803, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30775, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30791, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30804, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30806, 1037, 1052, 7, 0, 30, 7, 0, 30, 1),
+(30809, 1037, 1052, 7, 0, 0, 7, 0, 0, 1),
+(30816, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30817, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30818, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30819, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30820, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30821, 1037, 1052, 7, 0, 15, 7, 0, 15, 1),
+(30822, 1037, 1052, 7, 0, 2, 7, 0, 2, 1),
+(30823, 1037, 1052, 7, 0, 2, 7, 0, 2, 1);
diff --git a/sql/updates/world/2012_01_03_00_world_gossip_menu.sql b/sql/updates/world/2012_01_03_00_world_gossip_menu.sql
new file mode 100644
index 00000000000..9e9bba43b1a
--- /dev/null
+++ b/sql/updates/world/2012_01_03_00_world_gossip_menu.sql
@@ -0,0 +1,17 @@
+-- Gossip Menu insert from sniff
+DELETE FROM `gossip_menu` WHERE `entry`=9918 AND `text_id`=13792;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9918,13792);
+DELETE FROM `gossip_menu` WHERE `entry`=9859 AND `text_id`=13650;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9859,13650);
+DELETE FROM `gossip_menu` WHERE `entry`=9857 AND `text_id`=13651;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9857,13651);
+-- Creature Gossip_menu_id Update from sniff
+UPDATE `creature_template` SET `gossip_menu_id`=10316 WHERE `entry`=33224;
+UPDATE `creature_template` SET `gossip_menu_id`=9918 WHERE `entry`=29430;
+UPDATE `creature_template` SET `gossip_menu_id`=9859 WHERE `entry`=29434;
+-- Creature Gossip_menu_option Update from sniff
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10316,9857,9917) AND `id` IN (0);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`) VALUES
+(10316,0,0, 'Glad to help, my lady. I''m told you were once the guardian of a fabled sword. Do you know where I might find it?',1,1,10315,0,0,0, ''),
+(9857,0,0, 'I''m ready - lets get you out of here.',1,1,0,0,0,0, ''),
+(9917,0,0, 'I am ready to head further into Storm Peaks.',1,1,0,0,0,0, '');
diff --git a/sql/updates/world/2012_01_03_01_world_quest_template.sql b/sql/updates/world/2012_01_03_01_world_quest_template.sql
new file mode 100644
index 00000000000..f35ea3be65b
--- /dev/null
+++ b/sql/updates/world/2012_01_03_01_world_quest_template.sql
@@ -0,0 +1 @@
+UPDATE `quest_template` SET `OfferRewardText`='<Getry looks you over.>$B$BThis is all Ickoris could send?' WHERE `id`=11703;
diff --git a/sql/updates/world/2012_01_03_02_world_sai.sql b/sql/updates/world/2012_01_03_02_world_sai.sql
new file mode 100644
index 00000000000..61ae8aab575
--- /dev/null
+++ b/sql/updates/world/2012_01_03_02_world_sai.sql
@@ -0,0 +1,27 @@
+-- Add text for Lynn Hyal
+DELETE FROM `creature_text` WHERE `entry`=23768;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
+(23768, 1, 0, 'James? James... No, you\'re not James, but I know who you are...', 12, 0, 100, 0, 0, 0, 'Lynn Hyal'),
+(23768, 2, 0, 'You\'re the one who tracked down the brutes who did this to us.', 12, 0, 100, 0, 0, 0, 'Lynn Hyal'),
+(23768, 3, 0, 'I tried so hard to tell Jim... to tell anyone... who was behind this, but I couldn\'t find a way...', 12, 0, 100, 0, 0, 0, 'Lynn Hyal'),
+(23768, 4, 0, 'Thank you for helping us and for helping Jim. If you see him, tell him little Jimmy and I love him and that we\'re waiting for him.', 12, 0, 100, 0, 0, 0, 'Lynn Hyal'),
+(23768, 5, 0, 'I don\'t know when we\'ll see Daddy again, Jimmy, but I know he loves you and he misses you very much.', 12, 0, 100, 0, 0, 0, 'Lynn Hyal');
+-- Add text for Jimmy Hyal
+DELETE FROM `creature_text` WHERE `entry`=23769;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
+(23769, 1, 0, 'Mommy, when will we see Daddy again?', 12, 0, 100, 0, 0, 0, 'Jimmy Hyal');
+-- add smart ai dialog for Lynn Hyal and quest credit at end of dialog
+UPDATE `creature_template` SET AIName="SmartAI" WHERE `entry`=23768;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=23768;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(23768, 0, 0, 0, 1, 0, 100, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lynn Hyal - on spawn - talk 1'),
+(23768, 0, 1, 0, 1, 0, 100, 1, 2000, 2000, 0, 0, 84, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lynn Hyal - after 2 sec - talk 2'),
+(23768, 0, 2, 0, 1, 0, 100, 1, 5000, 5000, 0, 0, 84, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lynn Hyal - after 5 sec - talk 3'),
+(23768, 0, 3, 0, 1, 0, 100, 1, 8000, 8000, 0, 0, 84, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lynn Hyal - after 8 sec - talk 4'),
+(23768, 0, 4, 0, 1, 0, 100, 1, 12000, 12000, 0, 0, 84, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lynn Hyal - after 12 sec - reply to jimmy'),
+(23768, 0, 5, 0, 1, 0, 100, 1, 12000, 12000, 0, 0, 33, 23768, 0, 0, 0, 0, 0, 18, 5, 0, 0, 0, 0, 0, 0, 'Lynn Hyal - after 12 sec - kill credit quest complete');
+-- add smart ai dialog for Jimmy Hyal
+UPDATE `creature_template` SET AIName="SmartAI" WHERE `entry`=23769;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=23769;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(23769, 0, 0, 0, 1, 0, 100, 1, 10000, 10000, 0, 0, 84, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jimmy Hyal - after 10 sec - talk 1');
diff --git a/sql/updates/world/2012_01_03_03_world_creature_template.sql b/sql/updates/world/2012_01_03_03_world_creature_template.sql
new file mode 100644
index 00000000000..29d0e802abe
--- /dev/null
+++ b/sql/updates/world/2012_01_03_03_world_creature_template.sql
@@ -0,0 +1,2 @@
+-- Update faction for Frostmane Troll Whelp "From Sniff"
+UPDATE `creature_template` SET `faction_A`=7,`faction_H`=7 WHERE `entry`=706;
diff --git a/sql/updates/world/2012_01_03_04_world_gameobject_questrelation.sql b/sql/updates/world/2012_01_03_04_world_gameobject_questrelation.sql
new file mode 100644
index 00000000000..519fa99e2d5
--- /dev/null
+++ b/sql/updates/world/2012_01_03_04_world_gameobject_questrelation.sql
@@ -0,0 +1,8 @@
+DELETE FROM `gameobject_questrelation` WHERE `quest` IN (12345, 12377);
+INSERT INTO `gameobject_questrelation` VALUES
+(190035, 12345),
+(190079, 12377);
+DELETE FROM `gameobject_involvedrelation` WHERE `quest` IN (12345, 12377);
+INSERT INTO `gameobject_involvedrelation` VALUES
+(190035, 12345),
+(190079, 12377);
diff --git a/sql/updates/world/2012_01_03_05_world_creature.sql b/sql/updates/world/2012_01_03_05_world_creature.sql
new file mode 100644
index 00000000000..b30ca2d5ef4
--- /dev/null
+++ b/sql/updates/world/2012_01_03_05_world_creature.sql
@@ -0,0 +1,180 @@
+SET @GUID := 72707; -- need 62;
+SET @NPC_WILDSPAWN_SATYR = 11451;
+SET @NPC_WILDSPAWN_ROGUE := 11452;
+SET @NPC_WILDSPAWN_BETRAYER := 11454;
+SET @NPC_WILDSPAWN_FELSWORN := 11455;
+SET @NPC_WILDSPAWN_SHADOWSTALKER := 11456;
+SET @NPC_WILDSPAWN_HELLCALLER := 11457;
+SET @NPC_WARPWOOD_TREANT = 11462;
+SET @NPC_WARPWOOD_CRUSHER := 13021;
+SET @NPC_WHIP_LASHER := 13022;
+SET @NPC_PHASE_LASHER := 13196;
+SET @NPC_FEL_LASH := 13197;
+
+-- add movement
+SET @ENTRY := 56992; -- single Wildspawn Felsworn instance
+UPDATE creature SET `MovementType`=2 WHERE `guid`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid`=@ENTRY;
+INSERT INTO `creature_addon`(`guid`,`path_id`) VALUES
+(@ENTRY,@ENTRY*10);
+
+-- Add waypoints to Wildspawn Felsworn instance
+DELETE FROM `waypoint_data` WHERE `id`=@ENTRY*10;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@ENTRY*10,1,57.4000,-737.329,-25.1524,0,0,0,100,0),
+(@ENTRY*10,2,26.45,-682.69,-24.98,0,0,0,100,0);
+
+-- Smart AI for Wildspawn Shadowstalker
+SET @ENTRY := @NPC_WILDSPAWN_SHADOWSTALKER;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE creature SET `MovementType`=1,`spawndist`=3 WHERE `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,22766,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Shadowstalker - On Spawn - cast Sneak on self'),
+(@ENTRY,0,1,0,0,0,100,0,4000,8000,5000,8000,11,22416,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Shadowstalker - In Combat - Cast Backstab'),
+(@ENTRY,0,2,0,0,0,100,0,6000,7000,8000,9000,11,7992,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Shadowstalker - In Combat - Cast Slowing Posion');
+
+-- add movement
+SET @ENTRY := 56967; -- single Wildspawn Shadowstalker instance
+UPDATE creature SET `MovementType`=2 WHERE `guid`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid`=@ENTRY;
+INSERT INTO `creature_addon`(`guid`,`path_id`) VALUES
+(@ENTRY,@ENTRY*10);
+
+-- Add waypoints to Wildspawn Shadowstalker instance
+DELETE FROM `waypoint_data` WHERE `id`=@ENTRY*10;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@ENTRY*10,1,45.4305,-675.9378,-25.1612,0,0,0,100,0),
+(@ENTRY*10,2,36.5939,-646.3212,-25.1506,0,0,0,100,0),
+(@ENTRY*10,3,58.3292,-605.7308,-25.0700,0,0,0,100,0),
+(@ENTRY*10,4,52.3244,-584.9519,-23.3673,0,0,0,100,0),
+(@ENTRY*10,5,52.1407,-565.7738,-19.4151,0,0,0,100,0),
+(@ENTRY*10,6,56.5794,-558.3062,-19.2307,0,0,0,100,0),
+(@ENTRY*10,7,76.8705,-545.9866,-15.2457,0,0,0,100,0),
+(@ENTRY*10,8,97.9787,-544.0214,-11.0777,0,0,0,100,0),
+(@ENTRY*10,9,76.8705,-545.9866,-15.2457,0,0,0,100,0),
+(@ENTRY*10,10,56.5794,-558.3062,-19.2307,0,0,0,100,0),
+(@ENTRY*10,11,52.1407,-565.7738,-19.4151,0,0,0,100,0),
+(@ENTRY*10,12,52.3244,-584.9519,-23.3673,0,0,0,100,0),
+(@ENTRY*10,13,58.3292,-605.7308,-25.0700,0,0,0,100,0),
+(@ENTRY*10,14,36.5939,-646.3212,-25.1506,0,0,0,100,0),
+(@ENTRY*10,15,45.4305,-675.9378,-25.1612,0,0,0,100,0),
+(@ENTRY*10,16,62.53,-681.04,-24.98,0,0,0,100,0);
+
+-- Spawn the mobs
+DELETE FROM `creature` WHERE `guid` BETWEEN @GUID AND @GUID+62;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`) VALUES
+(@GUID+1,@NPC_WARPWOOD_TREANT,429,1,1,0,0,72.5524,-197.561,-4.14211,3.13356,7200,0,0,7842,0,2),
+(@GUID+2,@NPC_WARPWOOD_TREANT,429,1,1,0,0,20.3687,-203.068,-4.0968,3.10349,7200,0,0,7842,0,2),
+(@GUID+3,@NPC_WARPWOOD_TREANT,429,1,1,0,0,30.1582,-195.841,-4.12466,3.01317,7200,0,0,7599,0,2),
+(@GUID+4,@NPC_WARPWOOD_TREANT,429,1,1,0,0,25.8537,-206.521,-4.06996,3.01317,7200,0,0,7599,0,2),
+(@GUID+5,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-107.769,-200.032,-4.10429,0.153016,7200,0,0,7842,0,2),
+(@GUID+6,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-113.89,-195.466,-4.14424,0.0626954,7200,0,0,7842,0,2),
+(@GUID+7,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-117.388,-207.58,-4.06716,0.0476419,7200,0,0,7842,0,2),
+(@GUID+8,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-142.675,-350.105,-4.11237,1.70352,7200,0,0,7599,0,2),
+(@GUID+9,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-145.689,-356.994,-4.13712,1.66338,7200,0,0,7599,0,2),
+(@GUID+10,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-138.62,-360.106,-4.13313,1.66338,7200,0,0,7599,0,2),
+(@GUID+11,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-115.225,-347.295,-4.05097,6.26559,7200,0,0,7599,0,2),
+(@GUID+12,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-109.451,-350.449,-4.07628,6.28064,7200,0,0,7599,0,2),
+(@GUID+13,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-120.637,-353.502,-4.10136,6.26747,7200,0,0,7842,0,2),
+(@GUID+14,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-46.8699,-355.781,-4.11898,0.109725,7200,0,0,7599,0,2),
+(@GUID+15,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-57.5391,-352.691,-4.09353,0.121943,7200,0,0,7842,0,2),
+(@GUID+16,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-60.9243,-359.466,-4.14508,0.0617289,7200,0,0,7842,0,2),
+(@GUID+17,@NPC_WARPWOOD_TREANT,429,1,1,0,0,54.2367,-348.114,-4.05781,6.25459,7200,0,0,7599,0,2),
+(@GUID+18,@NPC_WARPWOOD_TREANT,429,1,1,0,0,43.279,-352.861,-4.0973,0.0633858,7200,0,0,7842,0,2),
+(@GUID+19,@NPC_WARPWOOD_TREANT,429,1,1,0,0,39.8267,-343.521,-4.02135,6.18098,7200,0,0,7842,0,2),
+(@GUID+20,@NPC_WARPWOOD_TREANT,429,1,1,0,0,111.859,-366.456,-4.14992,1.56459,7200,0,0,7842,0,2),
+(@GUID+21,@NPC_WARPWOOD_TREANT,429,1,1,0,0,116.012,-372.374,-4.09262,1.52947,7200,0,0,7842,0,2),
+(@GUID+22,@NPC_WARPWOOD_TREANT,429,1,1,0,0,107.625,-377.033,-4.07882,1.53449,7200,0,0,7842,0,2),
+(@GUID+23,@NPC_WARPWOOD_CRUSHER,429,1,1,0,0,141.391,-355.109,-4.15258,3.22692,7200,0,0,16194,0,0),
+(@GUID+24,@NPC_PHASE_LASHER,429,1,1,0,0,81.2447,-361.592,-4.14699,1.54781,7200,0,0,15684,0,0),
+(@GUID+25,@NPC_WHIP_LASHER,429,1,1,0,0,34.9898,-347.58,-4.05484,0.017372,7200,0,0,1900,0,0),
+(@GUID+26,@NPC_WHIP_LASHER,429,1,1,0,0,36.7793,-352.448,-4.09411,0.00231851,7200,0,0,1900,0,0),
+(@GUID+27,@NPC_WHIP_LASHER,429,1,1,0,0,41.2793,-352.437,-4.09411,0.00231851,7200,0,0,1900,0,0),
+(@GUID+28,@NPC_WHIP_LASHER,429,1,1,0,0,44.3212,-352.43,-4.09411,0.00231851,7200,0,0,1900,0,0),
+(@GUID+29,@NPC_WHIP_LASHER,429,1,1,0,0,44.315,-349.742,-4.07234,0.0588672,7200,0,0,1900,0,0),
+(@GUID+30,@NPC_WHIP_LASHER,429,1,1,0,0,39.4515,-350.029,-4.0749,0.063885,7200,0,0,1900,0,0),
+(@GUID+31,@NPC_WHIP_LASHER,429,1,1,0,0,39.2745,-347.262,-4.05348,0.063885,7200,0,0,1900,0,0),
+(@GUID+32,@NPC_WARPWOOD_CRUSHER,429,1,1,0,0,-20.953,-371.52,-4.05577,1.58638,7200,0,0,16194,0,0),
+(@GUID+33,@NPC_PHASE_LASHER,429,1,1,0,0,-52.0524,-361.703,-4.14598,1.7679,7200,0,0,15684,0,0),
+(@GUID+34,@NPC_WHIP_LASHER,429,1,1,0,0,-62.1186,-349.8,-4.07015,6.09414,7200,0,0,1900,0,0),
+(@GUID+35,@NPC_WHIP_LASHER,429,1,1,0,0,-69.5873,-354.282,-4.1069,6.17944,7200,0,0,1900,0,0),
+(@GUID+36,@NPC_WHIP_LASHER,429,1,1,0,0,-66.7331,-351.805,-4.08577,6.18948,7200,0,0,1900,0,0),
+(@GUID+37,@NPC_WHIP_LASHER,429,1,1,0,0,-73.9811,-351.124,-4.08116,6.18948,7200,0,0,1900,0,0),
+(@GUID+38,@NPC_WHIP_LASHER,429,1,1,0,0,-69.8854,-349.117,-4.06468,6.2798,7200,0,0,1900,0,0),
+(@GUID+39,@NPC_WHIP_LASHER,429,1,1,0,0,-65.6902,-346.108,-4.0402,6.2798,7200,0,0,1900,0,0),
+(@GUID+40,@NPC_WARPWOOD_CRUSHER,429,1,1,0,0,-73.7821,-346.08,-4.0402,6.2798,7200,0,0,1900,0,0),
+(@GUID+41,@NPC_WARPWOOD_TREANT,429,1,1,0,0,-93.8011,-363.618,-4.14738,1.65316,7200,0,0,16194,0,0),
+(@GUID+42,@NPC_PHASE_LASHER,429,1,1,0,0,-131.311,-365.627,-4.15058,1.51265,7200,0,0,15198,0,0),
+(@GUID+43,@NPC_WHIP_LASHER,429,1,1,0,0,-143.839,-340.391,-4.12014,1.83881,7200,0,0,1900,0,0),
+(@GUID+44,@NPC_WHIP_LASHER,429,1,1,0,0,-142.296,-336.529,-4.10736,1.85386,7200,0,0,1900,0,0),
+(@GUID+45,@NPC_WHIP_LASHER,429,1,1,0,0,-138.49,-341.197,-4.07808,1.73845,7200,0,0,1900,0,0),
+(@GUID+46,@NPC_WHIP_LASHER,429,1,1,0,0,-134.462,-337.194,-4.04726,1.70944,7200,0,0,1900,0,0),
+(@GUID+47,@NPC_WHIP_LASHER,429,1,1,0,0,-135.424,-330.303,-4.0528,1.70944,7200,0,0,1900,0,0),
+(@GUID+48,@NPC_WHIP_LASHER,429,1,1,0,0,-142.163,-331.244,-4.1045,1.71445,7200,0,0,1900,0,0),
+(@GUID+49,@NPC_WHIP_LASHER,429,1,1,0,0,-138.62,-333.245,-4.07944,1.71947,7200,0,0,1900,0,0),
+(@GUID+50,@NPC_WARPWOOD_CRUSHER,429,1,1,0,0,-138.38,-275.724,-4.07674,3.17049,7200,0,0,16194,0,0),
+(@GUID+51,@NPC_PHASE_LASHER,429,1,1,0,0,-162.835,-275.863,-4.14791,6.27238,7200,0,0,15684,0,0),
+(@GUID+52,@NPC_WHIP_LASHER,429,1,1,0,0,-158.318,-204.325,-4.15232,0.0694766,7200,0,0,1900,0,0),
+(@GUID+53,@NPC_WHIP_LASHER,429,1,1,0,0,-154.646,-204.07,-4.15232,0.0694766,7200,0,0,1900,0,0),
+(@GUID+54,@NPC_WHIP_LASHER,429,1,1,0,0,-153.089,-196.695,-4.15243,0.0343519,7200,0,0,1900,0,0),
+(@GUID+55,@NPC_WHIP_LASHER,429,1,1,0,0,-160.393,-196.946,-4.15243,0.0343519,7200,0,0,1900,0,0),
+(@GUID+56,@NPC_WHIP_LASHER,429,1,1,0,0,-162.052,-201.486,-4.15243,0.0393697,7200,0,0,1900,0,0),
+(@GUID+57,@NPC_WHIP_LASHER,429,1,1,0,0,-152.686,-201.117,-4.15243,0.0393697,7200,0,0,1900,0,0),
+(@GUID+58,@NPC_WHIP_LASHER,429,1,1,0,0,-156.996,-199.83,-4.15243,0.059441,7200,0,0,1900,0,0),
+(@GUID+59,@NPC_PHASE_LASHER,429,1,1,0,0,-86.8965,-210.681,-4.03141,1.56479,7200,0,0,15198,0,0),
+(@GUID+60,@NPC_WARPWOOD_CRUSHER,429,1,1,0,0,-87.0174,-180.571,-2.71439,4.76202,7200,0,0,16194,0,0),
+(@GUID+61,@NPC_PHASE_LASHER,429,1,1,0,0,-27.3846,-207.58,-4.06107,0.888256,7200,0,0,15684,0,0),
+(@GUID+62,@NPC_WARPWOOD_CRUSHER,429,1,1,0,0,-15.3937,-177.684,-2.71439,4.81219,7200,0,0,16194,0,0);
+
+-- Add movement to some mobs
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @GUID+1 AND @GUID+22;
+INSERT INTO `creature_addon` (`guid`,`path_id`) VALUES
+(@GUID+1,(@GUID+1)*10),
+(@GUID+2,(@GUID+2)*10),
+(@GUID+3,(@GUID+2)*10),
+(@GUID+4,(@GUID+2)*10),
+(@GUID+5,(@GUID+6)*10),
+(@GUID+6,(@GUID+6)*10),
+(@GUID+7,(@GUID+6)*10),
+(@GUID+8,(@GUID+8)*10),
+(@GUID+9,(@GUID+8)*10),
+(@GUID+10,(@GUID+8)*10),
+(@GUID+11,(@GUID+11)*10),
+(@GUID+12,(@GUID+11)*10),
+(@GUID+13,(@GUID+11)*10),
+(@GUID+14,(@GUID+14)*10),
+(@GUID+15,(@GUID+14)*10),
+(@GUID+16,(@GUID+14)*10),
+(@GUID+17,(@GUID+17)*10),
+(@GUID+18,(@GUID+17)*10),
+(@GUID+19,(@GUID+17)*10),
+(@GUID+20,(@GUID+20)*10),
+(@GUID+21,(@GUID+20)*10),
+(@GUID+22,(@GUID+20)*10);
+
+-- Add waypoints to mobs
+DELETE FROM `waypoint_data` WHERE `id` = (@GUID+1)*10;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+((@GUID+1)*10,1,70.6901,-197.173,-4.14434,0,1,0,100,0),
+((@GUID+1)*10,2,-104.169,-199.817,-4.12389,0,1,0,100,0),
+((@GUID+2)*10,1,-73.5443,-202.239,-4.10251,0,1,0,100,0),
+((@GUID+2)*10,2,35.4205,-201.467,-4.11061,0,1,0,100,0),
+((@GUID+6)*10,1,-20.2122,-201.982,-4.11082,0,1,0,100,0),
+((@GUID+6)*10,2,-130.665,-201.733,-4.10813,0,1,0,100,0),
+((@GUID+8)*10,1,-166.248,-199.501,-4.15228,0,1,0,100,0),
+((@GUID+8)*10,2,-131.595,-354.127,-4.10839,0,1,0,100,0),
+((@GUID+11)*10,1,-35.5988,-348.525,-4.06037,0,1,0,100,0),
+((@GUID+11)*10,2,-21.0353,-356.517,-4.12553,0,1,0,100,0),
+((@GUID+11)*10,3,4.10672,-354.436,-4.11233,0,1,0,100,0),
+((@GUID+11)*10,4,-62.8668,-351.204,-4.083,0,1,0,100,0),
+((@GUID+11)*10,5,-113.908,-346.958,-4.04887,0,1,0,100,0),
+((@GUID+14)*10,1,49.0152,-351.975,-4.09131,0,1,0,100,0),
+((@GUID+14)*10,2,-68.801,-355.361,-4.11568,0,1,0,100,0),
+((@GUID+17)*10,1,140.938,-354.573,-4.15133,0,1,0,100,0),
+((@GUID+17)*10,2, -17.9066,-352.038,-4.09042,0,1,0,100,0),
+((@GUID+20)*10,1,134.04,-337.362,-4.14977,0,1,0,100,0),
+((@GUID+20)*10,2,117.337,-367.835,-4.15199,0,1,0,100,0),
+((@GUID+20)*10,3,68.2814,-346.911,-4.04935,0,1,0,100,0),
+((@GUID+20)*10,4,111.089,-364.118,-4.14948,0,1,0,100,0);
diff --git a/sql/updates/world/2012_01_03_06_world_sai.sql b/sql/updates/world/2012_01_03_06_world_sai.sql
new file mode 100644
index 00000000000..858dc3f498d
--- /dev/null
+++ b/sql/updates/world/2012_01_03_06_world_sai.sql
@@ -0,0 +1,82 @@
+SET @NPC_WILDSPAWN_SATYR = 11451;
+SET @NPC_WILDSPAWN_ROGUE := 11452;
+SET @NPC_WILDSPAWN_BETRAYER := 11454;
+SET @NPC_WILDSPAWN_FELSWORN := 11455;
+SET @NPC_WILDSPAWN_SHADOWSTALKER := 11456;
+SET @NPC_WILDSPAWN_HELLCALLER := 11457;
+SET @NPC_WARPWOOD_TREANT = 11462;
+SET @NPC_WARPWOOD_CRUSHER := 13021;
+SET @NPC_WHIP_LASHER := 13022;
+SET @NPC_PHASE_LASHER := 13196;
+SET @NPC_FEL_LASH := 13197;
+
+-- SmartAI for Wildspawn Hellcaller
+SET @ENTRY := @NPC_WILDSPAWN_HELLCALLER;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE creature SET `MovementType`=1,`spawndist`=3 WHERE `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - On Aggro - Prevent Combat Movement'),
+(@ENTRY,0,1,2,4,0,100,0,0,0,0,0,11,15228,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Hellcaller - On Aggro - Cast Fireball '),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - On Aggro - Set Phase 1'),
+(@ENTRY,0,3,0,9,1,100,0,0,40,2400,3800,11,15228,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Hellcaller - Phase 1 - Cast Fireball'),
+(@ENTRY,0,4,5,3,1,100,0,0,15,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller -In Phase 1 - Start Combat Movement'),
+(@ENTRY,0,5,0,61,1,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - Mana at 15% (Phase 1) - Set Phase 2'),
+(@ENTRY,0,6,0,9,1,100,0,35,80,0,0,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Wildspawn Hellcaller - At 35 Yards (Phase 1) - Start Combat Movement'),
+(@ENTRY,0,7,0,9,1,100,0,5,15,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - at 15 Yards (Phase 1) - Prevent Combat Movement '),
+(@ENTRY,0,8,0,9,1,100,0,0,5,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - Below 5 Yards (Phase 1) - Start Combat Movement'),
+(@ENTRY,0,9,0,3,2,100,0,0,30,100,100,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - Mana is above 30% (Phase 2) - Set Phase 1'),
+(@ENTRY,0,10,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'Wildspawn Hellcaller - Set Phase 1 when Mana is above 30% (Phase 2)'),
+(@ENTRY,0,11,0,0,0,100,0,8000,14000,18000,25000,11,20754,3,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Hellcaller - In Combat - Cast Rain of Fire'),
+(@ENTRY,0,12,0,2,0,100,1,0,15,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Hellcaller - At 15% HP - Start Combat Movement'),
+(@ENTRY,0,13,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Betrayer - At 15% HP - Flee'),
+(@ENTRY,0,14,0,7,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - On Evade - Set Phase to 0');
+
+-- SmartAI for Wildspawn Felsworn
+SET @ENTRY := @NPC_WILDSPAWN_FELSWORN;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE creature SET `MovementType`=1,`spawndist`=3 WHERE `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,1,1000,1000,1800000,1800000,11,12542,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - Cast Chaotic Focus'),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - On Aggro - Prevent Combat Movement'),
+(@ENTRY,0,2,3,4,0,100,0,0,0,0,0,11,15537,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Felsworn - On Aggro - Cast Shadow Bolt'),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - On Aggro - Set Phase 1'),
+(@ENTRY,0,4,0,9,1,100,0,0,40,2400,3800,11,15537,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Felsworn - Phase 1 - Cast Shadow Bolt'),
+(@ENTRY,0,5,6,3,1,100,0,0,15,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn -In Phase 1 - Start Combat Movement'),
+(@ENTRY,0,6,0,61,1,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - Mana at 15% (Phase 1) - Set Phase 2'),
+(@ENTRY,0,7,0,9,1,100,0,35,80,0,0,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,'Wildspawn Felsworn - At 35 Yards (Phase 1) - Start Combat Movement'),
+(@ENTRY,0,8,0,9,1,100,0,5,15,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - at 15 Yards (Phase 1) - Prevent Combat Movement '),
+(@ENTRY,0,9,0,9,1,100,0,0,5,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - Below 5 Yards (Phase 1) - Start Combat Movement'),
+(@ENTRY,0,10,0,3,2,100,0,0,30,100,100,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - Mana is above 30% (Phase 2) - Set Phase 1'),
+(@ENTRY,0,11,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'Wildspawn Felsworn - Set Phase 1 when Mana is above 30% (Phase 2)'),
+(@ENTRY,0,12,0,0,0,100,0,7000,12000,38000,45000,11,22417,1,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - In Phase 1 - Cast Shadow Shield'),
+(@ENTRY,0,13,0,0,1,100,0,11000,17000,23000,30000,11,15654,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Felsworn - In Phase 1 - Cast Shadow Word: Pain'),
+(@ENTRY,0,14,0,0,0,100,0,6000,10000,10000,15000,11,12542,1,0,0,0,0,5,0,0,0,0,0,0,0,'Wildspawn Felsworn - In Combat - Cast Fear (on random target)'),
+(@ENTRY,0,15,0,7,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Felsworn - On Evade - Set Phase to 0');
+
+-- add movement
+SET @ENTRY := 56992; -- single Wildspawn Felsworn instance
+UPDATE creature SET `MovementType`=2 WHERE `guid`=@ENTRY;
+DELETE FROM `creature_addon` WHERE `guid`=@ENTRY;
+INSERT INTO `creature_addon`(`guid`,`path_id`) VALUES
+(@ENTRY,@ENTRY*10);
+
+-- Add waypoints to Wildspawn Felsworn instance
+DELETE FROM `waypoint_data` WHERE `id`=@ENTRY*10;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@ENTRY*10,1,57.4000,-737.329,-25.1524,0,0,0,100,0),
+(@ENTRY*10,2,26.45,-682.69,-24.98,0,0,0,100,0);
+
+-- Smart AI for Wildspawn Shadowstalker
+SET @ENTRY := @NPC_WILDSPAWN_SHADOWSTALKER;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE creature SET `MovementType`=1,`spawndist`=3 WHERE `id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,22766,0,0,0,0,0,1,0,0,0,0,0,0,0,'Wildspawn Shadowstalker - On Spawn - cast Sneak on self'),
+(@ENTRY,0,1,0,0,0,100,0,4000,8000,5000,8000,11,22416,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Shadowstalker - In Combat - Cast Backstab'),
+(@ENTRY,0,2,0,0,0,100,0,6000,7000,8000,9000,11,7992,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wildspawn Shadowstalker - In Combat - Cast Slowing Posion');
diff --git a/sql/updates/world/2012_01_03_07_world_creature.sql b/sql/updates/world/2012_01_03_07_world_creature.sql
new file mode 100644
index 00000000000..5098901b564
--- /dev/null
+++ b/sql/updates/world/2012_01_03_07_world_creature.sql
@@ -0,0 +1,46 @@
+-- Spawn & Pathing for Horace Alder Entry: 27704 "Not Spawned"
+SET @NPC := 1846;
+DELETE FROM `creature` WHERE `guid` IN (@NPC);
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`) VALUES
+(@NPC,27704,1,1,1,0,0,-3738.565,-4442.265,56.23981,0.41887,300,0,0,1,0,2);
+SET @PATH := @NPC * 10;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3740.015,-4437.762,56.23981,0,0,0,0,100,0),
+(@PATH,2,-3742.823,-4433.892,56.23981,0,0,0,0,100,0),
+(@PATH,3,-3746.757,-4431.049,56.23981,0,0,0,0,100,0),
+(@PATH,4,-3751.263,-4429.58,56.23981,0,0,0,0,100,0),
+(@PATH,5,-3756.035,-4429.627,56.23981,0,0,0,0,100,0),
+(@PATH,6,-3760.625,-4431.113,56.23981,0,0,0,0,100,0),
+(@PATH,7,-3764.42,-4433.888,56.22611,0,0,0,0,100,0),
+(@PATH,8,-3767.252,-4437.716,56.23981,0,0,0,0,100,0),
+(@PATH,9,-3768.719,-4442.307,56.23982,0,0,0,0,100,0),
+(@PATH,10,-3768.664,-4447.081,56.22474,0,0,0,0,100,0),
+(@PATH,11,-3767.221,-4451.627,56.23982,0,0,0,0,100,0),
+(@PATH,12,-3764.422,-4455.48,56.23981,0,0,0,0,100,0),
+(@PATH,13,-3767.221,-4451.627,56.23982,0,0,0,0,100,0),
+(@PATH,14,-3768.664,-4447.081,56.22474,0,0,0,0,100,0),
+(@PATH,15,-3768.719,-4442.307,56.23982,0,0,0,0,100,0),
+(@PATH,16,-3767.255,-4437.724,56.20177,0,0,0,0,100,0),
+(@PATH,17,-3764.42,-4433.888,56.22611,0,0,0,0,100,0),
+(@PATH,18,-3760.625,-4431.113,56.23981,0,0,0,0,100,0),
+(@PATH,19,-3756.035,-4429.627,56.23981,0,0,0,0,100,0),
+(@PATH,20,-3751.263,-4429.58,56.23981,0,0,0,0,100,0),
+(@PATH,21,-3746.757,-4431.049,56.23981,0,0,0,0,100,0),
+(@PATH,22,-3742.823,-4433.892,56.23981,0,0,0,0,100,0),
+(@PATH,23,-3740.015,-4437.762,56.23981,0,0,0,0,100,0),
+(@PATH,24,-3738.565,-4442.265,56.23981,0,0,0,0,100,0),
+(@PATH,25,-3738.577,-4447.063,56.23981,0,0,0,0,100,0),
+(@PATH,26,-3740.03,-4451.584,56.23981,0,0,0,0,100,0),
+(@PATH,27,-3742.872,-4455.448,56.23981,0,0,0,0,100,0),
+(@PATH,28,-3746.699,-4458.252,56.23982,0,0,0,0,100,0),
+(@PATH,29,-3751.217,-4459.749,56.26265,0,0,0,0,100,0),
+(@PATH,30,-3756.021,-4459.732,56.23981,0,0,0,0,100,0),
+(@PATH,31,-3751.217,-4459.749,56.26265,0,0,0,0,100,0),
+(@PATH,32,-3746.699,-4458.252,56.23982,0,0,0,0,100,0),
+(@PATH,33,-3742.872,-4455.448,56.23981,0,0,0,0,100,0),
+(@PATH,34,-3740.03,-4451.584,56.23981,0,0,0,0,100,0),
+(@PATH,35,-3738.577,-4447.063,56.23981,0,0,0,0,100,0),
+(@PATH,36,-3738.565,-4442.265,56.23981,0,0,0,0,100,0);
diff --git a/sql/updates/world/2012_01_04_00_world_gossip_menu.sql b/sql/updates/world/2012_01_04_00_world_gossip_menu.sql
new file mode 100644
index 00000000000..cf11ba74eb2
--- /dev/null
+++ b/sql/updates/world/2012_01_04_00_world_gossip_menu.sql
@@ -0,0 +1,70 @@
+-- Update npc_text from sniff
+UPDATE `npc_text` SET `prob0`=1,`text0_0`='I wandered for the rest of my natural life in search of knowledge, seeing more wonder and meeting more strange and mysterious races than any of my people before me. I travelled across the length and breadth of ancient Kalimdor until there was no more to see, no new lands across the horizon.$B$BYet... there was still so much I did not know as I felt my final journey approaching and I wept for the things I would never know.$B$BAs I fell, my life at an end, that is when they found me.',`WDBVerified`=14545 WHERE `ID`=14121;
+UPDATE `npc_text` SET `prob0`=1,`text0_0`='The bronze dragonflight. They snatched me from the brink of death and took me before their master, Nozdormu. He said they had been watching me and wanted me to continue my hunt. He granted me immortality as a watcher, tasked to bear witness to the history of Azeroth as one of his agents.$B$BI am Xarantaur the Witness, and it is my duty to preserve the true history of Azeroth lest it be forgotten.',`WDBVerified`=14545 WHERE `ID`=14122;
+
+-- Gossip Menu insert from sniff
+DELETE FROM `gossip_menu` WHERE `entry`=10217 AND `text_id`=14204;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (10217,14204);
+DELETE FROM `gossip_menu` WHERE `entry`=10174 AND `text_id`=14118;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (10174,14118);
+
+-- Creature Gossip_menu_id Update from sniff
+UPDATE `creature_template` SET `gossip_menu_id`=10217 WHERE `entry`=30824;
+UPDATE `creature_template` SET `gossip_menu_id`=10038 WHERE `entry`=31261;
+UPDATE `creature_template` SET `gossip_menu_id`=10174 WHERE `entry`=30825;
+
+-- Creature Gossip_menu_option Update from sniff
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10026,10174) AND `id` IN (0);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`) VALUES
+(10026,0,0, 'Take me to the ship.',1,1,0,0,0,0, ''),
+(10174,0,1, 'I want to browse your goods.',3,128,0,0,0,0, '');
+
+-- Gossip Menu insert from sniff
+DELETE FROM `gossip_menu` WHERE `entry`=9806 AND `text_id`=13525;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9806,13525);
+DELETE FROM `gossip_menu` WHERE `entry`=9807 AND `text_id`=13526;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9807,13526);
+DELETE FROM `gossip_menu` WHERE `entry`=9808 AND `text_id`=13527;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9808,13527);
+DELETE FROM `gossip_menu` WHERE `entry`=9809 AND `text_id`=13528;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9809,13528);
+DELETE FROM `gossip_menu` WHERE `entry`=9810 AND `text_id`=13529;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9810,13529);
+DELETE FROM `gossip_menu` WHERE `entry`=9811 AND `text_id`=13530;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9811,13530);
+DELETE FROM `gossip_menu` WHERE `entry`=9812 AND `text_id`=13531;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9812,13531);
+DELETE FROM `gossip_menu` WHERE `entry`=9813 AND `text_id`=13534;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9813,13534);
+
+-- Creature Gossip_menu_id Update from sniff
+UPDATE `creature_template` SET `gossip_menu_id`=9806 WHERE `entry`=29344;
+UPDATE `creature_template` SET `gossip_menu_id`=9813 WHERE `entry`=29396;
+
+-- Creature Gossip_menu_option Update from sniff
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (9806,9807,9808,9809,9810,9811,9812) AND `id` IN (0);
+DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (9808,9809,9810,9811,9812) AND `id` IN (1);
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`) VALUES
+(9806,0,0, 'Lord-Commander, I would hear your tale.',1,1,9807,0,0,0, ''),
+(9807,0,0, '<You nod slightly but do not complete the motion as the lord-commander narrows his eyes before he continues.>',1,1,9808,0,0,0, ''),
+(9808,0,0, 'I thought that they now called themselves the Scarlet Onslaught?',1,1,9809,0,0,0, ''),
+(9808,1,0, 'Lord-Commander, would you repeat what you said before?',1,1,9807,0,0,0, ''),
+(9809,0,0, 'Where did the grand admiral go?',1,1,9810,0,0,0, ''),
+(9809,1,0, 'Lord-Commander, would you repeat what you said before?',1,1,9808,0,0,0, ''),
+(9810,0,0, 'That''s fine. When do I start?',1,1,9811,0,0,0, ''),
+(9810,1,0, 'Lord-Commander, would you repeat what you said before?',1,1,9809,0,0,0, ''),
+(9811,0,0, 'Let''s finish this!',1,1,9812,0,0,0, ''),
+(9811,1,0, 'Lord-Commander, would you repeat what you said before?',1,1,9810,0,0,0, ''),
+(9812,0,0, 'That''s quite a tale, lord-commander.',1,1,0,0,0,0, ''),
+(9812,1,0, 'Lord-Commander, would you repeat what you said before?',1,1,9811,0,0,0, '');
+
+-- Gossip Menu insert from sniff
+DELETE FROM `gossip_menu` WHERE `entry`=9168 AND `text_id`=12427;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9168,12427);
+DELETE FROM `gossip_menu` WHERE `entry`=9184 AND `text_id`=12472;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9184,12472);
+
+-- Creature Gossip_menu_id Update from sniff
+UPDATE `creature_template` SET `gossip_menu_id`=9168 WHERE `entry`=25504;
+UPDATE `creature_template` SET `gossip_menu_id`=9184 WHERE `entry`=25379;
+UPDATE `creature_template` SET `gossip_menu_id`=348 WHERE `entry`=25278;
diff --git a/sql/updates/world/2012_01_04_01_world_game_event_seasonal_questrelation.sql b/sql/updates/world/2012_01_04_01_world_game_event_seasonal_questrelation.sql
new file mode 100644
index 00000000000..9746a358e8a
--- /dev/null
+++ b/sql/updates/world/2012_01_04_01_world_game_event_seasonal_questrelation.sql
@@ -0,0 +1,386 @@
+DROP TABLE IF EXISTS `game_event_seasonal_questrelation`;
+CREATE TABLE `game_event_seasonal_questrelation` (
+ `quest` mediumint(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier',
+ `event` mediumint(10) NOT NULL DEFAULT '0' COMMENT 'Quest Identifier',
+ PRIMARY KEY (`quest`,`event`),
+ KEY `idx_quest` (`quest`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System';
+
+INSERT INTO `game_event_seasonal_questrelation` (`quest`,`event`) VALUES
+ (1657, 12),
+ (1658, 12),
+ (6961, 2),
+ (6962, 2),
+ (6963, 2),
+ (6964, 2),
+ (6983, 3),
+ (6984, 3),
+ (7021, 2),
+ (7022, 2),
+ (7023, 2),
+ (7024, 2),
+ (7025, 2),
+ (7042, 2),
+ (7043, 2),
+ (7045, 2),
+ (7061, 2),
+ (7062, 2),
+ (7063, 2),
+ (8149, 11),
+ (8150, 11),
+ (8311, 12),
+ (8312, 12),
+ (8322, 12),
+ (8353, 12),
+ (8354, 12),
+ (8355, 12),
+ (8356, 12),
+ (8357, 12),
+ (8358, 12),
+ (8359, 12),
+ (8360, 12),
+ (8373, 12),
+ (8409, 12),
+ (8744, 52),
+ (8746, 2),
+ (8762, 2),
+ (8763, 2),
+ (8767, 52),
+ (8768, 52),
+ (8769, 52),
+ (8788, 52),
+ (8799, 2),
+ (8803, 52),
+ (8827, 2),
+ (8828, 2),
+ (8860, 6),
+ (8861, 6),
+ (8868, 7),
+ (8897, 8),
+ (8898, 8),
+ (8899, 8),
+ (8900, 8),
+ (8901, 8),
+ (8902, 8),
+ (8903, 8),
+ (8904, 8),
+ (8971, -1),
+ (8972, -1),
+ (8973, -1),
+ (8974, -1),
+ (8975, -1),
+ (8976, -1),
+ (8979, 8),
+ (8980, 8),
+ (8981, 8),
+ (8982, 8),
+ (8983, 8),
+ (8984, 8),
+ (8993, 8),
+ (9024, 8),
+ (9025, 8),
+ (9026, 8),
+ (9027, 8),
+ (9028, 8),
+ (11131, 12),
+ (11135, 12),
+ (11219, 12),
+ (11220, 12),
+ (11242, 12),
+ (11356, 12),
+ (11357, 12),
+ (11360, 12),
+ (11361, 12),
+ (11392, 12),
+ (11401, 12),
+ (11403, 12),
+ (11404, 12),
+ (11405, 12),
+ (11435, 12),
+ (11439, 12),
+ (11440, 12),
+ (11449, 12),
+ (11450, 12),
+ (11528, 52),
+ (11558, 8),
+ (11580, 1),
+ (11581, 1),
+ (11583, 1),
+ (11584, 1),
+ (11696, 1),
+ (11732, 1),
+ (11734, 1),
+ (11735, 1),
+ (11736, 1),
+ (11737, 1),
+ (11738, 1),
+ (11739, 1),
+ (11740, 1),
+ (11741, 1),
+ (11742, 1),
+ (11743, 1),
+ (11744, 1),
+ (11745, 1),
+ (11746, 1),
+ (11747, 1),
+ (11748, 1),
+ (11749, 1),
+ (11750, 1),
+ (11751, 1),
+ (11752, 1),
+ (11753, 1),
+ (11754, 1),
+ (11755, 1),
+ (11756, 1),
+ (11757, 1),
+ (11758, 1),
+ (11759, 1),
+ (11760, 1),
+ (11761, 1),
+ (11762, 1),
+ (11763, 1),
+ (11764, 1),
+ (11765, 1),
+ (11766, 1),
+ (11767, 1),
+ (11768, 1),
+ (11769, 1),
+ (11770, 1),
+ (11771, 1),
+ (11772, 1),
+ (11773, 1),
+ (11774, 1),
+ (11775, 1),
+ (11776, 1),
+ (11777, 1),
+ (11778, 1),
+ (11779, 1),
+ (11780, 1),
+ (11781, 1),
+ (11782, 1),
+ (11783, 1),
+ (11784, 1),
+ (11785, 1),
+ (11786, 1),
+ (11787, 1),
+ (11799, 1),
+ (11800, 1),
+ (11801, 1),
+ (11802, 1),
+ (11803, 1),
+ (11804, 1),
+ (11805, 1),
+ (11806, 1),
+ (11807, 1),
+ (11808, 1),
+ (11809, 1),
+ (11810, 1),
+ (11811, 1),
+ (11812, 1),
+ (11813, 1),
+ (11814, 1),
+ (11815, 1),
+ (11816, 1),
+ (11817, 1),
+ (11818, 1),
+ (11819, 1),
+ (11820, 1),
+ (11821, 1),
+ (11822, 1),
+ (11823, 1),
+ (11824, 1),
+ (11825, 1),
+ (11826, 1),
+ (11827, 1),
+ (11828, 1),
+ (11829, 1),
+ (11830, 1),
+ (11831, 1),
+ (11832, 1),
+ (11833, 1),
+ (11834, 1),
+ (11835, 1),
+ (11836, 1),
+ (11837, 1),
+ (11838, 1),
+ (11839, 1),
+ (11840, 1),
+ (11841, 1),
+ (11842, 1),
+ (11843, 1),
+ (11844, 1),
+ (11845, 1),
+ (11846, 1),
+ (11847, 1),
+ (11848, 1),
+ (11849, 1),
+ (11850, 1),
+ (11851, 1),
+ (11852, 1),
+ (11853, 1),
+ (11854, 1),
+ (11855, 1),
+ (11856, 1),
+ (11857, 1),
+ (11858, 1),
+ (11859, 1),
+ (11860, 1),
+ (11861, 1),
+ (11862, 1),
+ (11863, 1),
+ (11937, 1),
+ (11976, 1),
+ (12133, 12),
+ (12135, 12),
+ (12139, 12),
+ (12155, 12),
+ (12286, -1),
+ (12313, 24),
+ (12331, 12),
+ (12332, 12),
+ (12333, 12),
+ (12334, 12),
+ (12335, 12),
+ (12336, 12),
+ (12337, 12),
+ (12338, 12),
+ (12339, 12),
+ (12340, 12),
+ (12341, 12),
+ (12342, 12),
+ (12343, 12),
+ (12344, 12),
+ (12345, 12),
+ (12346, 12),
+ (12347, 12),
+ (12348, 12),
+ (12349, 12),
+ (12350, 12),
+ (12351, 12),
+ (12352, 12),
+ (12353, 12),
+ (12354, 12),
+ (12355, 12),
+ (12356, 12),
+ (12357, 12),
+ (12358, 12),
+ (12359, 12),
+ (12360, 12),
+ (12361, 12),
+ (12362, 12),
+ (12363, 12),
+ (12364, 12),
+ (12365, 12),
+ (12366, 12),
+ (12367, 12),
+ (12368, 12),
+ (12369, 12),
+ (12370, 12),
+ (12371, 12),
+ (12373, 12),
+ (12374, 12),
+ (12375, 12),
+ (12376, 12),
+ (12377, 12),
+ (12378, 12),
+ (12379, 12),
+ (12380, 12),
+ (12381, 12),
+ (12382, 12),
+ (12383, 12),
+ (12384, 12),
+ (12385, 12),
+ (12386, 12),
+ (12387, 12),
+ (12388, 12),
+ (12389, 12),
+ (12390, 12),
+ (12391, 12),
+ (12392, 12),
+ (12393, 12),
+ (12394, 12),
+ (12395, 12),
+ (12396, 12),
+ (12397, 12),
+ (12398, 12),
+ (12399, 12),
+ (12400, 12),
+ (12401, 12),
+ (12402, 12),
+ (12403, 12),
+ (12404, 12),
+ (12405, 12),
+ (12406, 12),
+ (12407, 12),
+ (12408, 12),
+ (12409, 12),
+ (12410, 12),
+ (12940, 12),
+ (12941, 12),
+ (12944, 12),
+ (12945, 12),
+ (12946, 12),
+ (12947, 12),
+ (12950, 12),
+ (13203, 52),
+ (13433, 12),
+ (13434, 12),
+ (13435, 12),
+ (13436, 12),
+ (13437, 12),
+ (13438, 12),
+ (13439, 12),
+ (13440, 12),
+ (13441, 12),
+ (13442, 12),
+ (13443, 12),
+ (13444, 12),
+ (13445, 12),
+ (13446, 12),
+ (13447, 12),
+ (13448, 12),
+ (13449, 12),
+ (13450, 12),
+ (13451, 12),
+ (13452, 12),
+ (13453, 12),
+ (13454, 12),
+ (13455, 12),
+ (13456, 12),
+ (13457, 12),
+ (13458, 12),
+ (13459, 12),
+ (13460, 12),
+ (13461, 12),
+ (13462, 12),
+ (13463, 12),
+ (13464, 12),
+ (13465, 12),
+ (13466, 12),
+ (13467, 12),
+ (13468, 12),
+ (13469, 12),
+ (13470, 12),
+ (13471, 12),
+ (13472, 12),
+ (13473, 12),
+ (13474, 12),
+ (13485, 1),
+ (13486, 1),
+ (13487, 1),
+ (13488, 1),
+ (13489, 1),
+ (13490, 1),
+ (13491, 1),
+ (13492, 1),
+ (13493, 1),
+ (13494, 1),
+ (13495, 1),
+ (13496, 1),
+ (13497, 1),
+ (13498, 1),
+ (13499, 1),
+ (13500, 1),
+ (13501, 12),
+ (13548, 12),
+ (13966, 52);
diff --git a/sql/updates/world/2012_01_04_02_world_achievements.sql b/sql/updates/world/2012_01_04_02_world_achievements.sql
new file mode 100644
index 00000000000..cbd5efa3cd6
--- /dev/null
+++ b/sql/updates/world/2012_01_04_02_world_achievements.sql
@@ -0,0 +1,29 @@
+-- The Undying
+DELETE FROM `disables` WHERE `sourceType` = 4 AND `entry` IN (13237, 13238, 13239, 13240, 7617); -- Enable criteria
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (13237, 13238, 13239, 13240, 7617); -- Enable instance script execution for achievement criteria
+INSERT INTO `achievement_criteria_data` VALUES
+(13237, 12, 0, 0, ''),
+(13237, 18, 0, 0, ''),
+(13238, 12, 0, 0, ''),
+(13238, 18, 0, 0, ''),
+(13239, 12, 0, 0, ''),
+(13239, 18, 0, 0, ''),
+(13240, 12, 0, 0, ''),
+(13240, 18, 0, 0, ''),
+(7617, 12, 0, 0, ''),
+(7617, 18, 0, 0, '');
+
+-- The Immortal
+DELETE FROM `disables` WHERE `sourceType` = 4 AND `entry` IN (13233, 13234, 13235, 13236, 7616); -- Enable criteria
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (13233, 13234, 13235, 13236, 7616); -- Enable instance script execution for achievement criteria
+INSERT INTO `achievement_criteria_data` VALUES
+(13233, 12, 1, 0, ''),
+(13233, 18, 0, 0, ''),
+(13234, 12, 1, 0, ''),
+(13234, 18, 0, 0, ''),
+(13235, 12, 1, 0, ''),
+(13235, 18, 0, 0, ''),
+(13236, 12, 1, 0, ''),
+(13236, 18, 0, 0, ''),
+(7616, 12, 1, 0, ''),
+(7616, 18, 0, 0, '');
diff --git a/src/genrev/CMakeLists.txt b/src/genrev/CMakeLists.txt
index 26ea738ee25..022ff5b2f6f 100644
--- a/src/genrev/CMakeLists.txt
+++ b/src/genrev/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp
index 59969670921..ace18e7b45c 100644
--- a/src/server/authserver/Authentication/AuthCodes.cpp
+++ b/src/server/authserver/Authentication/AuthCodes.cpp
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#include "AuthCodes.h"
namespace AuthHelper
diff --git a/src/server/authserver/Authentication/AuthCodes.h b/src/server/authserver/Authentication/AuthCodes.h
index 11b1b9fb33d..f940d459d40 100755
--- a/src/server/authserver/Authentication/AuthCodes.h
+++ b/src/server/authserver/Authentication/AuthCodes.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt
index 3abfe380297..0d94dc47407 100644
--- a/src/server/authserver/CMakeLists.txt
+++ b/src/server/authserver/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index 8226868fa7a..01a33d836d6 100755
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp
index c81af80d31d..245b9c7cc8c 100755
--- a/src/server/authserver/Realms/RealmList.cpp
+++ b/src/server/authserver/Realms/RealmList.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -70,7 +70,7 @@ void RealmList::UpdateRealms(bool init)
{
sLog->outDetail("Updating Realm List...");
- PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_REALMLIST);
+ PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST);
PreparedQueryResult result = LoginDatabase.Query(stmt);
// Circle through results and add them to the realm map
diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h
index 3fe04b0031e..698026876fb 100755
--- a/src/server/authserver/Realms/RealmList.h
+++ b/src/server/authserver/Realms/RealmList.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp
index 1b0800e48ae..1f85cb6bc5b 100755
--- a/src/server/authserver/Server/AuthSocket.cpp
+++ b/src/server/authserver/Server/AuthSocket.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
#include "AuthSocket.h"
#include "AuthCodes.h"
#include "SHA1.h"
+#include "openssl/crypto.h"
#define ChunkSize 2048
@@ -282,7 +283,7 @@ void AuthSocket::_SetVSFields(const std::string& rI)
v_hex = v.AsHexStr();
s_hex = s.AsHexStr();
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_VS);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_VS);
stmt->setString(0, v_hex);
stmt->setString(1, s_hex);
stmt->setString(2, _login);
@@ -347,10 +348,10 @@ bool AuthSocket::_HandleLogonChallenge()
pkt << (uint8)0x00;
// Verify that this IP is not in the ip_banned table
- LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_SET_EXPIREDIPBANS));
+ LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS));
const std::string& ip_address = socket().get_remote_address();
- PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_IPBANNED);
+ PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_BANNED);
stmt->setString(0, ip_address);
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (result)
@@ -362,7 +363,7 @@ bool AuthSocket::_HandleLogonChallenge()
{
// Get the account details from the account table
// No SQL injection (prepared statement)
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_LOGONCHALLENGE);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_LOGONCHALLENGE);
stmt->setString(0, _login);
PreparedQueryResult res2 = LoginDatabase.Query(stmt);
@@ -392,10 +393,10 @@ bool AuthSocket::_HandleLogonChallenge()
if (!locked)
{
//set expired bans to inactive
- LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_SET_EXPIREDACCBANS));
+ LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS));
// If the account is banned, reject the logon attempt
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCBANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BANNED);
stmt->setUInt32(0, fields[1].GetUInt32());
PreparedQueryResult banresult = LoginDatabase.Query(stmt);
if (banresult)
@@ -595,7 +596,7 @@ bool AuthSocket::_HandleLogonProof()
// No SQL injection (escaped user name) and IP address as received by socket
const char *K_hex = K.AsHexStr();
- PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_LOGONPROOF);
+ PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LOGONPROOF);
stmt->setString(0, K_hex);
stmt->setString(1, socket().get_remote_address().c_str());
stmt->setUInt32(2, GetLocaleByName(_localizationName));
@@ -615,8 +616,8 @@ bool AuthSocket::_HandleLogonProof()
memcpy(proof.M2, sha.GetDigest(), 20);
proof.cmd = AUTH_LOGON_PROOF;
proof.error = 0;
- proof.unk1 = 0x00800000;
- proof.unk2 = 0x00;
+ proof.unk1 = 0x00800000; // Accountflags. 0x01 = GM, 0x08 = Trial, 0x00800000 = Pro pass (arena tournament)
+ proof.unk2 = 0x00; // SurveyId
proof.unk3 = 0x00;
socket().send((char *)&proof, sizeof(proof));
}
@@ -643,11 +644,11 @@ bool AuthSocket::_HandleLogonProof()
if (MaxWrongPassCount > 0)
{
//Increment number of failed logins by one and if it reaches the limit temporarily ban that account or IP
- PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_FAILEDLOGINS);
+ PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_FAILEDLOGINS);
stmt->setString(0, _login);
LoginDatabase.Execute(stmt);
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_FAILEDLOGINS);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_FAILEDLOGINS);
stmt->setString(0, _login);
if (PreparedQueryResult loginfail = LoginDatabase.Query(stmt))
@@ -662,7 +663,7 @@ bool AuthSocket::_HandleLogonProof()
if (WrongPassBanType)
{
uint32 acc_id = (*loginfail)[0].GetUInt32();
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_ACCAUTOBANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_AUTO_BANNED);
stmt->setUInt32(0, acc_id);
stmt->setUInt32(1, WrongPassBanTime);
LoginDatabase.Execute(stmt);
@@ -672,7 +673,7 @@ bool AuthSocket::_HandleLogonProof()
}
else
{
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_IPAUTOBANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_IP_AUTO_BANNED);
stmt->setString(0, socket().get_remote_address());
stmt->setUInt32(1, WrongPassBanTime);
LoginDatabase.Execute(stmt);
@@ -722,7 +723,7 @@ bool AuthSocket::_HandleReconnectChallenge()
_login = (const char*)ch->I;
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_SESSIONKEY);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_SESSIONKEY);
stmt->setString(0, _login);
PreparedQueryResult result = LoginDatabase.Query(stmt);
@@ -806,7 +807,7 @@ bool AuthSocket::_HandleRealmList()
// Get the user id (else close the connection)
// No SQL injection (prepared statement)
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCIDBYNAME);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME);
stmt->setString(0, _login);
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (!result)
@@ -837,7 +838,7 @@ bool AuthSocket::_HandleRealmList()
uint8 AmountOfCharacters;
// No SQL injection. id of realm is controlled by the database.
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_NUMCHARSONREALM);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_NUM_CHARS_ON_REALM);
stmt->setUInt32(0, i->second.m_ID);
stmt->setUInt32(1, id);
result = LoginDatabase.Query(stmt);
diff --git a/src/server/authserver/Server/AuthSocket.h b/src/server/authserver/Server/AuthSocket.h
index 75df3d69a05..490b0db2149 100755
--- a/src/server/authserver/Server/AuthSocket.h
+++ b/src/server/authserver/Server/AuthSocket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/Server/RealmAcceptor.h b/src/server/authserver/Server/RealmAcceptor.h
index fc302adfccb..32f4f3e4122 100755
--- a/src/server/authserver/Server/RealmAcceptor.h
+++ b/src/server/authserver/Server/RealmAcceptor.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/Server/RealmSocket.cpp b/src/server/authserver/Server/RealmSocket.cpp
index 4d92747d262..a796daae17d 100755
--- a/src/server/authserver/Server/RealmSocket.cpp
+++ b/src/server/authserver/Server/RealmSocket.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/Server/RealmSocket.h b/src/server/authserver/Server/RealmSocket.h
index 12769c07185..c532f016dcb 100755
--- a/src/server/authserver/Server/RealmSocket.h
+++ b/src/server/authserver/Server/RealmSocket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/authserver/authserver.rc b/src/server/authserver/authserver.rc
index 850fa6041b8..97de89432bf 100755
--- a/src/server/authserver/authserver.rc
+++ b/src/server/authserver/authserver.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/BoundingIntervalHierarchy.cpp b/src/server/collision/BoundingIntervalHierarchy.cpp
index 1540d1af667..8e90cac92f5 100755
--- a/src/server/collision/BoundingIntervalHierarchy.cpp
+++ b/src/server/collision/BoundingIntervalHierarchy.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/BoundingIntervalHierarchy.h b/src/server/collision/BoundingIntervalHierarchy.h
index 0dc597e98bc..b0c35237a9d 100755
--- a/src/server/collision/BoundingIntervalHierarchy.h
+++ b/src/server/collision/BoundingIntervalHierarchy.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -88,6 +88,7 @@ class BIH
{
if (primitives.empty())
return;
+
buildData dat;
dat.maxPrims = leafSize;
dat.numPrims = primitives.size();
diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt
index 0ea62fb1ed0..e2e182626c7 100644
--- a/src/server/collision/CMakeLists.txt
+++ b/src/server/collision/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/collision/Management/IVMapManager.h b/src/server/collision/Management/IVMapManager.h
index a600dcb4895..a645e88ef05 100755
--- a/src/server/collision/Management/IVMapManager.h
+++ b/src/server/collision/Management/IVMapManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Management/VMapFactory.cpp b/src/server/collision/Management/VMapFactory.cpp
index 438b854de16..657f989a0c0 100755
--- a/src/server/collision/Management/VMapFactory.cpp
+++ b/src/server/collision/Management/VMapFactory.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Management/VMapFactory.h b/src/server/collision/Management/VMapFactory.h
index 45ab1309049..27bce523c43 100755
--- a/src/server/collision/Management/VMapFactory.h
+++ b/src/server/collision/Management/VMapFactory.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Management/VMapManager2.cpp b/src/server/collision/Management/VMapManager2.cpp
index 9f32c749c5c..62abc31831a 100644
--- a/src/server/collision/Management/VMapManager2.cpp
+++ b/src/server/collision/Management/VMapManager2.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -247,6 +247,9 @@ namespace VMAP
WorldModel* VMapManager2::acquireModelInstance(const std::string& basepath, const std::string& filename)
{
+ //! Critical section, thread safe access to iLoadedModelFiles
+ TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
+
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
if (model == iLoadedModelFiles.end())
{
@@ -267,6 +270,9 @@ namespace VMAP
void VMapManager2::releaseModelInstance(const std::string &filename)
{
+ //! Critical section, thread safe access to iLoadedModelFiles
+ TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
+
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
if (model == iLoadedModelFiles.end())
{
diff --git a/src/server/collision/Management/VMapManager2.h b/src/server/collision/Management/VMapManager2.h
index ac293e2071b..1fba108388a 100755
--- a/src/server/collision/Management/VMapManager2.h
+++ b/src/server/collision/Management/VMapManager2.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -22,6 +22,7 @@
#include "IVMapManager.h"
#include "Dynamic/UnorderedMap.h"
#include "Define.h"
+#include <ace/Thread_Mutex.h>
//===========================================================
@@ -71,6 +72,8 @@ namespace VMAP
// Tree to check collision
ModelFileMap iLoadedModelFiles;
InstanceTreeMap iInstanceMapTrees;
+ // Mutex for iLoadedModelFiles
+ ACE_Thread_Mutex LoadedModelFilesLock;
bool _loadMap(uint32 mapId, const std::string& basePath, uint32 tileX, uint32 tileY);
/* void _unloadMap(uint32 pMapId, uint32 x, uint32 y); */
diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp
index 6b5c9b5a2c6..fda0535e8a7 100644
--- a/src/server/collision/Maps/MapTree.cpp
+++ b/src/server/collision/Maps/MapTree.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Maps/MapTree.h b/src/server/collision/Maps/MapTree.h
index 47716a925b5..1732209c6bc 100755
--- a/src/server/collision/Maps/MapTree.h
+++ b/src/server/collision/Maps/MapTree.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Maps/TileAssembler.cpp b/src/server/collision/Maps/TileAssembler.cpp
index 594e1a9382b..355ef6b1944 100644
--- a/src/server/collision/Maps/TileAssembler.cpp
+++ b/src/server/collision/Maps/TileAssembler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -500,10 +500,10 @@ namespace VMAP
{
model.setGroupModels(groupsArray);
- std::string filename(iSrcDir);
- filename.push_back('/');
- filename.append(pModelFilename).append(".vmo");
- success = model.writeFile(filename);
+ std::string worldModelFileName(iDestDir);
+ worldModelFileName.push_back('/');
+ worldModelFileName.append(pModelFilename).append(".vmo");
+ success = model.writeFile(worldModelFileName);
}
//std::cout << "readRawFile2: '" << pModelFilename << "' tris: " << nElements << " nodes: " << nNodes << std::endl;
diff --git a/src/server/collision/Maps/TileAssembler.h b/src/server/collision/Maps/TileAssembler.h
index fcb9a8db1c8..6128a0d2a53 100755
--- a/src/server/collision/Maps/TileAssembler.h
+++ b/src/server/collision/Maps/TileAssembler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Models/ModelInstance.cpp b/src/server/collision/Models/ModelInstance.cpp
index f0bff0cef73..dd6b16be777 100644
--- a/src/server/collision/Models/ModelInstance.cpp
+++ b/src/server/collision/Models/ModelInstance.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Models/ModelInstance.h b/src/server/collision/Models/ModelInstance.h
index c29f6756654..1118b654578 100755
--- a/src/server/collision/Models/ModelInstance.h
+++ b/src/server/collision/Models/ModelInstance.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/Models/WorldModel.cpp b/src/server/collision/Models/WorldModel.cpp
index 55aad9bb029..a7de37d41e6 100644
--- a/src/server/collision/Models/WorldModel.cpp
+++ b/src/server/collision/Models/WorldModel.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -362,6 +362,7 @@ namespace VMAP
{
if (triangles.empty())
return false;
+
GModelRayCallback callback(triangles, vertices);
meshTree.intersectRay(ray, callback, distance, stopAtFirstHit);
return callback.hit;
@@ -470,6 +471,7 @@ namespace VMAP
{
if (groupModels.empty())
return false;
+
WModelAreaCallback callback(groupModels, down);
groupTree.intersectPoint(p, callback);
if (callback.hit != groupModels.end())
@@ -488,6 +490,7 @@ namespace VMAP
{
if (groupModels.empty())
return false;
+
WModelAreaCallback callback(groupModels, down);
groupTree.intersectPoint(p, callback);
if (callback.hit != groupModels.end())
diff --git a/src/server/collision/Models/WorldModel.h b/src/server/collision/Models/WorldModel.h
index 7acd3c80376..52ecf498700 100755
--- a/src/server/collision/Models/WorldModel.h
+++ b/src/server/collision/Models/WorldModel.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/VMapDefinitions.h b/src/server/collision/VMapDefinitions.h
index 74e5a9f1dbb..f7d6f0ddaa1 100644
--- a/src/server/collision/VMapDefinitions.h
+++ b/src/server/collision/VMapDefinitions.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/collision/VMapTools.h b/src/server/collision/VMapTools.h
index 09f931dbad2..72d9e8988c1 100755
--- a/src/server/collision/VMapTools.h
+++ b/src/server/collision/VMapTools.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp
index 67e75633b05..a83fb6f2789 100755
--- a/src/server/game/AI/CoreAI/CombatAI.cpp
+++ b/src/server/game/AI/CoreAI/CombatAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h
index fca964826d3..ad98cec0779 100755
--- a/src/server/game/AI/CoreAI/CombatAI.h
+++ b/src/server/game/AI/CoreAI/CombatAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.cpp b/src/server/game/AI/CoreAI/GameObjectAI.cpp
index e47d75fc514..1a08ac1afbe 100644
--- a/src/server/game/AI/CoreAI/GameObjectAI.cpp
+++ b/src/server/game/AI/CoreAI/GameObjectAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h
index 8d0e0508113..0b91b6e8ddb 100644
--- a/src/server/game/AI/CoreAI/GameObjectAI.h
+++ b/src/server/game/AI/CoreAI/GameObjectAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -49,6 +49,7 @@ class GameObjectAI
virtual uint32 GetDialogStatus(Player* /*player*/) {return 100;}
virtual void Destroyed(Player* /*player*/, uint32 /*eventId*/) {}
virtual void SetData(uint32 /*id*/, uint32 /*value*/) {}
+ virtual void OnGameEvent(bool /*start*/, uint16 /*eventId*/) {}
};
class NullGameObjectAI : public GameObjectAI
diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp
index 2efe0eebee0..54061274408 100755
--- a/src/server/game/AI/CoreAI/GuardAI.cpp
+++ b/src/server/game/AI/CoreAI/GuardAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/GuardAI.h b/src/server/game/AI/CoreAI/GuardAI.h
index c0b80ac5174..c80c5a6c343 100755
--- a/src/server/game/AI/CoreAI/GuardAI.h
+++ b/src/server/game/AI/CoreAI/GuardAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 1656e3cf181..1244e032dbd 100755
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h
index e23fb41d608..d7bf8656f23 100755
--- a/src/server/game/AI/CoreAI/PassiveAI.h
+++ b/src/server/game/AI/CoreAI/PassiveAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index 5a0c199a4c0..60151e4865a 100755
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -180,7 +180,7 @@ void PetAI::UpdateAI(const uint32 diff)
if (!spellUsed)
delete spell;
}
- else if (me->getVictim() && _CanAttack(me->getVictim()) && spellInfo->CanBeUsedInCombat())
+ else if (me->getVictim() && CanAttack(me->getVictim()) && spellInfo->CanBeUsedInCombat())
{
Spell* spell = new Spell(me, spellInfo, TRIGGERED_NONE, 0);
if (spell->CanAutoCast(me->getVictim()))
@@ -290,7 +290,7 @@ void PetAI::AttackStart(Unit* target)
// Overrides Unit::AttackStart to correctly evaluate Pet states
// Check all pet states to decide if we can attack this target
- if (!_CanAttack(target))
+ if (!CanAttack(target))
return;
targetHasCC = _CheckTargetCC(target);
@@ -440,7 +440,7 @@ void PetAI::MovementInform(uint32 moveType, uint32 data)
}
}
-bool PetAI::_CanAttack(Unit* target)
+bool PetAI::CanAttack(Unit* target)
{
// Evaluates wether a pet can attack a specific
// target based on CommandState, ReactState and other flags
diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h
index 9f0472cfe4d..847b4140285 100755
--- a/src/server/game/AI/CoreAI/PetAI.h
+++ b/src/server/game/AI/CoreAI/PetAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -57,7 +57,7 @@ class PetAI : public CreatureAI
Unit* SelectNextTarget();
void HandleReturnMovement();
void DoAttack(Unit* target, bool chase);
- bool _CanAttack(Unit* target);
+ bool CanAttack(Unit* target);
bool _CheckTargetCC(Unit* target);
};
#endif
diff --git a/src/server/game/AI/CoreAI/ReactorAI.cpp b/src/server/game/AI/CoreAI/ReactorAI.cpp
index df914fbf500..4683a75a44e 100755
--- a/src/server/game/AI/CoreAI/ReactorAI.cpp
+++ b/src/server/game/AI/CoreAI/ReactorAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/ReactorAI.h b/src/server/game/AI/CoreAI/ReactorAI.h
index e66b382ef68..4a95dcf04e8 100755
--- a/src/server/game/AI/CoreAI/ReactorAI.h
+++ b/src/server/game/AI/CoreAI/ReactorAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp
index 96da4c4f4e2..0739b62b605 100755
--- a/src/server/game/AI/CoreAI/TotemAI.cpp
+++ b/src/server/game/AI/CoreAI/TotemAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/TotemAI.h b/src/server/game/AI/CoreAI/TotemAI.h
index 4791c3af92a..0fa2920888f 100755
--- a/src/server/game/AI/CoreAI/TotemAI.h
+++ b/src/server/game/AI/CoreAI/TotemAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 8397ad7954e..38504b90b19 100755
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 3c16fe493b4..b871a25835b 100755
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -267,6 +267,7 @@ class UnitAI
virtual void sQuestComplete(Player* /*player*/, Quest const* /*quest*/) {}
virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) {}
virtual bool sOnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/) { return false; }
+ virtual void sOnGameEvent(bool /*start*/, uint16 /*eventId*/) {}
};
class PlayerAI : public UnitAI
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 329a2d004a5..c8818f84e5b 100755
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -59,8 +59,8 @@ void CreatureAI::DoZoneInCombat(Creature* creature /*= NULL*/, float maxRangeToN
if (!creature->HasReactState(REACT_PASSIVE) && !creature->getVictim())
{
- if (Unit* target = creature->SelectNearestTarget(maxRangeToNearestTarget))
- creature->AI()->AttackStart(target);
+ if (Unit* nearTarget = creature->SelectNearestTarget(maxRangeToNearestTarget))
+ creature->AI()->AttackStart(nearTarget);
else if (creature->isSummon())
{
if (Unit* summoner = creature->ToTempSummon()->GetSummoner())
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index 662ed3ab3dd..dafd3e4e137 100755
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CreatureAIFactory.h b/src/server/game/AI/CreatureAIFactory.h
index 4cedb3d9545..f4147826811 100755
--- a/src/server/game/AI/CreatureAIFactory.h
+++ b/src/server/game/AI/CreatureAIFactory.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h
index 848c2561f3f..147e829b0df 100755
--- a/src/server/game/AI/CreatureAIImpl.h
+++ b/src/server/game/AI/CreatureAIImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/AI/CreatureAIRegistry.cpp b/src/server/game/AI/CreatureAIRegistry.cpp
index 6fb04746111..e4cb62c56de 100755
--- a/src/server/game/AI/CreatureAIRegistry.cpp
+++ b/src/server/game/AI/CreatureAIRegistry.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CreatureAIRegistry.h b/src/server/game/AI/CreatureAIRegistry.h
index 4b054e3de29..39d792a0d77 100755
--- a/src/server/game/AI/CreatureAIRegistry.h
+++ b/src/server/game/AI/CreatureAIRegistry.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp
index 5b7ee7750bc..ab616d78a8c 100755
--- a/src/server/game/AI/CreatureAISelector.cpp
+++ b/src/server/game/AI/CreatureAISelector.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/CreatureAISelector.h b/src/server/game/AI/CreatureAISelector.h
index 64bf96c01af..933ec16f75c 100755
--- a/src/server/game/AI/CreatureAISelector.h
+++ b/src/server/game/AI/CreatureAISelector.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/EventAI/CreatureEventAI.cpp b/src/server/game/AI/EventAI/CreatureEventAI.cpp
index 62d7a1f4f58..c7590ebb512 100755
--- a/src/server/game/AI/EventAI/CreatureEventAI.cpp
+++ b/src/server/game/AI/EventAI/CreatureEventAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -840,7 +840,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
me->Mount(action.mount.modelId);
}
else
- me->Unmount();
+ me->Dismount();
break;
}
@@ -1177,9 +1177,8 @@ inline Unit* CreatureEventAI::GetTargetByType(uint32 target, Unit* actionInvoker
Unit* CreatureEventAI::DoSelectLowestHpFriendly(float range, uint32 minHPDiff)
{
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Unit* unit = NULL;
@@ -1199,9 +1198,8 @@ Unit* CreatureEventAI::DoSelectLowestHpFriendly(float range, uint32 minHPDiff)
void CreatureEventAI::DoFindFriendlyCC(std::list<Creature*>& _list, float range)
{
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::FriendlyCCedInRange u_check(me, range);
@@ -1209,14 +1207,13 @@ void CreatureEventAI::DoFindFriendlyCC(std::list<Creature*>& _list, float range)
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::FriendlyCCedInRange>, GridTypeMapContainer > grid_creature_searcher(searcher);
- cell.Visit(p, grid_creature_searcher, *me->GetMap());
+ cell.Visit(p, grid_creature_searcher, *me->GetMap(), *me, range);
}
void CreatureEventAI::DoFindFriendlyMissingBuff(std::list<Creature*>& _list, float range, uint32 spellid)
{
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::FriendlyMissingBuffInRange u_check(me, range, spellid);
@@ -1224,7 +1221,7 @@ void CreatureEventAI::DoFindFriendlyMissingBuff(std::list<Creature*>& _list, flo
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::FriendlyMissingBuffInRange>, GridTypeMapContainer > grid_creature_searcher(searcher);
- cell.Visit(p, grid_creature_searcher, *me->GetMap());
+ cell.Visit(p, grid_creature_searcher, *me->GetMap(), *me, range);
}
// *********************************
diff --git a/src/server/game/AI/EventAI/CreatureEventAI.h b/src/server/game/AI/EventAI/CreatureEventAI.h
index 2fc26bcbd3e..c4daf2563e0 100755
--- a/src/server/game/AI/EventAI/CreatureEventAI.h
+++ b/src/server/game/AI/EventAI/CreatureEventAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -108,7 +108,7 @@ enum EventAI_ActionType
ACTION_T_SET_SHEATH = 40, // Sheath (0-passive, 1-melee, 2-ranged)
ACTION_T_FORCE_DESPAWN = 41, // No Params
ACTION_T_SET_INVINCIBILITY_HP_LEVEL = 42, // MinHpValue, format(0-flat, 1-percent from max health)
- ACTION_T_MOUNT_TO_ENTRY_OR_MODEL = 43, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to unmount)
+ ACTION_T_MOUNT_TO_ENTRY_OR_MODEL = 43, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to dismount)
ACTION_T_SET_PHASE_MASK = 97,
ACTION_T_SET_STAND_STATE = 98,
diff --git a/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp b/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp
index c27613f320f..8f2cf6b471f 100755
--- a/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp
+++ b/src/server/game/AI/EventAI/CreatureEventAIMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/EventAI/CreatureEventAIMgr.h b/src/server/game/AI/EventAI/CreatureEventAIMgr.h
index 50af460541f..93e953681b6 100755
--- a/src/server/game/AI/EventAI/CreatureEventAIMgr.h
+++ b/src/server/game/AI/EventAI/CreatureEventAIMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 2322e88d105..953bbf7521a 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -363,16 +363,15 @@ Player* ScriptedAI::GetPlayerAtMinimumRange(float minimumRange)
{
Player* player = NULL;
- CellPair pair(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord pair(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::PlayerAtMinimumRangeAway check(me, minimumRange);
Trinity::PlayerSearcher<Trinity::PlayerAtMinimumRangeAway> searcher(me, player, check);
TypeContainerVisitor<Trinity::PlayerSearcher<Trinity::PlayerAtMinimumRangeAway>, GridTypeMapContainer> visitor(searcher);
- cell.Visit(pair, visitor, *(me->GetMap()));
+ cell.Visit(pair, visitor, *me->GetMap(), *me, minimumRange);
return player;
}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index 92c6565be9f..a01c993cab6 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index f210f077fdd..c5f04d4ff5f 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -218,7 +218,7 @@ void npc_escortAI::UpdateAI(uint32 const diff)
if (m_bCanReturnToStart)
{
float fRetX, fRetY, fRetZ;
- me->GetRespawnCoord(fRetX, fRetY, fRetZ);
+ me->GetRespawnPosition(fRetX, fRetY, fRetZ);
me->GetMotionMaster()->MovePoint(POINT_HOME, fRetX, fRetY, fRetZ);
@@ -543,7 +543,6 @@ bool npc_escortAI::GetWaypointPosition(uint32 pointId, float& x, float& y, float
if (waypoints.empty())
return false;
- ScriptPointVector::const_iterator itrEnd = waypoints.end();
for (ScriptPointVector::const_iterator itr = waypoints.begin(); itr != waypoints.end(); ++itr)
{
if (itr->uiPointId == pointId)
diff --git a/src/server/game/AI/ScriptedAI/ScriptedSimpleAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedSimpleAI.cpp
index c4142ba2b1b..25c7f6f44b7 100755
--- a/src/server/game/AI/ScriptedAI/ScriptedSimpleAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedSimpleAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 0b77dd03e87..af6bf6cf6ce 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -450,12 +450,14 @@ void SmartAI::EnterEvadeMode()
{
AddEscortState(SMART_ESCORT_RETURNING);
ReturnToLastOOCPos();
- } else if (mFollowGuid){
+ }
+ else if (mFollowGuid)
+ {
if (Unit* target = me->GetUnit(*me, mFollowGuid))
me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle);
- } else {
- me->GetMotionMaster()->MoveTargetedHome();
}
+ else
+ me->GetMotionMaster()->MoveTargetedHome();
Reset();
}
@@ -705,12 +707,24 @@ void SmartAI::SetRun(bool run)
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
else
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
+
mRun = run;
}
void SmartAI::SetFly(bool fly)
{
+ if (fly)
+ {
+ me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
+ }
+ else
+ {
+ me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
+ }
me->SetFlying(fly);
+ me->SendMovementFlagUpdate();
}
void SmartAI::SetSwim(bool swim)
@@ -719,6 +733,7 @@ void SmartAI::SetSwim(bool swim)
me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
else
me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
+ me->SendMovementFlagUpdate();
}
void SmartAI::sGossipHello(Player* player)
@@ -781,8 +796,8 @@ void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, ui
return;
SetRun(mRun);
mFollowGuid = target->GetGUID();
- mFollowDist = dist;
- mFollowAngle = angle;
+ mFollowDist = dist ? dist : PET_FOLLOW_DIST;
+ mFollowAngle = angle ? angle : me->GetFollowAngle();
mFollowArrivedTimer = 1000;
mFollowCredit = credit;
mFollowArrivedEntry = end;
@@ -796,6 +811,12 @@ void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker)
GetScript()->mLastInvoker = invoker->GetGUID();
GetScript()->SetScript9(e, entry);
}
+
+void SmartAI::sOnGameEvent(bool start, uint16 eventId)
+{
+ GetScript()->ProcessEventsFor(start ? SMART_EVENT_GAME_EVENT_START : SMART_EVENT_GAME_EVENT_END, NULL, eventId);
+}
+
/*
SMART_EVENT_UPDATE_OOC
SMART_EVENT_SPELLHIT
@@ -898,17 +919,22 @@ void SmartGameObjectAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* inv
GetScript()->SetScript9(e, entry);
}
+void SmartGameObjectAI::OnGameEvent(bool start, uint16 eventId)
+{
+ GetScript()->ProcessEventsFor(start ? SMART_EVENT_GAME_EVENT_START : SMART_EVENT_GAME_EVENT_END, NULL, eventId);
+}
+
class SmartTrigger : public AreaTriggerScript
{
public:
- SmartTrigger()
- : AreaTriggerScript("SmartTrigger")
- {
- }
+ SmartTrigger() : AreaTriggerScript("SmartTrigger") {}
bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
{
+ if (!player->isAlive())
+ return false;
+
sLog->outDebug(LOG_FILTER_DATABASE_AI, "AreaTrigger %u is using SmartTrigger script", trigger->id);
SmartScript script;
script.OnInitialize(NULL, trigger);
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 8bb3bda8dd6..1059e2a01c4 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -183,6 +183,7 @@ class SmartAI : public CreatureAI
//void sQuestComplete(Player* player, Quest const* quest);
void sQuestReward(Player* player, Quest const* quest, uint32 opt);
bool sOnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex);
+ void sOnGameEvent(bool start, uint16 eventId);
uint32 mEscortQuestID;
@@ -249,6 +250,7 @@ public:
void Destroyed(Player* player, uint32 eventId);
void SetData(uint32 id, uint32 value);
void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker);
+ void OnGameEvent(bool start, uint16 eventId);
protected:
GameObject* const go;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 54c69080c41..a2e70e9cbf2 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -32,6 +32,7 @@
#include "SmartAI.h"
#include "Group.h"
#include "Vehicle.h"
+#include "ScriptedGossip.h"
SmartScript::SmartScript()
{
@@ -139,6 +140,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
ObjectList* targets = GetTargets(e, unit);
Creature* talker = me;
+ Player* targetPlayer = NULL;
if (targets)
{
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
@@ -148,14 +150,26 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
talker = (*itr)->ToCreature();
break;
}
+ else if (IsPlayer((*itr)))
+ {
+ targetPlayer = (*itr)->ToPlayer();
+ break;
+ }
}
delete targets;
}
+
mTalkerEntry = talker->GetEntry();
mLastTextID = e.action.talk.textGroupID;
mTextTimer = e.action.talk.duration;
- mTextGUID = IsPlayer(GetLastInvoker()) ? GetLastInvoker()->GetGUID() : 0;//invoker, used for $vars in texts
+ if (IsPlayer(GetLastInvoker())) // used for $vars in texts and whisper target
+ mTextGUID = GetLastInvoker()->GetGUID();
+ else if (targetPlayer)
+ mTextGUID = targetPlayer->GetGUID();
+ else
+ mTextGUID = 0;
+
mUseTextTimer = true;
sCreatureTextMgr->SendChat(talker, uint8(e.action.talk.textGroupID), mTextGUID);
sLog->outDebug(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction: SMART_ACTION_TALK: talker: %s (GuidLow: %u), textGuid: %u",
@@ -210,7 +224,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
{
for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
{
- if (IsPlayer(*itr))
+ if (IsUnit(*itr))
{
(*itr)->SendPlaySound(e.action.sound.sound, e.action.sound.range > 0 ? true : false);
sLog->outDebug(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_SOUND: target: %s (GuidLow: %u), sound: %u, onlyself: %u",
@@ -980,7 +994,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
(*itr)->ToUnit()->Mount(e.action.morphOrMount.model);
}
else
- (*itr)->ToUnit()->Unmount();
+ (*itr)->ToUnit()->Dismount();
}
delete targets;
@@ -1307,9 +1321,25 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsSmart())
return;
- bool run = e.action.setRun.run ? true : false;
- CAST_AI(SmartAI, me->AI())->SetRun(run);
- me->GetMotionMaster()->MovePoint(0, e.target.x, e.target.y, e.target.z);
+ WorldObject* target = NULL;
+
+ if (e.GetTargetType() == SMART_TARGET_CREATURE_RANGE || e.GetTargetType() == SMART_TARGET_CREATURE_GUID ||
+ e.GetTargetType() == SMART_TARGET_CREATURE_DISTANCE || e.GetTargetType() == SMART_TARGET_GAMEOBJECT_RANGE ||
+ e.GetTargetType() == SMART_TARGET_GAMEOBJECT_GUID || e.GetTargetType() == SMART_TARGET_GAMEOBJECT_DISTANCE ||
+ e.GetTargetType() == SMART_TARGET_CLOSEST_CREATURE || e.GetTargetType() == SMART_TARGET_CLOSEST_GAMEOBJECT ||
+ e.GetTargetType() == SMART_TARGET_OWNER_OR_SUMMONER)
+ {
+ ObjectList* targets = GetTargets(e, unit);
+ if (!targets)
+ return;
+
+ target = targets->front();
+ }
+
+ if(!target)
+ me->GetMotionMaster()->MovePoint(0, e.target.x, e.target.y, e.target.z);
+ else
+ me->GetMotionMaster()->MovePoint(0, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
break;
}
case SMART_ACTION_RESPAWN_TARGET:
@@ -1323,7 +1353,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsCreature(*itr))
(*itr)->ToCreature()->Respawn();
else if (IsGameObject(*itr))
- (*itr)->ToGameObject()->SetRespawnTime(e.action.RespawnTarget.GoRespawnTime);
+ (*itr)->ToGameObject()->SetRespawnTime(e.action.RespawnTarget.goRespawnTime);
}
delete targets;
@@ -1458,28 +1488,6 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
case SMART_ACTION_CALL_SCRIPT_RESET:
OnReset();
break;
- case SMART_ACTION_ENTER_VEHICLE:
- {
- if (!me)
- return;
-
- ObjectList* targets = GetTargets(e, unit);
- if (!targets)
- return;
-
- for (ObjectList::iterator itr = targets->begin(); itr != targets->end(); ++itr)
- {
- if (IsUnit(*itr) && (*itr)->ToUnit()->GetVehicleKit())
- {
- me->EnterVehicle((*itr)->ToUnit(), e.action.enterVehicle.seat);
- delete targets;
- return;
- }
- }
-
- delete targets;
- break;
- }
case SMART_ACTION_CALL_TIMED_ACTIONLIST:
{
if (e.GetTargetType() == SMART_TARGET_NONE)
@@ -1498,10 +1506,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsSmart(target))
CAST_AI(SmartAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
}
- else if (GameObject* target = (*itr)->ToGameObject())
+ else if (GameObject* goTarget = (*itr)->ToGameObject())
{
- if (IsSmartGO(target))
- CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
+ if (IsSmartGO(goTarget))
+ CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
}
}
@@ -1615,10 +1623,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsSmart(target))
CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
}
- else if (GameObject* target = (*itr)->ToGameObject())
+ else if (GameObject* goTarget = (*itr)->ToGameObject())
{
- if (IsSmartGO(target))
- CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker());
+ if (IsSmartGO(goTarget))
+ CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
}
}
@@ -1645,10 +1653,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (IsSmart(target))
CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
}
- else if (GameObject* target = (*itr)->ToGameObject())
+ else if (GameObject* goTarget = (*itr)->ToGameObject())
{
- if (IsSmartGO(target))
- CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker());
+ if (IsSmartGO(goTarget))
+ CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
}
}
@@ -1781,7 +1789,38 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
case SMART_ACTION_JUMP_TO_POS:
{
+ if (!me)
+ return;
+
+ me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MoveJump(e.target.x, e.target.y, e.target.z, (float)e.action.jump.speedxy, (float)e.action.jump.speedz);
+ // TODO: Resume path when reached jump location
+ break;
+ }
+ case SMART_ACTION_SEND_GOSSIP_MENU:
+ {
+ if (!GetBaseObject())
+ return;
+
+ sLog->outDebug(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_SEND_GOSSIP_MENU: gossipMenuId %d, gossipNpcTextId %d",
+ e.action.sendGossipMenu.gossipMenuId, e.action.sendGossipMenu.gossipNpcTextId);
+
+ ObjectList* targets = GetTargets(e, unit);
+ if (!targets)
+ return;
+
+ for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
+ if (Player* player = (*itr)->ToPlayer())
+ {
+ if (e.action.sendGossipMenu.gossipMenuId)
+ player->PrepareGossipMenu(GetBaseObject(), e.action.sendGossipMenu.gossipMenuId, true);
+ else
+ player->PlayerTalkClass->ClearMenus();
+
+ player->SEND_GOSSIP_MENU(e.action.sendGossipMenu.gossipNpcTextId, GetBaseObject()->GetGUID());
+ }
+
+ delete targets;
break;
}
default:
@@ -2122,6 +2161,16 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
l->push_back(target);
break;
}
+ case SMART_TARGET_CLOSEST_PLAYER:
+ {
+ if (me)
+ {
+ Player* target = me->SelectNearestPlayer((float)e.target.playerDistance.dist);
+ if (target)
+ l->push_back(target);
+ }
+ break;
+ }
case SMART_TARGET_OWNER_OR_SUMMONER:
{
if (me)
@@ -2265,10 +2314,10 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
if (!me || !me->isInCombat())
return;
- Unit* unit = DoSelectLowestHpFriendly((float)e.event.friendlyHealt.radius, e.event.friendlyHealt.hpDeficit);
- if (!unit)
+ Unit* target = DoSelectLowestHpFriendly((float)e.event.friendlyHealt.radius, e.event.friendlyHealt.hpDeficit);
+ if (!target)
return;
- ProcessAction(e, unit);
+ ProcessAction(e, target);
RecalcTimer(e, e.event.friendlyHealt.repeatMin, e.event.friendlyHealt.repeatMax);
break;
}
@@ -2562,6 +2611,14 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
ProcessAction(e, unit, var0, var1);
break;
}
+ case SMART_EVENT_GAME_EVENT_START:
+ case SMART_EVENT_GAME_EVENT_END:
+ {
+ if (e.event.gameEvent.gameEventId != var0)
+ return;
+ ProcessAction(e, NULL, var0);
+ break;
+ }
default:
sLog->outErrorDb("SmartScript::ProcessEvent: Unhandled Event type %u", e.GetEventType());
break;
@@ -2608,6 +2665,19 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff)
if (e.timer < diff)
{
+ // delay spell cast event if another spell is being casted
+ if (e.GetActionType() == SMART_ACTION_CAST)
+ {
+ if (!(e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS))
+ {
+ if (me && me->HasUnitState(UNIT_STAT_CASTING))
+ {
+ e.timer = 1;
+ return;
+ }
+ }
+ }
+
e.active = true;//activate events with cooldown
switch (e.GetEventType())//process ONLY timed events
{
@@ -2877,10 +2947,11 @@ uint32 SmartScript::DoChat(int8 id, uint64 whisperGuid)
Unit* SmartScript::DoSelectLowestHpFriendly(float range, uint32 MinHPDiff)
{
- if (!me) return NULL;
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ if (!me)
+ return NULL;
+
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Unit* unit = NULL;
@@ -2896,10 +2967,11 @@ Unit* SmartScript::DoSelectLowestHpFriendly(float range, uint32 MinHPDiff)
void SmartScript::DoFindFriendlyCC(std::list<Creature*>& _list, float range)
{
- if (!me) return;
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ if (!me)
+ return;
+
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::FriendlyCCedInRange u_check(me, range);
@@ -2907,15 +2979,16 @@ void SmartScript::DoFindFriendlyCC(std::list<Creature*>& _list, float range)
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::FriendlyCCedInRange>, GridTypeMapContainer > grid_creature_searcher(searcher);
- cell.Visit(p, grid_creature_searcher, *me->GetMap());
+ cell.Visit(p, grid_creature_searcher, *me->GetMap(), *me, range);
}
void SmartScript::DoFindFriendlyMissingBuff(std::list<Creature*>& list, float range, uint32 spellid)
{
- if (!me) return;
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ if (!me)
+ return;
+
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::FriendlyMissingBuffInRange u_check(me, range, spellid);
@@ -2923,7 +2996,7 @@ void SmartScript::DoFindFriendlyMissingBuff(std::list<Creature*>& list, float ra
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::FriendlyMissingBuffInRange>, GridTypeMapContainer > grid_creature_searcher(searcher);
- cell.Visit(p, grid_creature_searcher, *me->GetMap());
+ cell.Visit(p, grid_creature_searcher, *me->GetMap(), *me, range);
}
void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry)
@@ -2947,7 +3020,9 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry)
mResumeActionList = e.action.timedActionList.dontResume ? false : true;
InitTimer((*i));
}
-}Unit* SmartScript::GetLastInvoker()
+}
+
+Unit* SmartScript::GetLastInvoker()
{
return ObjectAccessor::FindUnit(mLastInvoker);
}
diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
index aa4eeb602c0..0193ac2bfb6 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.h
+++ b/src/server/game/AI/SmartScripts/SmartScript.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -155,33 +155,31 @@ class SmartScript
{
GameObject* gameObject = NULL;
- CellPair p(Trinity::ComputeCellPair(searchObject->GetPositionX(), searchObject->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::GameObjectWithDbGUIDCheck goCheck(*searchObject, guid);
Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(searchObject, gameObject, goCheck);
TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > objectChecker(checker);
- cell.Visit(p, objectChecker, *searchObject->GetMap());
+ cell.Visit(p, objectChecker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange());
return gameObject;
}
Creature* FindCreatureNear(WorldObject* searchObject, uint32 guid) const
{
- Creature* crea = NULL;
- CellPair p(Trinity::ComputeCellPair(searchObject->GetPositionX(), searchObject->GetPositionY()));
+ Creature* creature = NULL;
+ CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::CreatureWithDbGUIDCheck target_check(searchObject, guid);
- Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(searchObject, crea, target_check);
+ Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(searchObject, creature, target_check);
TypeContainerVisitor<Trinity::CreatureSearcher <Trinity::CreatureWithDbGUIDCheck>, GridTypeMapContainer > unit_checker(checker);
- cell.Visit(p, unit_checker, *searchObject->GetMap());
+ cell.Visit(p, unit_checker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange());
- return crea;
+ return creature;
}
ObjectListMap* mTargetStorage;
@@ -224,7 +222,7 @@ class SmartScript
}
void DecPhase(int32 p = 1) { mEventPhase -= (mEventPhase < (uint32)p ? (uint32)p - mEventPhase : (uint32)p); }
- bool IsInPhase(uint32 p) const { return mEventPhase & p; }
+ bool IsInPhase(uint32 p) const { return (1 << (mEventPhase - 1)) & p; }
void SetPhase(uint32 p = 0) { mEventPhase = p; }
SmartAIEventList mEvents;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index fab2a6b7722..63595b2439f 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -26,6 +26,7 @@
#include "CellImpl.h"
#include "InstanceScript.h"
#include "ScriptedCreature.h"
+#include "GameEventMgr.h"
#include "SmartScriptMgr.h"
@@ -35,7 +36,7 @@ void SmartWaypointMgr::LoadFromDB()
waypoint_map.clear();
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_LOAD_SMARTAI_WP);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_SMARTAI_WP);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -68,10 +69,12 @@ void SmartWaypointMgr::LoadFromDB()
path = new WPPath;
last_id = 1;
}
+
if (last_id != id)
{
sLog->outErrorDb("SmartWaypointMgr::LoadFromDB: Path entry %u, unexpected point id %u, expected %u.", entry, id, last_id);
}
+
last_id++;
(*path)[id] = wp;
@@ -96,7 +99,7 @@ void SmartAIMgr::LoadSmartAIFromDB()
for (uint8 i = 0; i < SMART_SCRIPT_TYPE_MAX; i++)
mEventMap[i].clear(); //Drop Existing SmartAI List
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_LOAD_SMART_SCRIPTS);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_SMART_SCRIPTS);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -158,7 +161,8 @@ void SmartAIMgr::LoadSmartAIFromDB()
sLog->outErrorDb("SmartAIMgr::LoadSmartAIFromDB: not yet implemented source_type %u", (uint32)source_type);
continue;
}
- }else
+ }
+ else
{
if (!sObjectMgr->GetCreatureData(uint32(abs(temp.entryOrGuid))))
{
@@ -166,6 +170,7 @@ void SmartAIMgr::LoadSmartAIFromDB()
continue;
}
}
+
temp.source_type = source_type;
temp.event_id = fields[2].GetUInt16();
temp.link = fields[3].GetUInt16();
@@ -224,41 +229,52 @@ void SmartAIMgr::LoadSmartAIFromDB()
bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
{
if (e.GetActionType() == SMART_ACTION_INSTALL_AI_TEMPLATE)
- return true; //AI template has special handling
+ return true; // AI template has special handling
switch (e.GetTargetType())
{
case SMART_TARGET_CREATURE_DISTANCE:
case SMART_TARGET_CREATURE_RANGE:
+ {
+ if (e.target.unitDistance.creature && !sObjectMgr->GetCreatureTemplate(e.target.unitDistance.creature))
{
- if (e.target.unitDistance.creature && !sObjectMgr->GetCreatureTemplate(e.target.unitDistance.creature))
- {
- sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent Creature entry %u as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.target.unitDistance.creature);
- return false;
- }
- break;
+ sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent Creature entry %u as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.target.unitDistance.creature);
+ return false;
}
+ break;
+ }
case SMART_TARGET_GAMEOBJECT_DISTANCE:
case SMART_TARGET_GAMEOBJECT_RANGE:
+ {
+ if (e.target.goDistance.entry && !sObjectMgr->GetGameObjectTemplate(e.target.goDistance.entry))
{
- if (e.target.goDistance.entry && !sObjectMgr->GetGameObjectTemplate(e.target.goDistance.entry))
- {
- sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent GameObject entry %u as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.target.goDistance.entry);
- return false;
- }
- break;
+ sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent GameObject entry %u as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.target.goDistance.entry);
+ return false;
}
+ break;
+ }
case SMART_TARGET_CREATURE_GUID:
- {
- if (e.target.unitGUID.entry && !IsCreatureValid(e, e.target.unitGUID.entry)) return false;
- break;
- }
+ {
+ if (e.target.unitGUID.entry && !IsCreatureValid(e, e.target.unitGUID.entry))
+ return false;
+ break;
+ }
case SMART_TARGET_GAMEOBJECT_GUID:
+ {
+ if (e.target.goGUID.entry && !IsGameObjectValid(e, e.target.goGUID.entry))
+ return false;
+ break;
+ }
+ case SMART_TARGET_PLAYER_DISTANCE:
+ case SMART_TARGET_CLOSEST_PLAYER:
+ {
+ if (e.target.playerDistance.dist == 0)
{
- if (e.target.goGUID.entry && !IsGameObjectValid(e, e.target.goGUID.entry)) return false;
- break;
+ sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u has maxDist 0 as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
+ return false;
}
+ break;
+ }
case SMART_TARGET_PLAYER_RANGE:
- case SMART_TARGET_PLAYER_DISTANCE:
case SMART_TARGET_SELF:
case SMART_TARGET_VICTIM:
case SMART_TARGET_HOSTILE_SECOND_AGGRO:
@@ -268,12 +284,12 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
case SMART_TARGET_ACTION_INVOKER:
case SMART_TARGET_POSITION:
case SMART_TARGET_NONE:
- case SMART_TARGET_CLOSEST_CREATURE:
- case SMART_TARGET_CLOSEST_GAMEOBJECT:
- case SMART_TARGET_CLOSEST_PLAYER:
case SMART_TARGET_ACTION_INVOKER_VEHICLE:
case SMART_TARGET_OWNER_OR_SUMMONER:
case SMART_TARGET_THREAT_LIST:
+ case SMART_TARGET_CLOSEST_GAMEOBJECT:
+ case SMART_TARGET_CLOSEST_CREATURE:
+ case SMART_TARGET_STORED:
break;
default:
sLog->outErrorDb("SmartAIMgr: Not handled target_type(%u), Entry %d SourceType %u Event %u Action %u, skipped.", e.GetTargetType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
@@ -394,7 +410,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
break;
case SMART_EVENT_ACCEPTED_QUEST:
case SMART_EVENT_REWARD_QUEST:
- if (!IsQuestValid(e, e.event.quest.quest)) return false;
+ if (e.event.quest.quest && !IsQuestValid(e, e.event.quest.quest))
+ return false;
break;
case SMART_EVENT_RECEIVE_EMOTE:
{
@@ -453,6 +470,14 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (!IsMinMaxValid(e, e.event.behindTarget.cooldownMin, e.event.behindTarget.cooldownMax))
return false;
break;
+ case SMART_EVENT_GAME_EVENT_START:
+ case SMART_EVENT_GAME_EVENT_END:
+ {
+ GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap();
+ if (e.event.gameEvent.gameEventId >= events.size() || !events[e.event.gameEvent.gameEventId].isValid())
+ return false;
+ break;
+ }
case SMART_EVENT_TIMED_EVENT_TRIGGERED:
case SMART_EVENT_INSTANCE_PLAYER_ENTER:
case SMART_EVENT_TRANSPORT_RELOCATE:
@@ -479,7 +504,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_EVENT_WAYPOINT_RESUMED:
case SMART_EVENT_WAYPOINT_STOPPED:
case SMART_EVENT_WAYPOINT_ENDED:
- case SMART_ACTION_PLAYMOVIE:
case SMART_EVENT_GOSSIP_SELECT:
case SMART_EVENT_GOSSIP_HELLO:
case SMART_EVENT_JUST_CREATED:
@@ -526,7 +550,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
}
break;
case SMART_ACTION_SOUND:
- if (!IsSoundValid(e, e.action.sound.sound)) return false;
+ if (!IsSoundValid(e, e.action.sound.sound))
+ return false;
if (e.action.sound.range > TEXT_RANGE_WORLD)
{
sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses invalid Text Range %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.sound.range);
@@ -539,7 +564,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
break;
case SMART_ACTION_FAIL_QUEST:
case SMART_ACTION_ADD_QUEST:
- if (e.action.quest.quest && !IsQuestValid(e, e.action.quest.quest)) return false;
+ if (!e.action.quest.quest || !IsQuestValid(e, e.action.quest.quest)) return false;
break;
case SMART_ACTION_ACTIVATE_TAXI:
{
@@ -755,7 +780,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_RESET_SCRIPT_BASE_OBJECT:
case SMART_ACTION_ACTIVATE_GOBJECT:
case SMART_ACTION_CALL_SCRIPT_RESET:
- case SMART_ACTION_ENTER_VEHICLE:
case SMART_ACTION_NONE:
case SMART_ACTION_CALL_TIMED_ACTIONLIST:
case SMART_ACTION_SET_NPC_FLAG:
@@ -775,6 +799,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_ADD_DYNAMIC_FLAG:
case SMART_ACTION_REMOVE_DYNAMIC_FLAG:
case SMART_ACTION_JUMP_TO_POS:
+ case SMART_ACTION_SEND_GOSSIP_MENU:
break;
default:
sLog->outErrorDb("SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 327d03d31ff..ec4355111b9 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -152,8 +152,10 @@ enum SMART_EVENT
SMART_EVENT_FOLLOW_COMPLETED = 65, //1 // none
SMART_EVENT_DUMMY_EFFECT = 66, //1 // spellId, effectIndex
SMART_EVENT_IS_BEHIND_TARGET = 67, //1 // cooldownMin, CooldownMax
+ SMART_EVENT_GAME_EVENT_START = 68, //1 // game_event.Entry
+ SMART_EVENT_GAME_EVENT_END = 69, //1 // game_event.Entry
- SMART_EVENT_END = 68,
+ SMART_EVENT_END = 70,
};
struct SmartEvent
@@ -338,6 +340,11 @@ struct SmartEvent
uint32 cooldownMax;
} behindTarget;
+ struct
+ {
+ uint32 gameEventId;
+ } gameEvent;
+
struct
{
uint32 param1;
@@ -387,7 +394,7 @@ enum SMART_ACTION
SMART_ACTION_CALL_GROUPEVENTHAPPENS = 26, // QuestID
SMART_ACTION_CALL_CASTEDCREATUREORGO = 27, // CreatureId, SpellId
SMART_ACTION_REMOVEAURASFROMSPELL = 28, // Spellid
- SMART_ACTION_FOLLOW = 29, // Distance, Angle, EndCreatureEntry, credit, creditType (0monsterkill, 1event)
+ SMART_ACTION_FOLLOW = 29, // Distance (0 = default), Angle (0 = default), EndCreatureEntry, credit, creditType (0monsterkill, 1event)
SMART_ACTION_RANDOM_PHASE = 30, // PhaseId1, PhaseId2, PhaseId3...
SMART_ACTION_RANDOM_PHASE_RANGE = 31, // PhaseMin, PhaseMax
SMART_ACTION_RESET_GOBJECT = 32, //
@@ -401,7 +408,7 @@ enum SMART_ACTION
SMART_ACTION_SET_SHEATH = 40, // Sheath (0-unarmed, 1-melee, 2-ranged)
SMART_ACTION_FORCE_DESPAWN = 41, // timer
SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL = 42, // MinHpValue(+pct, -flat)
- SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL = 43, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to unmount)
+ SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL = 43, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to dismount)
SMART_ACTION_SET_INGAME_PHASE_MASK = 44, // mask
SMART_ACTION_SET_DATA = 45, // Field, Data (only creature TODO)
@@ -439,7 +446,7 @@ enum SMART_ACTION
SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT = 76, // WARNING: CAN CRASH CORE, do not use if you dont know what you are doing
SMART_ACTION_RESET_SCRIPT_BASE_OBJECT = 77, // none
SMART_ACTION_CALL_SCRIPT_RESET = 78, // none
- SMART_ACTION_ENTER_VEHICLE = 79, // seatID
+ // Unused = 79,
SMART_ACTION_CALL_TIMED_ACTIONLIST = 80, // ID (overwrites already running actionlist), stop after combat?(0/1), timer update type(0-OOC, 1-IC, 2-ALWAYS)
SMART_ACTION_SET_NPC_FLAG = 81, // Flags
SMART_ACTION_ADD_NPC_FLAG = 82, // Flags
@@ -450,20 +457,17 @@ enum SMART_ACTION
SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST = 87, // script9 ids 1-9
SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST = 88, // script9 id min, max
SMART_ACTION_RANDOM_MOVE = 89, // maxDist
-
SMART_ACTION_SET_UNIT_FIELD_BYTES_1 = 90, // bytes, target
SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1 = 91, // bytes, target
-
SMART_ACTION_INTERRUPT_SPELL = 92,
-
SMART_ACTION_SEND_GO_CUSTOM_ANIM = 93, // anim id
-
SMART_ACTION_SET_DYNAMIC_FLAG = 94, // Flags
SMART_ACTION_ADD_DYNAMIC_FLAG = 95, // Flags
SMART_ACTION_REMOVE_DYNAMIC_FLAG = 96, // Flags
SMART_ACTION_JUMP_TO_POS = 97, // speedXY, speedZ, targetX, targetY, targetZ
+ SMART_ACTION_SEND_GOSSIP_MENU = 98, // menuId, optionId
- SMART_ACTION_END = 98,
+ SMART_ACTION_END = 99,
};
struct SmartAction
@@ -859,8 +863,14 @@ struct SmartAction
struct
{
- uint32 GoRespawnTime;
+ uint32 goRespawnTime;
} RespawnTarget;
+
+ struct
+ {
+ uint32 gossipMenuId;
+ uint32 gossipNpcTextId;
+ } sendGossipMenu;
struct
{
@@ -906,9 +916,9 @@ enum SMARTAI_TARGETS
SMART_TARGET_INVOKER_PARTY = 16, // invoker's party members
SMART_TARGET_PLAYER_RANGE = 17, // min, max
SMART_TARGET_PLAYER_DISTANCE = 18, // maxDist
- SMART_TARGET_CLOSEST_CREATURE = 19, // CreatureEntry(0any)
- SMART_TARGET_CLOSEST_GAMEOBJECT = 20, // entry(0any)
- SMART_TARGET_CLOSEST_PLAYER = 21, // none
+ SMART_TARGET_CLOSEST_CREATURE = 19, // CreatureEntry(0any), maxDist, dead?
+ SMART_TARGET_CLOSEST_GAMEOBJECT = 20, // entry(0any), maxDist
+ SMART_TARGET_CLOSEST_PLAYER = 21, // maxDist
SMART_TARGET_ACTION_INVOKER_VEHICLE = 22, // Unit's vehicle who caused this Event to occur
SMART_TARGET_OWNER_OR_SUMMONER = 23, // Unit's owner or summoner
SMART_TARGET_THREAT_LIST = 24, // All units on creature's threat list
@@ -1124,8 +1134,10 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] =
{SMART_EVENT_JUST_CREATED, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{SMART_EVENT_GOSSIP_HELLO, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{SMART_EVENT_FOLLOW_COMPLETED, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_DUMMY_EFFECT, SMART_SCRIPT_TYPE_MASK_CREATURE },
- {SMART_EVENT_IS_BEHIND_TARGET, SMART_SCRIPT_TYPE_MASK_CREATURE }
+ {SMART_EVENT_DUMMY_EFFECT, SMART_SCRIPT_TYPE_MASK_SPELL },
+ {SMART_EVENT_IS_BEHIND_TARGET, SMART_SCRIPT_TYPE_MASK_CREATURE },
+ {SMART_EVENT_GAME_EVENT_START, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
+ {SMART_EVENT_GAME_EVENT_END, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
};
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index ebe9a9af36b..a6ae300e25d 100755
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -37,8 +37,16 @@ AccountOpResult CreateAccount(std::string username, std::string password)
if (GetId(username))
return AOR_NAME_ALREDY_EXIST; // username does already exist
- LoginDatabase.PExecute("INSERT INTO account(username, sha_pass_hash, joindate) VALUES('%s', '%s', NOW())", username.c_str(), CalculateShaPassHash(username, password).c_str());
- LoginDatabase.Execute("INSERT INTO realmcharacters (realmid, acctid, numchars) SELECT realmlist.id, account.id, 0 FROM realmlist, account LEFT JOIN realmcharacters ON acctid=account.id WHERE acctid IS NULL");
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT);
+
+ stmt->setString(0, username);
+ stmt->setString(1, CalculateShaPassHash(username, password));
+
+ LoginDatabase.Execute(stmt);
+
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS_INIT);
+
+ LoginDatabase.Execute(stmt);
return AOR_OK; // everything's fine
}
@@ -104,11 +112,13 @@ AccountOpResult ChangeUsername(uint32 accountId, std::string newUsername, std::s
normalizeString(newUsername);
normalizeString(newPassword);
- std::string safeNewUsername = newUsername;
- LoginDatabase.EscapeString(safeNewUsername);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_USERNAME);
- LoginDatabase.PExecute("UPDATE account SET v='0', s='0', username='%s', sha_pass_hash='%s' WHERE id='%d'", safeNewUsername.c_str(),
- CalculateShaPassHash(newUsername, newPassword).c_str(), accountId);
+ stmt->setString(0, newUsername);
+ stmt->setString(1, CalculateShaPassHash(newUsername, newPassword));
+ stmt->setUInt32(2, accountId);
+
+ LoginDatabase.Execute(stmt);
return AOR_OK;
}
@@ -126,9 +136,12 @@ AccountOpResult ChangePassword(uint32 accountId, std::string newPassword)
normalizeString(username);
normalizeString(newPassword);
- // also reset s and v to force update at next realmd login
- LoginDatabase.PExecute("UPDATE account SET v='0', s='0', sha_pass_hash='%s' WHERE id='%d'",
- CalculateShaPassHash(username, newPassword).c_str(), accountId);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_PASSWORD);
+
+ stmt->setString(0, CalculateShaPassHash(username, newPassword));
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
return AOR_OK;
}
diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h
index aca24e9522f..1b1ecfa994a 100755
--- a/src/server/game/Accounts/AccountMgr.h
+++ b/src/server/game/Accounts/AccountMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index fca4df12587..7efd5481ae8 100755
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -46,8 +46,8 @@ namespace Trinity
class AchievementChatBuilder
{
public:
- AchievementChatBuilder(Player const& pl, ChatMsg msgtype, int32 textId, uint32 ach_id)
- : i_player(pl), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) {}
+ AchievementChatBuilder(Player const& player, ChatMsg msgtype, int32 textId, uint32 ach_id)
+ : i_player(player), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) {}
void operator()(WorldPacket& data, LocaleConstant loc_idx)
{
char const* text = sObjectMgr->GetTrinityString(i_textId, loc_idx);
@@ -102,6 +102,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: // only Children's Week achievements
case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements
case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
+ case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
break;
default:
if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT)
@@ -135,13 +136,13 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
}
if (classRace.class_id && ((1 << (classRace.class_id-1)) & CLASSMASK_ALL_PLAYABLE) == 0)
{
- sLog->outErrorDb("Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_CREATURE (%u) has non-existing class in value1 (%u), ignored.",
+ sLog->outErrorDb("Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_PLAYER_CLASS_RACE (%u) has non-existing class in value1 (%u), ignored.",
criteria->ID, criteria->requiredType, dataType, classRace.class_id);
return false;
}
if (classRace.race_id && ((1 << (classRace.race_id-1)) & RACEMASK_ALL_PLAYABLE) == 0)
{
- sLog->outErrorDb("Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_CREATURE (%u) has non-existing race in value2 (%u), ignored.",
+ sLog->outErrorDb("Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_PLAYER_CLASS_RACE (%u) has non-existing race in value2 (%u), ignored.",
criteria->ID, criteria->requiredType, dataType, classRace.race_id);
return false;
}
@@ -450,7 +451,7 @@ void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaTypes type, uin
continue;
// don't update already completed criteria if not forced or achievement already complete
- if ((IsCompletedCriteria(achievementCriteria, achievement) && !evenIfCriteriaComplete) || HasAchieved(achievement))
+ if ((IsCompletedCriteria(achievementCriteria, achievement) && !evenIfCriteriaComplete) || HasAchieved(achievement->ID))
continue;
for (uint8 j = 0; j < MAX_CRITERIA_REQUIREMENTS; ++j)
@@ -618,7 +619,13 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ
{
// we will remove not existed criteria for all characters
sLog->outError("Non-existing achievement criteria %u data removed from table `character_achievement_progress`.", id);
- CharacterDatabase.PExecute("DELETE FROM character_achievement_progress WHERE criteria = %u", id);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA);
+
+ stmt->setUInt16(0, uint16(id));
+
+ CharacterDatabase.Execute(stmt);
+
continue;
}
@@ -666,10 +673,9 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
// if player is in world he can tell his friends about new achievement
else if (GetPlayer()->IsInWorld())
{
- CellPair p = Trinity::ComputeCellPair(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID);
@@ -847,6 +853,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
break;
}
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
+ if (AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria))
+ if (!data->Meets(GetPlayer(), unit))
+ continue;
SetCriteriaProgress(achievementCriteria, GetPlayer()->getLevel());
break;
case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL:
@@ -1066,14 +1075,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
continue;
}
- if (achievement->ID == 1282)
- {
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
+ if (AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria))
+ if (!data->Meets(GetPlayer(), unit))
continue;
- break;
- }
SetCriteriaProgress(achievementCriteria, 1);
break;
@@ -1598,9 +1602,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
}
}
-static const uint32 achievIdByClass[MAX_CLASSES] = { 0, 459, 465, 462, 458, 464, 461, 467, 460, 463, 0, 466 };
-static const uint32 achievIdByRace[MAX_RACES] = { 0, 1408, 1410, 1407, 1409, 1413, 1411, 1404, 1412, 0, 1405, 1406 };
-
bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement)
{
// counter can never complete
@@ -1625,20 +1626,7 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
return progress->counter >= achievementCriteria->kill_creature.creatureCount;
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
- {
- // skip wrong class achievements
- for (int i = 1; i < MAX_CLASSES; ++i)
- if (achievIdByClass[i] == achievement->ID && i != GetPlayer()->getClass())
- return false;
-
- // skip wrong race achievements
- for (int i = 1; i < MAX_RACES; ++i)
- if (achievIdByRace[i] == achievement->ID && i != GetPlayer()->getRace())
- return false;
-
- // appropriate class/race or not class/race specific
return progress->counter >= achievementCriteria->reach_level.level;
- }
case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL:
return progress->counter >= achievementCriteria->reach_skill_level.skillLevel;
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
@@ -1779,7 +1767,7 @@ void AchievementMgr::CompletedCriteriaFor(AchievementEntry const* achievement)
return;
// already completed and stored
- if (HasAchieved(achievement))
+ if (HasAchieved(achievement->ID))
return;
if (IsCompletedAchievement(achievement))
@@ -2013,7 +2001,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
if (m_player->isGameMaster())
return;
- if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement))
+ if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement->ID))
return;
SendAchievementEarned(achievement);
@@ -2128,9 +2116,9 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const
*data << int32(-1);
}
-bool AchievementMgr::HasAchieved(AchievementEntry const* achievement) const
+bool AchievementMgr::HasAchieved(uint32 achievementId) const
{
- return m_completedAchievements.find(achievement->ID) != m_completedAchievements.end();
+ return m_completedAchievements.find(achievementId) != m_completedAchievements.end();
}
bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement)
@@ -2393,16 +2381,23 @@ void AchievementGlobalMgr::LoadCompletedAchievements()
{
Field* fields = result->Fetch();
- uint32 achievement_id = fields[0].GetUInt32();
- if (!sAchievementStore.LookupEntry(achievement_id))
+ uint32 achievementId = fields[0].GetUInt32();
+ const AchievementEntry* achievement = sAchievementStore.LookupEntry(achievementId);
+ if (!achievement)
{
- // we will remove not existed achievement for all characters
- sLog->outError("Non-existing achievement %u data removed from table `character_achievement`.", achievement_id);
- CharacterDatabase.PExecute("DELETE FROM character_achievement WHERE achievement = %u", achievement_id);
+ // Remove non existent achievements from all characters
+ sLog->outError("Non-existing achievement %u data removed from table `character_achievement`.", achievementId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_ACHIEVMENT);
+
+ stmt->setUInt16(0, uint16(achievementId));
+
+ CharacterDatabase.Execute(stmt);
+
continue;
}
-
- m_allCompletedAchievements.insert(achievement_id);
+ else if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
+ m_allCompletedAchievements.insert(achievementId);
} while (result->NextRow());
sLog->outString(">> Loaded %lu completed achievements in %u ms", (unsigned long)m_allCompletedAchievements.size(), GetMSTimeDiffToNow(oldMSTime));
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index df5631c5bc6..640b5de98c9 100755
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -244,7 +244,7 @@ class WorldPacket;
class AchievementMgr
{
public:
- AchievementMgr(Player* pl);
+ AchievementMgr(Player* player);
~AchievementMgr();
void Reset();
@@ -257,7 +257,7 @@ class AchievementMgr
void CheckAllAchievementCriteria();
void SendAllAchievementData() const;
void SendRespondInspectAchievements(Player* player) const;
- bool HasAchieved(AchievementEntry const* achievement) const;
+ bool HasAchieved(uint32 achievementId) const;
Player* GetPlayer() const { return m_player; }
void UpdateTimedAchievements(uint32 timeDiff);
void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0);
diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp
index 9d5bdd159f7..528e682e8d4 100755
--- a/src/server/game/Addons/AddonMgr.cpp
+++ b/src/server/game/Addons/AddonMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -70,8 +70,13 @@ void LoadFromDB()
void SaveAddon(AddonInfo const& addon)
{
std::string name = addon.Name;
- CharacterDatabase.EscapeString(name);
- CharacterDatabase.PExecute("INSERT INTO addons (name, crc) VALUES ('%s', %u)", name.c_str(), addon.CRC);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ADDON);
+
+ stmt->setString(0, name);
+ stmt->setUInt32(1, addon.CRC);
+
+ CharacterDatabase.Execute(stmt);
m_knownAddons.push_back(SavedAddon(addon.Name, addon.CRC));
}
diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h
index 72edc3d1f6f..38338b3980f 100755
--- a/src/server/game/Addons/AddonMgr.h
+++ b/src/server/game/Addons/AddonMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 0a2ff750a1b..e7504b4ddd2 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -145,7 +145,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction&
// set owner to bidder (to prevent delete item with sender char deleting)
// owner in `data` will set at mail receive and item extracting
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_ITEM_OWNER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
stmt->setUInt32(0, auction->bidder);
stmt->setUInt32(1, pItem->GetGUIDLow());
trans->Append(stmt);
@@ -308,7 +308,7 @@ void AuctionHouseMgr::LoadAuctionItems()
uint32 oldMSTime = getMSTime();
// data needs to be at first place for Item::LoadFromDB
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_AUCTION_ITEMS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_AUCTION_ITEMS);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -355,7 +355,7 @@ void AuctionHouseMgr::LoadAuctions()
{
uint32 oldMSTime = getMSTime();
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_AUCTIONS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_AUCTIONS);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -704,7 +704,7 @@ void AuctionEntry::DeleteFromDB(SQLTransaction& trans) const
void AuctionEntry::SaveToDB(SQLTransaction& trans) const
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_AUCTION);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AUCTION);
stmt->setUInt32(0, Id);
stmt->setUInt32(1, auctioneer);
stmt->setUInt32(2, item_guidlow);
@@ -776,7 +776,7 @@ void AuctionHouseMgr::DeleteExpiredAuctionsAtStartup()
time_t curTime = sWorld->GetGameTime();
// Query the DB to see if there are any expired auctions
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_EXPIRED_AUCTIONS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_EXPIRED_AUCTIONS);
stmt->setUInt32(0, (uint32)curTime+60);
PreparedQueryResult expAuctions = CharacterDatabase.Query(stmt);
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index d1fb26cbc80..f81393be761 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 45f41eebd26..8e30743f107 100755
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -71,7 +71,7 @@ bool ArenaTeam::Create(uint64 captainGuid, uint8 type, std::string teamName, uin
uint32 captainLowGuid = GUID_LOPART(captainGuid);
// Save arena team to db
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_ARENA_TEAM);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ARENA_TEAM);
stmt->setUInt32(0, TeamId);
stmt->setString(1, TeamName);
stmt->setUInt32(2, captainLowGuid);
@@ -111,7 +111,7 @@ bool ArenaTeam::AddMember(uint64 playerGuid)
{
// 0 1
// SELECT name, class FROM characters WHERE guid = ?
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_NAME_CLASS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME_CLASS);
stmt->setUInt32(0, GUID_LOPART(playerGuid));
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -138,7 +138,7 @@ bool ArenaTeam::AddMember(uint64 playerGuid)
personalRating = 1000;
// Try to get player's match maker rating from db and fall back to config setting if not found
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_MATCH_MAKER_RATING);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MATCH_MAKER_RATING);
stmt->setUInt32(0, GUID_LOPART(playerGuid));
stmt->setUInt8(1, GetSlot());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -168,7 +168,7 @@ bool ArenaTeam::AddMember(uint64 playerGuid)
Members.push_back(newmember);
// Save player's arena team membership to db
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_ARENA_TEAM_MEMBER);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ARENA_TEAM_MEMBER);
stmt->setUInt32(0, TeamId);
stmt->setUInt32(1, GUID_LOPART(playerGuid));
CharacterDatabase.Execute(stmt);
@@ -285,7 +285,7 @@ void ArenaTeam::SetCaptain(uint64 guid)
CaptainGuid = guid;
// Update database
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_ARENA_TEAM_CAPTAIN);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ARENA_TEAM_CAPTAIN);
stmt->setUInt32(0, GUID_LOPART(guid));
stmt->setUInt32(1, GetId());
CharacterDatabase.Execute(stmt);
@@ -391,8 +391,8 @@ void ArenaTeam::Roster(WorldSession* session)
data << uint32(itr->PersonalRating); // personal rating
if (unk308)
{
- data << float(0.0); // 308 unk
- data << float(0.0); // 308 unk
+ data << float(0.0f); // 308 unk
+ data << float(0.0f); // 308 unk
}
}
@@ -433,8 +433,8 @@ void ArenaTeam::NotifyStatsChanged()
// This is called after a rated match ended
// Updates arena team stats for every member of the team (not only the ones who participated!)
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(itr->Guid))
- SendStats(plr->GetSession());
+ if (Player* player = ObjectAccessor::FindPlayer(itr->Guid))
+ SendStats(player->GetSession());
}
void ArenaTeam::Inspect(WorldSession* session, uint64 guid)
@@ -455,17 +455,17 @@ void ArenaTeam::Inspect(WorldSession* session, uint64 guid)
session->SendPacket(&data);
}
-void ArenaTeamMember::ModifyPersonalRating(Player* plr, int32 mod, uint32 slot)
+void ArenaTeamMember::ModifyPersonalRating(Player* player, int32 mod, uint32 slot)
{
if (int32(PersonalRating) + mod < 0)
PersonalRating = 0;
else
PersonalRating += mod;
- if (plr)
+ if (player)
{
- plr->SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, PersonalRating);
- plr->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING, PersonalRating, slot);
+ player->SetArenaTeamInfoField(slot, ARENA_TEAM_PERSONAL_RATING, PersonalRating);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING, PersonalRating, slot);
}
}
@@ -716,16 +716,16 @@ int32 ArenaTeam::LostAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int3
return mod;
}
-void ArenaTeam::MemberLost(Player* plr, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange)
+void ArenaTeam::MemberLost(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange)
{
// Called for each participant of a match after losing
for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
- if (itr->Guid == plr->GetGUID())
+ if (itr->Guid == player->GetGUID())
{
// Update personal rating
int32 mod = GetRatingMod(itr->PersonalRating, againstMatchmakerRating, false);
- itr->ModifyPersonalRating(plr, mod, GetSlot());
+ itr->ModifyPersonalRating(player, mod, GetSlot());
// Update matchmaker rating
itr->ModifyMatchmakerRating(MatchmakerRatingChange, GetSlot());
@@ -735,8 +735,8 @@ void ArenaTeam::MemberLost(Player* plr, uint32 againstMatchmakerRating, int32 Ma
itr->SeasonGames +=1;
// update the unit fields
- plr->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_WEEK, itr->WeekGames);
- plr->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_SEASON, itr->SeasonGames);
+ player->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_WEEK, itr->WeekGames);
+ player->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_SEASON, itr->SeasonGames);
return;
}
}
@@ -764,16 +764,16 @@ void ArenaTeam::OfflineMemberLost(uint64 guid, uint32 againstMatchmakerRating, i
}
}
-void ArenaTeam::MemberWon(Player* plr, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange)
+void ArenaTeam::MemberWon(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange)
{
// called for each participant after winning a match
for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
- if (itr->Guid == plr->GetGUID())
+ if (itr->Guid == player->GetGUID())
{
// update personal rating
int32 mod = GetRatingMod(itr->PersonalRating, againstMatchmakerRating, true);
- itr->ModifyPersonalRating(plr, mod, GetSlot());
+ itr->ModifyPersonalRating(player, mod, GetSlot());
// update matchmaker rating
itr->ModifyMatchmakerRating(MatchmakerRatingChange, GetSlot());
@@ -784,8 +784,8 @@ void ArenaTeam::MemberWon(Player* plr, uint32 againstMatchmakerRating, int32 Mat
itr->SeasonWins += 1;
itr->WeekWins += 1;
// update unit fields
- plr->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_WEEK, itr->WeekGames);
- plr->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_SEASON, itr->SeasonGames);
+ player->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_WEEK, itr->WeekGames);
+ player->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_GAMES_SEASON, itr->SeasonGames);
return;
}
}
@@ -800,7 +800,7 @@ void ArenaTeam::UpdateArenaPointsHelper(std::map<uint32, uint32>& playerPoints)
return;
// To get points, a player has to participate in at least 30% of the matches
- uint32 requiredGames = (uint32) ceil(Stats.WeekGames * 0.3);
+ uint32 requiredGames = (uint32)ceil(Stats.WeekGames * 0.3f);
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
@@ -828,7 +828,7 @@ void ArenaTeam::SaveToDB()
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_ARENA_TEAM_STATS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ARENA_TEAM_STATS);
stmt->setUInt16(0, Stats.Rating);
stmt->setUInt16(1, Stats.WeekGames);
stmt->setUInt16(2, Stats.WeekWins);
@@ -840,7 +840,7 @@ void ArenaTeam::SaveToDB()
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_ARENA_TEAM_MEMBER);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ARENA_TEAM_MEMBER);
stmt->setUInt16(0, itr->PersonalRating);
stmt->setUInt16(1, itr->WeekGames);
stmt->setUInt16(2, itr->WeekWins);
@@ -850,7 +850,7 @@ void ArenaTeam::SaveToDB()
stmt->setUInt32(6, GUID_LOPART(itr->Guid));
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_CHARACTER_ARENA_STATS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHARACTER_ARENA_STATS);
stmt->setUInt32(0, GUID_LOPART(itr->Guid));
stmt->setUInt8(1, GetSlot());
stmt->setUInt16(2, itr->MatchMakerRating);
diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h
index 4f013f72e5c..03ddea1dd3a 100755
--- a/src/server/game/Battlegrounds/ArenaTeam.h
+++ b/src/server/game/Battlegrounds/ArenaTeam.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -97,7 +97,7 @@ struct ArenaTeamMember
uint16 PersonalRating;
uint16 MatchMakerRating;
- void ModifyPersonalRating(Player* plr, int32 mod, uint32 slot);
+ void ModifyPersonalRating(Player* player, int32 mod, uint32 slot);
void ModifyMatchmakerRating(int32 mod, uint32 slot);
};
@@ -172,9 +172,9 @@ class ArenaTeam
int32 GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won);
float GetChanceAgainst(uint32 ownRating, uint32 opponentRating);
int32 WonAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32& rating_change);
- void MemberWon(Player* plr, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange);
+ void MemberWon(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange);
int32 LostAgainst(uint32 Own_MMRating, uint32 Opponent_MMRating, int32& rating_change);
- void MemberLost(Player* plr, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
+ void MemberLost(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
void OfflineMemberLost(uint64 guid, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
index cf335ec1971..719206ac625 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h
index 31f0a1773da..bf06418145d 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.h
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 339f2ebba3b..6a758695116 100755
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -75,7 +75,7 @@ namespace Trinity
data << uint64(target_guid);
data << uint32(strlen(text) + 1);
data << text;
- data << uint8 (_source ? _source->chatTag() : uint8(0));
+ data << uint8 (_source ? _source->GetChatTag() : 0);
}
ChatMsg _msgtype;
@@ -108,7 +108,7 @@ namespace Trinity
data << uint64(target_guid);
data << uint32(strlen(str) + 1);
data << str;
- data << uint8 (_source ? _source->chatTag() : uint8(0));
+ data << uint8 (_source ? _source->GetChatTag() : uint8(0));
}
private:
@@ -124,8 +124,8 @@ template<class Do>
void Battleground::BroadcastWorker(Do& _do)
{
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
- _do(plr);
+ if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
+ _do(player);
}
Battleground::Battleground()
@@ -333,13 +333,13 @@ inline void Battleground::_ProcessRessurect(uint32 diff)
Creature* sh = NULL;
for (std::vector<uint64>::const_iterator itr2 = (itr->second).begin(); itr2 != (itr->second).end(); ++itr2)
{
- Player* plr = ObjectAccessor::FindPlayer(*itr2);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(*itr2);
+ if (!player)
continue;
- if (!sh && plr->IsInWorld())
+ if (!sh && player->IsInWorld())
{
- sh = plr->GetMap()->GetCreature(itr->first);
+ sh = player->GetMap()->GetCreature(itr->first);
// only for visual effect
if (sh)
// Spirit Heal, effect 117
@@ -347,7 +347,7 @@ inline void Battleground::_ProcessRessurect(uint32 diff)
}
// Resurrection visual
- plr->CastSpell(plr, SPELL_RESURRECTION_VISUAL, true);
+ player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true);
m_ResurrectQueue.push_back(*itr2);
}
(itr->second).clear();
@@ -364,12 +364,12 @@ inline void Battleground::_ProcessRessurect(uint32 diff)
{
for (std::vector<uint64>::const_iterator itr = m_ResurrectQueue.begin(); itr != m_ResurrectQueue.end(); ++itr)
{
- Player* plr = ObjectAccessor::FindPlayer(*itr);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(*itr);
+ if (!player)
continue;
- plr->ResurrectPlayer(1.0f);
- plr->CastSpell(plr, 6962, true);
- plr->CastSpell(plr, SPELL_SPIRIT_HEAL_MANA, true);
+ player->ResurrectPlayer(1.0f);
+ player->CastSpell(player, 6962, true);
+ player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true);
sObjectAccessor->ConvertCorpseForPlayer(*itr);
}
m_ResurrectQueue.clear();
@@ -429,15 +429,15 @@ inline void Battleground::_ProcessJoin(uint32 diff)
{
m_ResetStatTimer = 0;
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
- plr->ResetAllPowers();
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
+ player->ResetAllPowers();
}
if (!(m_Events & BG_STARTING_EVENT_1))
{
m_Events |= BG_STARTING_EVENT_1;
- if(!FindBgMap())
+ if (!FindBgMap())
{
sLog->outError("Battleground::_ProcessJoin: map (map id: %u, instance id: %u) is not created!", m_MapId, m_InstanceID);
EndNow();
@@ -484,19 +484,19 @@ inline void Battleground::_ProcessJoin(uint32 diff)
{
// TODO : add arena sound PlaySoundToAll(SOUND_ARENA_START);
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
{
// BG Status packet
WorldPacket status;
BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType());
- uint32 queueSlot = plr->GetBattlegroundQueueIndex(bgQueueTypeId);
+ uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType());
- plr->GetSession()->SendPacket(&status);
+ player->GetSession()->SendPacket(&status);
- plr->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
- plr->ResetAllPowers();
+ player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION);
+ player->ResetAllPowers();
// remove auras with duration lower than 30s
- Unit::AuraApplicationMap & auraMap = plr->GetAppliedAuras();
+ Unit::AuraApplicationMap & auraMap = player->GetAppliedAuras();
for (Unit::AuraApplicationMap::iterator iter = auraMap.begin(); iter != auraMap.end();)
{
AuraApplication * aurApp = iter->second;
@@ -506,7 +506,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
&& aurApp->IsPositive()
&& (!(aura->GetSpellInfo()->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
&& (!aura->HasEffectType(SPELL_AURA_MOD_INVISIBILITY)))
- plr->RemoveAura(iter);
+ player->RemoveAura(iter);
else
++iter;
}
@@ -519,10 +519,10 @@ inline void Battleground::_ProcessJoin(uint32 diff)
PlaySoundToAll(SOUND_BG_START);
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
{
- plr->RemoveAurasDueToSpell(SPELL_PREPARATION);
- plr->ResetAllPowers();
+ player->RemoveAurasDueToSpell(SPELL_PREPARATION);
+ player->ResetAllPowers();
}
// Announce BG starting
if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE))
@@ -788,28 +788,28 @@ void Battleground::EndBattleground(uint32 winner)
continue;
}
- Player* plr = _GetPlayer(itr, "EndBattleground");
- if (!plr)
+ Player* player = _GetPlayer(itr, "EndBattleground");
+ if (!player)
continue;
// should remove spirit of redemption
- if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
- plr->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
+ if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
+ player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
- if (!plr->isAlive())
+ if (!player->isAlive())
{
- plr->ResurrectPlayer(1.0f);
- plr->SpawnCorpseBones();
+ player->ResurrectPlayer(1.0f);
+ player->SpawnCorpseBones();
}
else
{
//needed cause else in av some creatures will kill the players at the end
- plr->CombatStop();
- plr->getHostileRefManager().deleteReferences();
+ player->CombatStop();
+ player->getHostileRefManager().deleteReferences();
}
//this line is obsolete - team is set ALWAYS
- //if (!team) team = plr->GetTeam();
+ //if (!team) team = player->GetTeam();
// per player calculation
if (isArena() && isRated() && winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
@@ -817,57 +817,57 @@ void Battleground::EndBattleground(uint32 winner)
if (team == winner)
{
// update achievement BEFORE personal rating update
- ArenaTeamMember* member = winner_arena_team->GetMember(plr->GetGUID());
+ ArenaTeamMember* member = winner_arena_team->GetMember(player->GetGUID());
if (member)
- plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, member->PersonalRating);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, member->PersonalRating);
- winner_arena_team->MemberWon(plr, loser_matchmaker_rating, winner_matchmaker_change);
+ winner_arena_team->MemberWon(player, loser_matchmaker_rating, winner_matchmaker_change);
}
else
{
- loser_arena_team->MemberLost(plr, winner_matchmaker_rating, loser_matchmaker_change);
+ loser_arena_team->MemberLost(player, winner_matchmaker_rating, loser_matchmaker_change);
// Arena lost => reset the win_rated_arena having the "no_lose" condition
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE);
}
}
- uint32 winner_kills = plr->GetRandomWinner() ? BG_REWARD_WINNER_HONOR_LAST : BG_REWARD_WINNER_HONOR_FIRST;
- uint32 loser_kills = plr->GetRandomWinner() ? BG_REWARD_LOSER_HONOR_LAST : BG_REWARD_LOSER_HONOR_FIRST;
- uint32 winner_arena = plr->GetRandomWinner() ? BG_REWARD_WINNER_ARENA_LAST : BG_REWARD_WINNER_ARENA_FIRST;
+ uint32 winner_kills = player->GetRandomWinner() ? BG_REWARD_WINNER_HONOR_LAST : BG_REWARD_WINNER_HONOR_FIRST;
+ uint32 loser_kills = player->GetRandomWinner() ? BG_REWARD_LOSER_HONOR_LAST : BG_REWARD_LOSER_HONOR_FIRST;
+ uint32 winner_arena = player->GetRandomWinner() ? BG_REWARD_WINNER_ARENA_LAST : BG_REWARD_WINNER_ARENA_FIRST;
// Reward winner team
if (team == winner)
{
if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
{
- UpdatePlayerScore(plr, SCORE_BONUS_HONOR, GetBonusHonorFromKill(winner_kills));
+ UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(winner_kills));
if (CanAwardArenaPoints())
- plr->ModifyArenaPoints(winner_arena);
- if (!plr->GetRandomWinner())
- plr->SetRandomWinner(true);
+ player->ModifyArenaPoints(winner_arena);
+ if (!player->GetRandomWinner())
+ player->SetRandomWinner(true);
}
- plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, 1);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, 1);
}
else
{
if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
- UpdatePlayerScore(plr, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
+ UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(loser_kills));
}
- plr->ResetAllPowers();
- plr->CombatStopWithPets(true);
+ player->ResetAllPowers();
+ player->CombatStopWithPets(true);
- BlockMovement(plr);
+ BlockMovement(player);
sBattlegroundMgr->BuildPvpLogDataPacket(&data, this);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetTypeID(), GetArenaType());
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, plr->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType());
- plr->GetSession()->SendPacket(&data);
- plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType());
+ player->GetSession()->SendPacket(&data);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1);
}
if (isArena() && isRated() && winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
@@ -908,9 +908,9 @@ uint32 Battleground::GetBattlemasterEntry() const
}
}
-void Battleground::BlockMovement(Player* plr)
+void Battleground::BlockMovement(Player* player)
{
- plr->SetClientControl(plr, 0); // movement disabled NOTE: the effect will be automatically removed by client when the player is teleported from the battleground, so no need to send with uint8(1) in RemovePlayerAtLeave()
+ player->SetClientControl(player, 0); // movement disabled NOTE: the effect will be automatically removed by client when the player is teleported from the battleground, so no need to send with uint8(1) in RemovePlayerAtLeave()
}
void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPacket)
@@ -936,32 +936,32 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
RemovePlayerFromResurrectQueue(guid);
- Player* plr = ObjectAccessor::FindPlayer(guid);
+ Player* player = ObjectAccessor::FindPlayer(guid);
// should remove spirit of redemption
- if (plr)
+ if (player)
{
- if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
- plr->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
+ if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
+ player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
- if (!plr->isAlive()) // resurrect on exit
+ if (!player->isAlive()) // resurrect on exit
{
- plr->ResurrectPlayer(1.0f);
- plr->SpawnCorpseBones();
+ player->ResurrectPlayer(1.0f);
+ player->SpawnCorpseBones();
}
}
- RemovePlayer(plr, guid, team); // BG subclass specific code
+ RemovePlayer(player, guid, team); // BG subclass specific code
if (participant) // if the player was a match participant, remove auras, calc rating, update queue
{
BattlegroundTypeId bgTypeId = GetTypeID();
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetTypeID(), GetArenaType());
- if (plr)
+ if (player)
{
- plr->ClearAfkReports();
+ player->ClearAfkReports();
- if (!team) team = plr->GetTeam();
+ if (!team) team = player->GetTeam();
// if arena, remove the specific arena auras
if (isArena())
@@ -969,8 +969,8 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
bgTypeId=BATTLEGROUND_AA; // set the bg type to all arenas (it will be used for queue refreshing)
// unsummon current and summon old pet if there was one and there isn't a current pet
- plr->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT);
- plr->ResummonPetTemporaryUnSummonedIfAny();
+ player->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT);
+ player->ResummonPetTemporaryUnSummonedIfAny();
if (isRated() && GetStatus() == STATUS_IN_PROGRESS)
{
@@ -978,18 +978,18 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
ArenaTeam* winner_arena_team = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));
ArenaTeam* loser_arena_team = sArenaTeamMgr->GetArenaTeamById(GetArenaTeamIdForTeam(team));
if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)
- loser_arena_team->MemberLost(plr, GetArenaMatchmakerRating(GetOtherTeam(team)));
+ loser_arena_team->MemberLost(player, GetArenaMatchmakerRating(GetOtherTeam(team)));
}
}
if (SendPacket)
{
WorldPacket data;
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, plr->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_NONE, 0, 0, 0);
- plr->GetSession()->SendPacket(&data);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_NONE, 0, 0, 0);
+ player->GetSession()->SendPacket(&data);
}
// this call is important, because player, when joins to battleground, this method is not called, so it must be called when leaving bg
- plr->RemoveBattlegroundQueueId(bgQueueTypeId);
+ player->RemoveBattlegroundQueueId(bgQueueTypeId);
}
else
// removing offline participant
@@ -1023,20 +1023,20 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
// Let others know
WorldPacket data;
sBattlegroundMgr->BuildPlayerLeftBattlegroundPacket(&data, guid);
- SendPacketToTeam(team, &data, plr, false);
+ SendPacketToTeam(team, &data, player, false);
}
- if (plr)
+ if (player)
{
// Do next only if found in battleground
- plr->SetBattlegroundId(0, BATTLEGROUND_TYPE_NONE); // We're not in BG.
+ player->SetBattlegroundId(0, BATTLEGROUND_TYPE_NONE); // We're not in BG.
// reset destination bg team
- plr->SetBGTeam(0);
+ player->SetBGTeam(0);
if (Transport)
- plr->TeleportToBGEntryPoint();
+ player->TeleportToBGEntryPoint();
- sLog->outDetail("BATTLEGROUND: Removed player %s from Battleground.", plr->GetName());
+ sLog->outDetail("BATTLEGROUND: Removed player %s from Battleground.", player->GetName());
}
//battleground object will be deleted next Battleground::Update() call
@@ -1087,16 +1087,16 @@ void Battleground::StartBattleground()
sLog->outArena("Arena match type: %u for Team1Id: %u - Team2Id: %u started.", m_ArenaType, m_ArenaTeamIds[BG_TEAM_ALLIANCE], m_ArenaTeamIds[BG_TEAM_HORDE]);
}
-void Battleground::AddPlayer(Player* plr)
+void Battleground::AddPlayer(Player* player)
{
// remove afk from player
- if (plr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK))
- plr->ToggleAFK();
+ if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK))
+ player->ToggleAFK();
// score struct must be created in inherited class
- uint64 guid = plr->GetGUID();
- uint32 team = plr->GetBGTeam();
+ uint64 guid = player->GetGUID();
+ uint32 team = player->GetBGTeam();
BattlegroundPlayer bp;
bp.OfflineRemoveTime = 0;
@@ -1108,74 +1108,74 @@ void Battleground::AddPlayer(Player* plr)
UpdatePlayersCountByTeam(team, false); // +1 player
WorldPacket data;
- sBattlegroundMgr->BuildPlayerJoinedBattlegroundPacket(&data, plr);
- SendPacketToTeam(team, &data, plr, false);
+ sBattlegroundMgr->BuildPlayerJoinedBattlegroundPacket(&data, player);
+ SendPacketToTeam(team, &data, player, false);
// BG Status packet
WorldPacket status;
BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType());
- uint32 queueSlot = plr->GetBattlegroundQueueIndex(bgQueueTypeId);
+ uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), isArena() ? 0 : 1);
- plr->GetSession()->SendPacket(&status);
+ player->GetSession()->SendPacket(&status);
- plr->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
// add arena specific auras
if (isArena())
{
- plr->RemoveArenaEnchantments(TEMP_ENCHANTMENT_SLOT);
+ player->RemoveArenaEnchantments(TEMP_ENCHANTMENT_SLOT);
if (team == ALLIANCE) // gold
{
- if (plr->GetTeam() == HORDE)
- plr->CastSpell(plr, SPELL_HORDE_GOLD_FLAG, true);
+ if (player->GetTeam() == HORDE)
+ player->CastSpell(player, SPELL_HORDE_GOLD_FLAG, true);
else
- plr->CastSpell(plr, SPELL_ALLIANCE_GOLD_FLAG, true);
+ player->CastSpell(player, SPELL_ALLIANCE_GOLD_FLAG, true);
}
else // green
{
- if (plr->GetTeam() == HORDE)
- plr->CastSpell(plr, SPELL_HORDE_GREEN_FLAG, true);
+ if (player->GetTeam() == HORDE)
+ player->CastSpell(player, SPELL_HORDE_GREEN_FLAG, true);
else
- plr->CastSpell(plr, SPELL_ALLIANCE_GREEN_FLAG, true);
+ player->CastSpell(player, SPELL_ALLIANCE_GREEN_FLAG, true);
}
- plr->DestroyConjuredItems(true);
- plr->UnsummonPetTemporaryIfAny();
+ player->DestroyConjuredItems(true);
+ player->UnsummonPetTemporaryIfAny();
if (GetStatus() == STATUS_WAIT_JOIN) // not started yet
{
- plr->CastSpell(plr, SPELL_ARENA_PREPARATION, true);
- plr->ResetAllPowers();
+ player->CastSpell(player, SPELL_ARENA_PREPARATION, true);
+ player->ResetAllPowers();
}
WorldPacket teammate;
teammate.Initialize(SMSG_ARENA_OPPONENT_UPDATE, 8);
- teammate << uint64(plr->GetGUID());
- SendPacketToTeam(team, &teammate, plr, false);
+ teammate << uint64(player->GetGUID());
+ SendPacketToTeam(team, &teammate, player, false);
}
else
{
if (GetStatus() == STATUS_WAIT_JOIN) // not started yet
- plr->CastSpell(plr, SPELL_PREPARATION, true); // reduces all mana cost of spells.
+ player->CastSpell(player, SPELL_PREPARATION, true); // reduces all mana cost of spells.
}
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
- plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
+ player->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true);
// setup BG group membership
- PlayerAddedToBGCheckIfBGIsRunning(plr);
- AddOrSetPlayerToCorrectBgGroup(plr, team);
+ PlayerAddedToBGCheckIfBGIsRunning(player);
+ AddOrSetPlayerToCorrectBgGroup(player, team);
// Log
- sLog->outDetail("BATTLEGROUND: Player %s joined the battle.", plr->GetName());
+ sLog->outDetail("BATTLEGROUND: Player %s joined the battle.", player->GetName());
}
// this method adds player to his team's bg group, or sets his correct group if player is already in bg group
@@ -1245,8 +1245,6 @@ void Battleground::EventPlayerLoggedOut(Player* player)
if (GetAlivePlayersCountByTeam(player->GetTeam()) <= 1 && GetPlayersCountByTeam(GetOtherTeam(player->GetTeam())))
EndBattleground(GetOtherTeam(player->GetTeam()));
}
-
- player->LeaveBattleground();
}
// This method should be called only once ... it adds pointer to queue
@@ -1385,11 +1383,11 @@ void Battleground::AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid
{
m_ReviveQueue[npc_guid].push_back(player_guid);
- Player* plr = ObjectAccessor::FindPlayer(player_guid);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(player_guid);
+ if (!player)
return;
- plr->CastSpell(plr, SPELL_WAITING_FOR_RESURRECT, true);
+ player->CastSpell(player, SPELL_WAITING_FOR_RESURRECT, true);
}
void Battleground::RemovePlayerFromResurrectQueue(uint64 player_guid)
@@ -1401,8 +1399,8 @@ void Battleground::RemovePlayerFromResurrectQueue(uint64 player_guid)
if (*itr2 == player_guid)
{
(itr->second).erase(itr2);
- if (Player* plr = ObjectAccessor::FindPlayer(player_guid))
- plr->RemoveAurasDueToSpell(SPELL_WAITING_FOR_RESURRECT);
+ if (Player* player = ObjectAccessor::FindPlayer(player_guid))
+ player->RemoveAurasDueToSpell(SPELL_WAITING_FOR_RESURRECT);
return;
}
}
@@ -1454,7 +1452,11 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
data.go_state = 1;
*/
// Add to world, so it can be later looked up from HashMapHolder
- map->AddToMap(go);
+ if (!map->AddToMap(go))
+ {
+ delete go;
+ return false;
+ }
m_BgObjects[type] = go->GetGUID();
return true;
}
@@ -1557,7 +1559,12 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f
creature->SetSpeed(MOVE_WALK, cinfo->speed_walk);
creature->SetSpeed(MOVE_RUN, cinfo->speed_run);
- map->AddToMap(creature);
+ if (!map->AddToMap(creature))
+ {
+ delete creature;
+ return NULL;
+ }
+
m_BgCreatures[type] = creature->GetGUID();
if (respawntime)
@@ -1680,9 +1687,9 @@ void Battleground::SendWarningToAll(int32 entry, ...)
data << msg.c_str();
data << (uint8)0;
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
- if (plr->GetSession())
- plr->GetSession()->SendPacket(&data);
+ if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
+ if (player->GetSession())
+ player->GetSession()->SendPacket(&data);
}
void Battleground::SendMessage2ToAll(int32 entry, ChatMsg type, Player const* source, int32 arg1, int32 arg2)
@@ -1759,12 +1766,12 @@ void Battleground::HandleKillPlayer(Player* player, Player* killer)
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
{
- Player* plr = ObjectAccessor::FindPlayer(itr->first);
- if (!plr || plr == killer)
+ Player* creditedPlayer = ObjectAccessor::FindPlayer(itr->first);
+ if (!creditedPlayer || creditedPlayer == killer)
continue;
- if (plr->GetTeam() == killer->GetTeam() && plr->IsAtGroupRewardDistance(player))
- UpdatePlayerScore(plr, SCORE_HONORABLE_KILLS, 1);
+ if (creditedPlayer->GetTeam() == killer->GetTeam() && creditedPlayer->IsAtGroupRewardDistance(player))
+ UpdatePlayerScore(creditedPlayer, SCORE_HONORABLE_KILLS, 1);
}
}
@@ -1799,7 +1806,7 @@ bool Battleground::IsPlayerInBattleground(uint64 guid) const
return false;
}
-void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* plr)
+void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player)
{
if (GetStatus() != STATUS_WAIT_LEAVE)
return;
@@ -1807,13 +1814,13 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* plr)
WorldPacket data;
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetTypeID(), GetArenaType());
- BlockMovement(plr);
+ BlockMovement(player);
sBattlegroundMgr->BuildPvpLogDataPacket(&data, this);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
- sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, plr->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType());
- plr->GetSession()->SendPacket(&data);
+ sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType());
+ player->GetSession()->SendPacket(&data);
}
uint32 Battleground::GetAlivePlayersCountByTeam(uint32 Team) const
@@ -1823,8 +1830,8 @@ uint32 Battleground::GetAlivePlayersCountByTeam(uint32 Team) const
{
if (itr->second.Team == Team)
{
- Player* pl = ObjectAccessor::FindPlayer(itr->first);
- if (pl && pl->isAlive() && !pl->HasByteFlag(UNIT_FIELD_BYTES_2, 3, FORM_SPIRITOFREDEMPTION))
+ Player* player = ObjectAccessor::FindPlayer(itr->first);
+ if (player && player->isAlive() && !player->HasByteFlag(UNIT_FIELD_BYTES_2, 3, FORM_SPIRITOFREDEMPTION))
++count;
}
}
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index d5921e4bf37..fcfc0c48cb4 100755
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -329,7 +329,7 @@ class Battleground
{
}
- virtual void DestroyGate(Player* /*pl*/, GameObject* /*go*/) {}
+ virtual void DestroyGate(Player* /*player*/, GameObject* /*go*/) {}
/* achievement req. */
virtual bool IsAllNodesConrolledByTeam(uint32 /*team*/) const { return false; }
@@ -463,7 +463,7 @@ class Battleground
void UpdateWorldState(uint32 Field, uint32 Value);
void UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player* Source);
void EndBattleground(uint32 winner);
- void BlockMovement(Player* plr);
+ void BlockMovement(Player* player);
void SendWarningToAll(int32 entry, ...);
void SendMessageToAll(int32 entry, ChatMsg type, Player const* source = NULL);
@@ -515,7 +515,7 @@ class Battleground
virtual void EventPlayerClickedOnFlag(Player* /*player*/, GameObject* /*target_obj*/) {}
void EventPlayerLoggedIn(Player* player);
void EventPlayerLoggedOut(Player* player);
- virtual void EventPlayerDamagedGO(Player* /*plr*/, GameObject* /*go*/, uint32 /*eventType*/) {}
+ virtual void EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/) {}
virtual void EventPlayerUsedGO(Player* /*player*/, GameObject* /*go*/){}
// this function can be used by spell to interact with the BG map
@@ -526,7 +526,7 @@ class Battleground
// Death related
virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
- virtual void AddPlayer(Player* plr); // must be implemented in BG subclass
+ virtual void AddPlayer(Player* player); // must be implemented in BG subclass
void AddOrSetPlayerToCorrectBgGroup(Player* player, uint32 team);
@@ -554,7 +554,7 @@ class Battleground
//to be removed
const char* GetTrinityString(int32 entry);
- virtual bool HandlePlayerUnderMap(Player* /*plr*/) { return false; }
+ virtual bool HandlePlayerUnderMap(Player* /*player*/) { return false; }
// since arenas can be AvA or Hvh, we have to get the "temporary" team of a player
uint32 GetPlayerTeam(uint64 guid) const;
@@ -575,7 +575,7 @@ class Battleground
protected:
// this method is called, when BG cannot spawn its own spirit guide, or something is wrong, It correctly ends Battleground
void EndNow();
- void PlayerAddedToBGCheckIfBGIsRunning(Player* plr);
+ void PlayerAddedToBGCheckIfBGIsRunning(Player* player);
Player* _GetPlayer(uint64 guid, bool offlineRemove, const char* context) const;
Player* _GetPlayer(BattlegroundPlayerMap::iterator itr, const char* context);
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index e00abb03320..77b985b205f 100755
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -116,6 +116,10 @@ void BattlegroundMgr::Update(uint32 diff)
}
}
+ // update events timer
+ for (int qtype = BATTLEGROUND_QUEUE_NONE; qtype < MAX_BATTLEGROUND_QUEUE_TYPES; ++qtype)
+ m_BattlegroundQueues[qtype].UpdateEvents(diff);
+
// update scheduled queues
if (!m_QueueUpdateScheduler.empty())
{
@@ -291,10 +295,10 @@ void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg)
}
else
{
- Player* plr = ObjectAccessor::FindPlayer(itr2->first);
+ Player* player = ObjectAccessor::FindPlayer(itr2->first);
uint32 team = bg->GetPlayerTeam(itr2->first);
- if (!team && plr)
- team = plr->GetBGTeam();
+ if (!team && player)
+ team = player->GetBGTeam();
*data << uint8(team == ALLIANCE ? 1 : 0); // green or yellow
}
*data << uint32(itr2->second->DamageDone); // damage done
@@ -422,10 +426,10 @@ void BattlegroundMgr::BuildPlayerLeftBattlegroundPacket(WorldPacket* data, uint6
*data << uint64(guid);
}
-void BattlegroundMgr::BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, Player* plr)
+void BattlegroundMgr::BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, Player* player)
{
data->Initialize(SMSG_BATTLEGROUND_PLAYER_JOINED, 8);
- *data << uint64(plr->GetGUID());
+ *data << uint64(player->GetGUID());
}
Battleground* BattlegroundMgr::GetBattlegroundThroughClientInstance(uint32 instanceId, BattlegroundTypeId bgTypeId)
@@ -804,17 +808,17 @@ void BattlegroundMgr::InitAutomaticArenaPointDistribution()
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Automatic Arena Point Distribution initialized.");
}
-void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, uint64 guid, Player* plr, BattlegroundTypeId bgTypeId, uint8 fromWhere)
+void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, uint64 guid, Player* player, BattlegroundTypeId bgTypeId, uint8 fromWhere)
{
- if (!plr)
+ if (!player)
return;
- uint32 winner_kills = plr->GetRandomWinner() ? BG_REWARD_WINNER_HONOR_LAST : BG_REWARD_WINNER_HONOR_FIRST;
- uint32 winner_arena = plr->GetRandomWinner() ? BG_REWARD_WINNER_ARENA_LAST : BG_REWARD_WINNER_ARENA_FIRST;
- uint32 loser_kills = plr->GetRandomWinner() ? BG_REWARD_LOSER_HONOR_LAST : BG_REWARD_LOSER_HONOR_FIRST;
+ uint32 winner_kills = player->GetRandomWinner() ? BG_REWARD_WINNER_HONOR_LAST : BG_REWARD_WINNER_HONOR_FIRST;
+ uint32 winner_arena = player->GetRandomWinner() ? BG_REWARD_WINNER_ARENA_LAST : BG_REWARD_WINNER_ARENA_FIRST;
+ uint32 loser_kills = player->GetRandomWinner() ? BG_REWARD_LOSER_HONOR_LAST : BG_REWARD_LOSER_HONOR_FIRST;
- winner_kills = Trinity::Honor::hk_honor_at_level(plr->getLevel(), float(winner_kills));
- loser_kills = Trinity::Honor::hk_honor_at_level(plr->getLevel(), float(loser_kills));
+ winner_kills = Trinity::Honor::hk_honor_at_level(player->getLevel(), float(winner_kills));
+ loser_kills = Trinity::Honor::hk_honor_at_level(player->getLevel(), float(loser_kills));
data->Initialize(SMSG_BATTLEFIELD_LIST);
*data << uint64(guid); // battlemaster guid
@@ -824,7 +828,7 @@ void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, uint64 guid
*data << uint8(0); // unk
// Rewards
- *data << uint8(plr->GetRandomWinner()); // 3.3.3 hasWin
+ *data << uint8(player->GetRandomWinner()); // 3.3.3 hasWin
*data << uint32(winner_kills); // 3.3.3 winHonor
*data << uint32(winner_arena); // 3.3.3 winArena
*data << uint32(loser_kills); // 3.3.3 lossHonor
@@ -835,7 +839,7 @@ void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, uint64 guid
if (isRandom)
{
// Rewards (random)
- *data << uint8(plr->GetRandomWinner()); // 3.3.3 hasWin_Random
+ *data << uint8(player->GetRandomWinner()); // 3.3.3 hasWin_Random
*data << uint32(winner_kills); // 3.3.3 winHonor_Random
*data << uint32(winner_arena); // 3.3.3 winArena_Random
*data << uint32(loser_kills); // 3.3.3 lossHonor_Random
@@ -853,7 +857,7 @@ void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, uint64 guid
if (Battleground* bgTemplate = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId))
{
// expected bracket entry
- if (PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgTemplate->GetMapId(), plr->getLevel()))
+ if (PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgTemplate->GetMapId(), player->getLevel()))
{
uint32 count = 0;
BattlegroundBracketId bracketId = bracketEntry->GetBracketId();
@@ -868,35 +872,35 @@ void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, uint64 guid
}
}
-void BattlegroundMgr::SendToBattleground(Player* pl, uint32 instanceId, BattlegroundTypeId bgTypeId)
+void BattlegroundMgr::SendToBattleground(Player* player, uint32 instanceId, BattlegroundTypeId bgTypeId)
{
Battleground* bg = GetBattleground(instanceId, bgTypeId);
if (bg)
{
uint32 mapid = bg->GetMapId();
float x, y, z, O;
- uint32 team = pl->GetBGTeam();
+ uint32 team = player->GetBGTeam();
if (team == 0)
- team = pl->GetTeam();
+ team = player->GetTeam();
bg->GetTeamStartLoc(team, x, y, z, O);
- sLog->outDetail("BATTLEGROUND: Sending %s to map %u, X %f, Y %f, Z %f, O %f", pl->GetName(), mapid, x, y, z, O);
- pl->TeleportTo(mapid, x, y, z, O);
+ sLog->outDetail("BATTLEGROUND: Sending %s to map %u, X %f, Y %f, Z %f, O %f", player->GetName(), mapid, x, y, z, O);
+ player->TeleportTo(mapid, x, y, z, O);
}
else
{
- sLog->outError("player %u is trying to port to non-existent bg instance %u", pl->GetGUIDLow(), instanceId);
+ sLog->outError("player %u is trying to port to non-existent bg instance %u", player->GetGUIDLow(), instanceId);
}
}
-void BattlegroundMgr::SendAreaSpiritHealerQueryOpcode(Player* pl, Battleground* bg, uint64 guid)
+void BattlegroundMgr::SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, uint64 guid)
{
WorldPacket data(SMSG_AREA_SPIRIT_HEALER_TIME, 12);
uint32 time_ = 30000 - bg->GetLastResurrectTime(); // resurrect every 30 seconds
if (time_ == uint32(-1))
time_ = 0;
data << guid << time_;
- pl->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
}
bool BattlegroundMgr::IsArenaType(BattlegroundTypeId bgTypeId)
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index 7f35e5366a5..88559d07993 100755
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -65,15 +65,15 @@ class BattlegroundMgr
void Update(uint32 diff);
/* Packet Building */
- void BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, Player* plr);
+ void BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, Player* player);
void BuildPlayerLeftBattlegroundPacket(WorldPacket* data, uint64 guid);
- void BuildBattlegroundListPacket(WorldPacket* data, uint64 guid, Player* plr, BattlegroundTypeId bgTypeId, uint8 fromWhere);
+ void BuildBattlegroundListPacket(WorldPacket* data, uint64 guid, Player* player, BattlegroundTypeId bgTypeId, uint8 fromWhere);
void BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result);
void BuildUpdateWorldStatePacket(WorldPacket* data, uint32 field, uint32 value);
void BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg);
void BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 QueueSlot, uint8 StatusID, uint32 Time1, uint32 Time2, uint8 arenatype, uint8 uiFrame = 1);
void BuildPlaySoundPacket(WorldPacket* data, uint32 soundid);
- void SendAreaSpiritHealerQueryOpcode(Player* pl, Battleground* bg, uint64 guid);
+ void SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, uint64 guid);
/* Battlegrounds */
Battleground* GetBattlegroundThroughClientInstance(uint32 instanceId, BattlegroundTypeId bgTypeId);
@@ -91,7 +91,7 @@ class BattlegroundMgr
void CreateInitialBattlegrounds();
void DeleteAllBattlegrounds();
- void SendToBattleground(Player* pl, uint32 InstanceID, BattlegroundTypeId bgTypeId);
+ void SendToBattleground(Player* player, uint32 InstanceID, BattlegroundTypeId bgTypeId);
/* Battleground queues */
//these queues are instantiated when creating BattlegroundMrg
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index 67cea3e7be1..a5b00ed9db1 100755
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -285,7 +285,7 @@ uint32 BattlegroundQueue::GetAverageQueueWaitTime(GroupQueueInfo* ginfo, Battleg
//remove player from queue and from group info, if group info is empty then remove it too
void BattlegroundQueue::RemovePlayer(uint64 guid, bool decreaseInvitedCount)
{
- //Player* plr = ObjectAccessor::FindPlayer(guid);
+ //Player* player = ObjectAccessor::FindPlayer(guid);
int32 bracket_id = -1; // signed for proper for-loop finish
QueuedPlayersMap::iterator itr;
@@ -362,8 +362,8 @@ void BattlegroundQueue::RemovePlayer(uint64 guid, bool decreaseInvitedCount)
if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(group->ArenaTeamId))
{
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "UPDATING memberLost's personal arena rating for %u by opponents rating: %u", GUID_LOPART(guid), group->OpponentsTeamRating);
- if (Player* plr = ObjectAccessor::FindPlayer(guid))
- at->MemberLost(plr, group->OpponentsMatchmakerRating);
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
+ at->MemberLost(player, group->OpponentsMatchmakerRating);
else
at->OfflineMemberLost(guid, group->OpponentsMatchmakerRating);
at->SaveToDB();
@@ -442,36 +442,36 @@ bool BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg,
for (std::map<uint64, PlayerQueueInfo*>::iterator itr = ginfo->Players.begin(); itr != ginfo->Players.end(); ++itr)
{
// get the player
- Player* plr = ObjectAccessor::FindPlayer(itr->first);
+ Player* player = ObjectAccessor::FindPlayer(itr->first);
// if offline, skip him, this should not happen - player is removed from queue when he logs out
- if (!plr)
+ if (!player)
continue;
// invite the player
PlayerInvitedToBGUpdateAverageWaitTime(ginfo, bracket_id);
- //sBattlegroundMgr->InvitePlayer(plr, bg, ginfo->Team);
+ //sBattlegroundMgr->InvitePlayer(player, bg, ginfo->Team);
// set invited player counters
bg->IncreaseInvitedCount(ginfo->Team);
- plr->SetInviteForBattlegroundQueueType(bgQueueTypeId, ginfo->IsInvitedToBGInstanceGUID);
+ player->SetInviteForBattlegroundQueueType(bgQueueTypeId, ginfo->IsInvitedToBGInstanceGUID);
// create remind invite events
- BGQueueInviteEvent* inviteEvent = new BGQueueInviteEvent(plr->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgTypeId, ginfo->ArenaType, ginfo->RemoveInviteTime);
+ BGQueueInviteEvent* inviteEvent = new BGQueueInviteEvent(player->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgTypeId, ginfo->ArenaType, ginfo->RemoveInviteTime);
m_events.AddEvent(inviteEvent, m_events.CalculateTime(INVITATION_REMIND_TIME));
// create automatic remove events
- BGQueueRemoveEvent* removeEvent = new BGQueueRemoveEvent(plr->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgTypeId, bgQueueTypeId, ginfo->RemoveInviteTime);
+ BGQueueRemoveEvent* removeEvent = new BGQueueRemoveEvent(player->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgTypeId, bgQueueTypeId, ginfo->RemoveInviteTime);
m_events.AddEvent(removeEvent, m_events.CalculateTime(INVITE_ACCEPT_WAIT_TIME));
WorldPacket data;
- uint32 queueSlot = plr->GetBattlegroundQueueIndex(bgQueueTypeId);
+ uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
- sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Battleground: invited plr %s (%u) to BG instance %u queueindex %u bgtype %u, I can't help it if they don't press the enter battle button.", plr->GetName(), plr->GetGUIDLow(), bg->GetInstanceID(), queueSlot, bg->GetTypeID());
+ sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Battleground: invited player %s (%u) to BG instance %u queueindex %u bgtype %u, I can't help it if they don't press the enter battle button.", player->GetName(), player->GetGUIDLow(), bg->GetInstanceID(), queueSlot, bg->GetTypeID());
// send status packet
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
}
return true;
}
@@ -721,15 +721,18 @@ bool BattlegroundQueue::CheckSkirmishForSameFaction(BattlegroundBracketId bracke
return true;
}
+void BattlegroundQueue::UpdateEvents(uint32 diff)
+{
+ m_events.Update(diff);
+}
+
/*
this method is called when group is inserted, or player / group is removed from BG Queue - there is only one player's status changed, so we don't use while (true) cycles to invite whole queue
it must be called after fully adding the members of a group to ensure group joining
should be called from Battleground::RemovePlayer function in some cases
*/
-void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating)
+void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating)
{
- m_events.Update(diff);
-
//if no players in queue - do nothing
if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() &&
m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() &&
@@ -911,68 +914,51 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId
uint32 discardTime = getMSTime() - sBattlegroundMgr->GetRatingDiscardTimer();
// we need to find 2 teams which will play next game
+ GroupsQueueType::iterator itr_teams[BG_TEAMS_COUNT];
+ uint8 found = 0;
+ uint8 team = 0;
- GroupsQueueType::iterator itr_team[BG_TEAMS_COUNT];
-
- //optimalization : --- we dont need to use selection_pools - each update we select max 2 groups
- for (uint32 i = BG_QUEUE_PREMADE_ALLIANCE; i < BG_QUEUE_NORMAL_ALLIANCE; i++)
+ for (uint8 i = BG_QUEUE_PREMADE_ALLIANCE; i < BG_QUEUE_NORMAL_ALLIANCE; i++)
{
// take the group that joined first
- itr_team[i] = m_QueuedGroups[bracket_id][i].begin();
- for (; itr_team[i] != m_QueuedGroups[bracket_id][i].end(); ++(itr_team[i]))
+ GroupsQueueType::iterator itr2 = m_QueuedGroups[bracket_id][i].begin();
+ for (; itr2 != m_QueuedGroups[bracket_id][i].end(); ++itr2)
{
// if group match conditions, then add it to pool
- if (!(*itr_team[i])->IsInvitedToBGInstanceGUID
- && (((*itr_team[i])->ArenaMatchmakerRating >= arenaMinRating && (*itr_team[i])->ArenaMatchmakerRating <= arenaMaxRating)
- || (*itr_team[i])->JoinTime < discardTime))
+ if (!(*itr2)->IsInvitedToBGInstanceGUID
+ && (((*itr2)->ArenaMatchmakerRating >= arenaMinRating && (*itr2)->ArenaMatchmakerRating <= arenaMaxRating)
+ || (*itr2)->JoinTime < discardTime))
{
- m_SelectionPools[i].AddGroup((*itr_team[i]), MaxPlayersPerTeam);
- // break for cycle to be able to start selecting another group from same faction queue
+ itr_teams[found++] = itr2;
+ team = i;
break;
}
}
}
- // now we are done if we have 2 groups - ali vs horde!
- // if we don't have, we must try to continue search in same queue
- // tmp variables are correctly set
- // this code isn't much userfriendly - but it is supposed to continue search for mathing group in HORDE queue
- if (m_SelectionPools[BG_TEAM_ALLIANCE].GetPlayerCount() == 0 && m_SelectionPools[BG_TEAM_HORDE].GetPlayerCount())
- {
- itr_team[BG_TEAM_ALLIANCE] = itr_team[BG_TEAM_HORDE];
- ++itr_team[BG_TEAM_ALLIANCE];
- for (; itr_team[BG_TEAM_ALLIANCE] != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].end(); ++(itr_team[BG_TEAM_ALLIANCE]))
- {
- if (!(*itr_team[BG_TEAM_ALLIANCE])->IsInvitedToBGInstanceGUID
- && (((*itr_team[BG_TEAM_ALLIANCE])->ArenaMatchmakerRating >= arenaMinRating && (*itr_team[BG_TEAM_ALLIANCE])->ArenaMatchmakerRating <= arenaMaxRating)
- || (*itr_team[BG_TEAM_ALLIANCE])->JoinTime < discardTime))
- {
- m_SelectionPools[BG_TEAM_ALLIANCE].AddGroup((*itr_team[BG_TEAM_ALLIANCE]), MaxPlayersPerTeam);
- break;
- }
- }
- }
+ if (!found)
+ return;
- // this code isn't much userfriendly - but it is supposed to continue search for mathing group in ALLIANCE queue
- if (m_SelectionPools[BG_TEAM_HORDE].GetPlayerCount() == 0 && m_SelectionPools[BG_TEAM_ALLIANCE].GetPlayerCount())
+ if (found == 1)
{
- itr_team[BG_TEAM_HORDE] = itr_team[BG_TEAM_ALLIANCE];
- ++itr_team[BG_TEAM_HORDE];
- for (; itr_team[BG_TEAM_HORDE] != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].end(); ++(itr_team[BG_TEAM_HORDE]))
+ for (GroupsQueueType::iterator itr3 = itr_teams[0]; itr3 != m_QueuedGroups[bracket_id][team].end(); ++itr3)
{
- if (!(*itr_team[BG_TEAM_HORDE])->IsInvitedToBGInstanceGUID
- && (((*itr_team[BG_TEAM_HORDE])->ArenaMatchmakerRating >= arenaMinRating && (*itr_team[BG_TEAM_HORDE])->ArenaMatchmakerRating <= arenaMaxRating)
- || (*itr_team[BG_TEAM_HORDE])->JoinTime < discardTime))
+ if (!(*itr3)->IsInvitedToBGInstanceGUID
+ && (((*itr3)->ArenaMatchmakerRating >= arenaMinRating && (*itr3)->ArenaMatchmakerRating <= arenaMaxRating)
+ || (*itr3)->JoinTime < discardTime)
+ && (*itr_teams[0])->ArenaTeamId != (*itr3)->ArenaTeamId)
{
- m_SelectionPools[BG_TEAM_HORDE].AddGroup((*itr_team[BG_TEAM_HORDE]), MaxPlayersPerTeam);
+ itr_teams[found++] = itr3;
break;
}
}
}
//if we have 2 teams, then start new arena and invite players!
- if (m_SelectionPools[BG_TEAM_ALLIANCE].GetPlayerCount() && m_SelectionPools[BG_TEAM_HORDE].GetPlayerCount())
+ if (found == 2)
{
+ GroupQueueInfo* aTeam = *itr_teams[BG_TEAM_ALLIANCE];
+ GroupQueueInfo* hTeam = *itr_teams[BG_TEAM_HORDE];
Battleground* arena = sBattlegroundMgr->CreateNewBattleground(bgTypeId, bracketEntry, arenaType, true);
if (!arena)
{
@@ -980,35 +966,31 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId
return;
}
- (*(itr_team[BG_TEAM_ALLIANCE]))->OpponentsTeamRating = (*(itr_team[BG_TEAM_HORDE]))->ArenaTeamRating;
- (*(itr_team[BG_TEAM_ALLIANCE]))->OpponentsMatchmakerRating = (*(itr_team[BG_TEAM_HORDE]))->ArenaMatchmakerRating;
- sLog->outDebug(LOG_FILTER_BATTLEGROUND, "setting oposite teamrating for team %u to %u", (*(itr_team[BG_TEAM_ALLIANCE]))->ArenaTeamId, (*(itr_team[BG_TEAM_ALLIANCE]))->OpponentsTeamRating);
- (*(itr_team[BG_TEAM_HORDE]))->OpponentsTeamRating = (*(itr_team[BG_TEAM_ALLIANCE]))->ArenaTeamRating;
- (*(itr_team[BG_TEAM_HORDE]))->OpponentsMatchmakerRating = (*(itr_team[BG_TEAM_ALLIANCE]))->ArenaMatchmakerRating;
- sLog->outDebug(LOG_FILTER_BATTLEGROUND, "setting oposite teamrating for team %u to %u", (*(itr_team[BG_TEAM_HORDE]))->ArenaTeamId, (*(itr_team[BG_TEAM_HORDE]))->OpponentsTeamRating);
+ aTeam->OpponentsTeamRating = hTeam->ArenaTeamRating;
+ hTeam->OpponentsTeamRating = aTeam->ArenaTeamRating;
+ aTeam->OpponentsMatchmakerRating = hTeam->ArenaMatchmakerRating;
+ hTeam->OpponentsMatchmakerRating = aTeam->ArenaMatchmakerRating;
+ sLog->outDebug(LOG_FILTER_BATTLEGROUND, "setting oposite teamrating for team %u to %u", aTeam->ArenaTeamId, aTeam->OpponentsTeamRating);
+ sLog->outDebug(LOG_FILTER_BATTLEGROUND, "setting oposite teamrating for team %u to %u", hTeam->ArenaTeamId, hTeam->OpponentsTeamRating);
+
// now we must move team if we changed its faction to another faction queue, because then we will spam log by errors in Queue::RemovePlayer
- if ((*(itr_team[BG_TEAM_ALLIANCE]))->Team != ALLIANCE)
+ if (aTeam->Team != ALLIANCE)
{
- // add to alliance queue
- m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].push_front(*(itr_team[BG_TEAM_ALLIANCE]));
- // erase from horde queue
- m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].erase(itr_team[BG_TEAM_ALLIANCE]);
- itr_team[BG_TEAM_ALLIANCE] = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].begin();
+ m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].push_front(aTeam);
+ m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].erase(itr_teams[BG_TEAM_ALLIANCE]);
}
- if ((*(itr_team[BG_TEAM_HORDE]))->Team != HORDE)
+ if (hTeam->Team != HORDE)
{
- m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].push_front(*(itr_team[BG_TEAM_HORDE]));
- m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].erase(itr_team[BG_TEAM_HORDE]);
- itr_team[BG_TEAM_HORDE] = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].begin();
+ m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].push_front(hTeam);
+ m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].erase(itr_teams[BG_TEAM_HORDE]);
}
- arena->SetArenaMatchmakerRating(ALLIANCE, (*(itr_team[BG_TEAM_ALLIANCE]))->ArenaMatchmakerRating);
- arena->SetArenaMatchmakerRating(HORDE, (*(itr_team[BG_TEAM_HORDE]))->ArenaMatchmakerRating);
- InviteGroupToBG(*(itr_team[BG_TEAM_ALLIANCE]), arena, ALLIANCE);
- InviteGroupToBG(*(itr_team[BG_TEAM_HORDE]), arena, HORDE);
+ arena->SetArenaMatchmakerRating(ALLIANCE, aTeam->ArenaMatchmakerRating);
+ arena->SetArenaMatchmakerRating( HORDE, hTeam->ArenaMatchmakerRating);
+ InviteGroupToBG(aTeam, arena, ALLIANCE);
+ InviteGroupToBG(hTeam, arena, HORDE);
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Starting rated arena match!");
-
arena->StartBattleground();
}
}
@@ -1020,9 +1002,9 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId
bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
- Player* plr = ObjectAccessor::FindPlayer(m_PlayerGuid);
+ Player* player = ObjectAccessor::FindPlayer(m_PlayerGuid);
// player logged off (we should do nothing, he is correctly removed from queue in another procedure)
- if (!plr)
+ if (!player)
return true;
Battleground* bg = sBattlegroundMgr->GetBattleground(m_BgInstanceGUID, m_BgTypeId);
@@ -1031,7 +1013,7 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
return true;
BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bg->GetTypeID(), bg->GetArenaType());
- uint32 queueSlot = plr->GetBattlegroundQueueIndex(bgQueueTypeId);
+ uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId);
if (queueSlot < PLAYER_MAX_BATTLEGROUND_QUEUES) // player is in queue or in battleground
{
// check if player is invited to this bg
@@ -1041,7 +1023,7 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
WorldPacket data;
//we must send remaining time in queue
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME - INVITATION_REMIND_TIME, 0, m_ArenaType);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
}
}
return true; //event will be deleted
@@ -1063,8 +1045,8 @@ void BGQueueInviteEvent::Abort(uint64 /*e_time*/)
*/
bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
{
- Player* plr = ObjectAccessor::FindPlayer(m_PlayerGuid);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(m_PlayerGuid);
+ if (!player)
// player logged off (we should do nothing, he is correctly removed from queue in another procedure)
return true;
@@ -1072,16 +1054,16 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
//battleground can be deleted already when we are removing queue info
//bg pointer can be NULL! so use it carefully!
- uint32 queueSlot = plr->GetBattlegroundQueueIndex(m_BgQueueTypeId);
+ uint32 queueSlot = player->GetBattlegroundQueueIndex(m_BgQueueTypeId);
if (queueSlot < PLAYER_MAX_BATTLEGROUND_QUEUES) // player is in queue, or in Battleground
{
// check if player is in queue for this BG and if we are removing his invite event
BattlegroundQueue &bgQueue = sBattlegroundMgr->m_BattlegroundQueues[m_BgQueueTypeId];
if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime))
{
- sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", plr->GetGUIDLow(), m_BgInstanceGUID);
+ sLog->outDebug(LOG_FILTER_BATTLEGROUND, "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", player->GetGUIDLow(), m_BgInstanceGUID);
- plr->RemoveBattlegroundQueueId(m_BgQueueTypeId);
+ player->RemoveBattlegroundQueueId(m_BgQueueTypeId);
bgQueue.RemovePlayer(m_PlayerGuid, true);
//update queues if battleground isn't ended
if (bg && bg->isBattleground() && bg->GetStatus() != STATUS_WAIT_LEAVE)
@@ -1089,7 +1071,7 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
WorldPacket data;
sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
}
}
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h
index 10bff57a251..5cf5afc50ca 100755
--- a/src/server/game/Battlegrounds/BattlegroundQueue.h
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -70,6 +70,7 @@ class BattlegroundQueue
~BattlegroundQueue();
void BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType = 0, bool isRated = false, uint32 minRating = 0);
+ void UpdateEvents(uint32 diff);
void FillPlayersToBG(Battleground* bg, BattlegroundBracketId bracket_id);
bool CheckPremadeMatch(BattlegroundBracketId bracket_id, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam);
@@ -103,6 +104,7 @@ class BattlegroundQueue
class SelectionPool
{
public:
+ SelectionPool(): PlayerCount(0) {};
void Init();
bool AddGroup(GroupQueueInfo* ginfo, uint32 desiredCount);
bool KickGroup(uint32 size);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAA.cpp
index 7c7a6262c58..61180ae88ea 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAA.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -47,16 +47,16 @@ void BattlegroundAA::StartingEventOpenDoors()
{
}
-void BattlegroundAA::AddPlayer(Player* plr)
+void BattlegroundAA::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundAAScore* sc = new BattlegroundAAScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
}
-void BattlegroundAA::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundAA::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAA.h b/src/server/game/Battlegrounds/Zones/BattlegroundAA.h
index 33e193bd4ef..79af4269fbf 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAA.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -35,11 +35,11 @@ class BattlegroundAA : public Battleground
~BattlegroundAA();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
void HandleKillPlayer(Player* player, Player* killer);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index e2a39ff4666..d64b2a9913d 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -204,16 +204,16 @@ void BattlegroundAB::StartingEventOpenDoors()
DoorOpen(BG_AB_OBJECT_GATE_H);
}
-void BattlegroundAB::AddPlayer(Player* plr)
+void BattlegroundAB::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in the constructor
BattlegroundABScore* sc = new BattlegroundABScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
}
-void BattlegroundAB::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundAB::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
}
@@ -409,15 +409,15 @@ void BattlegroundAB::_NodeDeOccupied(uint8 node)
WorldSafeLocsEntry const* ClosestGrave = NULL;
for (std::vector<uint64>::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr)
{
- Player* plr = ObjectAccessor::FindPlayer(*itr);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(*itr);
+ if (!player)
continue;
if (!ClosestGrave) // cache
- ClosestGrave = GetClosestGraveYard(plr);
+ ClosestGrave = GetClosestGraveYard(player);
if (ClosestGrave)
- plr->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, plr->GetOrientation());
+ player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation());
}
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
index c848c5f23f8..38c8f4a21d4 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -245,10 +245,10 @@ class BattlegroundAB : public Battleground
BattlegroundAB();
~BattlegroundAB();
- void AddPlayer(Player* plr);
+ void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
virtual bool SetupBattleground();
virtual void Reset();
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index a647a3c6299..01f62bfcf35 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -422,14 +422,14 @@ void BattlegroundAV::StartingEventOpenDoors()
DoorOpen(BG_AV_OBJECT_DOOR_A);
}
-void BattlegroundAV::AddPlayer(Player* plr)
+void BattlegroundAV::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundAVScore* sc = new BattlegroundAVScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
if (m_MaxLevel == 0)
- m_MaxLevel=(plr->getLevel()%10 == 0)? plr->getLevel() : (plr->getLevel()-(plr->getLevel()%10))+10; //TODO: just look at the code \^_^/ --but queue-info should provide this information..
+ m_MaxLevel=(player->getLevel()%10 == 0)? player->getLevel() : (player->getLevel()-(player->getLevel()%10))+10; //TODO: just look at the code \^_^/ --but queue-info should provide this information..
}
@@ -473,17 +473,17 @@ void BattlegroundAV::EndBattleground(uint32 winner)
Battleground::EndBattleground(winner);
}
-void BattlegroundAV::RemovePlayer(Player* plr, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundAV::RemovePlayer(Player* player, uint64 /*guid*/, uint32 /*team*/)
{
- if (!plr)
+ if (!player)
{
sLog->outError("bg_AV no player at remove");
return;
}
//TODO search more buffs
- plr->RemoveAurasDueToSpell(AV_BUFF_ARMOR);
- plr->RemoveAurasDueToSpell(AV_BUFF_A_CAPTAIN);
- plr->RemoveAurasDueToSpell(AV_BUFF_H_CAPTAIN);
+ player->RemoveAurasDueToSpell(AV_BUFF_ARMOR);
+ player->RemoveAurasDueToSpell(AV_BUFF_A_CAPTAIN);
+ player->RemoveAurasDueToSpell(AV_BUFF_H_CAPTAIN);
}
void BattlegroundAV::HandleAreaTrigger(Player* Source, uint32 Trigger)
@@ -1029,17 +1029,17 @@ void BattlegroundAV::EventPlayerAssaultsPoint(Player* player, uint32 object)
std::vector<uint64> ghost_list = m_ReviveQueue[m_BgCreatures[node]];
if (!ghost_list.empty())
{
- Player* plr;
+ Player* player;
WorldSafeLocsEntry const* ClosestGrave = NULL;
for (std::vector<uint64>::iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr)
{
- plr = ObjectAccessor::FindPlayer(*ghost_list.begin());
- if (!plr)
+ player = ObjectAccessor::FindPlayer(*ghost_list.begin());
+ if (!player)
continue;
if (!ClosestGrave)
- ClosestGrave = GetClosestGraveYard(plr);
+ ClosestGrave = GetClosestGraveYard(player);
else
- plr->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, plr->GetOrientation());
+ player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation());
}
m_ReviveQueue[m_BgCreatures[node]].clear();
}
@@ -1348,23 +1348,23 @@ bool BattlegroundAV::SetupBattleground()
//creatures
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV start poputlating nodes");
- for (BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i)
+ for (i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i)
{
if (m_Nodes[i].Owner)
- PopulateNode(i);
+ PopulateNode(BG_AV_Nodes(i));
}
//all creatures which don't get despawned through the script are static
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning static creatures");
- for (i=0; i < AV_STATICCPLACE_MAX; i++)
- AddAVCreature(0, i+AV_CPLACE_MAX);
+ for (i = 0; i < AV_STATICCPLACE_MAX; i++)
+ AddAVCreature(0, i + AV_CPLACE_MAX);
//mainspiritguides:
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning spiritguides creatures");
AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE);
AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE);
//spawn the marshals (those who get deleted, if a tower gets destroyed)
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning marshal creatures");
- for (i=AV_NPC_A_MARSHAL_SOUTH; i <= AV_NPC_H_MARSHAL_WTOWER; i++)
- AddAVCreature(i, AV_CPLACE_A_MARSHAL_SOUTH+(i-AV_NPC_A_MARSHAL_SOUTH));
+ for (i = AV_NPC_A_MARSHAL_SOUTH; i <= AV_NPC_H_MARSHAL_WTOWER; i++)
+ AddAVCreature(i, AV_CPLACE_A_MARSHAL_SOUTH + (i - AV_NPC_A_MARSHAL_SOUTH));
AddAVCreature(AV_NPC_HERALD, AV_CPLACE_HERALD);
return true;
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
index 3ae1f52a4f9..e2902f8fd2d 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -1539,11 +1539,11 @@ class BattlegroundAV : public Battleground
~BattlegroundAV();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
virtual void ResetBGSubclass();
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
index 1db59547d92..0e79296b6f4 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -62,18 +62,18 @@ void BattlegroundBE::StartingEventOpenDoors()
SpawnBGObject(i, 60);
}
-void BattlegroundBE::AddPlayer(Player* plr)
+void BattlegroundBE::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundBEScore* sc = new BattlegroundBEScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
UpdateArenaWorldState();
}
-void BattlegroundBE::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundBE::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
if (GetStatus() == STATUS_WAIT_LEAVE)
return;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
index 13aef8f561b..8c0df2bc329 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -55,17 +55,17 @@ class BattlegroundBE : public Battleground
~BattlegroundBE();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket &d);
void HandleKillPlayer(Player* player, Player* killer);
- bool HandlePlayerUnderMap(Player* plr);
+ bool HandlePlayerUnderMap(Player* player);
/* Scorekeeping */
void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
index 6fb07ebb678..87f4ca48378 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -88,18 +88,18 @@ void BattlegroundDS::StartingEventOpenDoors()
SpawnBGObject(i, getWaterFallTimer());
}
-void BattlegroundDS::AddPlayer(Player* plr)
+void BattlegroundDS::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundDSScore* sc = new BattlegroundDSScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
UpdateArenaWorldState();
}
-void BattlegroundDS::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundDS::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
if (GetStatus() == STATUS_WAIT_LEAVE)
return;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
index e5b2d613810..f2ba2cea1e7 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -64,17 +64,17 @@ class BattlegroundDS : public Battleground
~BattlegroundDS();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket &d);
void HandleKillPlayer(Player* player, Player* killer);
- bool HandlePlayerUnderMap(Player* plr);
+ bool HandlePlayerUnderMap(Player* player);
private:
uint32 m_waterTimer;
bool m_waterfallActive;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index 8c5b0468aca..4595a061e1a 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -146,20 +146,20 @@ void BattlegroundEY::CheckSomeoneJoinedPoint()
uint8 j = 0;
while (j < m_PlayersNearPoint[EY_POINTS_MAX].size())
{
- Player* plr = ObjectAccessor::FindPlayer(m_PlayersNearPoint[EY_POINTS_MAX][j]);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(m_PlayersNearPoint[EY_POINTS_MAX][j]);
+ if (!player)
{
sLog->outError("BattlegroundEY:CheckSomeoneJoinedPoint: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[EY_POINTS_MAX][j]));
++j;
continue;
}
- if (plr->CanCaptureTowerPoint() && plr->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
+ if (player->CanCaptureTowerPoint() && player->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
{
//player joined point!
//show progress bar
- UpdateWorldStateForPlayer(PROGRESS_BAR_PERCENT_GREY, BG_EY_PROGRESS_BAR_PERCENT_GREY, plr);
- UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[i], plr);
- UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_SHOW, plr);
+ UpdateWorldStateForPlayer(PROGRESS_BAR_PERCENT_GREY, BG_EY_PROGRESS_BAR_PERCENT_GREY, player);
+ UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[i], player);
+ UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_SHOW, player);
//add player to point
m_PlayersNearPoint[i].push_back(m_PlayersNearPoint[EY_POINTS_MAX][j]);
//remove player from "free space"
@@ -186,8 +186,8 @@ void BattlegroundEY::CheckSomeoneLeftPoint()
uint8 j = 0;
while (j < m_PlayersNearPoint[i].size())
{
- Player* plr = ObjectAccessor::FindPlayer(m_PlayersNearPoint[i][j]);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(m_PlayersNearPoint[i][j]);
+ if (!player)
{
sLog->outError("BattlegroundEY:CheckSomeoneLeftPoint Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[i][j]));
//move not existed player to "free space" - this will cause many error showing in log, but it is a very important bug
@@ -196,17 +196,17 @@ void BattlegroundEY::CheckSomeoneLeftPoint()
++j;
continue;
}
- if (!plr->CanCaptureTowerPoint() || !plr->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
+ if (!player->CanCaptureTowerPoint() || !player->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
//move player out of point (add him to players that are out of points
{
m_PlayersNearPoint[EY_POINTS_MAX].push_back(m_PlayersNearPoint[i][j]);
m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
- this->UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_DONT_SHOW, plr);
+ this->UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_DONT_SHOW, player);
}
else
{
//player is neat flag, so update count:
- m_CurrentPointPlayersCount[2 * i + GetTeamIndexByTeamId(plr->GetTeam())]++;
+ m_CurrentPointPlayersCount[2 * i + GetTeamIndexByTeamId(player->GetTeam())]++;
++j;
}
}
@@ -241,20 +241,20 @@ void BattlegroundEY::UpdatePointStatuses()
for (uint8 i = 0; i < m_PlayersNearPoint[point].size(); ++i)
{
- Player* plr = ObjectAccessor::FindPlayer(m_PlayersNearPoint[point][i]);
- if (plr)
+ Player* player = ObjectAccessor::FindPlayer(m_PlayersNearPoint[point][i]);
+ if (player)
{
- this->UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[point], plr);
+ this->UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[point], player);
//if point owner changed we must evoke event!
if (pointOwnerTeamId != m_PointOwnedByTeam[point])
{
//point was uncontrolled and player is from team which captured point
- if (m_PointState[point] == EY_POINT_STATE_UNCONTROLLED && plr->GetTeam() == pointOwnerTeamId)
- this->EventTeamCapturedPoint(plr, point);
+ if (m_PointState[point] == EY_POINT_STATE_UNCONTROLLED && player->GetTeam() == pointOwnerTeamId)
+ this->EventTeamCapturedPoint(player, point);
//point was under control and player isn't from team which controlled it
- if (m_PointState[point] == EY_POINT_UNDER_CONTROL && plr->GetTeam() != m_PointOwnedByTeam[point])
- this->EventTeamLostPoint(plr, point);
+ if (m_PointState[point] == EY_POINT_UNDER_CONTROL && player->GetTeam() != m_PointOwnedByTeam[point])
+ this->EventTeamLostPoint(player, point);
}
}
}
@@ -330,18 +330,18 @@ void BattlegroundEY::UpdatePointsIcons(uint32 Team, uint32 Point)
}
}
-void BattlegroundEY::AddPlayer(Player* plr)
+void BattlegroundEY::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map
BattlegroundEYScore* sc = new BattlegroundEYScore;
- m_PlayersNearPoint[EY_POINTS_MAX].push_back(plr->GetGUID());
+ m_PlayersNearPoint[EY_POINTS_MAX].push_back(player->GetGUID());
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
}
-void BattlegroundEY::RemovePlayer(Player* plr, uint64 guid, uint32 /*team*/)
+void BattlegroundEY::RemovePlayer(Player* player, uint64 guid, uint32 /*team*/)
{
// sometimes flag aura not removed :(
for (int j = EY_POINTS_MAX; j >= 0; --j)
@@ -354,8 +354,8 @@ void BattlegroundEY::RemovePlayer(Player* plr, uint64 guid, uint32 /*team*/)
{
if (m_FlagKeeper == guid)
{
- if (plr)
- EventPlayerDroppedFlag(plr);
+ if (player)
+ EventPlayerDroppedFlag(player);
else
{
SetFlagPicker(0);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
index fdb81491771..5f89e0d7021 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -336,7 +336,7 @@ class BattlegroundEY : public Battleground
~BattlegroundEY();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
@@ -348,7 +348,7 @@ class BattlegroundEY : public Battleground
void RespawnFlag(bool send_message);
void RespawnFlagAfterDrop();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleBuffUse(uint64 buff_guid);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
void HandleKillPlayer(Player* player, Player* killer);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index b00e8dac1d8..e3eefd41d52 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -90,22 +90,22 @@ void BattlegroundIC::DoAction(uint32 action, uint64 var)
if (action != ACTION_TELEPORT_PLAYER_TO_TRANSPORT)
return;
- Player* plr = ObjectAccessor::FindPlayer(var);
+ Player* player = ObjectAccessor::FindPlayer(var);
- if (!plr || !gunshipAlliance || !gunshipHorde)
+ if (!player || !gunshipAlliance || !gunshipHorde)
return;
- plr->CastSpell(plr, SPELL_PARACHUTE, true); // this must be changed, there is a trigger in each transport that casts the spell.
- plr->CastSpell(plr, SPELL_SLOW_FALL, true);
+ player->CastSpell(player, SPELL_PARACHUTE, true); // this must be changed, there is a trigger in each transport that casts the spell.
+ player->CastSpell(player, SPELL_SLOW_FALL, true);
- plr->SetTransport(plr->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde);
+ player->SetTransport(player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde);
- plr->m_movementInfo.t_pos.m_positionX = TransportMovementInfo.GetPositionX();
- plr->m_movementInfo.t_pos.m_positionY = TransportMovementInfo.GetPositionY();
- plr->m_movementInfo.t_pos.m_positionZ = TransportMovementInfo.GetPositionZ();
- plr->m_movementInfo.t_guid = (plr->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->GetGUID();
+ player->m_movementInfo.t_pos.m_positionX = TransportMovementInfo.GetPositionX();
+ player->m_movementInfo.t_pos.m_positionY = TransportMovementInfo.GetPositionY();
+ player->m_movementInfo.t_pos.m_positionZ = TransportMovementInfo.GetPositionZ();
+ player->m_movementInfo.t_guid = (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->GetGUID();
- plr->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(), TeleportToTransportPosition.GetPositionY(), TeleportToTransportPosition.GetPositionZ(), TeleportToTransportPosition.GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT);
+ player->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(), TeleportToTransportPosition.GetPositionY(), TeleportToTransportPosition.GetPositionZ(), TeleportToTransportPosition.GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT);
}
void BattlegroundIC::PostUpdateImpl(uint32 diff)
@@ -135,7 +135,7 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
if (nodePoint[i].nodeState == NODE_STATE_CONTROLLED_A ||
nodePoint[i].nodeState == NODE_STATE_CONTROLLED_H)
{
- if (nodePoint[i].timer <= diff)
+ if (docksTimer <= diff)
{
// we need to confirm this, i am not sure if this every 3 minutes
for (uint8 u = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H); u < (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_A : BG_IC_NPC_CATAPULT_4_H); u++)
@@ -158,7 +158,7 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
}
docksTimer = DOCKS_UPDATE_TIME;
- } else nodePoint[i].timer -= diff;
+ } else docksTimer -= diff;
}
}
@@ -292,29 +292,29 @@ bool BattlegroundIC::IsAllNodesConrolledByTeam(uint32 team) const
return count == NODE_TYPE_WORKSHOP;
}
-void BattlegroundIC::AddPlayer(Player* plr)
+void BattlegroundIC::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundICScore* sc = new BattlegroundICScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
- if (nodePoint[NODE_TYPE_QUARRY].nodeState == (plr->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H))
- plr->CastSpell(plr, SPELL_QUARRY, true);
+ if (nodePoint[NODE_TYPE_QUARRY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H))
+ player->CastSpell(player, SPELL_QUARRY, true);
- if (nodePoint[NODE_TYPE_REFINERY].nodeState == (plr->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H))
- plr->CastSpell(plr, SPELL_OIL_REFINERY, true);
+ if (nodePoint[NODE_TYPE_REFINERY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H))
+ player->CastSpell(player, SPELL_OIL_REFINERY, true);
- SendTransportInit(plr);
+ SendTransportInit(player);
}
-void BattlegroundIC::RemovePlayer(Player* plr, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundIC::RemovePlayer(Player* player, uint64 /*guid*/, uint32 /*team*/)
{
- if (plr)
+ if (player)
{
- plr->RemoveAura(SPELL_QUARRY);
- plr->RemoveAura(SPELL_OIL_REFINERY);
+ player->RemoveAura(SPELL_QUARRY);
+ player->RemoveAura(SPELL_OIL_REFINERY);
}
}
@@ -482,15 +482,15 @@ void BattlegroundIC::RealocatePlayers(ICNodePointType nodeType)
WorldSafeLocsEntry const* ClosestGrave = NULL;
for (std::vector<uint64>::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr)
{
- Player* plr = ObjectAccessor::FindPlayer(*itr);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(*itr);
+ if (!player)
continue;
if (!ClosestGrave) // cache
- ClosestGrave = GetClosestGraveYard(plr);
+ ClosestGrave = GetClosestGraveYard(player);
if (ClosestGrave)
- plr->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, plr->GetOrientation());
+ player->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, player->GetOrientation());
}
}
}
@@ -644,178 +644,178 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
switch (nodePoint->gameobject_type)
{
- case BG_IC_GO_HANGAR_BANNER:
- // all the players on the stopped transport should be teleported out
- if (!gunshipAlliance || !gunshipHorde)
- break;
+ case BG_IC_GO_HANGAR_BANNER:
+ // all the players on the stopped transport should be teleported out
+ if (!gunshipAlliance || !gunshipHorde)
+ break;
- for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; u++)
- {
- uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u;
- AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL),
- BG_IC_HangarTeleporters[u].GetPositionX(), BG_IC_HangarTeleporters[u].GetPositionY(),
- BG_IC_HangarTeleporters[u].GetPositionZ(), BG_IC_HangarTeleporters[u].GetOrientation(),
- 0, 0, 0, 0, RESPAWN_ONE_DAY);
- }
-
- //sLog->outError("BG_IC_GO_HANGAR_BANNER CAPTURED Faction: %u", nodePoint->faction);
+ for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; u++)
+ {
+ uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u;
+ AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL),
+ BG_IC_HangarTeleporters[u].GetPositionX(), BG_IC_HangarTeleporters[u].GetPositionY(),
+ BG_IC_HangarTeleporters[u].GetPositionZ(), BG_IC_HangarTeleporters[u].GetOrientation(),
+ 0, 0, 0, 0, RESPAWN_ONE_DAY);
+ }
- (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->BuildStartMovePacket(GetBgMap());
- (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->BuildStopMovePacket(GetBgMap());
- // we should spawn teleporters
- break;
- case BG_IC_GO_QUARRY_BANNER:
- RemoveAuraOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE));
- CastSpellOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
- break;
- case BG_IC_GO_REFINERY_BANNER:
- RemoveAuraOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE));
- CastSpellOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
- break;
- case BG_IC_GO_DOCKS_BANNER:
+ //sLog->outError("BG_IC_GO_HANGAR_BANNER CAPTURED Faction: %u", nodePoint->faction);
- if (recapture)
+ (nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->BuildStartMovePacket(GetBgMap());
+ (nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->BuildStopMovePacket(GetBgMap());
+ // we should spawn teleporters
break;
+ case BG_IC_GO_QUARRY_BANNER:
+ RemoveAuraOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE));
+ CastSpellOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
+ break;
+ case BG_IC_GO_REFINERY_BANNER:
+ RemoveAuraOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE));
+ CastSpellOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
+ break;
+ case BG_IC_GO_DOCKS_BANNER:
- if (docksTimer < DOCKS_UPDATE_TIME)
- docksTimer = DOCKS_UPDATE_TIME;
+ if (recapture)
+ break;
- // we must del opposing faction vehicles when the node is captured (unused ones)
- for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_H : BG_IC_NPC_GLAIVE_THROWER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_2_H : BG_IC_NPC_GLAIVE_THROWER_2_A); i++)
- {
- if (Creature* glaiveThrower = GetBGCreature(i))
+ if (docksTimer < DOCKS_UPDATE_TIME)
+ docksTimer = DOCKS_UPDATE_TIME;
+
+ // we must del opposing faction vehicles when the node is captured (unused ones)
+ for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_H : BG_IC_NPC_GLAIVE_THROWER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_2_H : BG_IC_NPC_GLAIVE_THROWER_2_A); i++)
{
- if (Vehicle* vehicleGlaive = glaiveThrower->GetVehicleKit())
+ if (Creature* glaiveThrower = GetBGCreature(i))
{
- if (!vehicleGlaive->GetPassenger(0))
- DelCreature(i);
+ if (Vehicle* vehicleGlaive = glaiveThrower->GetVehicleKit())
+ {
+ if (!vehicleGlaive->GetPassenger(0))
+ DelCreature(i);
+ }
}
}
- }
- for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_H : BG_IC_NPC_CATAPULT_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_H : BG_IC_NPC_CATAPULT_4_A); i++)
- {
- if (Creature* catapult = GetBGCreature(i))
+ for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_H : BG_IC_NPC_CATAPULT_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_H : BG_IC_NPC_CATAPULT_4_A); i++)
{
- if (Vehicle* vehicleGlaive = catapult->GetVehicleKit())
+ if (Creature* catapult = GetBGCreature(i))
{
- if (!vehicleGlaive->GetPassenger(0))
- DelCreature(i);
+ if (Vehicle* vehicleGlaive = catapult->GetVehicleKit())
+ {
+ if (!vehicleGlaive->GetPassenger(0))
+ DelCreature(i);
+ }
}
}
- }
- // spawning glaive throwers
- for (uint8 i = 0; i < MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION; i++)
- {
- uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+i;
+ // spawning glaive throwers
+ for (uint8 i = 0; i < MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION; i++)
+ {
+ uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+i;
- if (GetBGCreature(type) && GetBGCreature(type)->isAlive())
- continue;
+ if (GetBGCreature(type) && GetBGCreature(type)->isAlive())
+ continue;
- if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, nodePoint->faction,
- BG_IC_DocksVehiclesGlaives[i].GetPositionX(), BG_IC_DocksVehiclesGlaives[i].GetPositionY(),
- BG_IC_DocksVehiclesGlaives[i].GetPositionZ(), BG_IC_DocksVehiclesGlaives[i].GetOrientation(),
- RESPAWN_ONE_DAY))
- GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
- }
+ if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, nodePoint->faction,
+ BG_IC_DocksVehiclesGlaives[i].GetPositionX(), BG_IC_DocksVehiclesGlaives[i].GetPositionY(),
+ BG_IC_DocksVehiclesGlaives[i].GetPositionZ(), BG_IC_DocksVehiclesGlaives[i].GetOrientation(),
+ RESPAWN_ONE_DAY))
+ GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ }
- // spawning catapults
- for (uint8 i = 0; i < MAX_CATAPULTS_SPAWNS_PER_FACTION; i++)
- {
- uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+i;
+ // spawning catapults
+ for (uint8 i = 0; i < MAX_CATAPULTS_SPAWNS_PER_FACTION; i++)
+ {
+ uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+i;
- if (GetBGCreature(type) && GetBGCreature(type)->isAlive())
- continue;
+ if (GetBGCreature(type) && GetBGCreature(type)->isAlive())
+ continue;
- if (AddCreature(NPC_CATAPULT, type, nodePoint->faction,
- BG_IC_DocksVehiclesCatapults[i].GetPositionX(), BG_IC_DocksVehiclesCatapults[i].GetPositionY(),
- BG_IC_DocksVehiclesCatapults[i].GetPositionZ(), BG_IC_DocksVehiclesCatapults[i].GetOrientation(),
- RESPAWN_ONE_DAY))
- GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
- }
- break;
- case BG_IC_GO_WORKSHOP_BANNER:
- {
- if (siegeEngineWorkshopTimer < WORKSHOP_UPDATE_TIME)
- siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME;
-
- if (!recapture)
+ if (AddCreature(NPC_CATAPULT, type, nodePoint->faction,
+ BG_IC_DocksVehiclesCatapults[i].GetPositionX(), BG_IC_DocksVehiclesCatapults[i].GetPositionY(),
+ BG_IC_DocksVehiclesCatapults[i].GetPositionZ(), BG_IC_DocksVehiclesCatapults[i].GetOrientation(),
+ RESPAWN_ONE_DAY))
+ GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ }
+ break;
+ case BG_IC_GO_WORKSHOP_BANNER:
{
- // we must del opposing faction vehicles when the node is captured (unused ones)
- for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_H : BG_IC_NPC_DEMOLISHER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_H : BG_IC_NPC_DEMOLISHER_4_A); i++)
+ if (siegeEngineWorkshopTimer < WORKSHOP_UPDATE_TIME)
+ siegeEngineWorkshopTimer = WORKSHOP_UPDATE_TIME;
+
+ if (!recapture)
{
- if (Creature* demolisher = GetBGCreature(i))
+ // we must del opposing faction vehicles when the node is captured (unused ones)
+ for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_H : BG_IC_NPC_DEMOLISHER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_H : BG_IC_NPC_DEMOLISHER_4_A); i++)
{
- if (Vehicle* vehicleDemolisher = demolisher->GetVehicleKit())
+ if (Creature* demolisher = GetBGCreature(i))
{
- // is IsVehicleInUse working as expected?
- if (!vehicleDemolisher->IsVehicleInUse())
- DelCreature(i);
+ if (Vehicle* vehicleDemolisher = demolisher->GetVehicleKit())
+ {
+ // is IsVehicleInUse working as expected?
+ if (!vehicleDemolisher->IsVehicleInUse())
+ DelCreature(i);
+ }
}
}
- }
- for (uint8 i = 0; i < MAX_DEMOLISHERS_SPAWNS_PER_FACTION; i++)
- {
- uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+i;
+ for (uint8 i = 0; i < MAX_DEMOLISHERS_SPAWNS_PER_FACTION; i++)
+ {
+ uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+i;
- if (GetBGCreature(type) && GetBGCreature(type)->isAlive())
- continue;
+ if (GetBGCreature(type) && GetBGCreature(type)->isAlive())
+ continue;
- if (AddCreature(NPC_DEMOLISHER, type, nodePoint->faction,
- BG_IC_WorkshopVehicles[i].GetPositionX(), BG_IC_WorkshopVehicles[i].GetPositionY(),
- BG_IC_WorkshopVehicles[i].GetPositionZ(), BG_IC_WorkshopVehicles[i].GetOrientation(),
- RESPAWN_ONE_DAY))
- GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
- }
+ if (AddCreature(NPC_DEMOLISHER, type, nodePoint->faction,
+ BG_IC_WorkshopVehicles[i].GetPositionX(), BG_IC_WorkshopVehicles[i].GetPositionY(),
+ BG_IC_WorkshopVehicles[i].GetPositionZ(), BG_IC_WorkshopVehicles[i].GetOrientation(),
+ RESPAWN_ONE_DAY))
+ GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ }
- // we check if the opossing siege engine is in use
- int8 enemySiege = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_H : BG_IC_NPC_SIEGE_ENGINE_A);
+ // we check if the opossing siege engine is in use
+ int8 enemySiege = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_H : BG_IC_NPC_SIEGE_ENGINE_A);
- if (Creature* siegeEngine = GetBGCreature(enemySiege))
- {
- if (Vehicle* vehicleSiege = siegeEngine->GetVehicleKit())
+ if (Creature* siegeEngine = GetBGCreature(enemySiege))
{
- // is VehicleInUse working as expected ?
- if (!vehicleSiege->IsVehicleInUse())
- DelCreature(enemySiege);
+ if (Vehicle* vehicleSiege = siegeEngine->GetVehicleKit())
+ {
+ // is VehicleInUse working as expected ?
+ if (!vehicleSiege->IsVehicleInUse())
+ DelCreature(enemySiege);
+ }
}
- }
- uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H);
- if (!GetBGCreature(siegeType) || !GetBGCreature(siegeType)->isAlive())
- {
- AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, nodePoint->faction,
- BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(),
- BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation(),
- RESPAWN_ONE_DAY);
-
- if (Creature* siegeEngine = GetBGCreature(siegeType))
+ uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H);
+ if (!GetBGCreature(siegeType) || !GetBGCreature(siegeType)->isAlive())
{
- siegeEngine->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_UNK_14|UNIT_FLAG_OOC_NOT_ATTACKABLE);
- siegeEngine->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, nodePoint->faction,
+ BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(),
+ BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation(),
+ RESPAWN_ONE_DAY);
+
+ if (Creature* siegeEngine = GetBGCreature(siegeType))
+ {
+ siegeEngine->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_UNK_14|UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ siegeEngine->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ }
}
}
- }
- for (uint8 i = 0; i < MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION; i++)
- {
- AddObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i, GO_SEAFORIUM_BOMBS,
- workshopBombs[i].GetPositionX(), workshopBombs[i].GetPositionY(),
- workshopBombs[i].GetPositionZ(), workshopBombs[i].GetOrientation(),
- 0, 0, 0, 0, 10);
-
- if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i))
+ for (uint8 i = 0; i < MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION; i++)
{
- seaforiumBombs->SetRespawnTime(10);
- seaforiumBombs->SetUInt32Value(GAMEOBJECT_FACTION, BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ AddObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i, GO_SEAFORIUM_BOMBS,
+ workshopBombs[i].GetPositionX(), workshopBombs[i].GetPositionY(),
+ workshopBombs[i].GetPositionZ(), workshopBombs[i].GetOrientation(),
+ 0, 0, 0, 0, 10);
+
+ if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i))
+ {
+ seaforiumBombs->SetRespawnTime(10);
+ seaforiumBombs->SetUInt32Value(GAMEOBJECT_FACTION, BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
+ }
}
+ break;
}
+ default:
break;
- }
- default:
- break;
}
}
@@ -855,7 +855,7 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
SendMessage2ToAll(lang_entry, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL, (player->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_HORDE_KEEP : LANG_BG_IC_ALLIANCE_KEEP));
}
-void BattlegroundIC::EventPlayerDamagedGO(Player* /*plr*/, GameObject* /*go*/, uint32 /*eventType*/)
+void BattlegroundIC::EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/)
{
}
@@ -903,7 +903,7 @@ Transport* BattlegroundIC::CreateTransport(uint32 goEntry, uint32 period)
{
Transport* t = new Transport(period, 0);
- const GameObjectTemplate* goinfo = sObjectMgr->GetGameObjectTemplate(goEntry);
+ GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(goEntry);
if (!goinfo)
{
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
index efa91559ca6..90f39a61e12 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -93,7 +93,6 @@ enum gameobjectsIC
GO_FLAGPOLE_1 = 195131,
GO_FLAGPOLE_2 = 195439,
- GO_FLAGPOLE_3 = 195131,
GO_GUNSHIP_PORTAL_1 = 195371,
GO_GUNSHIP_PORTAL_2 = 196413,
@@ -270,6 +269,7 @@ enum BG_IC_GOs
BG_IC_GO_FLAGPOLE_1_3,
BG_IC_GO_FLAGPOLE_1_4,
BG_IC_GO_FLAGPOLE_1_5,
+ BG_IC_GO_FLAGPOLE_1_6,
BG_IC_GO_HANGAR_BANNER,
@@ -624,6 +624,7 @@ const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
{BG_IC_GO_FLAGPOLE_1_3, GO_FLAGPOLE_1, 807.78f, -1000.07f, 132.381f, -1.91986f}, // Flagpole
{BG_IC_GO_FLAGPOLE_1_4, GO_FLAGPOLE_1, 776.229f, -804.283f, 6.45052f, 1.6057f}, // Flagpole
{BG_IC_GO_FLAGPOLE_1_5, GO_FLAGPOLE_1, 251.016f, -1159.32f, 17.2376f, -2.25147f}, // Flagpole
+ {BG_IC_GO_FLAGPOLE_1_6, GO_FLAGPOLE_1, 1269.502f, -400.809f, 37.62525f, -1.762782f}, // Flagpole
{BG_IC_GO_HORDE_KEEP_PORTCULLIS, GO_HORDE_KEEP_PORTCULLIS, 1283.05f, -765.878f, 50.8297f, -3.13286f}, // Horde Keep Portcullis
@@ -862,12 +863,12 @@ class BattlegroundIC : public Battleground
~BattlegroundIC();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
virtual void PostUpdateImpl(uint32 diff);
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
void SpawnLeader(uint32 teamid);
@@ -876,7 +877,7 @@ class BattlegroundIC : public Battleground
void EndBattleground(uint32 winner);
void EventPlayerClickedOnFlag(Player* source, GameObject* /*target_obj*/);
- void EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint32 eventType);
+ void EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType);
void DestroyGate(Player* player, GameObject* go);
virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
index 58dc20c30cb..cee8cb2b4da 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -59,18 +59,18 @@ void BattlegroundNA::StartingEventOpenDoors()
SpawnBGObject(i, 60);
}
-void BattlegroundNA::AddPlayer(Player* plr)
+void BattlegroundNA::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundNAScore* sc = new BattlegroundNAScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
UpdateArenaWorldState();
}
-void BattlegroundNA::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundNA::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
if (GetStatus() == STATUS_WAIT_LEAVE)
return;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
index beddbaaeedf..53c0faf1c6f 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -56,16 +56,16 @@ class BattlegroundNA : public Battleground
~BattlegroundNA();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket &d);
void HandleKillPlayer(Player* player, Player* killer);
- bool HandlePlayerUnderMap(Player* plr);
+ bool HandlePlayerUnderMap(Player* player);
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRB.cpp
index e2d64aa39f7..c304c194a71 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRB.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -43,16 +43,16 @@ void BattlegroundRB::StartingEventOpenDoors()
{
}
-void BattlegroundRB::AddPlayer(Player* plr)
+void BattlegroundRB::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundRBScore* sc = new BattlegroundRBScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
}
-void BattlegroundRB::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundRB::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRB.h b/src/server/game/Battlegrounds/Zones/BattlegroundRB.h
index 0878654d7dd..cda1351ca12 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRB.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRB.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -34,11 +34,11 @@ class BattlegroundRB : public Battleground
BattlegroundRB();
~BattlegroundRB();
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
/* Scorekeeping */
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
index 8ede4a6329c..f1602507cc1 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -59,18 +59,18 @@ void BattlegroundRL::StartingEventOpenDoors()
SpawnBGObject(i, 60);
}
-void BattlegroundRL::AddPlayer(Player* plr)
+void BattlegroundRL::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundRLScore* sc = new BattlegroundRLScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
UpdateArenaWorldState();
}
-void BattlegroundRL::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundRL::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
if (GetStatus() == STATUS_WAIT_LEAVE)
return;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
index 52ce7d3ca40..dc041a18a1c 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -52,16 +52,16 @@ class BattlegroundRL : public Battleground
~BattlegroundRL();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket &d);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
void HandleKillPlayer(Player* player, Player* killer);
- bool HandlePlayerUnderMap(Player* plr);
+ bool HandlePlayerUnderMap(Player* player);
};
#endif
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
index 81a75c23cb5..539419d6c50 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -102,19 +102,19 @@ void BattlegroundRV::StartingEventOpenDoors()
setTimer(BG_RV_FIRST_TIMER);
}
-void BattlegroundRV::AddPlayer(Player* plr)
+void BattlegroundRV::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundRVScore* sc = new BattlegroundRVScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
UpdateWorldState(BG_RV_WORLD_STATE_A, GetAlivePlayersCountByTeam(ALLIANCE));
UpdateWorldState(BG_RV_WORLD_STATE_H, GetAlivePlayersCountByTeam(HORDE));
}
-void BattlegroundRV::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundRV::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
if (GetStatus() == STATUS_WAIT_LEAVE)
return;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h
index 9a6efe64524..4f99af268db 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -105,17 +105,17 @@ class BattlegroundRV : public Battleground
~BattlegroundRV();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket &d);
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
bool SetupBattleground();
void HandleKillPlayer(Player* player, Player* killer);
- bool HandlePlayerUnderMap(Player* plr);
+ bool HandlePlayerUnderMap(Player* player);
private:
uint32 Timer;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index c214ac21068..5ee1a7bcc58 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -62,8 +62,8 @@ bool BattlegroundSA::SetupBattleground()
bool BattlegroundSA::ResetObjs()
{
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
- SendTransportsRemove(plr);
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
+ SendTransportsRemove(player);
uint32 atF = BG_SA_Factions[Attackers];
uint32 defF = BG_SA_Factions[Attackers ? TEAM_ALLIANCE : TEAM_HORDE];
@@ -245,8 +245,8 @@ bool BattlegroundSA::ResetObjs()
for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++)
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
- SendTransportInit(plr);
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
+ SendTransportInit(player);
TeleportPlayers();
return true;
@@ -431,39 +431,39 @@ void BattlegroundSA::FillInitialWorldStates(WorldPacket& data)
data << uint32(BG_SA_LEFT_ATT_TOKEN_ALL) << ally_attacks;
}
-void BattlegroundSA::AddPlayer(Player* plr)
+void BattlegroundSA::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundSAScore* sc = new BattlegroundSAScore;
if (!ShipsStarted)
{
- if (plr->GetTeamId() == Attackers)
+ if (player->GetTeamId() == Attackers)
{
- plr->CastSpell(plr, 12438, true);//Without this player falls before boat loads...
+ player->CastSpell(player, 12438, true);//Without this player falls before boat loads...
if (urand(0, 1))
- plr->TeleportTo(607, 2682.936f, -830.368f, 50.0f, 2.895f, 0);
+ player->TeleportTo(607, 2682.936f, -830.368f, 50.0f, 2.895f, 0);
else
- plr->TeleportTo(607, 2577.003f, 980.261f, 50.0f, 0.807f, 0);
+ player->TeleportTo(607, 2577.003f, 980.261f, 50.0f, 0.807f, 0);
}
else
- plr->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
+ player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
}
else
{
- if (plr->GetTeamId() == Attackers)
- plr->TeleportTo(607, 1600.381f, -106.263f, 8.8745f, 3.78f, 0);
+ if (player->GetTeamId() == Attackers)
+ player->TeleportTo(607, 1600.381f, -106.263f, 8.8745f, 3.78f, 0);
else
- plr->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
+ player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
}
- SendTransportInit(plr);
- m_PlayerScores[plr->GetGUID()] = sc;
+ SendTransportInit(player);
+ m_PlayerScores[player->GetGUID()] = sc;
}
-void BattlegroundSA::RemovePlayer(Player* /*plr*/, uint64 /*guid*/, uint32 /*team*/)
+void BattlegroundSA::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/)
{
}
@@ -492,37 +492,37 @@ void BattlegroundSA::TeleportPlayers()
{
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
{
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
{
// should remove spirit of redemption
- if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
- plr->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
+ if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
+ player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
- if (!plr->isAlive())
+ if (!player->isAlive())
{
- plr->ResurrectPlayer(1.0f);
- plr->SpawnCorpseBones();
+ player->ResurrectPlayer(1.0f);
+ player->SpawnCorpseBones();
}
- plr->ResetAllPowers();
- plr->CombatStopWithPets(true);
+ player->ResetAllPowers();
+ player->CombatStopWithPets(true);
- if (plr->GetTeamId() == Attackers)
+ if (player->GetTeamId() == Attackers)
{
- plr->CastSpell(plr, 12438, true); //Without this player falls before boat loads...
+ player->CastSpell(player, 12438, true); //Without this player falls before boat loads...
if (urand(0, 1))
- plr->TeleportTo(607, 2682.936f, -830.368f, 50.0f, 2.895f, 0);
+ player->TeleportTo(607, 2682.936f, -830.368f, 50.0f, 2.895f, 0);
else
- plr->TeleportTo(607, 2577.003f, 980.261f, 50.0f, 0.807f, 0);
+ player->TeleportTo(607, 2577.003f, 980.261f, 50.0f, 0.807f, 0);
}
else
- plr->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
+ player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0);
}
}
}
-void BattlegroundSA::EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint32 eventType)
+void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType)
{
if (!go || !go->GetGOInfo())
return;
@@ -783,7 +783,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source)
void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
{
- if (object->GetEntry() == BG_SA_ObjEntries[BG_SA_TITAN_RELIC] && GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED)
+ if (object->GetEntry() == BG_SA_ObjEntries[BG_SA_TITAN_RELIC] && GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED && GateStatus[BG_SA_YELLOW_GATE] == BG_SA_GATE_DESTROYED && (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) && (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED))
{
if (Source->GetTeamId() == Attackers)
{
@@ -798,9 +798,9 @@ void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
//Achievement Storm the Beach (1310)
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
{
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
- if (plr->GetTeamId() == Attackers)
- plr->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
+ if (player->GetTeamId() == Attackers)
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
}
Attackers = (Attackers == TEAM_ALLIANCE) ? TEAM_HORDE : TEAM_ALLIANCE;
@@ -822,9 +822,9 @@ void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
//Achievement Storm the Beach (1310)
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
{
- if (Player* plr = ObjectAccessor::FindPlayer(itr->first))
- if (plr->GetTeamId() == Attackers && RoundScores[1].winner == Attackers)
- plr->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
+ if (Player* player = ObjectAccessor::FindPlayer(itr->first))
+ if (player->GetTeamId() == Attackers && RoundScores[1].winner == Attackers)
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 65246);
}
if (RoundScores[0].time == RoundScores[1].time)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
index 5f01d0fac4d..76a772ff978 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -423,7 +423,7 @@ class BattlegroundSA : public Battleground
/* inherited from BattlegroundClass */
/// Called when a player join battle
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
/// Called when battle start
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
@@ -433,7 +433,7 @@ class BattlegroundSA : public Battleground
/// Called for generate packet contain worldstate data
virtual void FillInitialWorldStates(WorldPacket& data);
/// Called when a player deal damage to building (door)
- virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint32 eventType);
+ virtual void EventPlayerDamagedGO(Player* player, GameObject* go, uint32 eventType);
/// Called when a player kill a unit in bg
virtual void HandleKillUnit(Creature* unit, Player* killer);
/// Return the nearest graveyard where player can respawn
@@ -477,7 +477,7 @@ class BattlegroundSA : public Battleground
void EndBattleground(uint32 winner);
/// CAlled when a player leave battleground
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
/* Scorekeeping */
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
index 951fe8f6b51..226bf172a09 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -140,23 +140,23 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff)
m_FlagSpellForceTimer += diff;
if (m_FlagDebuffState == 0 && m_FlagSpellForceTimer >= 600000) //10 minutes
{
- if (Player* plr = ObjectAccessor::FindPlayer(m_FlagKeepers[0]))
- plr->CastSpell(plr, WS_SPELL_FOCUSED_ASSAULT, true);
- if (Player* plr = ObjectAccessor::FindPlayer(m_FlagKeepers[1]))
- plr->CastSpell(plr, WS_SPELL_FOCUSED_ASSAULT, true);
+ if (Player* player = ObjectAccessor::FindPlayer(m_FlagKeepers[0]))
+ player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
+ if (Player* player = ObjectAccessor::FindPlayer(m_FlagKeepers[1]))
+ player->CastSpell(player, WS_SPELL_FOCUSED_ASSAULT, true);
m_FlagDebuffState = 1;
}
else if (m_FlagDebuffState == 1 && m_FlagSpellForceTimer >= 900000) //15 minutes
{
- if (Player* plr = ObjectAccessor::FindPlayer(m_FlagKeepers[0]))
+ if (Player* player = ObjectAccessor::FindPlayer(m_FlagKeepers[0]))
{
- plr->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
- plr->CastSpell(plr, WS_SPELL_BRUTAL_ASSAULT, true);
+ player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
+ player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
}
- if (Player* plr = ObjectAccessor::FindPlayer(m_FlagKeepers[1]))
+ if (Player* player = ObjectAccessor::FindPlayer(m_FlagKeepers[1]))
{
- plr->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
- plr->CastSpell(plr, WS_SPELL_BRUTAL_ASSAULT, true);
+ player->RemoveAurasDueToSpell(WS_SPELL_FOCUSED_ASSAULT);
+ player->CastSpell(player, WS_SPELL_BRUTAL_ASSAULT, true);
}
m_FlagDebuffState = 2;
}
@@ -202,13 +202,13 @@ void BattlegroundWS::StartingEventOpenDoors()
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, WS_EVENT_START_BATTLE);
}
-void BattlegroundWS::AddPlayer(Player* plr)
+void BattlegroundWS::AddPlayer(Player* player)
{
- Battleground::AddPlayer(plr);
+ Battleground::AddPlayer(player);
//create score and add it to map, default values are set in constructor
BattlegroundWGScore* sc = new BattlegroundWGScore;
- m_PlayerScores[plr->GetGUID()] = sc;
+ m_PlayerScores[player->GetGUID()] = sc;
}
void BattlegroundWS::RespawnFlag(uint32 Team, bool captured)
@@ -556,30 +556,30 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* Source, GameObject* target
Source->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT);
}
-void BattlegroundWS::RemovePlayer(Player* plr, uint64 guid, uint32 /*team*/)
+void BattlegroundWS::RemovePlayer(Player* player, uint64 guid, uint32 /*team*/)
{
// sometimes flag aura not removed :(
if (IsAllianceFlagPickedup() && m_FlagKeepers[BG_TEAM_ALLIANCE] == guid)
{
- if (!plr)
+ if (!player)
{
sLog->outError("BattlegroundWS: Removing offline player who has the FLAG!!");
this->SetAllianceFlagPicker(0);
this->RespawnFlag(ALLIANCE, false);
}
else
- this->EventPlayerDroppedFlag(plr);
+ this->EventPlayerDroppedFlag(player);
}
if (IsHordeFlagPickedup() && m_FlagKeepers[BG_TEAM_HORDE] == guid)
{
- if (!plr)
+ if (!player)
{
sLog->outError("BattlegroundWS: Removing offline player who has the FLAG!!");
this->SetHordeFlagPicker(0);
this->RespawnFlag(HORDE, false);
}
else
- this->EventPlayerDroppedFlag(plr);
+ this->EventPlayerDroppedFlag(player);
}
}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
index 386cc6945e8..063d04253a5 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -163,7 +163,7 @@ class BattlegroundWS : public Battleground
~BattlegroundWS();
/* inherited from BattlegroundClass */
- virtual void AddPlayer(Player* plr);
+ virtual void AddPlayer(Player* player);
virtual void StartingEventCloseDoors();
virtual void StartingEventOpenDoors();
@@ -187,7 +187,7 @@ class BattlegroundWS : public Battleground
virtual void EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj);
virtual void EventPlayerCapturedFlag(Player* Source);
- void RemovePlayer(Player* plr, uint64 guid, uint32 team);
+ void RemovePlayer(Player* player, uint64 guid, uint32 team);
void HandleAreaTrigger(Player* Source, uint32 Trigger);
void HandleKillPlayer(Player* player, Player* killer);
bool SetupBattleground();
diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt
index 65ba16007d4..117a8f680ee 100644
--- a/src/server/game/CMakeLists.txt
+++ b/src/server/game/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/game/Calendar/Calendar.cpp b/src/server/game/Calendar/Calendar.cpp
index e31f2763d23..2c4ad943dd6 100755
--- a/src/server/game/Calendar/Calendar.cpp
+++ b/src/server/game/Calendar/Calendar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Calendar/Calendar.h b/src/server/game/Calendar/Calendar.h
index 2aa0ad65640..dfc88e477f9 100755
--- a/src/server/game/Calendar/Calendar.h
+++ b/src/server/game/Calendar/Calendar.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index 413070ca1de..b6e9dd30d28 100755
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -55,7 +55,7 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team)
// If storing custom channels in the db is enabled either load or save the channel
if (sWorld->getBoolConfig(CONFIG_PRESERVE_CUSTOM_CHANNELS))
{
- PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_CHANNEL);
+ PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHANNEL);
stmt->setString(0, name);
stmt->setUInt32(1, m_Team);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -85,7 +85,7 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team)
}
else // save
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CHANNEL);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHANNEL);
stmt->setString(0, name);
stmt->setUInt32(1, m_Team);
CharacterDatabase.Execute(stmt);
@@ -108,7 +108,7 @@ void Channel::UpdateChannelInDB() const
std::string banListStr = banlist.str();
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_CHANNEL);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL);
stmt->setBool(0, m_announce);
stmt->setBool(1, m_ownership);
stmt->setString(2, m_password);
@@ -124,7 +124,7 @@ void Channel::UpdateChannelInDB() const
void Channel::UpdateChannelUseageInDB() const
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_CHANNEL_USAGE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_USAGE);
stmt->setString(0, m_name);
stmt->setUInt32(1, m_Team);
CharacterDatabase.Execute(stmt);
@@ -169,22 +169,22 @@ void Channel::Join(uint64 p, const char *pass)
return;
}
- Player* plr = ObjectAccessor::FindPlayer(p);
+ Player* player = ObjectAccessor::FindPlayer(p);
- if (plr)
+ if (player)
{
if (HasFlag(CHANNEL_FLAG_LFG) &&
- sWorld->getBoolConfig(CONFIG_RESTRICTED_LFG_CHANNEL) && AccountMgr::IsPlayerAccount(plr->GetSession()->GetSecurity()) && plr->GetGroup())
+ sWorld->getBoolConfig(CONFIG_RESTRICTED_LFG_CHANNEL) && AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) && player->GetGroup())
{
MakeNotInLfg(&data);
SendToOne(&data, p);
return;
}
- plr->JoinedChannel(this);
+ player->JoinedChannel(this);
}
- if (m_announce && (!plr || !AccountMgr::IsGMAccount(plr->GetSession()->GetSecurity()) || !sWorld->getBoolConfig(CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL)))
+ if (m_announce && (!player || !AccountMgr::IsGMAccount(player->GetSession()->GetSecurity()) || !sWorld->getBoolConfig(CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL)))
{
MakeJoined(&data, p);
SendToAll(&data);
@@ -231,22 +231,22 @@ void Channel::Leave(uint64 p, bool send)
}
else
{
- Player* plr = ObjectAccessor::FindPlayer(p);
+ Player* player = ObjectAccessor::FindPlayer(p);
if (send)
{
WorldPacket data;
MakeYouLeft(&data);
SendToOne(&data, p);
- if (plr)
- plr->LeftChannel(this);
+ if (player)
+ player->LeftChannel(this);
data.clear();
}
bool changeowner = players[p].IsOwner();
players.erase(p);
- if (m_announce && (!plr || !AccountMgr::IsGMAccount(plr->GetSession()->GetSecurity()) || !sWorld->getBoolConfig(CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL)))
+ if (m_announce && (!player || !AccountMgr::IsGMAccount(player->GetSession()->GetSecurity()) || !sWorld->getBoolConfig(CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL)))
{
WorldPacket data;
MakeLeft(&data, p);
@@ -310,18 +310,22 @@ void Channel::KickOrBan(uint64 good, const char *badname, bool ban)
bool changeowner = (m_ownerGUID == bad->GetGUID());
WorldPacket data;
+ bool notify = !(AccountMgr::IsGMAccount(sec) && sWorld->getBoolConfig(CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL));
if (ban && !IsBanned(bad->GetGUID()))
{
banned.insert(bad->GetGUID());
- MakePlayerBanned(&data, bad->GetGUID(), good);
-
UpdateChannelInDB();
+
+ if (notify)
+ MakePlayerBanned(&data, bad->GetGUID(), good);
}
- else
+ else if (notify)
MakePlayerKicked(&data, bad->GetGUID(), good);
- SendToAll(&data);
+ if (notify)
+ SendToAll(&data);
+
players.erase(bad->GetGUID());
bad->LeftChannel(this);
@@ -379,11 +383,11 @@ void Channel::UnBan(uint64 good, const char *badname)
void Channel::Password(uint64 p, const char *pass)
{
uint32 sec = 0;
- Player* plr = ObjectAccessor::FindPlayer(p);
- if (plr)
- sec = plr->GetSession()->GetSecurity();
+ Player* player = ObjectAccessor::FindPlayer(p);
+ if (player)
+ sec = player->GetSession()->GetSecurity();
- ChatHandler chat(plr);
+ ChatHandler chat(player);
if (!IsOn(p))
{
@@ -411,11 +415,11 @@ void Channel::Password(uint64 p, const char *pass)
void Channel::SetMode(uint64 p, const char *p2n, bool mod, bool set)
{
- Player* plr = ObjectAccessor::FindPlayer(p);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(p);
+ if (!player)
return;
- uint32 sec = plr->GetSession()->GetSecurity();
+ uint32 sec = player->GetSession()->GetSecurity();
if (!IsOn(p))
{
@@ -453,8 +457,8 @@ void Channel::SetMode(uint64 p, const char *p2n, bool mod, bool set)
// allow make moderator from another team only if both is GMs
// at this moment this only way to show channel post for GM from another team
- if ((!AccountMgr::IsGMAccount(plr->GetSession()->GetSecurity()) || !AccountMgr::IsGMAccount(newp->GetSession()->GetSecurity())) &&
- plr->GetTeam() != newp->GetTeam() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
+ if ((!AccountMgr::IsGMAccount(player->GetSession()->GetSecurity()) || !AccountMgr::IsGMAccount(newp->GetSession()->GetSecurity())) &&
+ player->GetTeam() != newp->GetTeam() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
{
WorldPacket data;
MakePlayerNotFound(&data, p2n);
@@ -479,11 +483,11 @@ void Channel::SetMode(uint64 p, const char *p2n, bool mod, bool set)
void Channel::SetOwner(uint64 p, const char *newname)
{
- Player* plr = ObjectAccessor::FindPlayer(p);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(p);
+ if (!player)
return;
- uint32 sec = plr->GetSession()->GetSecurity();
+ uint32 sec = player->GetSession()->GetSecurity();
if (!IsOn(p))
{
@@ -510,7 +514,7 @@ void Channel::SetOwner(uint64 p, const char *newname)
return;
}
- if (newp->GetTeam() != plr->GetTeam() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
+ if (newp->GetTeam() != player->GetTeam() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
{
WorldPacket data;
MakePlayerNotFound(&data, newname);
@@ -563,12 +567,12 @@ void Channel::List(Player* player)
uint32 count = 0;
for (PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
{
- Player* plr = ObjectAccessor::FindPlayer(i->first);
+ Player* member = ObjectAccessor::FindPlayer(i->first);
// PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
- if (plr && (!AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) || plr->GetSession()->GetSecurity() <= AccountTypes(gmLevelInWhoList)) &&
- plr->IsVisibleGloballyFor(player))
+ if (member && (!AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) || member->GetSession()->GetSecurity() <= AccountTypes(gmLevelInWhoList)) &&
+ member->IsVisibleGloballyFor(player))
{
data << uint64(i->first);
data << uint8(i->second.flags); // flags seems to be changed...
@@ -585,9 +589,9 @@ void Channel::List(Player* player)
void Channel::Announce(uint64 p)
{
uint32 sec = 0;
- Player* plr = ObjectAccessor::FindPlayer(p);
- if (plr)
- sec = plr->GetSession()->GetSecurity();
+ Player* player = ObjectAccessor::FindPlayer(p);
+ if (player)
+ sec = player->GetSession()->GetSecurity();
if (!IsOn(p))
{
@@ -623,7 +627,7 @@ void Channel::Say(uint64 p, const char *what, uint32 lang)
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
lang = LANG_UNIVERSAL;
- Player* plr = ObjectAccessor::FindPlayer(p);
+ Player* player = ObjectAccessor::FindPlayer(p);
if (!IsOn(p))
{
@@ -650,7 +654,7 @@ void Channel::Say(uint64 p, const char *what, uint32 lang)
data << p;
data << messageLength;
data << what;
- data << uint8(plr ? plr->chatTag() : 0);
+ data << uint8(player ? player->GetChatTag() : 0);
SendToAll(&data, !players[p].IsModerator() ? p : false);
}
@@ -683,11 +687,11 @@ void Channel::Invite(uint64 p, const char *newname)
return;
}
- Player* plr = ObjectAccessor::FindPlayer(p);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(p);
+ if (!player)
return;
- if (newp->GetTeam() != plr->GetTeam() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
+ if (newp->GetTeam() != player->GetTeam() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
{
WorldPacket data;
MakeInviteWrongFaction(&data);
@@ -749,11 +753,11 @@ void Channel::SendToAll(WorldPacket* data, uint64 p)
{
for (PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
{
- Player* plr = ObjectAccessor::FindPlayer(i->first);
- if (plr)
+ Player* player = ObjectAccessor::FindPlayer(i->first);
+ if (player)
{
- if (!p || !plr->GetSocial()->HasIgnore(GUID_LOPART(p)))
- plr->GetSession()->SendPacket(data);
+ if (!p || !player->GetSocial()->HasIgnore(GUID_LOPART(p)))
+ player->GetSession()->SendPacket(data);
}
}
}
@@ -764,18 +768,18 @@ void Channel::SendToAllButOne(WorldPacket* data, uint64 who)
{
if (i->first != who)
{
- Player* plr = ObjectAccessor::FindPlayer(i->first);
- if (plr)
- plr->GetSession()->SendPacket(data);
+ Player* player = ObjectAccessor::FindPlayer(i->first);
+ if (player)
+ player->GetSession()->SendPacket(data);
}
}
}
void Channel::SendToOne(WorldPacket* data, uint64 who)
{
- Player* plr = ObjectAccessor::FindPlayer(who);
- if (plr)
- plr->GetSession()->SendPacket(data);
+ Player* player = ObjectAccessor::FindPlayer(who);
+ if (player)
+ player->GetSession()->SendPacket(data);
}
void Channel::Voice(uint64 /*guid1*/, uint64 /*guid2*/)
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index 8ce13a6afa1..9564dbb381e 100755
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 651e5d15647..75436e1eb5f 100755
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index f46f8d360c1..ac030ffb73f 100755
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 8d03530c7f9..91ccb42f1d0 100755
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -303,29 +303,29 @@ ChatCommand* ChatHandler::getCommandTable()
static ChatCommand ticketResponseCommandTable[] =
{
- { "append", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketResponseAppendCommand>, "", NULL },
- { "appendln", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketResponseAppendLnCommand>, "", NULL },
+ { "append", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketResponseAppendCommand>, "", NULL },
+ { "appendln", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketResponseAppendLnCommand>, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand ticketCommandTable[] =
{
- { "list", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketListCommand>, "", NULL },
- { "onlinelist", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketListOnlineCommand>, "", NULL },
- { "viewname", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketGetByNameCommand>, "", NULL },
- { "viewid", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketGetByIdCommand>, "", NULL },
- { "close", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketCloseByIdCommand>, "", NULL },
- { "closedlist", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketListClosedCommand>, "", NULL },
- { "escalatedlist", SEC_GAMEMASTER, false, OldHandler<&ChatHandler::HandleGMTicketListEscalatedCommand>, "", NULL },
- { "delete", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleGMTicketDeleteByIdCommand>, "", NULL },
- { "reset", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleGMTicketResetCommand>, "", NULL },
- { "assign", SEC_GAMEMASTER, false, OldHandler<&ChatHandler::HandleGMTicketAssignToCommand>, "", NULL },
- { "unassign", SEC_GAMEMASTER, false, OldHandler<&ChatHandler::HandleGMTicketUnAssignCommand>, "", NULL },
- { "comment", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketCommentCommand>, "", NULL },
- { "togglesystem", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleToggleGMTicketSystem>, "", NULL },
- { "escalate", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketEscalateCommand>, "", NULL },
- { "response", SEC_MODERATOR, false, NULL, "", ticketResponseCommandTable },
- { "complete", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleGMTicketCompleteCommand>, "", NULL },
+ { "list", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketListCommand>, "", NULL },
+ { "onlinelist", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketListOnlineCommand>, "", NULL },
+ { "viewname", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketGetByNameCommand>, "", NULL },
+ { "viewid", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketGetByIdCommand>, "", NULL },
+ { "close", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketCloseByIdCommand>, "", NULL },
+ { "closedlist", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketListClosedCommand>, "", NULL },
+ { "escalatedlist", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleGMTicketListEscalatedCommand>, "", NULL },
+ { "delete", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleGMTicketDeleteByIdCommand>, "", NULL },
+ { "reset", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleGMTicketResetCommand>, "", NULL },
+ { "assign", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleGMTicketAssignToCommand>, "", NULL },
+ { "unassign", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleGMTicketUnAssignCommand>, "", NULL },
+ { "comment", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketCommentCommand>, "", NULL },
+ { "togglesystem", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleToggleGMTicketSystem>, "", NULL },
+ { "escalate", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketEscalateCommand>, "", NULL },
+ { "response", SEC_MODERATOR, true, NULL, "", ticketResponseCommandTable },
+ { "complete", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketCompleteCommand>, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
@@ -1051,7 +1051,7 @@ void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint
*data << uint32(messageLength);
*data << message;
if (session != 0 && type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
- *data << uint8(session->GetPlayer()->chatTag());
+ *data << uint8(session->GetPlayer()->GetChatTag());
else
*data << uint8(0);
}
@@ -1224,7 +1224,7 @@ GameObject* ChatHandler::GetNearbyGameObject()
GameObject* obj = NULL;
Trinity::NearestGameObjectCheck check(*pl);
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectCheck> searcher(pl, obj, check);
- pl->VisitNearbyGridObject(999, searcher);
+ pl->VisitNearbyGridObject(SIZE_OF_GRIDS, searcher);
return obj;
}
@@ -1240,15 +1240,14 @@ GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid
if (!obj && sObjectMgr->GetGOData(lowguid)) // guid is DB guid of object
{
// search near player then
- CellPair p(Trinity::ComputeCellPair(pl->GetPositionX(), pl->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(pl->GetPositionX(), pl->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::GameObjectWithDbGUIDCheck go_check(*pl, lowguid);
Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(pl, obj, go_check);
TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > object_checker(checker);
- cell.Visit(p, object_checker, *pl->GetMap());
+ cell.Visit(p, object_checker, *pl->GetMap(), *pl, pl->GetGridActivationRange());
}
return obj;
@@ -1552,9 +1551,9 @@ bool CliHandler::needReportToTarget(Player* /*chr*/) const
return true;
}
-bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline)
+bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &player, Group* &group, uint64 &guid, bool offline)
{
- plr = NULL;
+ player = NULL;
guid = 0;
if (cname)
@@ -1569,28 +1568,28 @@ bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, G
return false;
}
- plr = sObjectAccessor->FindPlayerByName(name.c_str());
+ player = sObjectAccessor->FindPlayerByName(name.c_str());
if (offline)
guid = sObjectMgr->GetPlayerGUIDByName(name.c_str());
}
}
- if (plr)
+ if (player)
{
- group = plr->GetGroup();
+ group = player->GetGroup();
if (!guid || !offline)
- guid = plr->GetGUID();
+ guid = player->GetGUID();
}
else
{
if (getSelectedPlayer())
- plr = getSelectedPlayer();
+ player = getSelectedPlayer();
else
- plr = m_session->GetPlayer();
+ player = m_session->GetPlayer();
if (!guid || !offline)
- guid = plr->GetGUID();
- group = plr->GetGroup();
+ guid = player->GetGUID();
+ group = player->GetGroup();
}
return true;
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 6e34e39af5a..2311f4b8e5e 100755
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -109,7 +109,7 @@ class ChatHandler
uint32 extractSpellIdFromLink(char* text);
uint64 extractGuidFromLink(char* text);
GameTele const* extractGameTeleFromLink(char* text);
- bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline = false);
+ bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &player, Group* &group, uint64 &guid, bool offline = false);
std::string extractPlayerNameFromLink(char* text);
// select by arg (name/link) or in-game selection online/offline player
bool extractPlayerTarget(char* args, Player** player, uint64* player_guid = NULL, std::string* player_name = NULL);
@@ -154,8 +154,8 @@ class ChatHandler
bool HandleCastTargetCommand(const char *args);
bool HandleCastDestCommand(const char *args);
- bool HandleCharacterCustomizeCommand(const char * args);
- bool HandleCharacterChangeFactionCommand(const char * args);
+ bool HandleCharacterCustomizeCommand(const char* args);
+ bool HandleCharacterChangeFactionCommand(const char* args);
bool HandleCharacterChangeRaceCommand(const char * args);
bool HandleCharacterDeletedDeleteCommand(const char* args);
bool HandleCharacterDeletedListCommand(const char* args);
@@ -163,7 +163,7 @@ class ChatHandler
bool HandleCharacterDeletedOldCommand(const char* args);
bool HandleCharacterEraseCommand(const char* args);
bool HandleCharacterLevelCommand(const char* args);
- bool HandleCharacterRenameCommand(const char * args);
+ bool HandleCharacterRenameCommand(const char* args);
bool HandleCharacterReputationCommand(const char* args);
bool HandleCharacterTitlesCommand(const char* args);
@@ -215,9 +215,9 @@ class ChatHandler
bool HandleResetAllCommand(const char * args);
bool HandleResetHonorCommand(const char * args);
bool HandleResetLevelCommand(const char * args);
- bool HandleResetSpellsCommand(const char * args);
+ bool HandleResetSpellsCommand(const char* args);
bool HandleResetStatsCommand(const char * args);
- bool HandleResetTalentsCommand(const char * args);
+ bool HandleResetTalentsCommand(const char* args);
bool HandleSendItemsCommand(const char* args);
bool HandleSendMailCommand(const char* args);
@@ -355,7 +355,7 @@ class ChatHandler
bool HandleBanHelper(BanMode mode, char const* args);
bool HandleBanInfoHelper(uint32 accountid, char const* accountname);
bool HandleUnBanHelper(BanMode mode, char const* args);
- void HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel);
+ void HandleCharacterLevel(Player* player, uint64 playerGuid, uint32 oldLevel, uint32 newLevel);
void HandleLearnSkillRecipesHelper(Player* player, uint32 skill_id);
// Stores informations about a deleted character
diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp
index 26f63aa77ee..d26f937c43d 100644
--- a/src/server/game/Chat/ChatLink.cpp
+++ b/src/server/game/Chat/ChatLink.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h
index 4b27cab29d3..392d28aca54 100644
--- a/src/server/game/Chat/ChatLink.h
+++ b/src/server/game/Chat/ChatLink.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Chat/Commands/Level0.cpp b/src/server/game/Chat/Commands/Level0.cpp
index 338ad49463e..6d33a5761f4 100755
--- a/src/server/game/Chat/Commands/Level0.cpp
+++ b/src/server/game/Chat/Commands/Level0.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -84,8 +84,8 @@ bool ChatHandler::HandleStartCommand(const char* /*args*/)
bool ChatHandler::HandleServerInfoCommand(const char* /*args*/)
{
- uint32 PlayersNum = sWorld->GetPlayerCount();
- uint32 MaxPlayersNum = sWorld->GetMaxPlayerCount();
+ uint32 playersNum = sWorld->GetPlayerCount();
+ uint32 maxPlayersNum = sWorld->GetMaxPlayerCount();
uint32 activeClientsNum = sWorld->GetActiveSessionCount();
uint32 queuedClientsNum = sWorld->GetQueuedSessionCount();
uint32 maxActiveClientsNum = sWorld->GetMaxActiveSessionCount();
@@ -94,10 +94,13 @@ bool ChatHandler::HandleServerInfoCommand(const char* /*args*/)
uint32 updateTime = sWorld->GetUpdateTime();
SendSysMessage(_FULLVERSION);
- PSendSysMessage(LANG_CONNECTED_PLAYERS, PlayersNum, MaxPlayersNum);
+ PSendSysMessage(LANG_CONNECTED_PLAYERS, playersNum, maxPlayersNum);
PSendSysMessage(LANG_CONNECTED_USERS, activeClientsNum, maxActiveClientsNum, queuedClientsNum, maxQueuedClientsNum);
PSendSysMessage(LANG_UPTIME, uptime.c_str());
- PSendSysMessage("Update time diff: %u.", updateTime);
+ PSendSysMessage(LANG_UPDATE_DIFF, updateTime);
+ //! Can't use sWorld->ShutdownMsg here in case of console command
+ if (sWorld->IsShuttingDown())
+ PSendSysMessage(LANG_SHUTDOWN_TIMELEFT, secsToTimeString(sWorld->GetShutDownTimeLeft()).c_str());
return true;
}
@@ -119,7 +122,7 @@ bool ChatHandler::HandleDismountCommand(const char* /*args*/)
return false;
}
- m_session->GetPlayer()->Unmount();
+ m_session->GetPlayer()->Dismount();
m_session->GetPlayer()->RemoveAurasByType(SPELL_AURA_MOUNTED);
return true;
}
diff --git a/src/server/game/Chat/Commands/Level1.cpp b/src/server/game/Chat/Commands/Level1.cpp
index c737e2b0b54..57d5e8cfa94 100755
--- a/src/server/game/Chat/Commands/Level1.cpp
+++ b/src/server/game/Chat/Commands/Level1.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -713,18 +713,18 @@ bool ChatHandler::HandleGroupSummonCommand(const char* args)
for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pl = itr->getSource();
+ Player* player = itr->getSource();
- if (!pl || pl == m_session->GetPlayer() || !pl->GetSession())
+ if (!player || player == m_session->GetPlayer() || !player->GetSession())
continue;
// check online security
- if (HasLowerSecurity(pl, 0))
+ if (HasLowerSecurity(player, 0))
return false;
- std::string plNameLink = GetNameLink(pl);
+ std::string plNameLink = GetNameLink(player);
- if (pl->IsBeingTeleported() == true)
+ if (player->IsBeingTeleported() == true)
{
PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());
SetSentErrorMessage(true);
@@ -733,7 +733,7 @@ bool ChatHandler::HandleGroupSummonCommand(const char* args)
if (to_instance)
{
- Map* plMap = pl->GetMap();
+ Map* plMap = player->GetMap();
if (plMap->Instanceable() && plMap->GetInstanceId() != gmMap->GetInstanceId())
{
@@ -745,23 +745,23 @@ bool ChatHandler::HandleGroupSummonCommand(const char* args)
}
PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), "");
- if (needReportToTarget(pl))
- ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, GetNameLink().c_str());
+ if (needReportToTarget(player))
+ ChatHandler(player).PSendSysMessage(LANG_SUMMONED_BY, GetNameLink().c_str());
// stop flight if need
- if (pl->isInFlight())
+ if (player->isInFlight())
{
- pl->GetMotionMaster()->MovementExpired();
- pl->CleanupAfterTaxiFlight();
+ player->GetMotionMaster()->MovementExpired();
+ player->CleanupAfterTaxiFlight();
}
// save only in non-flight case
else
- pl->SaveRecallPosition();
+ player->SaveRecallPosition();
// before GM
float x, y, z;
- m_session->GetPlayer()->GetClosePoint(x, y, z, pl->GetObjectSize());
- pl->TeleportTo(m_session->GetPlayer()->GetMapId(), x, y, z, pl->GetOrientation());
+ m_session->GetPlayer()->GetClosePoint(x, y, z, player->GetObjectSize());
+ player->TeleportTo(m_session->GetPlayer()->GetMapId(), x, y, z, player->GetOrientation());
}
return true;
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index b4b0cff9ea7..2f04ebcf6bc 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -63,11 +63,11 @@ bool ChatHandler::HandleMuteCommand(const char* args)
if (!extractPlayerTarget(nameStr, &target, &target_guid, &target_name))
return false;
- uint32 account_id = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
+ uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
// find only player from same account if any
if (!target)
- if (WorldSession* session = sWorld->FindSession(account_id))
+ if (WorldSession* session = sWorld->FindSession(accountId))
target = session->GetPlayer();
uint32 notspeaktime = (uint32) atoi(delayStr);
@@ -76,21 +76,30 @@ bool ChatHandler::HandleMuteCommand(const char* args)
if (HasLowerSecurity (target, target_guid, true))
return false;
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);
+
if (target)
{
- //! Target is online, mute will be in effect right away.
- int64 mutetime = time(NULL) + notspeaktime * MINUTE;
- target->GetSession()->m_muteTime = mutetime;
- LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, account_id);
+ // Target is online, mute will be in effect right away.
+ int64 muteTime = time(NULL) + notspeaktime * MINUTE;
+ target->GetSession()->m_muteTime = muteTime;
+
+ stmt->setInt64(0, muteTime);
+
ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notspeaktime, mutereasonstr.c_str());
}
else
{
- //! Target is offline, mute will be in effect starting from the next login.
+ // Target is offline, mute will be in effect starting from the next login.
int32 muteTime = -int32(notspeaktime * MINUTE);
- LoginDatabase.PExecute("UPDATE account SET mutetime = %d WHERE id = %u", muteTime, account_id);
+
+ stmt->setInt64(0, muteTime);
}
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
std::string nameLink = playerLink(target_name);
PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notspeaktime, mutereasonstr.c_str());
@@ -107,11 +116,11 @@ bool ChatHandler::HandleUnmuteCommand(const char* args)
if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
return false;
- uint32 account_id = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
+ uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(target_guid);
// find only player from same account if any
if (!target)
- if (WorldSession* session = sWorld->FindSession(account_id))
+ if (WorldSession* session = sWorld->FindSession(accountId))
target = session->GetPlayer();
// must have strong lesser security level
@@ -130,7 +139,12 @@ bool ChatHandler::HandleUnmuteCommand(const char* args)
target->GetSession()->m_muteTime = 0;
}
- LoginDatabase.PExecute("UPDATE account SET mutetime = '0' WHERE id = '%u'", account_id);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);
+
+ stmt->setInt64(0, 0);
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
if (target)
ChatHandler(target).PSendSysMessage(LANG_YOUR_CHAT_ENABLED);
@@ -349,18 +363,18 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
std::string bannedby = "unknown";
std::string banreason = "";
- if (QueryResult result = LoginDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned "
+ if (QueryResult result2 = LoginDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned "
"WHERE id = '%u' AND active ORDER BY bandate ASC LIMIT 1", accId))
{
- Field* fields = result->Fetch();
+ Field* fields = result2->Fetch();
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
bannedby = fields[2].GetString();
banreason = fields[3].GetString();
}
- else if (QueryResult result = CharacterDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned "
+ else if (QueryResult result3 = CharacterDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned "
"WHERE guid = '%u' AND active ORDER BY bandate ASC LIMIT 1", GUID_LOPART(target_guid)))
{
- Field* fields = result->Fetch();
+ Field* fields = result3->Fetch();
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
bannedby = fields[2].GetString();
banreason = fields[3].GetString();
@@ -441,9 +455,9 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
bool ChatHandler::HandleCharacterRenameCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
if (target)
@@ -458,13 +472,19 @@ bool ChatHandler::HandleCharacterRenameCommand(const char* args)
else
{
// check offline security
- if (HasLowerSecurity(NULL, target_guid))
+ if (HasLowerSecurity(NULL, targetGuid))
return false;
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
+
+ PSendSysMessage(LANG_RENAME_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
- PSendSysMessage(LANG_RENAME_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", GUID_LOPART(target_guid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_RENAME));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ CharacterDatabase.Execute(stmt);
}
return true;
@@ -474,80 +494,102 @@ bool ChatHandler::HandleCharacterRenameCommand(const char* args)
bool ChatHandler::HandleCharacterCustomizeCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE));
+
if (target)
{
PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE);
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '8' WHERE guid = '%u'", target->GetGUIDLow());
+
+ stmt->setUInt32(1, target->GetGUIDLow());
}
else
{
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
- PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '8' WHERE guid = '%u'", GUID_LOPART(target_guid));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
}
+ CharacterDatabase.Execute(stmt);
+
return true;
}
-bool ChatHandler::HandleCharacterChangeFactionCommand(const char * args)
+bool ChatHandler::HandleCharacterChangeFactionCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
+ uint64 targetGuid;
+ std::string targetName;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_FACTION));
+
if (target)
{
- // TODO : add text into database
PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", target->GetGUIDLow());
+
+ stmt->setUInt32(1, target->GetGUIDLow());
}
else
{
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
- // TODO : add text into database
- PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", GUID_LOPART(target_guid));
+ PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
+
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
}
+ CharacterDatabase.Execute(stmt);
+
return true;
}
bool ChatHandler::HandleCharacterChangeRaceCommand(const char * args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_RACE));
+
if (target)
{
// TODO : add text into database
PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str());
target->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", target->GetGUIDLow());
+
+ stmt->setUInt32(1, target->GetGUIDLow());
}
else
{
- std::string oldNameLink = playerLink(target_name);
+ std::string oldNameLink = playerLink(targetName);
// TODO : add text into database
- PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(target_guid));
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", GUID_LOPART(target_guid));
+ PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
+
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
}
+ CharacterDatabase.Execute(stmt);
+
return true;
}
@@ -665,19 +707,31 @@ bool ChatHandler::HandleCombatStopCommand(const char* args)
bool ChatHandler::HandleLookupPlayerIpCommand(const char* args)
{
+ std::string ip;
+ int32 limit;
+ char* limit_str;
- if (!*args)
- return false;
+ Player *chr = getSelectedPlayer();
+ if (chr == NULL)
+ {
+ if (!*args)
+ return false;
- std::string ip = strtok ((char*)args, " ");
- char* limit_str = strtok (NULL, " ");
- int32 limit = limit_str ? atoi (limit_str) : -1;
+ ip = strtok ((char*)args, " ");
+ limit_str = strtok (NULL, " ");
+ limit = limit_str ? atoi (limit_str) : -1;
+ }
+ else
+ {
+ ip = chr->GetSession()->GetRemoteAddress();
+ limit = -1;
+ }
- LoginDatabase.EscapeString (ip);
+ LoginDatabase.EscapeString(ip);
- QueryResult result = LoginDatabase.PQuery ("SELECT id, username FROM account WHERE last_ip = '%s'", ip.c_str ());
+ QueryResult result = LoginDatabase.PQuery("SELECT id, username FROM account WHERE last_ip = '%s'", ip.c_str());
- return LookupPlayerSearchCommand (result, limit);
+ return LookupPlayerSearchCommand(result, limit);
}
bool ChatHandler::HandleLookupPlayerAccountCommand(const char* args)
@@ -861,10 +915,6 @@ bool ChatHandler::HandleCreatePetCommand(const char* /*args*/)
// Everything looks OK, create new pet
Pet* pet = new Pet(player, HUNTER_PET);
-
- if (!pet)
- return false;
-
if (!pet->CreateBaseAtCreature(creatureTarget))
{
delete pet;
@@ -912,8 +962,8 @@ bool ChatHandler::HandlePetLearnCommand(const char* args)
if (!*args)
return false;
- Player* plr = m_session->GetPlayer();
- Pet* pet = plr->GetPet();
+ Player* player = m_session->GetPlayer();
+ Pet* pet = player->GetPet();
if (!pet)
{
@@ -955,8 +1005,8 @@ bool ChatHandler::HandlePetUnlearnCommand(const char *args)
if (!*args)
return false;
- Player* plr = m_session->GetPlayer();
- Pet* pet = plr->GetPet();
+ Player* player = m_session->GetPlayer();
+ Pet* pet = player->GetPet();
if (!pet)
{
diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp
index e76cbfcc76b..d23a429471f 100755
--- a/src/server/game/Chat/Commands/Level3.cpp
+++ b/src/server/game/Chat/Commands/Level3.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -256,10 +256,10 @@ bool ChatHandler::HandleAddItemCommand(const char *args)
if (count == 0)
count = 1;
- Player* pl = m_session->GetPlayer();
+ Player* player = m_session->GetPlayer();
Player* plTarget = getSelectedPlayer();
if (!plTarget)
- plTarget = pl;
+ plTarget = player;
sLog->outDetail(GetTrinityString(LANG_ADDITEM), itemId, count);
@@ -298,15 +298,15 @@ bool ChatHandler::HandleAddItemCommand(const char *args)
Item* item = plTarget->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
// remove binding (let GM give it to another player later)
- if (pl == plTarget)
+ if (player == plTarget)
for (ItemPosCountVec::const_iterator itr = dest.begin(); itr != dest.end(); ++itr)
- if (Item* item1 = pl->GetItemByPos(itr->pos))
+ if (Item* item1 = player->GetItemByPos(itr->pos))
item1->SetBinding(false);
if (count > 0 && item)
{
- pl->SendNewItem(item, count, false, true);
- if (pl != plTarget)
+ player->SendNewItem(item, count, false, true);
+ if (player != plTarget)
plTarget->SendNewItem(item, count, true, false);
}
@@ -526,7 +526,7 @@ bool ChatHandler::HandleListItemCommand(const char *args)
"SELECT ah.itemguid, ah.itemowner, c.account, c.name FROM auctionhouse ah "
"INNER JOIN characters c ON c.guid = ah.itemowner "
"INNER JOIN item_instance ii ON ii.guid = ah.itemguid "
- "WHERE ii.itemEntry = '%u' AND LIMIT %u", item_id, count);
+ "WHERE ii.itemEntry = '%u' LIMIT %u", item_id, count);
}
else
result = QueryResult(NULL);
@@ -637,9 +637,9 @@ bool ChatHandler::HandleListObjectCommand(const char *args)
if (m_session)
{
- Player* pl = m_session->GetPlayer();
+ Player* player = m_session->GetPlayer();
result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, id, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
- pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), go_id, uint32(count));
+ player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), go_id, uint32(count));
}
else
result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, id FROM gameobject WHERE id = '%u' LIMIT %u",
@@ -709,9 +709,9 @@ bool ChatHandler::HandleListCreatureCommand(const char *args)
if (m_session)
{
- Player* pl = m_session->GetPlayer();
+ Player* player = m_session->GetPlayer();
result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM creature WHERE id = '%u' ORDER BY order_ ASC LIMIT %u",
- pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), cr_id, uint32(count));
+ player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), cr_id, uint32(count));
}
else
result = WorldDatabase.PQuery("SELECT guid, position_x, position_y, position_z, map FROM creature WHERE id = '%u' LIMIT %u",
@@ -1859,6 +1859,12 @@ bool ChatHandler::HandleDamageCommand(const char * args)
return false;
}
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ {
+ if (HasLowerSecurity((Player*)target, 0, false))
+ return false;
+ }
+
if (!target->isAlive())
return true;
@@ -2171,28 +2177,33 @@ bool ChatHandler::HandleHoverCommand(const char *args)
return true;
}
-void ChatHandler::HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel)
+void ChatHandler::HandleCharacterLevel(Player* player, uint64 playerGuid, uint32 oldLevel, uint32 newLevel)
{
if (player)
{
- player->GiveLevel(newlevel);
+ player->GiveLevel(newLevel);
player->InitTalentForLevel();
player->SetUInt32Value(PLAYER_XP, 0);
if (needReportToTarget(player))
{
- if (oldlevel == newlevel)
+ if (oldLevel == newLevel)
ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_PROGRESS_RESET, GetNameLink().c_str());
- else if (oldlevel < newlevel)
- ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_UP, GetNameLink().c_str(), newlevel);
+ else if (oldLevel < newLevel)
+ ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_UP, GetNameLink().c_str(), newLevel);
else // if (oldlevel > newlevel)
- ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_DOWN, GetNameLink().c_str(), newlevel);
+ ChatHandler(player).PSendSysMessage(LANG_YOURS_LEVEL_DOWN, GetNameLink().c_str(), newLevel);
}
}
else
{
- // update level and XP at level, all other will be updated at loading
- CharacterDatabase.PExecute("UPDATE characters SET level = '%u', xp = 0 WHERE guid = '%u'", newlevel, GUID_LOPART(player_guid));
+ // Update level and reset XP, everything else will be updated at login
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_LEVEL);
+
+ stmt->setUInt8(0, uint8(newLevel));
+ stmt->setUInt32(1, GUID_LOPART(playerGuid));
+
+ CharacterDatabase.Execute(stmt);
}
}
@@ -2556,12 +2567,12 @@ bool ChatHandler::HandleResetStatsCommand(const char * args)
return true;
}
-bool ChatHandler::HandleResetSpellsCommand(const char * args)
+bool ChatHandler::HandleResetSpellsCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
if (target)
@@ -2574,19 +2585,25 @@ bool ChatHandler::HandleResetSpellsCommand(const char * args)
}
else
{
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid = '%u'", uint32(AT_LOGIN_RESET_SPELLS), GUID_LOPART(target_guid));
- PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, target_name.c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_RESET_SPELLS));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ CharacterDatabase.Execute(stmt);
+
+ PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, targetName.c_str());
}
return true;
}
-bool ChatHandler::HandleResetTalentsCommand(const char * args)
+bool ChatHandler::HandleResetTalentsCommand(const char* args)
{
Player* target;
- uint64 target_guid;
- std::string target_name;
- if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
+ uint64 targetGuid;
+ std::string targetName;
+ if (!extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
{
// Try reset talents as Hunter Pet
Creature* creature = getSelectedCreature();
@@ -2624,11 +2641,16 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args)
target->SendTalentsInfoData(true);
return true;
}
- else if (target_guid)
+ else if (targetGuid)
{
- uint32 at_flags = AT_LOGIN_NONE | AT_LOGIN_RESET_PET_TALENTS;
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid = '%u'", at_flags, GUID_LOPART(target_guid));
- std::string nameLink = playerLink(target_name);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_NONE | AT_LOGIN_RESET_PET_TALENTS));
+ stmt->setUInt32(1, GUID_LOPART(targetGuid));
+
+ CharacterDatabase.Execute(stmt);
+
+ std::string nameLink = playerLink(targetName);
PSendSysMessage(LANG_RESET_TALENTS_OFFLINE, nameLink.c_str());
return true;
}
@@ -2669,9 +2691,13 @@ bool ChatHandler::HandleResetAllCommand(const char * args)
return false;
}
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE (at_login & '%u') = '0'", atLogin, atLogin);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ALL_AT_LOGIN_FLAGS);
+
+ stmt->setUInt16(0, uint16(atLogin));
+
+ CharacterDatabase.Execute(stmt);
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, *HashMapHolder<Player>::GetLock(), true);
+ TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
HashMapHolder<Player>::MapType const& plist = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = plist.begin(); itr != plist.end(); ++itr)
itr->second->SetAtLoginFlag(atLogin);
@@ -3086,7 +3112,7 @@ bool ChatHandler::HandleBanInfoCharacterCommand(const char *args)
if (!target)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_GUID_BY_NAME);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME);
stmt->setString(0, name);
PreparedQueryResult resultCharacter = CharacterDatabase.Query(stmt);
@@ -3101,7 +3127,7 @@ bool ChatHandler::HandleBanInfoCharacterCommand(const char *args)
else
target_guid = target->GetGUIDLow();
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_BANINFO);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_BANINFO);
stmt->setUInt32(0, target_guid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -3196,7 +3222,7 @@ bool ChatHandler::HandleBanListCharacterCommand(const char *args)
return false;
std::string filter(cFilter);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_GUID_BY_NAME_FILTER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME_FILTER);
stmt->setString(0, filter.c_str());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -3213,7 +3239,7 @@ bool ChatHandler::HandleBanListCharacterCommand(const char *args)
do
{
Field* fields = result->Fetch();
- PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_GET_BANNED_NAME);
+ PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_SEL_BANNED_NAME);
stmt2->setUInt32(0, fields[0].GetUInt32());
PreparedQueryResult banresult = CharacterDatabase.Query(stmt2);
if (banresult)
@@ -3235,7 +3261,7 @@ bool ChatHandler::HandleBanListCharacterCommand(const char *args)
std::string char_name = fields[1].GetString();
- PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_GET_BANINFO_LIST);
+ PreparedStatement* stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_SEL_BANINFO_LIST);
stmt2->setUInt32(0, fields[0].GetUInt32());
PreparedQueryResult banInfo = CharacterDatabase.Query(stmt2);
if (banInfo)
@@ -3274,7 +3300,8 @@ bool ChatHandler::HandleBanListCharacterCommand(const char *args)
bool ChatHandler::HandleBanListAccountCommand(const char *args)
{
- LoginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_OLD_BANS);
+ LoginDatabase.Execute(stmt);
char* cFilter = strtok((char*)args, " ");
std::string filter = cFilter ? cFilter : "";
@@ -3379,7 +3406,8 @@ bool ChatHandler::HandleBanListHelper(QueryResult result)
bool ChatHandler::HandleBanListIPCommand(const char *args)
{
- LoginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate");
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_OLD_IP_BANS);
+ LoginDatabase.Execute(stmt);
char* cFilter = strtok((char*)args, " ");
std::string filter = cFilter ? cFilter : "";
@@ -3452,11 +3480,11 @@ bool ChatHandler::HandleBanListIPCommand(const char *args)
bool ChatHandler::HandleRespawnCommand(const char* /*args*/)
{
- Player* pl = m_session->GetPlayer();
+ Player* player = m_session->GetPlayer();
// accept only explicitly selected target (not implicitly self targeting case)
Unit* target = getSelectedUnit();
- if (pl->GetSelection() && target)
+ if (player->GetSelection() && target)
{
if (target->GetTypeId() != TYPEID_UNIT || target->isPet())
{
@@ -3470,16 +3498,15 @@ bool ChatHandler::HandleRespawnCommand(const char* /*args*/)
return true;
}
- CellPair p(Trinity::ComputeCellPair(pl->GetPositionX(), pl->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::RespawnDo u_do;
- Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(pl, u_do);
+ Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(player, u_do);
TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::RespawnDo>, GridTypeMapContainer > obj_worker(worker);
- cell.Visit(p, obj_worker, *pl->GetMap());
+ cell.Visit(p, obj_worker, *player->GetMap(), *player, player->GetGridActivationRange());
return true;
}
@@ -4026,9 +4053,9 @@ bool ChatHandler::HandleComeToMeCommand(const char *args)
caster->SetUnitMovementFlags(newFlags);
- Player* pl = m_session->GetPlayer();
+ Player* player = m_session->GetPlayer();
- caster->GetMotionMaster()->MovePoint(0, pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ());
+ caster->GetMotionMaster()->MovePoint(0, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
return true;
}
@@ -4172,9 +4199,9 @@ bool ChatHandler::HandleInstanceStatsCommand(const char* /*args*/)
bool ChatHandler::HandleInstanceSaveDataCommand(const char * /*args*/)
{
- Player* pl = m_session->GetPlayer();
+ Player* player = m_session->GetPlayer();
- Map* map = pl->GetMap();
+ Map* map = player->GetMap();
if (!map->IsDungeon())
{
PSendSysMessage("Map is not a dungeon.");
@@ -4440,7 +4467,7 @@ bool ChatHandler::HandleChannelSetOwnership(const char *args)
{
if (chn)
chn->SetOwnership(true);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_CHANNEL_OWNERSHIP);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_OWNERSHIP);
stmt->setUInt8 (0, 1);
stmt->setString(1, channel);
CharacterDatabase.Execute(stmt);
@@ -4450,7 +4477,7 @@ bool ChatHandler::HandleChannelSetOwnership(const char *args)
{
if (chn)
chn->SetOwnership(false);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_CHANNEL_OWNERSHIP);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHANNEL_OWNERSHIP);
stmt->setUInt8 (0, 0);
stmt->setString(1, channel);
CharacterDatabase.Execute(stmt);
@@ -4644,12 +4671,12 @@ bool ChatHandler::HandleListFreezeCommand(const char * /*args*/)
bool ChatHandler::HandleGroupLeaderCommand(const char *args)
{
- Player* plr = NULL;
+ Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* cname = strtok((char*)args, " ");
- if (GetPlayerGroupAndGUIDByName(cname, plr, group, guid))
+ if (GetPlayerGroupAndGUIDByName(cname, player, group, guid))
if (group && group->GetLeaderGUID() != guid)
{
group->ChangeLeader(guid);
@@ -4661,12 +4688,12 @@ bool ChatHandler::HandleGroupLeaderCommand(const char *args)
bool ChatHandler::HandleGroupDisbandCommand(const char *args)
{
- Player* plr = NULL;
+ Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* cname = strtok((char*)args, " ");
- if (GetPlayerGroupAndGUIDByName(cname, plr, group, guid))
+ if (GetPlayerGroupAndGUIDByName(cname, player, group, guid))
if (group)
group->Disband();
@@ -4675,12 +4702,12 @@ bool ChatHandler::HandleGroupDisbandCommand(const char *args)
bool ChatHandler::HandleGroupRemoveCommand(const char *args)
{
- Player* plr = NULL;
+ Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* cname = strtok((char*)args, " ");
- if (GetPlayerGroupAndGUIDByName(cname, plr, group, guid, true))
+ if (GetPlayerGroupAndGUIDByName(cname, player, group, guid, true))
if (group)
group->RemoveMember(guid);
diff --git a/src/server/game/Chat/Commands/TicketCommands.cpp b/src/server/game/Chat/Commands/TicketCommands.cpp
index 7caf63aac2b..138466f9623 100755
--- a/src/server/game/Chat/Commands/TicketCommands.cpp
+++ b/src/server/game/Chat/Commands/TicketCommands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -85,12 +85,14 @@ bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args)
guid = player->GetGUID();
else
guid = sObjectMgr->GetPlayerGUIDByName(name);
+
// Target must exist
if (!guid)
{
SendSysMessage(LANG_NO_PLAYERS_FOUND);
return true;
}
+
// Ticket must exist
GmTicket *ticket = sTicketMgr->GetTicketByPlayer(guid);
if (!ticket)
@@ -119,27 +121,32 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args)
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
- // Ticket must be assigned to player, who tries to close it.
- uint64 guid = m_session->GetPlayer()->GetGUID();
- if (ticket->IsAssignedNotTo(guid))
+
+ // Ticket should be assigned to the player who tries to close it.
+ // Console can override though
+ Player* player = m_session ? m_session->GetPlayer() : NULL;
+ if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetId());
return true;
}
- sTicketMgr->CloseTicket(ticket->GetId(), guid);
+
+ sTicketMgr->CloseTicket(ticket->GetId(), player ? player->GetGUID() : -1);
sTicketMgr->UpdateLastChange();
- std::string msg = ticket->FormatMessageString(*this, m_session->GetPlayer()->GetName(), NULL, NULL, NULL);
+ std::string msg = ticket->FormatMessageString(*this, player ? player->GetName() : "Console", NULL, NULL, NULL);
SendGlobalGMSysMessage(msg.c_str());
// Inform player, who submitted this ticket, that it is closed
- if (Player* player = ticket->GetPlayer())
- if (player->IsInWorld())
+ if (Player* submitter = ticket->GetPlayer())
+ {
+ if (submitter->IsInWorld())
{
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(GMTICKET_RESPONSE_TICKET_DELETED);
- player->GetSession()->SendPacket(&data);
+ submitter->GetSession()->SendPacket(&data);
}
+ }
return true;
}
@@ -170,25 +177,30 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args)
uint64 targetGuid = sObjectMgr->GetPlayerGUIDByName(target.c_str());
uint64 targetAccId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid);
uint32 targetGmLevel = AccountMgr::GetSecurity(targetAccId, realmID);
+
// Target must exist and have administrative rights
if (!targetGuid || AccountMgr::IsPlayerAccount(targetGmLevel))
{
SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A);
return true;
}
+
// If already assigned, leave
if (ticket->IsAssignedTo(targetGuid))
{
PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->GetId());
return true;
}
+
// If assigned to different player other than current, leave
- Player* player = m_session->GetPlayer();
- if (ticket->IsAssignedNotTo(player->GetGUID()))
+ //! Console can override though
+ Player* player = m_session ? m_session->GetPlayer() : NULL;
+ if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId(), target.c_str());
return true;
}
+
// Assign ticket
SQLTransaction trans = SQLTransaction(NULL);
ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(targetGmLevel));
@@ -218,6 +230,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->GetId());
return true;
}
+
// Get security level of player, whom this ticket is assigned to
uint32 security = SEC_PLAYER;
Player* assignedPlayer = ticket->GetAssignedPlayer();
@@ -229,9 +242,11 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid);
security = AccountMgr::GetSecurity(accountId, realmID);
}
+
// Check security
- Player* player = m_session->GetPlayer();
- if (security > uint32(player->GetSession()->GetSecurity()))
+ //! If no m_session present it means we're issuing this command from the console
+ uint32 mySecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE;
+ if (security > mySecurity)
{
SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY);
return true;
@@ -242,7 +257,8 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
ticket->SaveToDB(trans);
sTicketMgr->UpdateLastChange();
- std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), player->GetName(), NULL);
+ std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(),
+ m_session ? m_session->GetPlayer()->GetName() : "Console", NULL);
SendGlobalGMSysMessage(msg.c_str());
return true;
}
@@ -265,9 +281,11 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
+
// Cannot comment ticket assigned to someone else
- Player* player = m_session->GetPlayer();
- if (ticket->IsAssignedNotTo(player->GetGUID()))
+ //! Console excluded
+ Player* player = m_session ? m_session->GetPlayer() : NULL;
+ if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId());
return true;
@@ -279,7 +297,7 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
sTicketMgr->UpdateLastChange();
std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), NULL, NULL);
- msg += PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player->GetName(), comment);
+ msg += PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player ? player->GetName() : "Console", comment);
SendGlobalGMSysMessage(msg.c_str());
return true;
@@ -297,19 +315,21 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
+
if (!ticket->IsClosed())
{
SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST);
return true;
}
- std::string msg = ticket->FormatMessageString(*this, NULL, NULL, NULL, m_session->GetPlayer()->GetName());
+ std::string msg = ticket->FormatMessageString(*this, NULL, NULL, NULL, m_session ? m_session->GetPlayer()->GetName() : "Console");
SendGlobalGMSysMessage(msg.c_str());
sTicketMgr->RemoveTicket(ticket->GetId());
sTicketMgr->UpdateLastChange();
if (Player* player = ticket->GetPlayer())
+ {
if (player->IsInWorld())
{
// Force abandon ticket
@@ -317,6 +337,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
data << uint32(GMTICKET_RESPONSE_TICKET_DELETED);
player->GetSession()->SendPacket(&data);
}
+ }
return true;
}
@@ -406,9 +427,11 @@ inline bool ChatHandler::_HandleGMTicketResponseAppendCommand(const char* args,
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
+
// Cannot add response to ticket, assigned to someone else
- Player* player = m_session->GetPlayer();
- if (ticket->IsAssignedNotTo(player->GetGUID()))
+ //! Console excluded
+ Player* player = m_session ? m_session->GetPlayer() : NULL;
+ if (player && ticket->IsAssignedNotTo(player->GetGUID()))
{
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId());
return true;
diff --git a/src/server/game/Combat/HostileRefManager.cpp b/src/server/game/Combat/HostileRefManager.cpp
index 95ecac414cc..05b4fa171c7 100755
--- a/src/server/game/Combat/HostileRefManager.cpp
+++ b/src/server/game/Combat/HostileRefManager.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Combat/HostileRefManager.h b/src/server/game/Combat/HostileRefManager.h
index 36fe6f7a6b7..8a49d230161 100755
--- a/src/server/game/Combat/HostileRefManager.h
+++ b/src/server/game/Combat/HostileRefManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp
index 6303181a44d..7833198e3c3 100755
--- a/src/server/game/Combat/ThreatManager.cpp
+++ b/src/server/game/Combat/ThreatManager.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h
index 261f9cd93ab..ce1f6de2ab0 100755
--- a/src/server/game/Combat/ThreatManager.h
+++ b/src/server/game/Combat/ThreatManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Combat/UnitEvents.h b/src/server/game/Combat/UnitEvents.h
index d55fd4773f6..39c79b8273a 100755
--- a/src/server/game/Combat/UnitEvents.h
+++ b/src/server/game/Combat/UnitEvents.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index bfefb3e4e76..0bcd1a7864b 100755
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -67,11 +67,8 @@ bool Condition::Meets(Player* player, Unit* invoker)
break;
}
case CONDITION_ACHIEVEMENT:
- {
- AchievementEntry const* achievement = GetAchievementStore()->LookupEntry(mConditionValue1);
- condMeets = player->GetAchievementMgr().HasAchieved(achievement);
+ condMeets = player->GetAchievementMgr().HasAchieved(mConditionValue1);
break;
- }
case CONDITION_TEAM:
condMeets = player->GetTeam() == mConditionValue1;
break;
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 2aec58db48c..7e11a9420e7 100755
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp
index dafb0ebc11f..d7a769d3f5c 100755
--- a/src/server/game/Conditions/DisableMgr.cpp
+++ b/src/server/game/Conditions/DisableMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -277,26 +277,25 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
{
case DISABLE_TYPE_SPELL:
{
- uint8 flags = itr->second.flags;
+ uint8 spellFlags = itr->second.flags;
if (unit)
{
-
- if ((flags & SPELL_DISABLE_PLAYER && unit->GetTypeId() == TYPEID_PLAYER) ||
- (unit->GetTypeId() == TYPEID_UNIT && ((unit->ToCreature()->isPet() && flags & SPELL_DISABLE_PET) || flags & SPELL_DISABLE_CREATURE)))
+ if ((spellFlags & SPELL_DISABLE_PLAYER && unit->GetTypeId() == TYPEID_PLAYER) ||
+ (unit->GetTypeId() == TYPEID_UNIT && ((unit->ToCreature()->isPet() && spellFlags & SPELL_DISABLE_PET) || spellFlags & SPELL_DISABLE_CREATURE)))
{
- if (flags & SPELL_DISABLE_MAP)
+ if (spellFlags & SPELL_DISABLE_MAP)
{
std::set<uint32> const& mapIds = itr->second.params[0];
if (mapIds.find(unit->GetMapId()) != mapIds.end())
return true; // Spell is disabled on current map
- if (!(flags & SPELL_DISABLE_AREA))
+ if (!(spellFlags & SPELL_DISABLE_AREA))
return false; // Spell is disabled on another map, but not this one, return false
// Spell is disabled in an area, but not explicitly our current mapId. Continue processing.
}
- if (flags & SPELL_DISABLE_AREA)
+ if (spellFlags & SPELL_DISABLE_AREA)
{
std::set<uint32> const& areaIds = itr->second.params[1];
if (areaIds.find(unit->GetAreaId()) != areaIds.end())
@@ -309,8 +308,10 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
return false;
}
- else if (flags & SPELL_DISABLE_DEPRECATED_SPELL) // call not from spellcast
+ else if (spellFlags & SPELL_DISABLE_DEPRECATED_SPELL) // call not from spellcast
return true;
+
+ break;
}
case DISABLE_TYPE_MAP:
if (Player const* player = unit->ToPlayer())
diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h
index 2931c5ea4ad..0f9310ace3b 100755
--- a/src/server/game/Conditions/DisableMgr.h
+++ b/src/server/game/Conditions/DisableMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index dcdc2b2ea0a..80949effa0c 100755
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -74,14 +74,14 @@ enum AchievementFlags
enum AchievementCriteriaCondition
{
- ACHIEVEMENT_CRITERIA_CONDITION_NONE = 0,
- ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH = 1, // reset progress on death
- ACHIEVEMENT_CRITERIA_CONDITION_UNK1 = 2, // only used in "Complete a daily quest every day for five consecutive days"
- ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP = 3, // requires you to be on specific map, reset at change
- ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE = 4, // only used in "Win 10 arenas without losing"
- ACHIEVEMENT_CRITERIA_CONDITION_UNK2 = 9, // unk
- ACHIEVEMENT_CRITERIA_CONDITION_NOT_IN_GROUP = 10, // requires the player not to be in group
- ACHIEVEMENT_CRITERIA_CONDITION_UNK3 = 13, // unk
+ ACHIEVEMENT_CRITERIA_CONDITION_NONE = 0,
+ ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH = 1, // reset progress on death
+ ACHIEVEMENT_CRITERIA_CONDITION_UNK1 = 2, // only used in "Complete a daily quest every day for five consecutive days"
+ ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP = 3, // requires you to be on specific map, reset at change
+ ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE = 4, // only used in "Win 10 arenas without losing"
+ ACHIEVEMENT_CRITERIA_CONDITION_NO_SPELL_HIT = 9, // requires the player not to be hit by specific spell
+ ACHIEVEMENT_CRITERIA_CONDITION_NOT_IN_GROUP = 10, // requires the player not to be in group
+ ACHIEVEMENT_CRITERIA_CONDITION_UNK3 = 13, // unk
};
enum AchievementCriteriaFlags
@@ -97,7 +97,7 @@ enum AchievementCriteriaFlags
enum AchievementCriteriaTimedTypes
{
ACHIEVEMENT_TIMED_TYPE_EVENT = 1, // Timer is started by internal event with id in timerStartEvent
- ACHIEVEMENT_TIMED_TYPE_QUEST = 2, // Timer is started by acceting quest with entry in timerStartEvent
+ ACHIEVEMENT_TIMED_TYPE_QUEST = 2, // Timer is started by accepting quest with entry in timerStartEvent
ACHIEVEMENT_TIMED_TYPE_SPELL_CASTER = 5, // Timer is started by casting a spell with entry in timerStartEvent
ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET = 6, // Timer is started by being target of spell with entry in timerStartEvent
ACHIEVEMENT_TIMED_TYPE_CREATURE = 7, // Timer is started by killing creature with entry in timerStartEvent
@@ -417,7 +417,7 @@ enum SummonPropFlags
enum VehicleSeatFlags
{
VEHICLE_SEAT_FLAG_HIDE_PASSENGER = 0x00000200, // Passenger is hidden
- VEHICLE_SEAT_FLAG_UNK11 = 0x00000400, // needed for CGCamera__SyncFreeLookFacing
+ VEHICLE_SEAT_FLAG_UNK1 = 0x00000400, // needed for CGCamera__SyncFreeLookFacing
VEHICLE_SEAT_FLAG_CAN_CONTROL = 0x00000800, // Lua_UnitInVehicleControlSeat
VEHICLE_SEAT_FLAG_CAN_CAST_MOUNT_SPELL = 0x00001000, // Can cast spells with SPELL_AURA_MOUNTED from seat (possibly 4.x only, 0 seats on 3.3.5a)
VEHICLE_SEAT_FLAG_UNCONTROLLED = 0x00002000, // can override !& VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT
@@ -425,6 +425,7 @@ enum VehicleSeatFlags
VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT = 0x02000000, // Lua_CanExitVehicle - can enter and exit at free will
VEHICLE_SEAT_FLAG_CAN_SWITCH = 0x04000000, // Lua_CanSwitchVehicleSeats
VEHICLE_SEAT_FLAG_CAN_CAST = 0x20000000, // Lua_UnitHasVehicleUI
+ VEHICLE_SEAT_FLAG_UNK2 = 0x40000000, // checked in conjunction with 0x800 in CastSpell2
};
enum VehicleSeatFlagsB
@@ -435,7 +436,7 @@ enum VehicleSeatFlagsB
VEHICLE_SEAT_FLAG_B_EJECTABLE = 0x00000020, // ejectable
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 = 0x00000040,
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 = 0x00000100,
- VEHICLE_SEAT_FLAG_B_CANSWITCH = 0x04000000, // can switch seats
+ VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4 = 0x02000000,
VEHICLE_SEAT_FLAG_B_VEHICLE_PLAYERFRAME_UI = 0x80000000, // Lua_UnitHasVehiclePlayerFrameUI - actually checked for flagsb &~ 0x80000000
};
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index faa73cefb11..671488982bd 100755
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -71,6 +71,7 @@ DBCStorage <ChrRacesEntry> sChrRacesStore(ChrRacesEntryfmt);
DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore(CinematicSequencesEntryfmt);
DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt);
DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt);
+DBCStorage <CreatureModelDataEntry> sCreatureModelDataStore(CreatureModelDatafmt);
DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt);
DBCStorage <CreatureTypeEntry> sCreatureTypeStore(CreatureTypefmt);
DBCStorage <CurrencyTypesEntry> sCurrencyTypesStore(CurrencyTypesfmt);
@@ -292,6 +293,7 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales, bad_dbc_files, sCinematicSequencesStore, dbcPath, "CinematicSequences.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureDisplayInfoStore, dbcPath, "CreatureDisplayInfo.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureFamilyStore, dbcPath, "CreatureFamily.dbc");
+ LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureModelDataStore, dbcPath, "CreatureModelData.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureSpellDataStore, dbcPath, "CreatureSpellData.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureTypeStore, dbcPath, "CreatureType.dbc");
LoadDBC(availableDbcLocales, bad_dbc_files, sCurrencyTypesStore, dbcPath, "CurrencyTypes.dbc");
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index 367746616d1..58c85adc11b 100755
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -81,6 +81,7 @@ extern DBCStorage <ChrRacesEntry> sChrRacesStore;
extern DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore;
extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore;
extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore;
+extern DBCStorage <CreatureModelDataEntry> sCreatureModelDataStore;
extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore;
extern DBCStorage <CreatureTypeEntry> sCreatureTypeStore;
extern DBCStorage <CurrencyTypesEntry> sCurrencyTypesStore;
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index e01acd2e03d..15408ad03a9 100755
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -723,7 +723,7 @@ struct CinematicSequencesEntry
struct CreatureDisplayInfoEntry
{
uint32 Displayid; // 0 m_ID
- // 1 m_modelID
+ uint32 ModelId; // 1 m_modelID
// 2 m_soundID
// 3 m_extendedDisplayInfoID
float scale; // 4 m_creatureModelScale
@@ -754,6 +754,28 @@ struct CreatureFamilyEntry
// 27 m_iconFile
};
+struct CreatureModelDataEntry
+{
+ uint32 Id;
+ //uint32 Flags;
+ //char* ModelPath[16]
+ //uint32 Unk1;
+ float Scale; // Used in calculation of unit collision data
+ //int32 Unk2
+ //int32 Unk3
+ //uint32 Unk4
+ //uint32 Unk5
+ //float Unk6
+ //uint32 Unk7
+ //float Unk8
+ //uint32 Unk9
+ //uint32 Unk10
+ //float CollisionWidth;
+ float CollisionHeight;
+ float MountHeight; // Used in calculation of unit collision data when mounted
+ //float Unks[11]
+};
+
#define MAX_CREATURE_SPELL_DATA_SLOT 4
struct CreatureSpellDataEntry
@@ -1917,9 +1939,10 @@ struct VehicleSeatEntry
// 46-57 added in 3.1, floats mostly
bool CanEnterOrExit() const { return m_flags & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT; }
- bool CanSwitchFromSeat() const { return m_flags & VEHICLE_SEAT_FLAG_B_CANSWITCH; }
+ bool CanSwitchFromSeat() const { return m_flags & VEHICLE_SEAT_FLAG_CAN_SWITCH; }
bool IsUsableByOverride() const { return (m_flags & VEHICLE_SEAT_FLAG_UNCONTROLLED)
- || (m_flagsB & (VEHICLE_SEAT_FLAG_B_USABLE_FORCED | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3)); }
+ || (m_flagsB & (VEHICLE_SEAT_FLAG_B_USABLE_FORCED | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 |
+ VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4)); }
bool IsEjectable() const { return m_flagsB & VEHICLE_SEAT_FLAG_B_EJECTABLE; }
};
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index 5d33a3011ab..c55fb79d461 100755
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -38,8 +38,9 @@ const char ChatChannelsEntryfmt[]="nixssssssssssssssssxxxxxxxxxxxxxxxxxx";
const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii";
const char ChrRacesEntryfmt[]="nxixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
const char CinematicSequencesEntryfmt[]="nxxxxxxxxx";
-const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx";
+const char CreatureDisplayInfofmt[]="nixxfxxxxxxxxxxx";
const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx";
+const char CreatureModelDatafmt[]="nxxxfxxxxxxxxxxffxxxxxxxxxxx";
const char CreatureSpellDatafmt[]="niiiixxxx";
const char CreatureTypefmt[]="nxxxxxxxxxxxxxxxxxx";
const char CurrencyTypesfmt[]="xnxi";
diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h
index be564ef410f..28498749af8 100755
--- a/src/server/game/DungeonFinding/LFG.h
+++ b/src/server/game/DungeonFinding/LFG.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/DungeonFinding/LFGGroupData.cpp b/src/server/game/DungeonFinding/LFGGroupData.cpp
index e81b8bd1774..607389c5dbf 100644
--- a/src/server/game/DungeonFinding/LFGGroupData.cpp
+++ b/src/server/game/DungeonFinding/LFGGroupData.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/DungeonFinding/LFGGroupData.h b/src/server/game/DungeonFinding/LFGGroupData.h
index 2a494c73052..74570817698 100644
--- a/src/server/game/DungeonFinding/LFGGroupData.h
+++ b/src/server/game/DungeonFinding/LFGGroupData.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 52b41c0a0f7..e0a16d4868b 100755
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -159,12 +159,12 @@ void LFGMgr::Update(uint32 diff)
{
uint64 guid = itRoles->first;
ClearState(guid);
- if (Player* plr = ObjectAccessor::FindPlayer(guid))
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
{
- plr->GetSession()->SendLfgRoleCheckUpdate(roleCheck);
+ player->GetSession()->SendLfgRoleCheckUpdate(roleCheck);
if (itRoles->first == roleCheck->leader)
- plr->GetSession()->SendLfgJoinResult(LfgJoinResultData(LFG_JOIN_FAILED, LFG_ROLECHECK_MISSING_ROLE));
+ player->GetSession()->SendLfgJoinResult(LfgJoinResultData(LFG_JOIN_FAILED, LFG_ROLECHECK_MISSING_ROLE));
}
}
delete roleCheck;
@@ -226,18 +226,18 @@ void LFGMgr::Update(uint32 diff)
{
guid = itPlayers->first;
SetState(guid, LFG_STATE_PROPOSAL);
- if (Player* plr = ObjectAccessor::FindPlayer(itPlayers->first))
+ if (Player* player = ObjectAccessor::FindPlayer(itPlayers->first))
{
- Group* grp = plr->GetGroup();
+ Group* grp = player->GetGroup();
if (grp)
{
uint64 gguid = grp->GetGUID();
SetState(gguid, LFG_STATE_PROPOSAL);
- plr->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)));
+ player->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)));
}
else
- plr->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)));
- plr->GetSession()->SendLfgUpdateProposal(m_lfgProposalId, pProposal);
+ player->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)));
+ player->GetSession()->SendLfgUpdateProposal(m_lfgProposalId, pProposal);
}
}
@@ -254,7 +254,7 @@ void LFGMgr::Update(uint32 diff)
if (m_QueueTimer > LFG_QUEUEUPDATE_INTERVAL)
{
m_QueueTimer = 0;
- time_t currTime = time(NULL);
+ currTime = time(NULL);
for (LfgQueueInfoMap::const_iterator itQueue = m_QueueInfoMap.begin(); itQueue != m_QueueInfoMap.end(); ++itQueue)
{
LfgQueueInfo* queue = itQueue->second;
@@ -291,8 +291,8 @@ void LFGMgr::Update(uint32 diff)
}
for (LfgRolesMap::const_iterator itPlayer = queue->roles.begin(); itPlayer != queue->roles.end(); ++itPlayer)
- if (Player* plr = ObjectAccessor::FindPlayer(itPlayer->first))
- plr->GetSession()->SendLfgQueueStatus(dungeonId, waitTime, m_WaitTimeAvg, m_WaitTimeTank, m_WaitTimeHealer, m_WaitTimeDps, queuedTime, queue->tanks, queue->healers, queue->dps);
+ if (Player* player = ObjectAccessor::FindPlayer(itPlayer->first))
+ player->GetSession()->SendLfgQueueStatus(dungeonId, waitTime, m_WaitTimeAvg, m_WaitTimeTank, m_WaitTimeHealer, m_WaitTimeDps, queuedTime, queue->tanks, queue->healers, queue->dps);
}
}
else
@@ -358,13 +358,13 @@ bool LFGMgr::RemoveFromQueue(uint64 guid)
/**
Generate the dungeon lock map for a given player
- @param[in] plr Player we need to initialize the lock status map
+ @param[in] player Player we need to initialize the lock status map
*/
-void LFGMgr::InitializeLockedDungeons(Player* plr)
+void LFGMgr::InitializeLockedDungeons(Player* player)
{
- uint64 guid = plr->GetGUID();
- uint8 level = plr->getLevel();
- uint8 expansion = plr->GetSession()->Expansion();
+ uint64 guid = player->GetGUID();
+ uint8 level = player->getLevel();
+ uint8 expansion = player->GetSession()->Expansion();
LfgDungeonSet dungeons = GetDungeonsByRandom(0);
LfgLockMap lock;
@@ -379,9 +379,9 @@ void LFGMgr::InitializeLockedDungeons(Player* plr)
LfgLockStatusType locktype = LFG_LOCKSTATUS_OK;
if (dungeon->expansion > expansion)
locktype = LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION;
- else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, plr))
+ else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player))
locktype = LFG_LOCKSTATUS_RAID_LOCKED;
- else if (dungeon->difficulty > DUNGEON_DIFFICULTY_NORMAL && plr->GetBoundInstance(dungeon->map, Difficulty(dungeon->difficulty)))
+ else if (dungeon->difficulty > DUNGEON_DIFFICULTY_NORMAL && player->GetBoundInstance(dungeon->map, Difficulty(dungeon->difficulty)))
locktype = LFG_LOCKSTATUS_RAID_LOCKED;
else if (dungeon->minlevel > level)
locktype = LFG_LOCKSTATUS_TOO_LOW_LEVEL;
@@ -389,19 +389,19 @@ void LFGMgr::InitializeLockedDungeons(Player* plr)
locktype = LFG_LOCKSTATUS_TOO_HIGH_LEVEL;
else if (locktype == LFG_LOCKSTATUS_OK && ar)
{
- if (ar->achievement && !plr->GetAchievementMgr().HasAchieved(sAchievementStore.LookupEntry(ar->achievement)))
+ if (ar->achievement && !player->GetAchievementMgr().HasAchieved(ar->achievement))
locktype = LFG_LOCKSTATUS_RAID_LOCKED; // FIXME: Check the correct lock value
- else if (plr->GetTeam() == ALLIANCE && ar->quest_A && !plr->GetQuestRewardStatus(ar->quest_A))
+ else if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A))
locktype = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
- else if (plr->GetTeam() == HORDE && ar->quest_H && !plr->GetQuestRewardStatus(ar->quest_H))
+ else if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H))
locktype = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
else
if (ar->item)
{
- if (!plr->HasItemCount(ar->item, 1) && (!ar->item2 || !plr->HasItemCount(ar->item2, 1)))
+ if (!player->HasItemCount(ar->item, 1) && (!ar->item2 || !player->HasItemCount(ar->item2, 1)))
locktype = LFG_LOCKSTATUS_MISSING_ITEM;
}
- else if (ar->item2 && !plr->HasItemCount(ar->item2, 1))
+ else if (ar->item2 && !player->HasItemCount(ar->item2, 1))
locktype = LFG_LOCKSTATUS_MISSING_ITEM;
}
/* TODO VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED)
@@ -423,18 +423,18 @@ void LFGMgr::InitializeLockedDungeons(Player* plr)
of the group tying to join the group. Join conditions are checked before adding
to the new queue.
- @param[in] plr Player trying to join (or leader of group trying to join)
+ @param[in] player Player trying to join (or leader of group trying to join)
@param[in] roles Player selected roles
@param[in] dungeons Dungeons the player/group is applying for
@param[in] comment Player selected comment
*/
-void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeons, const std::string& comment)
+void LFGMgr::Join(Player* player, uint8 roles, const LfgDungeonSet& selectedDungeons, const std::string& comment)
{
- if (!plr || !plr->GetSession() || selectedDungeons.empty())
+ if (!player || !player->GetSession() || selectedDungeons.empty())
return;
- Group* grp = plr->GetGroup();
- uint64 guid = plr->GetGUID();
+ Group* grp = player->GetGroup();
+ uint64 guid = player->GetGUID();
uint64 gguid = grp ? grp->GetGUID() : guid;
LfgJoinResultData joinData;
PlayerSet players;
@@ -457,7 +457,7 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
if (playerDungeons == dungeons) // Joining the same dungeons -- Send OK
{
LfgUpdateData updateData = LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, comment);
- plr->GetSession()->SendLfgJoinResult(joinData); // Default value of joinData.result = LFG_JOIN_OK
+ player->GetSession()->SendLfgJoinResult(joinData); // Default value of joinData.result = LFG_JOIN_OK
if (grp)
{
for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())
@@ -471,11 +471,11 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
}
// Check player or group member restrictions
- if (plr->InBattleground() || plr->InArena() || plr->InBattlegroundQueue())
+ if (player->InBattleground() || player->InArena() || player->InBattlegroundQueue())
joinData.result = LFG_JOIN_USING_BG_SYSTEM;
- else if (plr->HasAura(LFG_SPELL_DUNGEON_DESERTER))
+ else if (player->HasAura(LFG_SPELL_DUNGEON_DESERTER))
joinData.result = LFG_JOIN_DESERTER;
- else if (plr->HasAura(LFG_SPELL_DUNGEON_COOLDOWN))
+ else if (player->HasAura(LFG_SPELL_DUNGEON_COOLDOWN))
joinData.result = LFG_JOIN_RANDOM_COOLDOWN;
else if (dungeons.empty())
joinData.result = LFG_JOIN_NOT_MEET_REQS;
@@ -505,7 +505,7 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
}
}
else
- players.insert(plr);
+ players.insert(player);
// Check if all dungeons are valid
bool isRaid = false;
@@ -559,7 +559,7 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::Join: [" UI64FMTD "] joining with %u members. result: %u", guid, grp ? grp->GetMembersCount() : 1, joinData.result);
if (!dungeons.empty()) // Only should show lockmap when have no dungeons available
joinData.lockmap.clear();
- plr->GetSession()->SendLfgJoinResult(joinData);
+ player->GetSession()->SendLfgJoinResult(joinData);
return;
}
@@ -612,7 +612,7 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
// Queue player
LfgQueueInfo* pqInfo = new LfgQueueInfo();
pqInfo->joinTime = time_t(time(NULL));
- pqInfo->roles[plr->GetGUID()] = roles;
+ pqInfo->roles[player->GetGUID()] = roles;
pqInfo->dungeons = dungeons;
if (roles & ROLE_TANK)
--pqInfo->tanks;
@@ -623,8 +623,8 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
m_QueueInfoMap[guid] = pqInfo;
// Send update to player
- plr->GetSession()->SendLfgJoinResult(joinData);
- plr->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_JOIN_PROPOSAL, dungeons, comment));
+ player->GetSession()->SendLfgJoinResult(joinData);
+ player->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_JOIN_PROPOSAL, dungeons, comment));
SetState(gguid, LFG_STATE_QUEUED);
SetRoles(guid, roles);
if (!isContinue)
@@ -636,7 +636,7 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
}
SetSelectedDungeons(guid, dungeons);
}
- AddToQueue(guid, uint8(plr->GetTeam()));
+ AddToQueue(guid, uint8(player->GetTeam()));
}
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::Join: [" UI64FMTD "] joined with %u members. dungeons: %u", guid, grp ? grp->GetMembersCount() : 1, uint8(dungeons.size()));
}
@@ -645,15 +645,15 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon
Leaves Dungeon System. Player/Group is removed from queue, rolechecks, proposals
or votekicks. Player or group needs to be not NULL and using Dungeon System
- @param[in] plr Player trying to leave (can be NULL)
+ @param[in] player Player trying to leave (can be NULL)
@param[in] grp Group trying to leave (default NULL)
*/
-void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/)
+void LFGMgr::Leave(Player* player, Group* grp /* = NULL*/)
{
- if (!plr && !grp)
+ if (!player && !grp)
return;
- uint64 guid = grp ? grp->GetGUID() : plr->GetGUID();
+ uint64 guid = grp ? grp->GetGUID() : player->GetGUID();
LfgState state = GetState(guid);
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::Leave: [" UI64FMTD "]", guid);
@@ -676,7 +676,7 @@ void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/)
}
else
{
- plr->GetSession()->SendLfgUpdatePlayer(updateData);
+ player->GetSession()->SendLfgUpdatePlayer(updateData);
ClearState(guid);
}
}
@@ -689,10 +689,9 @@ void LFGMgr::Leave(Player* plr, Group* grp /* = NULL*/)
{
// Remove from Proposals
LfgProposalMap::iterator it = m_Proposals.begin();
- uint64 guid = plr ? plr->GetGUID() : grp->GetLeaderGUID();
while (it != m_Proposals.end())
{
- LfgProposalPlayerMap::iterator itPlayer = it->second->players.find(guid);
+ LfgProposalPlayerMap::iterator itPlayer = it->second->players.find(player ? player->GetGUID() : grp->GetLeaderGUID());
if (itPlayer != it->second->players.end())
{
// Mark the player/leader of group who left as didn't accept the proposal
@@ -866,22 +865,22 @@ bool LFGMgr::CheckCompatibility(LfgGuidList check, LfgProposal*& pProposal)
PlayerSet players;
for (LfgRolesMap::const_iterator it = rolesMap.begin(); it != rolesMap.end(); ++it)
{
- Player* plr = ObjectAccessor::FindPlayer(it->first);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(it->first);
+ if (!player)
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::CheckCompatibility: (%s) Warning! [" UI64FMTD "] offline! Marking as not compatibles!", strGuids.c_str(), it->first);
else
{
- for (PlayerSet::const_iterator itPlayer = players.begin(); itPlayer != players.end() && plr; ++itPlayer)
+ for (PlayerSet::const_iterator itPlayer = players.begin(); itPlayer != players.end() && player; ++itPlayer)
{
// Do not form a group with ignoring candidates
- if (plr->GetSocial()->HasIgnore((*itPlayer)->GetGUIDLow()) || (*itPlayer)->GetSocial()->HasIgnore(plr->GetGUIDLow()))
+ if (player->GetSocial()->HasIgnore((*itPlayer)->GetGUIDLow()) || (*itPlayer)->GetSocial()->HasIgnore(player->GetGUIDLow()))
{
- sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::CheckCompatibility: (%s) Players [" UI64FMTD "] and [" UI64FMTD "] ignoring", strGuids.c_str(), (*itPlayer)->GetGUID(), plr->GetGUID());
- plr = NULL;
+ sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::CheckCompatibility: (%s) Players [" UI64FMTD "] and [" UI64FMTD "] ignoring", strGuids.c_str(), (*itPlayer)->GetGUID(), player->GetGUID());
+ player = NULL;
}
}
- if (plr)
- players.insert(plr);
+ if (player)
+ players.insert(player);
}
}
@@ -1069,10 +1068,10 @@ void LFGMgr::UpdateRoleCheck(uint64 gguid, uint64 guid /* = 0 */, uint8 roles /*
// Set queue roles needed - As we are using check_roles will not have more that 1 tank, 1 healer, 3 dps
for (LfgRolesMap::const_iterator it = check_roles.begin(); it != check_roles.end(); ++it)
{
- uint8 roles = it->second;
- if (roles & ROLE_TANK)
+ uint8 roles2 = it->second;
+ if (roles2 & ROLE_TANK)
--pqInfo->tanks;
- else if (roles & ROLE_HEALER)
+ else if (roles2 & ROLE_HEALER)
--pqInfo->healers;
else
--pqInfo->dps;
@@ -1152,14 +1151,14 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, const PlayerSet& pla
{
uint64 guid = (*it)->GetGUID();
LfgLockMap cachedLockMap = GetLockedDungeons(guid);
- for (LfgLockMap::const_iterator it = cachedLockMap.begin(); it != cachedLockMap.end() && dungeons.size(); ++it)
+ for (LfgLockMap::const_iterator it2 = cachedLockMap.begin(); it2 != cachedLockMap.end() && dungeons.size(); ++it2)
{
- uint32 dungeonId = (it->first & 0x00FFFFFF); // Compare dungeon ids
+ uint32 dungeonId = (it2->first & 0x00FFFFFF); // Compare dungeon ids
LfgDungeonSet::iterator itDungeon = dungeons.find(dungeonId);
if (itDungeon != dungeons.end())
{
dungeons.erase(itDungeon);
- lockMap[guid][dungeonId] = it->second;
+ lockMap[guid][dungeonId] = it2->second;
}
}
}
@@ -1276,18 +1275,18 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
bool allAnswered = true;
for (LfgProposalPlayerMap::const_iterator itPlayers = pProposal->players.begin(); itPlayers != pProposal->players.end(); ++itPlayers)
{
- if (Player* plr = ObjectAccessor::FindPlayer(itPlayers->first))
+ if (Player* player = ObjectAccessor::FindPlayer(itPlayers->first))
{
if (itPlayers->first == pProposal->leader)
- players.push_front(plr);
+ players.push_front(player);
else
- players.push_back(plr);
+ players.push_back(player);
// Only teleport new players
- Group* grp = plr->GetGroup();
+ Group* grp = player->GetGroup();
uint64 gguid = grp ? grp->GetGUID() : 0;
if (!gguid || !grp->isLFGGroup() || GetState(gguid) == LFG_STATE_FINISHED_DUNGEON)
- playersToTeleport.push_back(plr);
+ playersToTeleport.push_back(player);
}
if (itPlayers->second->accept != LFG_ANSWER_AGREE) // No answer (-1) or not accepted (0)
@@ -1313,8 +1312,8 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
if (player->groupLowGuid != lowgroupguid)
sLog->outError("LFGMgr::UpdateProposal: [" UI64FMTD "] group mismatch: actual (%u) - queued (%u)", (*it)->GetGUID(), lowgroupguid, player->groupLowGuid);
- uint64 guid = player->groupLowGuid ? MAKE_NEW_GUID(player->groupLowGuid, 0, HIGHGUID_GROUP) : (*it)->GetGUID();
- LfgQueueInfoMap::iterator itQueue = m_QueueInfoMap.find(guid);
+ uint64 guid2 = player->groupLowGuid ? MAKE_NEW_GUID(player->groupLowGuid, 0, HIGHGUID_GROUP) : (*it)->GetGUID();
+ LfgQueueInfoMap::iterator itQueue = m_QueueInfoMap.find(guid2);
if (itQueue == m_QueueInfoMap.end())
{
sLog->outError("LFGMgr::UpdateProposal: Queue info for guid [" UI64FMTD "] not found!", guid);
@@ -1329,31 +1328,31 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
Group* grp = pProposal->groupLowGuid ? sGroupMgr->GetGroupByGUID(pProposal->groupLowGuid) : NULL;
for (LfgPlayerList::const_iterator it = players.begin(); it != players.end(); ++it)
{
- Player* plr = (*it);
- uint64 pguid = plr->GetGUID();
- Group* group = plr->GetGroup();
+ Player* player = (*it);
+ uint64 pguid = player->GetGUID();
+ Group* group = player->GetGroup();
if (sendUpdate)
- plr->GetSession()->SendLfgUpdateProposal(proposalId, pProposal);
+ player->GetSession()->SendLfgUpdateProposal(proposalId, pProposal);
if (group)
{
- plr->GetSession()->SendLfgUpdateParty(updateData);
+ player->GetSession()->SendLfgUpdateParty(updateData);
if (group != grp)
- plr->RemoveFromGroup();
+ player->RemoveFromGroup();
}
else
- plr->GetSession()->SendLfgUpdatePlayer(updateData);
+ player->GetSession()->SendLfgUpdatePlayer(updateData);
if (!grp)
{
grp = new Group();
- grp->Create(plr);
+ grp->Create(player);
grp->ConvertToLFG();
uint64 gguid = grp->GetGUID();
SetState(gguid, LFG_STATE_PROPOSAL);
sGroupMgr->AddGroup(grp);
}
else if (group != grp)
- grp->AddMember(plr);
+ grp->AddMember(player);
// Update timers
uint8 role = GetRoles(pguid);
@@ -1363,25 +1362,25 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
case ROLE_DAMAGE:
{
uint32 old_number = m_NumWaitTimeDps++;
- m_WaitTimeDps = int32((m_WaitTimeDps * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeDps);
+ m_WaitTimeDps = int32((m_WaitTimeDps * old_number + waitTimesMap[player->GetGUID()]) / m_NumWaitTimeDps);
break;
}
case ROLE_HEALER:
{
uint32 old_number = m_NumWaitTimeHealer++;
- m_WaitTimeHealer = int32((m_WaitTimeHealer * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeHealer);
+ m_WaitTimeHealer = int32((m_WaitTimeHealer * old_number + waitTimesMap[player->GetGUID()]) / m_NumWaitTimeHealer);
break;
}
case ROLE_TANK:
{
uint32 old_number = m_NumWaitTimeTank++;
- m_WaitTimeTank = int32((m_WaitTimeTank * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeTank);
+ m_WaitTimeTank = int32((m_WaitTimeTank * old_number + waitTimesMap[player->GetGUID()]) / m_NumWaitTimeTank);
break;
}
default:
{
uint32 old_number = m_NumWaitTimeAvg++;
- m_WaitTimeAvg = int32((m_WaitTimeAvg * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeAvg);
+ m_WaitTimeAvg = int32((m_WaitTimeAvg * old_number + waitTimesMap[player->GetGUID()]) / m_NumWaitTimeAvg);
break;
}
}
@@ -1399,10 +1398,7 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
// Remove players/groups from Queue
for (LfgGuidList::const_iterator it = pProposal->queues.begin(); it != pProposal->queues.end(); ++it)
- {
- uint64 guid = (*it);
- RemoveFromQueue(guid);
- }
+ RemoveFromQueue(*it);
// Teleport Player
for (LfgPlayerList::const_iterator it = playersToTeleport.begin(); it != playersToTeleport.end(); ++it)
@@ -1454,15 +1450,15 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t
// Notify players
for (LfgProposalPlayerMap::const_iterator it = pProposal->players.begin(); it != pProposal->players.end(); ++it)
{
- Player* plr = ObjectAccessor::FindPlayer(it->first);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(it->first);
+ if (!player)
continue;
- team = uint8(plr->GetTeam());
- plr->GetSession()->SendLfgUpdateProposal(itProposal->first, pProposal);
+ team = uint8(player->GetTeam());
+ player->GetSession()->SendLfgUpdateProposal(itProposal->first, pProposal);
- Group* grp = plr->GetGroup();
- uint64 guid = plr->GetGUID();
+ Group* grp = player->GetGroup();
+ uint64 guid = player->GetGUID();
uint64 gguid = it->second->groupLowGuid ? MAKE_NEW_GUID(it->second->groupLowGuid, 0, HIGHGUID_GROUP) : guid;
if (toRemove.find(gguid) != toRemove.end()) // Didn't accept or in same group that someone that didn't accept
@@ -1482,10 +1478,10 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t
if (grp)
{
RestoreState(gguid);
- plr->GetSession()->SendLfgUpdateParty(updateData);
+ player->GetSession()->SendLfgUpdateParty(updateData);
}
else
- plr->GetSession()->SendLfgUpdatePlayer(updateData);
+ player->GetSession()->SendLfgUpdatePlayer(updateData);
}
else
{
@@ -1494,10 +1490,10 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t
if (grp)
{
SetState(gguid, LFG_STATE_QUEUED);
- plr->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)));
+ player->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)));
}
else
- plr->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)));
+ player->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)));
}
}
@@ -1572,17 +1568,17 @@ void LFGMgr::InitBoot(Group* grp, uint64 kicker, uint64 victim, std::string reas
/**
Update Boot info with player answer
- @param[in] plr Player who has answered
+ @param[in] player Player who has answered
@param[in] accept player answer
*/
-void LFGMgr::UpdateBoot(Player* plr, bool accept)
+void LFGMgr::UpdateBoot(Player* player, bool accept)
{
- Group* grp = plr ? plr->GetGroup() : NULL;
+ Group* grp = player ? player->GetGroup() : NULL;
if (!grp)
return;
uint32 bootId = grp->GetLowGUID();
- uint64 guid = plr->GetGUID();
+ uint64 guid = player->GetGUID();
LfgPlayerBootMap::iterator itBoot = m_Boots.find(bootId);
if (itBoot == m_Boots.end())
@@ -1647,29 +1643,29 @@ void LFGMgr::UpdateBoot(Player* plr, bool accept)
/**
Teleports the player in or out the dungeon
- @param[in] plr Player to teleport
+ @param[in] player Player to teleport
@param[in] out Teleport out (true) or in (false)
@param[in] fromOpcode Function called from opcode handlers? (Default false)
*/
-void LFGMgr::TeleportPlayer(Player* plr, bool out, bool fromOpcode /*= false*/)
+void LFGMgr::TeleportPlayer(Player* player, bool out, bool fromOpcode /*= false*/)
{
- sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::TeleportPlayer: [" UI64FMTD "] is being teleported %s", plr->GetGUID(), out ? "out" : "in");
+ sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::TeleportPlayer: [" UI64FMTD "] is being teleported %s", player->GetGUID(), out ? "out" : "in");
if (out)
{
- plr->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW);
- plr->TeleportToBGEntryPoint();
+ player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW);
+ player->TeleportToBGEntryPoint();
return;
}
// TODO Add support for LFG_TELEPORTERROR_FATIGUE
LfgTeleportError error = LFG_TELEPORTERROR_OK;
- Group* grp = plr->GetGroup();
+ Group* grp = player->GetGroup();
if (!grp || !grp->isLFGGroup()) // should never happen, but just in case...
error = LFG_TELEPORTERROR_INVALID_LOCATION;
- else if (!plr->isAlive())
+ else if (!player->isAlive())
error = LFG_TELEPORTERROR_PLAYER_DEAD;
- else if (plr->IsFalling() || plr->HasUnitState(UNIT_STAT_JUMPING))
+ else if (player->IsFalling() || player->HasUnitState(UNIT_STAT_JUMPING))
error = LFG_TELEPORTERROR_FALLING;
else
{
@@ -1678,7 +1674,7 @@ void LFGMgr::TeleportPlayer(Player* plr, bool out, bool fromOpcode /*= false*/)
if (!dungeon)
error = LFG_TELEPORTERROR_INVALID_LOCATION;
- else if (plr->GetMapId() != uint32(dungeon->map)) // Do not teleport players in dungeon to the entrance
+ else if (player->GetMapId() != uint32(dungeon->map)) // Do not teleport players in dungeon to the entrance
{
uint32 mapid = 0;
float x = 0;
@@ -1692,7 +1688,7 @@ void LFGMgr::TeleportPlayer(Player* plr, bool out, bool fromOpcode /*= false*/)
for (GroupReference* itr = grp->GetFirstMember(); itr != NULL && !mapid; itr = itr->next())
{
Player* plrg = itr->getSource();
- if (plrg && plrg != plr && plrg->GetMapId() == uint32(dungeon->map))
+ if (plrg && plrg != player && plrg->GetMapId() == uint32(dungeon->map))
{
mapid = plrg->GetMapId();
x = plrg->GetPositionX();
@@ -1708,7 +1704,7 @@ void LFGMgr::TeleportPlayer(Player* plr, bool out, bool fromOpcode /*= false*/)
AreaTrigger const* at = sObjectMgr->GetMapEntranceTrigger(dungeon->map);
if (!at)
{
- sLog->outError("LfgMgr::TeleportPlayer: Failed to teleport [" UI64FMTD "]: No areatrigger found for map: %u difficulty: %u", plr->GetGUID(), dungeon->map, dungeon->difficulty);
+ sLog->outError("LfgMgr::TeleportPlayer: Failed to teleport [" UI64FMTD "]: No areatrigger found for map: %u difficulty: %u", player->GetGUID(), dungeon->map, dungeon->difficulty);
error = LFG_TELEPORTERROR_INVALID_LOCATION;
}
else
@@ -1723,36 +1719,36 @@ void LFGMgr::TeleportPlayer(Player* plr, bool out, bool fromOpcode /*= false*/)
if (error == LFG_TELEPORTERROR_OK)
{
- if (!plr->GetMap()->IsDungeon() && !plr->GetMap()->IsRaid())
- plr->SetBattlegroundEntryPoint();
+ if (!player->GetMap()->IsDungeon() && !player->GetMap()->IsRaid())
+ player->SetBattlegroundEntryPoint();
- if (plr->isInFlight())
+ if (player->isInFlight())
{
- plr->GetMotionMaster()->MovementExpired();
- plr->CleanupAfterTaxiFlight();
+ player->GetMotionMaster()->MovementExpired();
+ player->CleanupAfterTaxiFlight();
}
- if (plr->TeleportTo(mapid, x, y, z, orientation))
+ if (player->TeleportTo(mapid, x, y, z, orientation))
// FIXME - HACK - this should be done by teleport, when teleporting far
- plr->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
else
{
error = LFG_TELEPORTERROR_INVALID_LOCATION;
- sLog->outError("LfgMgr::TeleportPlayer: Failed to teleport [" UI64FMTD "] to map %u: ", plr->GetGUID(), mapid);
+ sLog->outError("LfgMgr::TeleportPlayer: Failed to teleport [" UI64FMTD "] to map %u: ", player->GetGUID(), mapid);
}
}
}
}
if (error != LFG_TELEPORTERROR_OK)
- plr->GetSession()->SendLfgTeleportError(uint8(error));
+ player->GetSession()->SendLfgTeleportError(uint8(error));
}
/**
Give completion reward to player
@param[in] dungeonId Id of the dungeon finished
- @param[in] plr Player to reward
+ @param[in] player Player to reward
*/
void LFGMgr::RewardDungeonDoneFor(const uint32 dungeonId, Player* player)
{
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 300268ed7c8..3e324f4b5f4 100755
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -268,8 +268,8 @@ class LFGMgr
LfgReward const* GetRandomDungeonReward(uint32 dungeon, uint8 level);
// Queue
- void Join(Player* plr, uint8 roles, const LfgDungeonSet& dungeons, const std::string& comment);
- void Leave(Player* plr, Group* grp = NULL);
+ void Join(Player* player, uint8 roles, const LfgDungeonSet& dungeons, const std::string& comment);
+ void Leave(Player* player, Group* grp = NULL);
// Role Check
void UpdateRoleCheck(uint64 gguid, uint64 guid = 0, uint8 roles = ROLE_NONE);
@@ -278,20 +278,21 @@ class LFGMgr
void UpdateProposal(uint32 proposalId, uint64 guid, bool accept);
// Teleportation
- void TeleportPlayer(Player* plr, bool out, bool fromOpcode = false);
+ void TeleportPlayer(Player* player, bool out, bool fromOpcode = false);
// Vote kick
void InitBoot(Group* grp, uint64 kguid, uint64 vguid, std::string reason);
- void UpdateBoot(Player* plr, bool accept);
+ void UpdateBoot(Player* player, bool accept);
void OfferContinue(Group* grp);
- void InitializeLockedDungeons(Player* plr);
+ void InitializeLockedDungeons(Player* player);
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 SetState(uint64 guid, LfgState state);
void ClearState(uint64 guid);
void RemovePlayerData(uint64 guid);
void RemoveGroupData(uint64 guid);
@@ -304,7 +305,6 @@ class LFGMgr
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);
diff --git a/src/server/game/DungeonFinding/LFGPlayerData.cpp b/src/server/game/DungeonFinding/LFGPlayerData.cpp
index e9400f85d3b..4a6e86ab966 100644
--- a/src/server/game/DungeonFinding/LFGPlayerData.cpp
+++ b/src/server/game/DungeonFinding/LFGPlayerData.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/DungeonFinding/LFGPlayerData.h b/src/server/game/DungeonFinding/LFGPlayerData.h
index b576980ab79..e8bae1c5a0f 100644
--- a/src/server/game/DungeonFinding/LFGPlayerData.h
+++ b/src/server/game/DungeonFinding/LFGPlayerData.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp
index 23eb10a98ae..2966e799c58 100644
--- a/src/server/game/DungeonFinding/LFGScripts.cpp
+++ b/src/server/game/DungeonFinding/LFGScripts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -51,8 +51,8 @@ void LFGScripts::OnAddMember(Group* group, uint64 guid)
sLFGMgr->Leave(NULL, group);
if (sLFGMgr->GetState(guid) == LFG_STATE_QUEUED)
- if (Player* plr = ObjectAccessor::FindPlayer(guid))
- sLFGMgr->Leave(plr);
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
+ sLFGMgr->Leave(player);
}
void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod method, uint64 kicker, const char* reason)
@@ -82,7 +82,8 @@ void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod method,
}
sLFGMgr->ClearState(guid);
- if (Player* plr = ObjectAccessor::FindPlayer(guid))
+ sLFGMgr->SetState(guid, LFG_STATE_NONE);
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
{
/*
if (method == GROUP_REMOVEMETHOD_LEAVE)
@@ -92,9 +93,9 @@ void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod method,
*/
LfgUpdateData updateData = LfgUpdateData(LFG_UPDATETYPE_LEADER);
- plr->GetSession()->SendLfgUpdateParty(updateData);
- if (plr->GetMap()->IsDungeon()) // Teleport player out the dungeon
- sLFGMgr->TeleportPlayer(plr, true);
+ player->GetSession()->SendLfgUpdateParty(updateData);
+ if (player->GetMap()->IsDungeon()) // Teleport player out the dungeon
+ sLFGMgr->TeleportPlayer(player, true);
}
if (sLFGMgr->GetState(gguid) != LFG_STATE_FINISHED_DUNGEON)// Need more players to finish the dungeon
@@ -116,17 +117,17 @@ void LFGScripts::OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLe
return;
sLog->outDebug(LOG_FILTER_LFG, "LFGScripts::OnChangeLeader [" UI64FMTD "]: old [" UI64FMTD "] new [" UI64FMTD "]", gguid, newLeaderGuid, oldLeaderGuid);
- Player* plr = ObjectAccessor::FindPlayer(newLeaderGuid);
+ Player* player = ObjectAccessor::FindPlayer(newLeaderGuid);
LfgUpdateData updateData = LfgUpdateData(LFG_UPDATETYPE_LEADER);
- if (plr)
- plr->GetSession()->SendLfgUpdateParty(updateData);
+ if (player)
+ player->GetSession()->SendLfgUpdateParty(updateData);
- plr = ObjectAccessor::FindPlayer(oldLeaderGuid);
- if (plr)
+ player = ObjectAccessor::FindPlayer(oldLeaderGuid);
+ if (player)
{
updateData.updateType = LFG_UPDATETYPE_GROUP_DISBAND;
- plr->GetSession()->SendLfgUpdateParty(updateData);
+ player->GetSession()->SendLfgUpdateParty(updateData);
}
}
diff --git a/src/server/game/DungeonFinding/LFGScripts.h b/src/server/game/DungeonFinding/LFGScripts.h
index 9a2d358188f..f17f7b16af1 100644
--- a/src/server/game/DungeonFinding/LFGScripts.h
+++ b/src/server/game/DungeonFinding/LFGScripts.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index cdd5d61b1c9..da5975aafbe 100755
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
#include "GossipDef.h"
#include "World.h"
-Corpse::Corpse(CorpseType type) : WorldObject()
+Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES)
, m_type(type)
{
m_objectType |= TYPEMASK_CORPSE;
@@ -39,9 +39,6 @@ Corpse::Corpse(CorpseType type) : WorldObject()
m_time = time(NULL);
lootForBody = false;
-
- if (type != CORPSE_BONES)
- m_isWorldObject = true;
}
Corpse::~Corpse()
@@ -95,7 +92,7 @@ bool Corpse::Create(uint32 guidlow, Player* owner)
SetFloatValue(OBJECT_FIELD_SCALE_X, 1);
SetUInt64Value(CORPSE_FIELD_OWNER, owner->GetGUID());
- m_grid = Trinity::ComputeGridPair(GetPositionX(), GetPositionY());
+ _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY());
return true;
}
@@ -106,7 +103,7 @@ void Corpse::SaveToDB()
SQLTransaction trans = CharacterDatabase.BeginTransaction();
DeleteFromDB(trans);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CORPSE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CORPSE);
stmt->setUInt32(0, GetGUIDLow()); // corpseGuid
stmt->setUInt32(1, GUID_LOPART(GetOwnerGUID())); // guid
stmt->setFloat (2, GetPositionX()); // posX
@@ -162,20 +159,11 @@ void Corpse::DeleteFromDB(SQLTransaction& trans)
trans->Append(stmt);
}
-bool Corpse::LoadFromDB(uint32 guid, Field* fields)
+bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields)
{
uint32 ownerGuid = fields[17].GetUInt32();
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0
- m_type = CorpseType(fields[13].GetUInt8());
- if (m_type >= MAX_CORPSE_TYPE)
- {
- sLog->outError("Corpse (guid: %u, owner: %u) have wrong corpse type (%u), not loading.", guid, ownerGuid, m_type);
- return false;
- }
- if (m_type != CORPSE_BONES)
- m_isWorldObject = true;
-
float posX = fields[0].GetFloat();
float posY = fields[1].GetFloat();
float posZ = fields[2].GetFloat();
@@ -211,7 +199,7 @@ bool Corpse::LoadFromDB(uint32 guid, Field* fields)
return false;
}
- m_grid = Trinity::ComputeGridPair(GetPositionX(), GetPositionY());
+ _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY());
return true;
}
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index bd68eb688f5..1aaf56eaf27 100755
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -59,7 +59,7 @@ class Corpse : public WorldObject, public GridObject<Corpse>
bool Create(uint32 guidlow, Player* owner);
void SaveToDB();
- bool LoadFromDB(uint32 guid, Field* fields);
+ bool LoadCorpseFromDB(uint32 guid, Field* fields);
void DeleteBonesFromWorld();
void DeleteFromDB(SQLTransaction& trans);
@@ -70,8 +70,8 @@ class Corpse : public WorldObject, public GridObject<Corpse>
void ResetGhostTime() { m_time = time(NULL); }
CorpseType GetType() const { return m_type; }
- GridPair const& GetGrid() const { return m_grid; }
- void SetGrid(GridPair const& grid) { m_grid = grid; }
+ GridCoord const& GetGridCoord() const { return _gridCoord; }
+ void SetGridCoord(GridCoord const& gridCoord) { _gridCoord = gridCoord; }
Loot loot; // remove insignia ONLY at BG
Player* lootRecipient;
@@ -88,7 +88,7 @@ class Corpse : public WorldObject, public GridObject<Corpse>
private:
CorpseType m_type;
time_t m_time;
- GridPair m_grid; // gride for corpse position for fast search
+ GridCoord _gridCoord; // gride for corpse position for fast search
};
#endif
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 3842cc1924e..a38cfe7b6ef 100755
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -137,14 +137,13 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
return true;
}
-Creature::Creature(): Unit(),
+Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapCreature(),
lootForPickPocketed(false), lootForBody(false), m_groupLootTimer(0), lootingGroupLowGUID(0),
m_PlayerDamageReq(0), m_lootMoney(0), m_lootRecipient(0), m_lootRecipientGroup(0), m_corpseRemoveTime(0), m_respawnTime(0),
m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE),
m_defaultMovementType(IDLE_MOTION_TYPE), m_DBTableGuid(0), m_equipmentId(0), m_AlreadyCallAssistance(false),
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL),
-m_creatureInfo(NULL), m_creatureData(NULL), m_formation(NULL),
-MapCreature()
+m_creatureInfo(NULL), m_creatureData(NULL), m_formation(NULL)
{
m_regenTimer = CREATURE_REGEN_INTERVAL;
m_valuesCount = UNIT_END;
@@ -161,6 +160,7 @@ MapCreature()
ResetLootMode(); // restore default loot mode
TriggerJustRespawned = false;
+ m_isTempWorldObject = false;
}
Creature::~Creature()
@@ -246,7 +246,7 @@ void Creature::RemoveCorpse(bool setSpawnTime)
m_respawnTime = time(NULL) + respawnDelay;
float x, y, z, o;
- GetRespawnCoord(x, y, z, &o);
+ GetRespawnPosition(x, y, z, &o);
SetHomePosition(x, y, z, o);
GetMap()->CreatureRelocation(this, x, y, z, o);
}
@@ -660,9 +660,8 @@ void Creature::DoFleeToGetAssistance()
{
Creature* creature = NULL;
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::NearestAssistCreatureInCreatureRangeCheck u_check(this, getVictim(), radius);
Trinity::CreatureLastSearcher<Trinity::NearestAssistCreatureInCreatureRangeCheck> searcher(this, creature, u_check);
@@ -789,16 +788,11 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry,
LastUsedScriptID = GetCreatureInfo()->ScriptID;
// TODO: Replace with spell, handle from DB
- if (isSpiritHealer())
+ if (isSpiritHealer() || isSpiritGuide())
{
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
}
- else if (isSpiritGuide())
- {
- m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST | GHOST_VISIBILITY_ALIVE);
- m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST | GHOST_VISIBILITY_ALIVE);
- }
if (Entry == VISUAL_WAYPOINT)
SetVisible(false);
@@ -1248,7 +1242,7 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint3
return true;
}
-bool Creature::LoadFromDB(uint32 guid, Map* map)
+bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap)
{
CreatureData const* data = sObjectMgr->GetCreatureData(guid);
@@ -1286,7 +1280,7 @@ bool Creature::LoadFromDB(uint32 guid, Map* map)
if (canFly())
{
float tz = map->GetHeight(data->posX, data->posY, data->posZ, false);
- if (data->posZ - tz > 0.1)
+ if (data->posZ - tz > 0.1f)
Relocate(data->posX, data->posY, tz);
}
}
@@ -1317,6 +1311,8 @@ bool Creature::LoadFromDB(uint32 guid, Map* map)
m_creatureData = data;
+ if (addToMap && !GetMap()->AddToMap(this))
+ return false;
return true;
}
@@ -1383,22 +1379,19 @@ void Creature::DeleteFromDB()
WorldDatabase.CommitTransaction(trans);
}
-bool Creature::isVisibleForInState(WorldObject const* seer) const
+bool Creature::IsInvisibleDueToDespawn() const
{
- if (!Unit::isVisibleForInState(seer))
- return false;
+ if (Unit::IsInvisibleDueToDespawn())
+ return true;
if (isAlive() || m_corpseRemoveTime > time(NULL))
- return true;
+ return false;
- return false;
+ return true;
}
-bool Creature::canSeeAlways(WorldObject const* obj) const
+bool Creature::CanAlwaysSee(WorldObject const* obj) const
{
- if (Unit::canSeeAlways(obj))
- return true;
-
if (IsAIEnabled && AI()->CanSeeAlways(obj))
return true;
@@ -1443,14 +1436,14 @@ bool Creature::canStartAttack(Unit const* who, bool force) const
return IsWithinLOSInMap(who);
}
-float Creature::GetAttackDistance(Unit const* pl) const
+float Creature::GetAttackDistance(Unit const* player) const
{
float aggroRate = sWorld->getRate(RATE_CREATURE_AGGRO);
if (aggroRate == 0)
return 0.0f;
- uint32 playerlevel = pl->getLevelForTarget(this);
- uint32 creaturelevel = getLevelForTarget(pl);
+ uint32 playerlevel = player->getLevelForTarget(this);
+ uint32 creaturelevel = getLevelForTarget(player);
int32 leveldif = int32(playerlevel) - int32(creaturelevel);
@@ -1471,7 +1464,7 @@ float Creature::GetAttackDistance(Unit const* pl) const
RetDistance += GetTotalAuraModifier(SPELL_AURA_MOD_DETECT_RANGE);
// detected range auras
- RetDistance += pl->GetTotalAuraModifier(SPELL_AURA_MOD_DETECTED_RANGE);
+ RetDistance += player->GetTotalAuraModifier(SPELL_AURA_MOD_DETECTED_RANGE);
}
// "Minimum Aggro Radius for a mob seems to be combat range (5 yards)"
@@ -1514,9 +1507,6 @@ void Creature::setDeathState(DeathState s)
if (m_formation && m_formation->getLeader() == this)
m_formation->FormationReset(true);
- if (ZoneScript* zoneScript = GetZoneScript())
- zoneScript->OnCreatureDeath(this);
-
if ((canFly() || IsFlying()) && FallGround())
return;
@@ -1764,9 +1754,8 @@ SpellInfo const* Creature::reachWithSpellCure(Unit* pVictim)
// select nearest hostile unit within the given distance (regardless of threat list).
Unit* Creature::SelectNearestTarget(float dist) const
{
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Unit* target = NULL;
@@ -1791,9 +1780,8 @@ Unit* Creature::SelectNearestTarget(float dist) const
// select nearest hostile unit within the given attack distance (i.e. distance is ignored if > than ATTACK_DISTANCE), regardless of threat list.
Unit* Creature::SelectNearestTargetInAttackDistance(float dist) const
{
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Unit* target = NULL;
@@ -1854,9 +1842,8 @@ void Creature::CallAssistance()
std::list<Creature*> assistList;
{
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AnyAssistCreatureInRangeCheck u_check(this, getVictim(), radius);
@@ -1882,22 +1869,21 @@ void Creature::CallAssistance()
}
}
-void Creature::CallForHelp(float fRadius)
+void Creature::CallForHelp(float radius)
{
- if (fRadius <= 0.0f || !getVictim() || isPet() || isCharmed())
+ if (radius <= 0.0f || !getVictim() || isPet() || isCharmed())
return;
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
- Trinity::CallOfHelpCreatureInRangeDo u_do(this, getVictim(), fRadius);
+ Trinity::CallOfHelpCreatureInRangeDo u_do(this, getVictim(), radius);
Trinity::CreatureWorker<Trinity::CallOfHelpCreatureInRangeDo> worker(this, u_do);
TypeContainerVisitor<Trinity::CreatureWorker<Trinity::CallOfHelpCreatureInRangeDo>, GridTypeMapContainer > grid_creature_searcher(worker);
- cell.Visit(p, grid_creature_searcher, *GetMap(), *this, fRadius);
+ cell.Visit(p, grid_creature_searcher, *GetMap(), *this, radius);
}
bool Creature::CanAssistTo(const Unit* u, const Unit* enemy, bool checkfaction /*= true*/) const
@@ -2209,7 +2195,7 @@ time_t Creature::GetRespawnTimeEx() const
return now;
}
-void Creature::GetRespawnCoord(float &x, float &y, float &z, float* ori, float* dist) const
+void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, float* dist) const
{
if (m_DBTableGuid)
{
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 1d25dd46992..adad02653bf 100755
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -156,7 +156,7 @@ struct CreatureTemplate
else if (type_flags & CREATURE_TYPEFLAGS_MININGLOOT)
return SKILL_MINING;
else if (type_flags & CREATURE_TYPEFLAGS_ENGINEERLOOT)
- return SKILL_ENGINERING;
+ return SKILL_ENGINEERING;
else
return SKILL_SKINNING; // normal case
}
@@ -419,7 +419,7 @@ class MapCreature
friend class Map; //map for moving creatures
friend class ObjectGridLoader; //grid loader for loading creatures
-public:
+protected:
MapCreature() : _moveState(CREATURE_CELL_MOVE_NONE) {}
private:
@@ -440,7 +440,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
{
public:
- explicit Creature();
+ explicit Creature(bool isWorldObject = false);
virtual ~Creature();
void AddToWorld();
@@ -456,7 +456,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
void Update(uint32 time); // overwrited Unit::Update
- void GetRespawnCoord(float &x, float &y, float &z, float* ori = NULL, float* dist =NULL) const;
+ void GetRespawnPosition(float &x, float &y, float &z, float* ori = NULL, float* dist =NULL) const;
uint32 GetEquipmentId() const { return GetCreatureInfo()->equipmentId; }
void SetCorpseDelay(uint32 delay) { m_corpseDelay = delay; }
@@ -575,7 +575,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
void setDeathState(DeathState s); // override virtual Unit::setDeathState
bool FallGround();
- bool LoadFromDB(uint32 guid, Map* map);
+ bool LoadFromDB(uint32 guid, Map* map) { return LoadCreatureFromDB(guid, map, false); }
+ bool LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap = true);
void SaveToDB();
// overriden in Pet
virtual void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
@@ -607,7 +608,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
CreatureSpellCooldowns m_CreatureCategoryCooldowns;
bool canStartAttack(Unit const* u, bool force) const;
- float GetAttackDistance(Unit const* pl) const;
+ float GetAttackDistance(Unit const* player) const;
void SendAIReaction(AiReaction reactionType);
@@ -706,6 +707,9 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
uint32 GetGUIDTransport() { return guid_transport; }
void FarTeleportTo(Map* map, float X, float Y, float Z, float O);
+
+ bool m_isTempWorldObject; //true when possessed
+
protected:
bool CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData* data = NULL);
bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
@@ -752,8 +756,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
uint16 m_LootMode; // bitmask, default LOOT_MODE_DEFAULT, determines what loot will be lootable
uint32 guid_transport;
- bool isVisibleForInState(WorldObject const* seer) const;
- bool canSeeAlways(WorldObject const* obj) const;
+ bool IsInvisibleDueToDespawn() const;
+ bool CanAlwaysSee(WorldObject const* obj) const;
private:
//WaypointMovementGenerator vars
uint32 m_waypointID;
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index 0167aa08d30..3a63c32fc1e 100755
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -88,21 +88,6 @@ void LoadCreatureFormations()
return;
}
- std::set<uint32> guidSet;
-
- QueryResult guidResult = WorldDatabase.PQuery("SELECT guid FROM creature");
- if (guidResult)
- {
- do
- {
- Field* fields = guidResult->Fetch();
- uint32 guid = fields[0].GetUInt32();
-
- guidSet.insert(guid);
-
- } while (guidResult->NextRow());
- }
-
uint32 count = 0;
Field* fields;
FormationInfo* group_member;
@@ -114,8 +99,8 @@ void LoadCreatureFormations()
//Load group member data
group_member = new FormationInfo;
group_member->leaderGUID = fields[0].GetUInt32();
- uint32 memberGUID = fields[1].GetUInt32();
- group_member->groupAI = fields[4].GetUInt8();
+ uint32 memberGUID = fields[1].GetUInt32();
+ group_member->groupAI = fields[4].GetUInt8();
//If creature is group leader we may skip loading of dist/angle
if (group_member->leaderGUID != memberGUID)
{
@@ -130,14 +115,14 @@ void LoadCreatureFormations()
// check data correctness
{
- if (guidSet.find(group_member->leaderGUID) == guidSet.end())
+ if (!sObjectMgr->GetCreatureData(group_member->leaderGUID))
{
sLog->outErrorDb("creature_formations table leader guid %u incorrect (not exist)", group_member->leaderGUID);
delete group_member;
continue;
}
- if (guidSet.find(memberGUID) == guidSet.end())
+ if (!sObjectMgr->GetCreatureData(memberGUID))
{
sLog->outErrorDb("creature_formations table member guid %u incorrect (not exist)", memberGUID);
delete group_member;
diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h
index 3ef7e157b66..80e552f7e93 100755
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 3ff21645a27..a39bd8eddf7 100755
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -337,13 +337,13 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
data << uint32(quest->GetRewChoiceItemsCount());
for (uint32 i=0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
{
- if (!quest->RewChoiceItemId[i])
+ if (!quest->RewardChoiceItemId[i])
continue;
- data << uint32(quest->RewChoiceItemId[i]);
- data << uint32(quest->RewChoiceItemCount[i]);
+ data << uint32(quest->RewardChoiceItemId[i]);
+ data << uint32(quest->RewardChoiceItemCount[i]);
- if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewChoiceItemId[i]))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardChoiceItemId[i]))
data << uint32(itemTemplate->DisplayInfoID);
else
data << uint32(0x00);
@@ -353,13 +353,13 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
for (uint32 i=0; i < QUEST_REWARDS_COUNT; ++i)
{
- if (!quest->RewItemId[i])
+ if (!quest->RewardItemId[i])
continue;
- data << uint32(quest->RewItemId[i]);
- data << uint32(quest->RewItemCount[i]);
+ data << uint32(quest->RewardItemId[i]);
+ data << uint32(quest->RewardItemIdCount[i]);
- if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewItemId[i]))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardItemId[i]))
data << uint32(itemTemplate->DisplayInfoID);
else
data << uint32(0);
@@ -371,7 +371,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
// rewarded honor points. Multiply with 10 to satisfy client
data << 10 * Trinity::Honor::hk_honor_at_level(_session->GetPlayer()->getLevel(), quest->GetRewHonorMultiplier());
- data << float(0); // new 3.3.0, honor multiplier?
+ data << float(0.0f); // new 3.3.0, honor multiplier?
data << uint32(quest->GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast == 0)
data << int32(quest->GetRewSpellCast()); // casted spell
data << uint32(quest->GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles)
@@ -380,13 +380,13 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
data << uint32(0); // unk
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- data << uint32(quest->RewRepFaction[i]);
+ data << uint32(quest->RewardFactionId[i]);
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- data << int32(quest->RewRepValueId[i]);
+ data << int32(quest->RewardFactionValueId[i]);
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- data << int32(quest->RewRepValue[i]);
+ data << int32(quest->RewardFactionValueIdOverride[i]);
data << uint32(QUEST_EMOTE_COUNT);
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
@@ -478,24 +478,24 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
{
for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i)
{
- data << uint32(quest->RewItemId[i]);
- data << uint32(quest->RewItemCount[i]);
+ data << uint32(quest->RewardItemId[i]);
+ data << uint32(quest->RewardItemIdCount[i]);
}
for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
{
- data << uint32(quest->RewChoiceItemId[i]);
- data << uint32(quest->RewChoiceItemCount[i]);
+ data << uint32(quest->RewardChoiceItemId[i]);
+ data << uint32(quest->RewardChoiceItemCount[i]);
}
}
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
- data << uint32(quest->RewRepFaction[i]);
+ data << uint32(quest->RewardFactionId[i]);
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc?
- data << int32(quest->RewRepValueId[i]);
+ data << int32(quest->RewardFactionValueId[i]);
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0)
- data << int32(quest->RewRepValue[i]);
+ data << int32(quest->RewardFactionValueIdOverride[i]);
data << quest->GetPointMapId();
data << quest->GetPointX();
@@ -510,20 +510,20 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
{
- if (quest->ReqCreatureOrGOId[i] < 0)
- data << uint32((quest->ReqCreatureOrGOId[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000)
+ if (quest->RequiredNpcOrGo[i] < 0)
+ data << uint32((quest->RequiredNpcOrGo[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000)
else
- data << uint32(quest->ReqCreatureOrGOId[i]);
+ data << uint32(quest->RequiredNpcOrGo[i]);
- data << uint32(quest->ReqCreatureOrGOCount[i]);
- data << uint32(quest->ReqSourceId[i]);
+ data << uint32(quest->RequiredNpcOrGoCount[i]);
+ data << uint32(quest->RequiredSourceItemId[i]);
data << uint32(0); // req source count?
}
for (uint32 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
{
- data << uint32(quest->ReqItemId[i]);
- data << uint32(quest->ReqItemCount[i]);
+ data << uint32(quest->RequiredItemId[i]);
+ data << uint32(quest->RequiredItemCount[i]);
}
for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
@@ -576,10 +576,10 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b
data << uint32(quest->GetRewChoiceItemsCount());
for (uint32 i=0; i < quest->GetRewChoiceItemsCount(); ++i)
{
- data << uint32(quest->RewChoiceItemId[i]);
- data << uint32(quest->RewChoiceItemCount[i]);
+ data << uint32(quest->RewardChoiceItemId[i]);
+ data << uint32(quest->RewardChoiceItemCount[i]);
- if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewChoiceItemId[i]))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardChoiceItemId[i]))
data << uint32(itemTemplate->DisplayInfoID);
else
data << uint32(0);
@@ -588,10 +588,10 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b
data << uint32(quest->GetRewItemsCount());
for (uint32 i = 0; i < quest->GetRewItemsCount(); ++i)
{
- data << uint32(quest->RewItemId[i]);
- data << uint32(quest->RewItemCount[i]);
+ data << uint32(quest->RewardItemId[i]);
+ data << uint32(quest->RewardItemIdCount[i]);
- if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewItemId[i]))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardItemId[i]))
data << uint32(itemTemplate->DisplayInfoID);
else
data << uint32(0);
@@ -612,13 +612,13 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b
data << uint32(0);
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
- data << uint32(quest->RewRepFaction[i]);
+ data << uint32(quest->RewardFactionId[i]);
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid in QuestFactionReward.dbc (zero based)?
- data << int32(quest->RewRepValueId[i]);
+ data << int32(quest->RewardFactionValueId[i]);
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward reputation override?
- data << uint32(quest->RewRepValue[i]);
+ data << uint32(quest->RewardFactionValueIdOverride[i]);
_session->SendPacket(&data);
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), quest->GetQuestId());
@@ -676,13 +676,13 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID,
data << uint32(quest->GetReqItemsCount());
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
{
- if (!quest->ReqItemId[i])
+ if (!quest->RequiredItemId[i])
continue;
- data << uint32(quest->ReqItemId[i]);
- data << uint32(quest->ReqItemCount[i]);
+ data << uint32(quest->RequiredItemId[i]);
+ data << uint32(quest->RequiredItemCount[i]);
- if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->ReqItemId[i]))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RequiredItemId[i]))
data << uint32(itemTemplate->DisplayInfoID);
else
data << uint32(0);
diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h
index 517395578cf..15766bbcd59 100755
--- a/src/server/game/Entities/Creature/GossipDef.h
+++ b/src/server/game/Entities/Creature/GossipDef.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index b17606b83cc..2af6b4c04fd 100755
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -22,8 +22,8 @@
#include "ObjectMgr.h"
#include "TemporarySummon.h"
-TempSummon::TempSummon(SummonPropertiesEntry const* properties, Unit* owner) :
-Creature(), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
+TempSummon::TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) :
+Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
m_timer(0), m_lifetime(0)
{
m_summonerGUID = owner ? owner->GetGUID() : 0;
@@ -272,7 +272,7 @@ void TempSummon::RemoveFromWorld()
Creature::RemoveFromWorld();
}
-Minion::Minion(SummonPropertiesEntry const* properties, Unit* owner) : TempSummon(properties, owner)
+Minion::Minion(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) : TempSummon(properties, owner, isWorldObject)
, m_owner(owner)
{
ASSERT(m_owner);
@@ -306,7 +306,7 @@ bool Minion::IsGuardianPet() const
return isPet() || (m_Properties && m_Properties->Category == SUMMON_CATEGORY_PET);
}
-Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner) : Minion(properties, owner)
+Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) : Minion(properties, owner, isWorldObject)
, m_bonusSpellDamage(0)
{
memset(m_statFromOwner, 0, sizeof(float)*MAX_STATS);
@@ -340,7 +340,7 @@ void Guardian::InitSummon()
m_owner->ToPlayer()->CharmSpellInitialize();
}
-Puppet::Puppet(SummonPropertiesEntry const* properties, Unit* owner) : Minion(properties, owner)
+Puppet::Puppet(SummonPropertiesEntry const* properties, Unit* owner) : Minion(properties, owner, false) //maybe true?
{
ASSERT(owner->GetTypeId() == TYPEID_PLAYER);
m_owner = (Player*)owner;
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index 1982dec4bb8..fa1e134b1ac 100755
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
class TempSummon : public Creature
{
public:
- explicit TempSummon(SummonPropertiesEntry const* properties, Unit* owner);
+ explicit TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
virtual ~TempSummon() {}
void Update(uint32 time);
virtual void InitStats(uint32 lifetime);
@@ -48,7 +48,7 @@ class TempSummon : public Creature
class Minion : public TempSummon
{
public:
- Minion(SummonPropertiesEntry const* properties, Unit* owner);
+ Minion(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
void InitStats(uint32 duration);
void RemoveFromWorld();
Unit* GetOwner() { return m_owner; }
@@ -64,7 +64,7 @@ class Minion : public TempSummon
class Guardian : public Minion
{
public:
- Guardian(SummonPropertiesEntry const* properties, Unit* owner);
+ Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
void InitStats(uint32 duration);
bool InitStatsForLevel(uint8 level);
void InitSummon();
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 4fc463e6e88..fa975e0cd39 100755
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
#include "GridNotifiersImpl.h"
#include "ScriptMgr.h"
-DynamicObject::DynamicObject() : WorldObject(),
+DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject),
_aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _isViewpoint(false)
{
m_objectType |= TYPEMASK_DYNAMICOBJECT;
@@ -79,7 +79,7 @@ void DynamicObject::RemoveFromWorld()
}
}
-bool DynamicObject::Create(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, bool active, DynamicObjectType type)
+bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type)
{
SetMap(caster->GetMap());
Relocate(pos);
@@ -105,7 +105,12 @@ bool DynamicObject::Create(uint32 guidlow, Unit* caster, uint32 spellId, Positio
SetFloatValue(DYNAMICOBJECT_RADIUS, radius);
SetUInt32Value(DYNAMICOBJECT_CASTTIME, getMSTime());
- m_isWorldObject = active;
+ if (IsWorldObject())
+ setActive(true); //must before add to map to be put in world container
+
+ if (!GetMap()->AddToMap(this))
+ return false;
+
return true;
}
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h
index 419aaf9e83b..7e68f6acd38 100755
--- a/src/server/game/Entities/DynamicObject/DynamicObject.h
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -35,13 +35,13 @@ enum DynamicObjectType
class DynamicObject : public WorldObject, public GridObject<DynamicObject>
{
public:
- DynamicObject();
+ DynamicObject(bool isWorldObject);
~DynamicObject();
void AddToWorld();
void RemoveFromWorld();
- bool Create(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, bool active, DynamicObjectType type);
+ bool CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type);
void Update(uint32 p_time);
void Remove();
void SetDuration(int32 newDuration);
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 6e991bdc005..decbc49d3fe 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,33 +16,21 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "Common.h"
-#include "QuestDef.h"
#include "GameObjectAI.h"
#include "ObjectMgr.h"
#include "GroupMgr.h"
#include "PoolMgr.h"
#include "SpellMgr.h"
-#include "Spell.h"
-#include "UpdateMask.h"
-#include "Opcodes.h"
-#include "WorldPacket.h"
#include "World.h"
-#include "DatabaseEnv.h"
-#include "LootMgr.h"
-#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "CellImpl.h"
-#include "InstanceScript.h"
-#include "Battleground.h"
-#include "Util.h"
#include "OutdoorPvPMgr.h"
#include "BattlegroundAV.h"
#include "ScriptMgr.h"
#include "CreatureAISelector.h"
#include "Group.h"
-GameObject::GameObject() : WorldObject(), m_goValue(new GameObjectValue), m_AI(NULL)
+GameObject::GameObject() : WorldObject(false), m_goValue(new GameObjectValue), m_AI(NULL)
{
m_objectType |= TYPEMASK_GAMEOBJECT;
m_objectTypeId = TYPEID_GAMEOBJECT;
@@ -73,15 +61,21 @@ GameObject::GameObject() : WorldObject(), m_goValue(new GameObjectValue), m_AI(N
GameObject::~GameObject()
{
delete m_goValue;
+ delete m_AI;
//if (m_uint32Values) // field array can be not exist if GameOBject not loaded
// CleanupsBeforeDelete();
}
bool GameObject::AIM_Initialize()
{
+ if (m_AI)
+ delete m_AI;
m_AI = FactorySelector::SelectGameObjectAI(this);
- if (!m_AI) return false;
+
+ if (!m_AI)
+ return false;
+
m_AI->InitializeAI();
return true;
}
@@ -97,27 +91,31 @@ void GameObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
RemoveFromWorld();
if (m_uint32Values) // field array can be not exist if GameOBject not loaded
- {
- // Possible crash at access to deleted GO in Unit::m_gameobj
- if (uint64 owner_guid = GetOwnerGUID())
- {
- Unit* owner = ObjectAccessor::GetUnit(*this, owner_guid);
+ RemoveFromOwner();
+}
- if (owner)
- owner->RemoveGameObject(this, false);
- else
- {
- const char * ownerType = "creature";
- if (IS_PLAYER_GUID(owner_guid))
- ownerType = "player";
- else if (IS_PET_GUID(owner_guid))
- ownerType = "pet";
-
- sLog->outError("Delete GameObject (GUID: %u Entry: %u SpellId %u LinkedGO %u) that lost references to owner (GUID %u Type '%s') GO list. Crash possible later.",
- GetGUIDLow(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), GUID_LOPART(owner_guid), ownerType);
- }
- }
+void GameObject::RemoveFromOwner()
+{
+ uint64 ownerGUID = GetOwnerGUID();
+ if (!ownerGUID)
+ return;
+
+ if (Unit* owner = ObjectAccessor::GetUnit(*this, ownerGUID))
+ {
+ owner->RemoveGameObject(this, false);
+ ASSERT(!GetOwnerGUID());
+ return;
}
+
+ const char * ownerType = "creature";
+ if (IS_PLAYER_GUID(ownerGUID))
+ ownerType = "player";
+ else if (IS_PET_GUID(ownerGUID))
+ ownerType = "pet";
+
+ sLog->outCrash("Delete GameObject (GUID: %u Entry: %u SpellId %u LinkedGO %u) that lost references to owner (GUID %u Type '%s') GO list. Crash possible later.",
+ GetGUIDLow(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), GUID_LOPART(ownerGUID), ownerType);
+ SetOwnerGUID(0);
}
void GameObject::AddToWorld()
@@ -141,14 +139,7 @@ void GameObject::RemoveFromWorld()
if (m_zoneScript)
m_zoneScript->OnGameObjectRemove(this);
- // Possible crash at access to deleted GO in Unit::m_gameobj
- if (uint64 owner_guid = GetOwnerGUID())
- {
- if (Unit* owner = GetOwner())
- owner->RemoveGameObject(this, false);
- else
- sLog->outError("Delete GameObject (GUID: %u Entry: %u, Name: %s) that have references in not found creature %u GO list. Crash possible later.", GetGUIDLow(), GetGOInfo()->entry, GetGOInfo()->name.c_str(), GUID_LOPART(owner_guid));
- }
+ RemoveFromOwner();
WorldObject::RemoveFromWorld();
sObjectAccessor->RemoveObject(this);
}
@@ -607,13 +598,8 @@ void GameObject::AddUniqueUse(Player* player)
void GameObject::Delete()
{
SetLootState(GO_NOT_READY);
- if (GetOwnerGUID())
- if (Unit* owner = GetOwner())
- owner->RemoveGameObject(this, false);
- else //! Owner not in world anymore
- SetOwnerGUID(0);
+ RemoveFromOwner();
- ASSERT (!GetOwnerGUID());
SendObjectDeSpawnAnim(GetGUID());
SetGoState(GO_STATE_READY);
@@ -709,7 +695,7 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask)
WorldDatabase.CommitTransaction(trans);
}
-bool GameObject::LoadFromDB(uint32 guid, Map* map)
+bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap)
{
GameObjectData const* data = sObjectMgr->GetGOData(guid);
@@ -774,6 +760,9 @@ bool GameObject::LoadFromDB(uint32 guid, Map* map)
m_goData = data;
+ if (addToMap && !GetMap()->AddToMap(this))
+ return false;
+
return true;
}
@@ -781,8 +770,18 @@ void GameObject::DeleteFromDB()
{
sObjectMgr->RemoveGORespawnTime(m_DBTableGuid, GetInstanceId());
sObjectMgr->DeleteGOData(m_DBTableGuid);
- WorldDatabase.PExecute("DELETE FROM gameobject WHERE guid = '%u'", m_DBTableGuid);
- WorldDatabase.PExecute("DELETE FROM game_event_gameobject WHERE guid = '%u'", m_DBTableGuid);
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT);
+
+ stmt->setUInt32(0, m_DBTableGuid);
+
+ WorldDatabase.Execute(stmt);
+
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
+
+ stmt->setUInt32(0, m_DBTableGuid);
+
+ WorldDatabase.Execute(stmt);
}
GameObject* GameObject::GetGameObject(WorldObject& object, uint64 guid)
@@ -843,9 +842,9 @@ void GameObject::SaveRespawnTime()
sObjectMgr->SaveGORespawnTime(m_DBTableGuid, GetInstanceId(), m_respawnTime);
}
-bool GameObject::isAlwaysVisibleFor(WorldObject const* seer) const
+bool GameObject::IsAlwaysVisibleFor(WorldObject const* seer) const
{
- if (WorldObject::isAlwaysVisibleFor(seer))
+ if (WorldObject::IsAlwaysVisibleFor(seer))
return true;
if (IsTransport())
@@ -854,16 +853,16 @@ bool GameObject::isAlwaysVisibleFor(WorldObject const* seer) const
return false;
}
-bool GameObject::isVisibleForInState(WorldObject const* seer) const
+bool GameObject::IsInvisibleDueToDespawn() const
{
- if (!WorldObject::isVisibleForInState(seer))
- return false;
+ if (WorldObject::IsInvisibleDueToDespawn())
+ return true;
// Despawned
if (!isSpawned())
- return false;
+ return true;
- return true;
+ return false;
}
void GameObject::Respawn()
@@ -935,9 +934,8 @@ void GameObject::TriggeringLinkedGameObject(uint32 trapEntry, Unit* target)
GameObject* trapGO = NULL;
{
// using original GO distance
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::NearestGameObjectEntryInObjectRangeCheck go_check(*target, trapEntry, range);
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectEntryInObjectRangeCheck> checker(this, trapGO, go_check);
@@ -955,9 +953,8 @@ GameObject* GameObject::LookupFishingHoleAround(float range)
{
GameObject* ok = NULL;
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::NearestGameObjectFishingHole u_check(*this, range);
Trinity::GameObjectSearcher<Trinity::NearestGameObjectFishingHole> checker(this, ok, u_check);
@@ -1290,8 +1287,9 @@ void GameObject::Use(Unit* user)
{
player->UpdateFishingSkill();
+ //TODO: I do not understand this hack. Need some explanation.
// prevent removing GO at spell cancel
- player->RemoveGameObject(this, false);
+ RemoveFromOwner();
SetOwnerGUID(player->GetGUID());
//TODO: find reasonable value for fishing hole search
@@ -1539,12 +1537,11 @@ void GameObject::Use(Unit* user)
{
case 179785: // Silverwing Flag
case 179786: // Warsong Flag
- // check if it's correct bg
- if (bg->IsRandom() ? bg->GetTypeID(true) : bg->GetTypeID(false) == BATTLEGROUND_WS)
+ if (bg->GetTypeID(true) == BATTLEGROUND_WS)
bg->EventPlayerClickedOnFlag(player, this);
break;
case 184142: // Netherstorm Flag
- if (bg->IsRandom() ? bg->GetTypeID(true) : bg->GetTypeID(false) == BATTLEGROUND_EY)
+ if (bg->GetTypeID(true) == BATTLEGROUND_EY)
bg->EventPlayerClickedOnFlag(player, this);
break;
}
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 3402eaa64bc..910b9129e45 100755
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -648,7 +648,8 @@ class GameObject : public WorldObject, public GridObject<GameObject>
void SaveToDB();
void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
- bool LoadFromDB(uint32 guid, Map* map);
+ bool LoadFromDB(uint32 guid, Map* map) { return LoadGameObjectFromDB(guid, map, false); }
+ bool LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap = true);
void DeleteFromDB();
void SetOwnerGUID(uint64 owner)
@@ -752,8 +753,8 @@ class GameObject : public WorldObject, public GridObject<GameObject>
void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target);
- bool isAlwaysVisibleFor(WorldObject const* seer) const;
- bool isVisibleForInState(WorldObject const* seer) const;
+ bool IsAlwaysVisibleFor(WorldObject const* seer) const;
+ bool IsInvisibleDueToDespawn() const;
uint8 getLevelForTarget(WorldObject const* target) const
{
@@ -815,6 +816,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>
uint16 m_LootMode; // bitmask, default LOOT_MODE_DEFAULT, determines what loot will be lootable
private:
+ void RemoveFromOwner();
void SwitchDoorOrButton(bool activate, bool alternative = false);
//! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size.
diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp
index c6c00820463..4eede93bd37 100755
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h
index 463425076d4..5a533d9cf57 100755
--- a/src/server/game/Entities/Item/Container/Bag.h
+++ b/src/server/game/Entities/Item/Container/Bag.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index d3832ad9151..12c26904169 100755
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -320,7 +320,7 @@ void Item::SaveToDB(SQLTransaction& trans)
case ITEM_CHANGED:
{
uint8 index = 0;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(uState == ITEM_NEW ? CHAR_ADD_ITEM_INSTANCE : CHAR_UPDATE_ITEM_INSTANCE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(uState == ITEM_NEW ? CHAR_REP_ITEM_INSTANCE : CHAR_UPD_ITEM_INSTANCE);
stmt->setUInt32( index, GetEntry());
stmt->setUInt32(++index, GUID_LOPART(GetOwnerGUID()));
stmt->setUInt32(++index, GUID_LOPART(GetUInt64Value(ITEM_FIELD_CREATOR)));
@@ -354,7 +354,7 @@ void Item::SaveToDB(SQLTransaction& trans)
if ((uState == ITEM_CHANGED) && HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
{
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_GIFT_OWNER);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GIFT_OWNER);
stmt->setUInt32(0, GUID_LOPART(GetOwnerGUID()));
stmt->setUInt32(1, guid);
trans->Append(stmt);
@@ -460,7 +460,7 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entr
if (need_save) // normal item changed state set not work at loading
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_ITEM_INSTANCE_ON_LOAD);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD);
stmt->setUInt32(0, GetUInt32Value(ITEM_FIELD_DURATION));
stmt->setUInt32(1, GetUInt32Value(ITEM_FIELD_FLAGS));
stmt->setUInt32(2, GetUInt32Value(ITEM_FIELD_DURABILITY));
@@ -931,24 +931,20 @@ void Item::ClearEnchantment(EnchantmentSlot slot)
bool Item::GemsFitSockets() const
{
- bool fits = true;
for (uint32 enchant_slot = SOCK_ENCHANTMENT_SLOT; enchant_slot < SOCK_ENCHANTMENT_SLOT+MAX_GEM_SOCKETS; ++enchant_slot)
{
uint8 SocketColor = GetTemplate()->Socket[enchant_slot-SOCK_ENCHANTMENT_SLOT].Color;
- uint32 enchant_id = GetEnchantmentId(EnchantmentSlot(enchant_slot));
- if (!enchant_id)
- {
- if (SocketColor) fits &= false;
+ if (!SocketColor) // no socket slot
continue;
- }
+
+ uint32 enchant_id = GetEnchantmentId(EnchantmentSlot(enchant_slot));
+ if (!enchant_id) // no gems on this socket
+ return false;
SpellItemEnchantmentEntry const* enchantEntry = sSpellItemEnchantmentStore.LookupEntry(enchant_id);
- if (!enchantEntry)
- {
- if (SocketColor) fits &= false;
- continue;
- }
+ if (!enchantEntry) // invalid gem id on this socket
+ return false;
uint8 GemColor = 0;
@@ -964,9 +960,10 @@ bool Item::GemsFitSockets() const
}
}
- fits &= (GemColor & SocketColor) ? true : false;
+ if (!(GemColor & SocketColor)) // bad gem color on this socket
+ return false;
}
- return fits;
+ return true;
}
uint8 Item::GetGemCountWithID(uint32 GemID) const
@@ -1194,25 +1191,23 @@ bool Item::IsRefundExpired()
return (GetPlayedTime() > 2*HOUR);
}
-void Item::SetSoulboundTradeable(AllowedLooterSet* allowedLooters, Player* currentOwner, bool apply)
+void Item::SetSoulboundTradeable(AllowedLooterSet& allowedLooters)
{
- if (apply)
- {
- SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE);
- allowedGUIDs = *allowedLooters;
- }
- else
- {
- RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE);
- if (allowedGUIDs.empty())
- return;
+ SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE);
+ allowedGUIDs = allowedLooters;
+}
- allowedGUIDs.clear();
- SetState(ITEM_CHANGED, currentOwner);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_BOP_TRADE);
- stmt->setUInt32(0, GetGUIDLow());
- CharacterDatabase.Execute(stmt);
- }
+void Item::ClearSoulboundTradeable(Player* currentOwner)
+{
+ RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE);
+ if (allowedGUIDs.empty())
+ return;
+
+ allowedGUIDs.clear();
+ SetState(ITEM_CHANGED, currentOwner);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_BOP_TRADE);
+ stmt->setUInt32(0, GetGUIDLow());
+ CharacterDatabase.Execute(stmt);
}
bool Item::CheckSoulboundTradeExpire()
@@ -1220,7 +1215,7 @@ bool Item::CheckSoulboundTradeExpire()
// called from owner's update - GetOwner() MUST be valid
if (GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME) + 2*HOUR < GetOwner()->GetTotalPlayedTime())
{
- SetSoulboundTradeable(NULL, GetOwner(), false);
+ ClearSoulboundTradeable(GetOwner());
return true; // remove from tradeable list
}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index b872b354ea7..0960a3e5563 100755
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -352,7 +352,8 @@ class Item : public Object
bool IsRefundExpired();
// Soulbound trade system
- void SetSoulboundTradeable(AllowedLooterSet* allowedLooters, Player* currentOwner, bool apply);
+ void SetSoulboundTradeable(AllowedLooterSet& allowedLooters);
+ void ClearSoulboundTradeable(Player* currentOwner);
bool CheckSoulboundTradeExpire();
void BuildUpdate(UpdateDataMapType&);
diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
index 4ed475e0545..b8eaf043b1f 100755
--- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
+++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.h b/src/server/game/Entities/Item/ItemEnchantmentMgr.h
index 8fb852c5135..fe4dca40d24 100755
--- a/src/server/game/Entities/Item/ItemEnchantmentMgr.h
+++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h
index 155673edbaa..2eae7234229 100755
--- a/src/server/game/Entities/Item/ItemPrototype.h
+++ b/src/server/game/Entities/Item/ItemPrototype.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -729,7 +729,6 @@ struct ItemTemplate
bool IsWeaponVellum() const { return Class == ITEM_CLASS_TRADE_GOODS && SubClass == ITEM_SUBCLASS_WEAPON_ENCHANTMENT; }
bool IsArmorVellum() const { return Class == ITEM_CLASS_TRADE_GOODS && SubClass == ITEM_SUBCLASS_ARMOR_ENCHANTMENT; }
bool IsConjuredConsumable() const { return Class == ITEM_CLASS_CONSUMABLE && (Flags & ITEM_PROTO_FLAG_CONJURED); }
-
};
// Benchmarked: Faster than std::map (insert/find)
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 82c0eb3a169..3cd02d05a90 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -82,7 +82,7 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1)
WorldObject::~WorldObject()
{
// this may happen because there are many !create/delete
- if (m_isWorldObject && m_currMap)
+ if (IsWorldObject() && m_currMap)
{
if (GetTypeId() == TYPEID_CORPSE)
{
@@ -780,13 +780,13 @@ void Object::ClearUpdateMask(bool remove)
}
}
-void Object::BuildFieldsUpdate(Player* pl, UpdateDataMapType& data_map) const
+void Object::BuildFieldsUpdate(Player* player, UpdateDataMapType& data_map) const
{
- UpdateDataMapType::iterator iter = data_map.find(pl);
+ UpdateDataMapType::iterator iter = data_map.find(player);
if (iter == data_map.end())
{
- std::pair<UpdateDataMapType::iterator, bool> p = data_map.insert(UpdateDataMapType::value_type(pl, UpdateData()));
+ std::pair<UpdateDataMapType::iterator, bool> p = data_map.insert(UpdateDataMapType::value_type(player, UpdateData()));
ASSERT(p.second);
iter = p.first;
}
@@ -1221,8 +1221,8 @@ void MovementInfo::OutDebug()
sLog->outString("splineElevation: %f", splineElevation);
}
-WorldObject::WorldObject(): WorldLocation(),
-m_isWorldObject(false), m_name(""), m_isActive(false), m_zoneScript(NULL),
+WorldObject::WorldObject(bool isWorldObject): WorldLocation(),
+m_name(""), m_isActive(false), m_isWorldObject(isWorldObject), m_zoneScript(NULL),
m_transport(NULL), m_currMap(NULL), m_InstanceId(0),
m_phaseMask(PHASEMASK_NORMAL), m_notifyflags(0), m_executed_notifies(0)
{
@@ -1238,6 +1238,17 @@ void WorldObject::SetWorldObject(bool on)
GetMap()->AddObjectToSwitchList(this, on);
}
+bool WorldObject::IsWorldObject() const
+{
+ if (m_isWorldObject)
+ return true;
+
+ if (ToCreature() && ToCreature()->m_isTempWorldObject)
+ return true;
+
+ return false;
+}
+
void WorldObject::setActive(bool on)
{
if (m_isActive == on)
@@ -1273,6 +1284,8 @@ void WorldObject::setActive(bool on)
void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
{
+ if (IsInWorld())
+ RemoveFromWorld();
}
void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
@@ -1587,14 +1600,6 @@ bool Position::IsPositionValid() const
return Trinity::IsValidMapCoord(m_positionX, m_positionY, m_positionZ, m_orientation);
}
-bool WorldObject::isValid() const
-{
- if (!IsInWorld())
- return false;
-
- return true;
-}
-
float WorldObject::GetGridActivationRange() const
{
if (ToPlayer())
@@ -1638,26 +1643,17 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
if (this == obj)
return true;
- if (!obj->isValid())
- return false;
-
- if (GetMap() != obj->GetMap())
- return false;
-
- if (!InSamePhase(obj))
+ if (obj->IsNeverVisible() || CanNeverSee(obj))
return false;
- if (obj->isAlwaysVisibleFor(this))
- return true;
-
- if (canSeeAlways(obj))
+ if (obj->IsAlwaysVisibleFor(this) || CanAlwaysSee(obj))
return true;
bool corpseCheck = false;
bool corpseVisibility = false;
if (distanceCheck)
{
- if (const Player* thisPlayer = ToPlayer())
+ if (Player const* thisPlayer = ToPlayer())
{
if (thisPlayer->isDead() && thisPlayer->GetHealth() > 0 && // Cheap way to check for ghost state
!(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & GHOST_VISIBILITY_GHOST))
@@ -1672,7 +1668,14 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
}
}
- if (!corpseCheck && !IsWithinDist(obj, GetSightRange(obj), false))
+ WorldObject const* viewpoint = this;
+ if (Player const* player = this->ToPlayer())
+ viewpoint = player->GetViewpoint();
+
+ if (!viewpoint)
+ viewpoint = this;
+
+ if (!corpseCheck && !viewpoint->IsWithinDist(obj, GetSightRange(obj), false))
return false;
}
@@ -1690,9 +1693,9 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
if (!corpseVisibility && !(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibilityDetect.GetValue(SERVERSIDE_VISIBILITY_GHOST)))
{
// Alive players can see dead players in some cases, but other objects can't do that
- if (const Player* thisPlayer = ToPlayer())
+ if (Player const* thisPlayer = ToPlayer())
{
- if (const Player* objPlayer = obj->ToPlayer())
+ if (Player const* objPlayer = obj->ToPlayer())
{
if (thisPlayer->GetTeam() != objPlayer->GetTeam() || !thisPlayer->IsGroupVisibleFor(objPlayer))
return false;
@@ -1704,16 +1707,16 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
return false;
}
- if (!obj->isVisibleForInState(this))
+ if (obj->IsInvisibleDueToDespawn())
return false;
- if (!canDetect(obj, ignoreStealth))
+ if (!CanDetect(obj, ignoreStealth))
return false;
return true;
}
-bool WorldObject::canDetect(WorldObject const* obj, bool ignoreStealth) const
+bool WorldObject::CanDetect(WorldObject const* obj, bool ignoreStealth) const
{
const WorldObject* seer = this;
@@ -1722,19 +1725,19 @@ bool WorldObject::canDetect(WorldObject const* obj, bool ignoreStealth) const
if (Unit* controller = thisUnit->GetCharmerOrOwner())
seer = controller;
- if (obj->isAlwaysDetectableFor(seer))
+ if (obj->IsAlwaysDetectableFor(seer))
return true;
- if (!seer->canDetectInvisibilityOf(obj))
+ if (!seer->CanDetectInvisibilityOf(obj))
return false;
- if (!ignoreStealth && !seer->canDetectStealthOf(obj))
+ if (!ignoreStealth && !seer->CanDetectStealthOf(obj))
return false;
return true;
}
-bool WorldObject::canDetectInvisibilityOf(WorldObject const* obj) const
+bool WorldObject::CanDetectInvisibilityOf(WorldObject const* obj) const
{
uint32 mask = obj->m_invisibility.GetFlags() & m_invisibilityDetect.GetFlags();
@@ -1765,7 +1768,7 @@ bool WorldObject::canDetectInvisibilityOf(WorldObject const* obj) const
return true;
}
-bool WorldObject::canDetectStealthOf(WorldObject const* obj) const
+bool WorldObject::CanDetectStealthOf(WorldObject const* obj) const
{
// Combat reach is the minimal distance (both in front and behind),
// and it is also used in the range calculation.
@@ -1885,10 +1888,9 @@ namespace Trinity
void WorldObject::MonsterSay(const char* text, uint32 language, uint64 TargetGuid)
{
- CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::MonsterCustomChatBuilder say_build(*this, CHAT_MSG_MONSTER_SAY, text, language, TargetGuid);
@@ -1900,10 +1902,9 @@ void WorldObject::MonsterSay(const char* text, uint32 language, uint64 TargetGui
void WorldObject::MonsterSay(int32 textId, uint32 language, uint64 TargetGuid)
{
- CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::MonsterChatBuilder say_build(*this, CHAT_MSG_MONSTER_SAY, textId, language, TargetGuid);
@@ -1915,10 +1916,9 @@ void WorldObject::MonsterSay(int32 textId, uint32 language, uint64 TargetGuid)
void WorldObject::MonsterYell(const char* text, uint32 language, uint64 TargetGuid)
{
- CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::MonsterCustomChatBuilder say_build(*this, CHAT_MSG_MONSTER_YELL, text, language, TargetGuid);
@@ -1930,10 +1930,9 @@ void WorldObject::MonsterYell(const char* text, uint32 language, uint64 TargetGu
void WorldObject::MonsterYell(int32 textId, uint32 language, uint64 TargetGuid)
{
- CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::MonsterChatBuilder say_build(*this, CHAT_MSG_MONSTER_YELL, textId, language, TargetGuid);
@@ -1965,10 +1964,9 @@ void WorldObject::MonsterTextEmote(const char* text, uint64 TargetGuid, bool IsB
void WorldObject::MonsterTextEmote(int32 textId, uint64 TargetGuid, bool IsBossEmote)
{
- CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::MonsterChatBuilder say_build(*this, IsBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, textId, LANG_UNIVERSAL, TargetGuid);
@@ -2038,7 +2036,6 @@ 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);
@@ -2072,7 +2069,7 @@ void WorldObject::SetMap(Map* map)
m_currMap = map;
m_mapId = map->GetId();
m_InstanceId = map->GetInstanceId();
- if (m_isWorldObject)
+ if (IsWorldObject())
m_currMap->AddWorldObject(this);
}
@@ -2080,7 +2077,7 @@ void WorldObject::ResetMap()
{
ASSERT(m_currMap);
ASSERT(!IsInWorld());
- if (m_isWorldObject)
+ if (IsWorldObject())
m_currMap->RemoveWorldObject(this);
m_currMap = NULL;
//maybe not for corpse
@@ -2170,10 +2167,10 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
switch (mask)
{
case UNIT_MASK_SUMMON:
- summon = new TempSummon(properties, summoner);
+ summon = new TempSummon(properties, summoner, false);
break;
case UNIT_MASK_GUARDIAN:
- summon = new Guardian(properties, summoner);
+ summon = new Guardian(properties, summoner, false);
break;
case UNIT_MASK_PUPPET:
summon = new Puppet(properties, summoner);
@@ -2182,7 +2179,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
summon = new Totem(properties, summoner);
break;
case UNIT_MASK_MINION:
- summon = new Minion(properties, summoner);
+ summon = new Minion(properties, summoner, false);
break;
default:
return NULL;
@@ -2410,32 +2407,30 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const
return go;
}
-void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const
+void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& gameobjectList, uint32 entry, float maxSearchRange) const
{
- CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY()));
+ CellCoord pair(Trinity::ComputeCellCoord(this->GetPositionX(), this->GetPositionY()));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
- Trinity::AllGameObjectsWithEntryInRange check(this, uiEntry, fMaxSearchRange);
- Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange> searcher(this, lList, check);
+ Trinity::AllGameObjectsWithEntryInRange check(this, entry, maxSearchRange);
+ Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange> searcher(this, gameobjectList, check);
TypeContainerVisitor<Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange>, GridTypeMapContainer> visitor(searcher);
- cell.Visit(pair, visitor, *(this->GetMap()));
+ cell.Visit(pair, visitor, *(this->GetMap()), *this, maxSearchRange);
}
-void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const
+void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& creatureList, uint32 entry, float maxSearchRange) const
{
- CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY()));
+ CellCoord pair(Trinity::ComputeCellCoord(this->GetPositionX(), this->GetPositionY()));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
- Trinity::AllCreaturesOfEntryInRange check(this, uiEntry, fMaxSearchRange);
- Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(this, lList, check);
+ Trinity::AllCreaturesOfEntryInRange check(this, entry, maxSearchRange);
+ Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(this, creatureList, check);
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
- cell.Visit(pair, visitor, *(this->GetMap()));
+ cell.Visit(pair, visitor, *(this->GetMap()), *this, maxSearchRange);
}
/*
@@ -2546,9 +2541,8 @@ void WorldObject::GetNearPoint(WorldObject const* /*searcher*/, float &x, float
// adding used positions around object
{
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::NearUsedPosDo u_do(*this, searcher, absAngle, selector);
@@ -2748,19 +2742,19 @@ void WorldObject::DestroyForNearbyPlayers()
VisitNearbyWorldObject(GetVisibilityRange(), searcher);
for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
{
- Player* plr = (*iter);
+ Player* player = (*iter);
- if (plr == this)
+ if (player == this)
continue;
- if (!plr->HaveAtClient(this))
+ if (!player->HaveAtClient(this))
continue;
- if (isType(TYPEMASK_UNIT) && ((Unit*)this)->GetCharmerGUID() == plr->GetGUID()) // TODO: this is for puppet
+ if (isType(TYPEMASK_UNIT) && ((Unit*)this)->GetCharmerGUID() == player->GetGUID()) // TODO: this is for puppet
continue;
- DestroyForPlayer(plr);
- plr->m_clientGUIDs.erase(GetGUID());
+ DestroyForPlayer(player);
+ player->m_clientGUIDs.erase(GetGUID());
}
}
@@ -2828,13 +2822,13 @@ struct WorldObjectChangeAccumulator
}
}
- void BuildPacket(Player* plr)
+ void BuildPacket(Player* player)
{
// Only send update once to a player
- if (plr_list.find(plr->GetGUID()) == plr_list.end() && plr->HaveAtClient(&i_object))
+ if (plr_list.find(player->GetGUID()) == plr_list.end() && player->HaveAtClient(&i_object))
{
- i_object.BuildFieldsUpdate(plr, i_updateDatas);
- plr_list.insert(plr->GetGUID());
+ i_object.BuildFieldsUpdate(player, i_updateDatas);
+ plr_list.insert(player->GetGUID());
}
}
@@ -2843,9 +2837,8 @@ struct WorldObjectChangeAccumulator
void WorldObject::BuildUpdate(UpdateDataMapType& data_map)
{
- CellPair p = Trinity::ComputeCellPair(GetPositionX(), GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
WorldObjectChangeAccumulator notifier(*this, data_map);
TypeContainerVisitor<WorldObjectChangeAccumulator, WorldTypeMapContainer > player_notifier(notifier);
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index d27ea23ba7e..3f78ec662e8 100755
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -527,9 +527,11 @@ template<class T>
class GridObject
{
public:
- GridReference<T> &GetGridRef() { return m_gridRef; }
- protected:
- GridReference<T> m_gridRef;
+ bool IsInGrid() const { return _gridRef.isValid(); }
+ void AddToGrid(GridRefManager<T>& m) { ASSERT(!IsInGrid()); _gridRef.link(&m, (T*)this); }
+ void RemoveFromGrid() { ASSERT(IsInGrid()); _gridRef.unlink(); }
+ private:
+ GridReference<T> _gridRef;
};
template <class T_VALUES, class T_FLAGS, class FLAG_TYPE, uint8 ARRAY_SIZE>
@@ -559,7 +561,7 @@ class FlaggedValuesArray32
class WorldObject : public Object, public WorldLocation
{
protected:
- explicit WorldObject();
+ explicit WorldObject(bool isWorldObject); //note: here it means if it is in grid object list or world object list
public:
virtual ~WorldObject();
@@ -667,12 +669,17 @@ class WorldObject : public Object, public WorldLocation
}
float GetDistanceZ(const WorldObject* obj) const;
+ bool IsSelfOrInSameMap(const WorldObject* obj) const
+ {
+ if (this == obj)
+ return true;
+ return IsInMap(obj);
+ }
bool IsInMap(const WorldObject* obj) const
{
if (obj)
return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap()) && InSamePhase(obj);
- else
- return false;
+ return false;
}
bool IsWithinDist3d(float x, float y, float z, float dist) const
{ return IsInDist(x, y, z, dist + GetObjectSize()); }
@@ -682,7 +689,6 @@ class WorldObject : public Object, public WorldLocation
{ return IsInDist2d(x, y, dist + GetObjectSize()); }
bool IsWithinDist2d(const Position* pos, float dist) const
{ return IsInDist2d(pos, dist + GetObjectSize()); }
- virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
// use only if you will sure about placing both object at same map
bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const
{
@@ -730,19 +736,6 @@ class WorldObject : public Object, public WorldLocation
virtual void SaveRespawnTime() {}
void AddObjectToRemoveList();
- virtual bool isValid() const;
-
- virtual bool isAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; }
- virtual bool canSeeAlways(WorldObject const* /*obj*/) const { return false; }
- bool canDetect(WorldObject const* obj, bool ignoreStealth) const;
-
- virtual bool isVisibleForInState(WorldObject const* /*seer*/) const { return true; }
-
- bool canDetectInvisibilityOf(WorldObject const* obj) const;
- bool canDetectStealthOf(WorldObject const* obj) const;
-
- virtual bool isAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; }
-
float GetGridActivationRange() const;
float GetVisibilityRange() const;
float GetSightRange(const WorldObject* target = NULL) const;
@@ -807,9 +800,12 @@ class WorldObject : public Object, public WorldLocation
bool isActiveObject() const { return m_isActive; }
void setActive(bool isActiveObject);
void SetWorldObject(bool apply);
- template<class NOTIFIER> void VisitNearbyObject(const float &radius, NOTIFIER &notifier) const { if (IsInWorld()) GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
- template<class NOTIFIER> void VisitNearbyGridObject(const float &radius, NOTIFIER &notifier) const { if (IsInWorld()) GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); }
- template<class NOTIFIER> void VisitNearbyWorldObject(const float &radius, NOTIFIER &notifier) const { if (IsInWorld()) GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); }
+ bool IsPermanentWorldObject() const { return m_isWorldObject; }
+ bool IsWorldObject() const;
+
+ template<class NOTIFIER> void VisitNearbyObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
+ template<class NOTIFIER> void VisitNearbyGridObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); }
+ template<class NOTIFIER> void VisitNearbyWorldObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); }
#ifdef MAP_BASED_RAND_GEN
int32 irand(int32 min, int32 max) const { return int32 (GetMap()->mtRand.randInt(max - min)) + min; }
@@ -819,7 +815,6 @@ class WorldObject : public Object, public WorldLocation
double rand_chance() const { return GetMap()->mtRand.randExc(100.0);}
#endif
- bool m_isWorldObject;
uint32 LastUsedScriptID;
// Transports
@@ -837,6 +832,7 @@ class WorldObject : public Object, public WorldLocation
protected:
std::string m_name;
bool m_isActive;
+ const bool m_isWorldObject;
ZoneScript* m_zoneScript;
// transports
@@ -848,6 +844,11 @@ class WorldObject : public Object, public WorldLocation
void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; }
void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; }
+ virtual bool IsNeverVisible() const { return !IsInWorld(); }
+ virtual bool IsAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; }
+ virtual bool IsInvisibleDueToDespawn() const { return false; }
+ //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer
+ virtual bool IsAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; }
private:
Map* m_currMap; //current object's Map location
@@ -857,6 +858,14 @@ class WorldObject : public Object, public WorldLocation
uint16 m_notifyflags;
uint16 m_executed_notifies;
+
+ virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
+
+ bool CanNeverSee(WorldObject const* obj) const { return GetMap() != obj->GetMap() || !InSamePhase(obj); }
+ virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
+ bool CanDetect(WorldObject const* obj, bool ignoreStealth) const;
+ bool CanDetectInvisibilityOf(WorldObject const* obj) const;
+ bool CanDetectStealthOf(WorldObject const* obj) const;
};
namespace Trinity
diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h
index 4108063bfb3..c227d081d8b 100755
--- a/src/server/game/Entities/Object/ObjectDefines.h
+++ b/src/server/game/Entities/Object/ObjectDefines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Object/ObjectPosSelector.cpp b/src/server/game/Entities/Object/ObjectPosSelector.cpp
index c322c35ef81..ec654954b80 100755
--- a/src/server/game/Entities/Object/ObjectPosSelector.cpp
+++ b/src/server/game/Entities/Object/ObjectPosSelector.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -55,10 +55,10 @@ ObjectPosSelector::UsedPosList::value_type const* ObjectPosSelector::nextUsedPos
void ObjectPosSelector::AddUsedPos(float size, float angle, float dist)
{
- if (angle>=0)
- m_UsedPosLists[USED_POS_PLUS].insert(UsedPosList::value_type(angle, UsedPos(1.0, size, dist)));
+ if (angle >= 0)
+ m_UsedPosLists[USED_POS_PLUS].insert(UsedPosList::value_type(angle, UsedPos(1.0f, size, dist)));
else
- m_UsedPosLists[USED_POS_MINUS].insert(UsedPosList::value_type(-angle, UsedPos(-1.0, size, dist)));
+ m_UsedPosLists[USED_POS_MINUS].insert(UsedPosList::value_type(-angle, UsedPos(-1.0f, size, dist)));
}
void ObjectPosSelector::InitializeAngle()
@@ -76,9 +76,9 @@ void ObjectPosSelector::InitializeAngle()
bool ObjectPosSelector::FirstAngle(float& angle)
{
if (m_UsedPosLists[USED_POS_PLUS].empty() && !m_UsedPosLists[USED_POS_MINUS].empty() )
- return NextAngleFor(*m_UsedPosLists[USED_POS_MINUS].begin(), 1.0, USED_POS_PLUS, angle);
+ return NextAngleFor(*m_UsedPosLists[USED_POS_MINUS].begin(), 1.0f, USED_POS_PLUS, angle);
else if (m_UsedPosLists[USED_POS_MINUS].empty() && !m_UsedPosLists[USED_POS_PLUS].empty() )
- return NextAngleFor(*m_UsedPosLists[USED_POS_PLUS].begin(), -1.0, USED_POS_MINUS, angle);
+ return NextAngleFor(*m_UsedPosLists[USED_POS_PLUS].begin(), -1.0f, USED_POS_MINUS, angle);
return false;
}
@@ -118,9 +118,9 @@ bool ObjectPosSelector::NextPosibleAngle(float& angle)
{
bool ok;
if (m_smallStepOk[USED_POS_PLUS])
- ok = NextSmallStepAngle(1.0, USED_POS_PLUS, angle);
+ ok = NextSmallStepAngle(1.0f, USED_POS_PLUS, angle);
else
- ok = NextAngleFor(*m_nextUsedPos[USED_POS_PLUS], 1.0, USED_POS_PLUS, angle);
+ ok = NextAngleFor(*m_nextUsedPos[USED_POS_PLUS], 1.0f, USED_POS_PLUS, angle);
if (!ok)
++m_nextUsedPos[USED_POS_PLUS]; // increase. only at fail (original or checked)
@@ -131,9 +131,9 @@ bool ObjectPosSelector::NextPosibleAngle(float& angle)
{
bool ok;
if (m_smallStepOk[USED_POS_MINUS])
- ok = NextSmallStepAngle(-1.0, USED_POS_MINUS, angle);
+ ok = NextSmallStepAngle(-1.0f, USED_POS_MINUS, angle);
else
- ok = NextAngleFor(*m_nextUsedPos[USED_POS_MINUS], -1.0, USED_POS_MINUS, angle);
+ ok = NextAngleFor(*m_nextUsedPos[USED_POS_MINUS], -1.0f, USED_POS_MINUS, angle);
if (!ok)
++m_nextUsedPos[USED_POS_MINUS];
@@ -142,10 +142,10 @@ bool ObjectPosSelector::NextPosibleAngle(float& angle)
else // both list empty
{
if (m_smallStepOk[USED_POS_PLUS] && (!m_smallStepOk[USED_POS_MINUS] || m_smallStepAngle[USED_POS_PLUS] <= m_smallStepAngle[USED_POS_MINUS]))
- return NextSmallStepAngle(1.0, USED_POS_PLUS, angle);
+ return NextSmallStepAngle(1.0f, USED_POS_PLUS, angle);
// -- direction less updated
else if (m_smallStepOk[USED_POS_MINUS])
- return NextSmallStepAngle(-1.0, USED_POS_MINUS, angle);
+ return NextSmallStepAngle(-1.0f, USED_POS_MINUS, angle);
}
// no angles
diff --git a/src/server/game/Entities/Object/ObjectPosSelector.h b/src/server/game/Entities/Object/ObjectPosSelector.h
index efb655ca1f7..b30694672df 100755
--- a/src/server/game/Entities/Object/ObjectPosSelector.h
+++ b/src/server/game/Entities/Object/ObjectPosSelector.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -68,8 +68,8 @@ struct ObjectPosSelector
bool CheckOriginal() const
{
- return (m_UsedPosLists[USED_POS_PLUS].empty() || CheckAngle(*m_UsedPosLists[USED_POS_PLUS].begin(), 1.0, 0)) &&
- (m_UsedPosLists[USED_POS_MINUS].empty() || CheckAngle(*m_UsedPosLists[USED_POS_MINUS].begin(), -1.0, 0));
+ return (m_UsedPosLists[USED_POS_PLUS].empty() || CheckAngle(*m_UsedPosLists[USED_POS_PLUS].begin(), 1.0f, 0)) &&
+ (m_UsedPosLists[USED_POS_MINUS].empty() || CheckAngle(*m_UsedPosLists[USED_POS_MINUS].begin(), -1.0f, 0));
}
bool IsNonBalanced() const { return m_UsedPosLists[USED_POS_PLUS].empty() != m_UsedPosLists[USED_POS_MINUS].empty(); }
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp
index 547c415bc73..8f480ab3235 100755
--- a/src/server/game/Entities/Object/Updates/UpdateData.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h
index 2d102f63e59..e4caaec3117 100755
--- a/src/server/game/Entities/Object/Updates/UpdateData.h
+++ b/src/server/game/Entities/Object/Updates/UpdateData.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 321d11fac8a..825bda98ae6 100755
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h
index 09bc0b4cc80..d4ecd42819c 100755
--- a/src/server/game/Entities/Object/Updates/UpdateMask.h
+++ b/src/server/game/Entities/Object/Updates/UpdateMask.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -72,6 +72,9 @@ class UpdateMask
UpdateMask& operator = (const UpdateMask& mask)
{
+ if (this == &mask)
+ return *this;
+
SetCount(mask.mCount);
memcpy(mUpdateMask, mask.mUpdateMask, mBlocks << 2);
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index ca8d863dee9..607508593f6 100755
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -33,7 +33,7 @@
#define PET_XP_FACTOR 0.05f
-Pet::Pet(Player* owner, PetType type) : Guardian(NULL, owner),
+Pet::Pet(Player* owner, PetType type) : Guardian(NULL, owner, true),
m_usedTalentCount(0), m_removed(false), m_owner(owner),
m_happinessTimer(7500), m_petType(type), m_duration(0),
m_auraRaidUpdateMask(0), m_loading(false), m_declinedname(NULL)
@@ -50,8 +50,6 @@ m_auraRaidUpdateMask(0), m_loading(false), m_declinedname(NULL)
m_name = "Pet";
m_regenTimer = PET_FOCUS_REGEN_INTERVAL;
-
- m_isWorldObject = true;
}
Pet::~Pet()
@@ -382,29 +380,29 @@ void Pet::SavePetToDB(PetSaveMode mode)
// current/stable/not_in_slot
if (mode >= PET_SAVE_AS_CURRENT)
{
- uint32 owner = GUID_LOPART(GetOwnerGUID());
+ uint32 ownerLowGUID = GUID_LOPART(GetOwnerGUID());
std::string name = m_name;
CharacterDatabase.EscapeString(name);
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ trans = CharacterDatabase.BeginTransaction();
// remove current data
- trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND id = '%u'", owner, m_charmInfo->GetPetNumber());
+ trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND id = '%u'", ownerLowGUID, m_charmInfo->GetPetNumber());
// prevent duplicate using slot (except PET_SAVE_NOT_IN_SLOT)
if (mode <= PET_SAVE_LAST_STABLE_SLOT)
trans->PAppend("UPDATE character_pet SET slot = '%u' WHERE owner = '%u' AND slot = '%u'",
- PET_SAVE_NOT_IN_SLOT, owner, uint32(mode));
+ PET_SAVE_NOT_IN_SLOT, ownerLowGUID, uint32(mode));
// prevent existence another hunter pet in PET_SAVE_AS_CURRENT and PET_SAVE_NOT_IN_SLOT
- if (getPetType() == HUNTER_PET && (mode == PET_SAVE_AS_CURRENT||mode > PET_SAVE_LAST_STABLE_SLOT))
+ if (getPetType() == HUNTER_PET && (mode == PET_SAVE_AS_CURRENT || mode > PET_SAVE_LAST_STABLE_SLOT))
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND (slot = '%u' OR slot > '%u')",
- owner, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
+ ownerLowGUID, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
// save pet
std::ostringstream ss;
ss << "INSERT INTO character_pet (id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType) "
<< "VALUES ("
<< m_charmInfo->GetPetNumber() << ','
<< GetEntry() << ','
- << owner << ','
+ << ownerLowGUID << ','
<< GetNativeDisplayId() << ','
<< uint32(getLevel()) << ','
<< GetUInt32Value(UNIT_FIELD_PETEXPERIENCE) << ','
@@ -618,7 +616,7 @@ void Pet::LoseHappiness()
return;
int32 addvalue = 670; //value is 70/35/17/8/4 (per min) * 1000 / 8 (timer 7.5 secs)
if (isInCombat()) //we know in combat happiness fades faster, multiplier guess
- addvalue = int32(addvalue * 1.5);
+ addvalue = int32(addvalue * 1.5f);
ModifyPower(POWER_HAPPINESS, -addvalue);
}
@@ -908,6 +906,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
SetCreateHealth(40*petlevel);
SetCreateMana(28 + 10*petlevel);
}
+ SetBonusDamage(m_owner->SpellBaseDamageBonus(SPELL_SCHOOL_MASK_FIRE) * 0.5f);
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 4 - petlevel));
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 4 + petlevel));
break;
@@ -1248,24 +1247,29 @@ void Pet::_SaveAuras(SQLTransaction& trans)
}
}
-bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpellState state /*= PETSPELL_NEW*/, PetSpellType type /*= PETSPELL_NORMAL*/)
+bool Pet::addSpell(uint32 spellId, ActiveStates active /*= ACT_DECIDE*/, PetSpellState state /*= PETSPELL_NEW*/, PetSpellType type /*= PETSPELL_NORMAL*/)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
// do pet spell book cleanup
if (state == PETSPELL_UNCHANGED) // spell load case
{
- sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request, deleting for all pets in `pet_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE spell = '%u'", spell_id);
+ sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request, deleting for all pets in `pet_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_PET_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request.", spell_id);
+ sLog->outError("Pet::addSpell: Non-existed in SpellStore spell #%u request.", spellId);
return false;
}
- PetSpellMap::iterator itr = m_spells.find(spell_id);
+ PetSpellMap::iterator itr = m_spells.find(spellId);
if (itr != m_spells.end())
{
if (itr->second.state == PETSPELL_REMOVED)
@@ -1304,7 +1308,7 @@ bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpe
newspell.active = active;
// talent: unlearn all other talent ranks (high and low)
- if (TalentSpellPos const* talentPos = GetTalentSpellPos(spell_id))
+ if (TalentSpellPos const* talentPos = GetTalentSpellPos(spellId))
{
if (TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentPos->talent_id))
{
@@ -1312,7 +1316,7 @@ bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpe
{
// skip learning spell and no rank spell case
uint32 rankSpellId = talentInfo->RankID[i];
- if (!rankSpellId || rankSpellId == spell_id)
+ if (!rankSpellId || rankSpellId == spellId)
continue;
// skip unknown ranks
@@ -1353,17 +1357,17 @@ bool Pet::addSpell(uint32 spell_id, ActiveStates active /*= ACT_DECIDE*/, PetSpe
}
}
- m_spells[spell_id] = newspell;
+ m_spells[spellId] = newspell;
if (spellInfo->IsPassive() && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState))))
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
else
m_charmInfo->AddSpellToActionBar(spellInfo);
if (newspell.active == ACT_ENABLED)
ToggleAutocast(spellInfo, true);
- uint32 talentCost = GetTalentSpellCost(spell_id);
+ uint32 talentCost = GetTalentSpellCost(spellId);
if (talentCost)
{
int32 free_points = GetMaxTalentPointsForLevel(getLevel());
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index 973e5e99bee..1b1a6c0f62d 100755
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -192,7 +192,7 @@ class Pet : public Guardian
void _LoadSpells();
void _SaveSpells(SQLTransaction& trans);
- bool addSpell(uint32 spell_id, ActiveStates active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL);
+ bool addSpell(uint32 spellId, ActiveStates active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL);
bool learnSpell(uint32 spell_id);
void learnSpellHighRank(uint32 spellid);
void InitLevelupSpellsForLevel();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 01203dd1d54..d6a33c1c4e8 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -279,10 +279,8 @@ uint32 PlayerTaxi::GetCurrentTaxiPath() const
std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi)
{
- ss << '\'';
for (uint8 i = 0; i < TaxiMaskSize; ++i)
ss << taxi.m_taximask[i] << ' ';
- ss << '\'';
return ss;
}
@@ -631,7 +629,7 @@ UpdateMask Player::updateVisualBits;
#ifdef _MSC_VER
#pragma warning(disable:4355)
#endif
-Player::Player (WorldSession* session): Unit(), m_achievementMgr(this), m_reputationMgr(this)
+Player::Player(WorldSession* session): Unit(true), m_achievementMgr(this), m_reputationMgr(this)
{
#ifdef _MSC_VER
#pragma warning(default:4355)
@@ -841,7 +839,6 @@ Player::Player (WorldSession* session): Unit(), m_achievementMgr(this), m_reputa
m_grantableLevels = 0;
m_ControlledByPlayer = true;
- m_isWorldObject = true;
sWorld->IncreasePlayerCount();
@@ -940,7 +937,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
return false;
}
- SetMap(sMapMgr->CreateMap(info->mapId, this, 0));
+ SetMap(sMapMgr->CreateMap(info->mapId, this));
uint8 powertype = cEntry->powerType;
@@ -1148,7 +1145,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
}
}
- for (PlayerCreateInfoItems::const_iterator item_id_itr = info->item.begin(); item_id_itr != info->item.end(); ++item_id_itr++)
+ for (PlayerCreateInfoItems::const_iterator item_id_itr = info->item.begin(); item_id_itr != info->item.end(); ++item_id_itr)
StoreNewItemInBestSlots(item_id_itr->item_id, item_id_itr->item_amount);
// bags and main-hand weapon must equipped at this moment
@@ -1852,7 +1849,7 @@ void Player::setDeathState(DeathState s)
SetUInt32Value(PLAYER_SELF_RES_SPELL, 0);
}
-bool Player::BuildEnumData(QueryResult result, WorldPacket* data)
+bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
{
// 0 1 2 3 4 5 6 7
// "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, "
@@ -1896,8 +1893,8 @@ bool Player::BuildEnumData(QueryResult result, WorldPacket* data)
*data << uint8(playerBytes2 & 0xFF); // facial hair
*data << uint8(fields[7].GetUInt8()); // level
- *data << uint32(fields[8].GetUInt32()); // zone
- *data << uint32(fields[9].GetUInt32()); // map
+ *data << uint32(fields[8].GetUInt16()); // zone
+ *data << uint32(fields[9].GetUInt16()); // map
*data << fields[10].GetFloat(); // x
*data << fields[11].GetFloat(); // y
@@ -2020,21 +2017,20 @@ bool Player::ToggleDND()
return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND);
}
-uint8 Player::chatTag() const
+uint8 Player::GetChatTag() const
{
- // it's bitmask
- // 0x8 - ??
- // 0x4 - gm
- // 0x2 - dnd
- // 0x1 - afk
+ uint8 tag = CHAT_TAG_NONE;
+
if (isGMChat())
- return 4;
- else if (isDND())
- return 3;
+ tag |= CHAT_TAG_GM;
+ if (isDND())
+ tag |= CHAT_TAG_DND;
if (isAFK())
- return 1;
- else
- return 0;
+ tag |= CHAT_TAG_AFK;
+ if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER))
+ tag |= CHAT_TAG_DEV;
+
+ return tag;
}
void Player::SendTeleportPacket(Position &oldPos)
@@ -2055,28 +2051,6 @@ void Player::SendTeleportAckPacket()
GetSession()->SendPacket(&data);
}
-// this is not used anywhere
-void Player::TeleportOutOfMap(Map* oldMap)
-{
- while (IsBeingTeleportedFar())
- GetSession()->HandleMoveWorldportAckOpcode();
-
- if (GetMap() != oldMap)
- return;
-
- TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation());
-
- while (IsBeingTeleportedFar())
- GetSession()->HandleMoveWorldportAckOpcode();
-
- if (GetMap() == oldMap)
- {
- sLog->outCrash("Cannot teleport player out of map!");
- ResetMap();
- ASSERT(false);
- }
-}
-
bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options)
{
if (!MapManager::IsValidMapCoord(mapid, x, y, z, orientation))
@@ -2206,8 +2180,11 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
if (!sMapMgr->CanPlayerEnter(mapid, this, false))
return false;
- Map* map = sMapMgr->CreateMap(mapid, this, 0);
- if (!map || map->CanEnter(this))
+ //I think this always returns true. Correct me if I am wrong.
+ // If the map is not created, assume it is possible to enter it.
+ // It will be created in the WorldPortAck.
+ //Map* map = sMapMgr->FindBaseNonInstanceMap(mapid);
+ //if (!map || map->CanEnter(this))
{
//lets reset near teleport flag if it wasn't reset during chained teleports
SetSemaphoreTeleportNear(false);
@@ -2278,7 +2255,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
// remove from old map now
if (oldmap)
- oldmap->RemoveFromMap(this, false);
+ oldmap->RemovePlayerFromMap(this, false);
// new final coordinates
float final_x = x;
@@ -2316,8 +2293,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
// code for finish transfer to new map called in WorldSession::HandleMoveWorldportAckOpcode at client packet
SetSemaphoreTeleportFar(true);
}
- else
- return false;
+ //else
+ // return false;
}
return true;
}
@@ -2456,7 +2433,7 @@ void Player::RegenerateAll()
// Runes act as cooldowns, and they don't need to send any data
if (getClass() == CLASS_DEATH_KNIGHT)
- for (uint32 i = 0; i < MAX_RUNES; ++i)
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
if (uint32 cd = GetRuneCooldown(i))
SetRuneCooldown(i, (cd > m_regenTimer) ? cd - m_regenTimer : 0);
@@ -2631,7 +2608,7 @@ void Player::RegenerateHealth()
ApplyPctN(addvalue, GetTotalAuraModifier(SPELL_AURA_MOD_REGEN_DURING_COMBAT));
if (!IsStandState())
- addvalue *= 1.5;
+ addvalue *= 1.5f;
}
// always regeneration bonus (including combat)
@@ -2860,7 +2837,6 @@ void Player::SetGMVisible(bool on)
if (on)
{
m_ExtraFlags &= ~PLAYER_EXTRA_GM_INVISIBLE; //remove flag
-
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GM, SEC_PLAYER);
}
else
@@ -3089,7 +3065,8 @@ void Player::GiveLevel(uint8 level)
// Refer-A-Friend
if (GetSession()->GetRecruiterId())
if (level < sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL))
- if (level % 2 == 0) {
+ if (level % 2 == 0)
+ {
++m_grantableLevels;
if (!HasByteFlag(PLAYER_FIELD_BYTES, 1, 0x01))
@@ -3439,19 +3416,24 @@ void Player::AddNewMailDeliverTime(time_t deliver_time)
}
}
-bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
+bool Player::AddTalent(uint32 spellId, uint8 spec, bool learning)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_talent WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spellId);
return false;
}
@@ -3461,19 +3443,24 @@ bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addTalent: Broken spell #%u learning not allowed, deleting for all characters in `character_talent`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_talent WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addTalent: Broken spell #%u learning not allowed, deleting for all characters in `character_talent`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addTalent: Broken spell #%u learning not allowed.", spell_id);
+ sLog->outError("Player::addTalent: Broken spell #%u learning not allowed.", spellId);
return false;
}
- PlayerTalentMap::iterator itr = m_talents[spec]->find(spell_id);
+ PlayerTalentMap::iterator itr = m_talents[spec]->find(spellId);
if (itr != m_talents[spec]->end())
itr->second->state = PLAYERSPELL_UNCHANGED;
- else if (TalentSpellPos const* talentPos = GetTalentSpellPos(spell_id))
+ else if (TalentSpellPos const* talentPos = GetTalentSpellPos(spellId))
{
if (TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentPos->talent_id))
{
@@ -3481,10 +3468,10 @@ bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
{
// skip learning spell and no rank spell case
uint32 rankSpellId = talentInfo->RankID[rank];
- if (!rankSpellId || rankSpellId == spell_id)
+ if (!rankSpellId || rankSpellId == spellId)
continue;
- PlayerTalentMap::iterator itr = m_talents[spec]->find(rankSpellId);
+ itr = m_talents[spec]->find(rankSpellId);
if (itr != m_talents[spec]->end())
itr->second->state = PLAYERSPELL_REMOVED;
}
@@ -3496,25 +3483,30 @@ bool Player::AddTalent(uint32 spell_id, uint8 spec, bool learning)
newtalent->state = state;
newtalent->spec = spec;
- (*m_talents[spec])[spell_id] = newtalent;
+ (*m_talents[spec])[spellId] = newtalent;
return true;
}
return false;
}
-bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependent, bool disabled, bool loading /*=false*/)
+bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spell_id);
+ sLog->outError("Player::addSpell: Non-existed in SpellStore spell #%u request.", spellId);
return false;
}
@@ -3524,11 +3516,16 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
// do character spell book cleanup (all characters)
if (!IsInWorld() && !learning) // spell load case
{
- sLog->outError("Player::addSpell: Broken spell #%u learning not allowed, deleting for all characters in `character_spell`.", spell_id);
- CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'", spell_id);
+ sLog->outError("Player::addSpell: Broken spell #%u learning not allowed, deleting for all characters in `character_spell`.", spellId);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SPELL);
+
+ stmt->setUInt32(0, spellId);
+
+ CharacterDatabase.Execute(stmt);
}
else
- sLog->outError("Player::addSpell: Broken spell #%u learning not allowed.", spell_id);
+ sLog->outError("Player::addSpell: Broken spell #%u learning not allowed.", spellId);
return false;
}
@@ -3539,18 +3536,18 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
bool disabled_case = false;
bool superceded_old = false;
- PlayerSpellMap::iterator itr = m_spells.find(spell_id);
+ PlayerSpellMap::iterator itr = m_spells.find(spellId);
// Remove temporary spell if found to prevent conflicts
if (itr != m_spells.end() && itr->second->state == PLAYERSPELL_TEMPORARY)
- RemoveTemporarySpell(spell_id);
+ RemoveTemporarySpell(spellId);
else if (itr != m_spells.end())
{
uint32 next_active_spell_id = 0;
// fix activate state for non-stackable low rank (and find next spell for !active case)
if (!spellInfo->IsStackableWithRanks() && spellInfo->IsRanked())
{
- if (uint32 next = sSpellMgr->GetNextSpellInChain(spell_id))
+ if (uint32 next = sSpellMgr->GetNextSpellInChain(spellId))
{
if (HasSpell(next))
{
@@ -3593,7 +3590,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
if (active)
{
if (spellInfo->IsPassive() && IsNeedCastPassiveSpellAtLearn(spellInfo))
- CastSpell (this, spell_id, true);
+ CastSpell (this, spellId, true);
}
else if (IsInWorld())
{
@@ -3601,14 +3598,14 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
{
// update spell ranks in spellbook and action bar
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spell_id);
+ data << uint32(spellId);
data << uint32(next_active_spell_id);
GetSession()->SendPacket(&data);
}
else
{
WorldPacket data(SMSG_REMOVED_SPELL, 4);
- data << uint32(spell_id);
+ data << uint32(spellId);
GetSession()->SendPacket(&data);
}
}
@@ -3652,7 +3649,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
if (!disabled_case) // skip new spell adding if spell already known (disabled spells case)
{
// talent: unlearn all other talent ranks (high and low)
- if (TalentSpellPos const* talentPos = GetTalentSpellPos(spell_id))
+ if (TalentSpellPos const* talentPos = GetTalentSpellPos(spellId))
{
if (TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentPos->talent_id))
{
@@ -3660,7 +3657,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
{
// skip learning spell and no rank spell case
uint32 rankSpellId = talentInfo->RankID[rank];
- if (!rankSpellId || rankSpellId == spell_id)
+ if (!rankSpellId || rankSpellId == spellId)
continue;
removeSpell(rankSpellId, false, false);
@@ -3668,7 +3665,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
}
}
// non talent spell: learn low ranks (recursive call)
- else if (uint32 prev_spell = sSpellMgr->GetPrevSpellInChain(spell_id))
+ else if (uint32 prev_spell = sSpellMgr->GetPrevSpellInChain(spellId))
{
if (!IsInWorld() || disabled) // at spells loading, no output, but allow save
addSpell(prev_spell, active, true, true, disabled);
@@ -3701,7 +3698,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
{
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
data << uint32(itr2->first);
- data << uint32(spell_id);
+ data << uint32(spellId);
GetSession()->SendPacket(&data);
}
@@ -3716,7 +3713,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
if (IsInWorld()) // not send spell (re-/over-)learn packets at loading
{
WorldPacket data(SMSG_SUPERCEDED_SPELL, 4 + 4);
- data << uint32(spell_id);
+ data << uint32(spellId);
data << uint32(itr2->first);
GetSession()->SendPacket(&data);
}
@@ -3731,31 +3728,31 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
}
}
- m_spells[spell_id] = newspell;
+ m_spells[spellId] = newspell;
// return false if spell disabled
if (newspell->disabled)
return false;
}
- uint32 talentCost = GetTalentSpellCost(spell_id);
+ uint32 talentCost = GetTalentSpellCost(spellId);
// cast talents with SPELL_EFFECT_LEARN_SPELL (other dependent spells will learned later as not auto-learned)
// note: all spells with SPELL_EFFECT_LEARN_SPELL isn't passive
if (!loading && talentCost > 0 && spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL))
{
// ignore stance requirement for talent learn spell (stance set for spell only for client spell description show)
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
}
// also cast passive spells (including all talents without SPELL_EFFECT_LEARN_SPELL) with additional checks
else if (spellInfo->IsPassive())
{
if (IsNeedCastPassiveSpellAtLearn(spellInfo))
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
}
else if (spellInfo->HasEffect(SPELL_EFFECT_SKILL_STEP))
{
- CastSpell(this, spell_id, true);
+ CastSpell(this, spellId, true);
return false;
}
@@ -3772,9 +3769,9 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
// add dependent skills
uint16 maxskill = GetMaxSkillValueForLevel();
- SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spell_id);
+ SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId);
- SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spell_id);
+ SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
if (spellLearnSkill)
{
@@ -3832,7 +3829,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
}
// learn dependent spells
- SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spell_id);
+ SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spellId);
for (SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2)
{
@@ -3854,7 +3851,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool dependen
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS, _spell_idx->second->skillId);
}
- GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL, spell_id);
+ GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL, spellId);
}
// return true (for send learn packet) only if spell active (in case ranked spells) and not replace old spell
@@ -4094,8 +4091,6 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank)
if (uint32 prev_id = sSpellMgr->GetPrevSpellInChain(spell_id))
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id);
-
// if talent then lesser rank also talent and need learn
if (talentCosts)
{
@@ -4243,8 +4238,8 @@ void Player::RemoveArenaSpellCooldowns(bool removeActivePetCooldowns)
if (Pet* pet = GetPet())
{
// notify player
- for (CreatureSpellCooldowns::const_iterator itr = pet->m_CreatureSpellCooldowns.begin(); itr != pet->m_CreatureSpellCooldowns.end(); ++itr)
- SendClearCooldown(itr->first, pet);
+ for (CreatureSpellCooldowns::const_iterator itr2 = pet->m_CreatureSpellCooldowns.begin(); itr2 != pet->m_CreatureSpellCooldowns.end(); ++itr2)
+ SendClearCooldown(itr2->first, pet);
// actually clear cooldowns
pet->m_CreatureSpellCooldowns.clear();
@@ -4397,9 +4392,9 @@ bool Player::resetTalents(bool no_cost)
RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true);
- for (uint32 i = 0; i < sTalentStore.GetNumRows(); ++i)
+ for (uint32 talentId = 0; talentId < sTalentStore.GetNumRows(); ++talentId)
{
- TalentEntry const* talentInfo = sTalentStore.LookupEntry(i);
+ TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentId);
if (!talentInfo)
continue;
@@ -4828,21 +4823,21 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
if (has_items)
{
// Data needs to be at first place for Item::LoadFromDB
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_MAILITEMS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS);
stmt->setUInt32(0, mail_id);
PreparedQueryResult resultItems = CharacterDatabase.Query(stmt);
if (resultItems)
{
do
{
- Field* fields = resultItems->Fetch();
- uint32 item_guidlow = fields[11].GetUInt32();
- uint32 item_template = fields[12].GetUInt32();
+ Field* fields2 = resultItems->Fetch();
+ uint32 item_guidlow = fields2[11].GetUInt32();
+ uint32 item_template = fields2[12].GetUInt32();
ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(item_template);
if (!itemProto)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
stmt->setUInt32(0, item_guidlow);
trans->Append(stmt);
continue;
@@ -4946,8 +4941,14 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
}
// The character gets unlinked from the account, the name gets freed up and appears as deleted ingame
case CHAR_DELETE_UNLINK:
- CharacterDatabase.PExecute("UPDATE characters SET deleteInfos_Name=name, deleteInfos_Account=account, deleteDate='" UI64FMTD "', name='', account=0 WHERE guid=%u", uint64(time(NULL)), guid);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_DELETE_INFO);
+
+ stmt->setUInt32(0, guid);
+
+ CharacterDatabase.Execute(stmt);
break;
+ }
default:
sLog->outError("Player::DeleteFromDB: Unsupported delete method: %u.", charDelete_method);
}
@@ -5063,7 +5064,7 @@ void Player::BuildPlayerRepop()
StopMirrorTimers(); //disable timers(bars)
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (float)1.0); //see radius of death player?
+ SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, float(1.0f)); //see radius of death player?
// set and clear other
SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
@@ -6173,16 +6174,17 @@ bool Player::UpdateFishingSkill()
// bonus abilities in sSkillLineAbilityStore
// Used only to avoid scan DBC at each skill grow
static uint32 bonusSkillLevels[] = {75, 150, 225, 300, 375, 450};
+static const size_t bonusSkillLevelsSize = sizeof(bonusSkillLevels) / sizeof(uint32);
bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
{
- sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "UpdateSkillPro(SkillId %d, Chance %3.1f%%)", SkillId, Chance/10.0);
+ sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "UpdateSkillPro(SkillId %d, Chance %3.1f%%)", SkillId, Chance / 10.0f);
if (!SkillId)
return false;
if (Chance <= 0) // speedup in 0 chance case
{
- sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "Player::UpdateSkillPro Chance=%3.1f%% missed", Chance/10.0);
+ sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "Player::UpdateSkillPro Chance=%3.1f%% missed", Chance / 10.0f);
return false;
}
@@ -6210,9 +6212,10 @@ bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, MaxValue));
if (itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_CHANGED;
- for (uint32* bsl = &bonusSkillLevels[0]; *bsl; ++bsl)
+ for (size_t i = 0; i < bonusSkillLevelsSize; ++i)
{
- if ((SkillValue < *bsl && new_value >= *bsl))
+ uint32 bsl = bonusSkillLevels[i];
+ if (SkillValue < bsl && new_value >= bsl)
{
learnSkillRewardedSpells(SkillId, new_value);
break;
@@ -6220,19 +6223,19 @@ bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
}
UpdateSkillEnchantments(SkillId, SkillValue, new_value);
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, SkillId);
- sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "Player::UpdateSkillPro Chance=%3.1f%% taken", Chance/10.0);
+ sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "Player::UpdateSkillPro Chance=%3.1f%% taken", Chance / 10.0f);
return true;
}
- sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "Player::UpdateSkillPro Chance=%3.1f%% missed", Chance/10.0);
+ sLog->outDebug(LOG_FILTER_PLAYER_SKILLS, "Player::UpdateSkillPro Chance=%3.1f%% missed", Chance / 10.0f);
return false;
}
-void Player::UpdateWeaponSkill (WeaponAttackType attType)
+void Player::UpdateWeaponSkill(WeaponAttackType attType)
{
// no skill gain in pvp
- Unit* pVictim = getVictim();
- if (pVictim && pVictim->GetTypeId() == TYPEID_PLAYER)
+ Unit* victim = getVictim();
+ if (victim && victim->GetTypeId() == TYPEID_PLAYER)
return;
if (IsInFeralForm())
@@ -6241,42 +6244,25 @@ void Player::UpdateWeaponSkill (WeaponAttackType attType)
if (GetShapeshiftForm() == FORM_TREE)
return; // use weapon but not skill up
- if (pVictim && pVictim->GetTypeId() == TYPEID_UNIT && (pVictim->ToCreature()->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_SKILLGAIN))
+ if (victim && victim->GetTypeId() == TYPEID_UNIT && (victim->ToCreature()->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_SKILLGAIN))
return;
uint32 weapon_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON);
- switch (attType)
- {
- case BASE_ATTACK:
- {
- Item* tmpitem = GetWeaponForAttack(attType, true);
+ Item* tmpitem = GetWeaponForAttack(attType, true);
+ if (!tmpitem && attType == BASE_ATTACK)
+ UpdateSkill(SKILL_UNARMED, weapon_skill_gain);
+ else if (tmpitem && tmpitem->GetTemplate()->SubClass != ITEM_SUBCLASS_WEAPON_FISHING_POLE)
+ UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain);
- if (!tmpitem)
- UpdateSkill(SKILL_UNARMED, weapon_skill_gain);
- else if (tmpitem->GetTemplate()->SubClass != ITEM_SUBCLASS_WEAPON_FISHING_POLE)
- UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain);
- break;
- }
- case OFF_ATTACK:
- case RANGED_ATTACK:
- {
- Item* tmpitem = GetWeaponForAttack(attType, true);
- if (tmpitem)
- UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain);
- break;
- }
- default:
- break;
- }
UpdateAllCritPercentages();
}
-void Player::UpdateCombatSkills(Unit* pVictim, WeaponAttackType attType, bool defence)
+void Player::UpdateCombatSkills(Unit* victim, WeaponAttackType attType, bool defence)
{
- uint8 plevel = getLevel(); // if defense than pVictim == attacker
+ uint8 plevel = getLevel(); // if defense than victim == attacker
uint8 greylevel = Trinity::XP::GetGrayLevel(plevel);
- uint8 moblevel = pVictim->getLevelForTarget(this);
+ uint8 moblevel = victim->getLevelForTarget(this);
if (moblevel < greylevel)
return;
@@ -7035,22 +7021,22 @@ void Player::RewardReputation(Quest const* quest)
// quest reputation reward/loss
for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
{
- if (!quest->RewRepFaction[i])
+ if (!quest->RewardFactionId[i])
continue;
- if (quest->RewRepValue[i])
+ if (quest->RewardFactionValueIdOverride[i])
{
- int32 rep = CalculateReputationGain(GetQuestLevel(quest), quest->RewRepValue[i]/100, quest->RewRepFaction[i], true, true);
+ int32 rep = CalculateReputationGain(GetQuestLevel(quest), quest->RewardFactionValueIdOverride[i]/100, quest->RewardFactionId[i], true, true);
if (recruitAFriend)
rep = int32(rep * (1 + sWorld->getRate(RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS)));
- if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(quest->RewRepFaction[i]))
+ if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(quest->RewardFactionId[i]))
GetReputationMgr().ModifyReputation(factionEntry, rep);
}
else
{
- uint32 row = ((quest->RewRepValueId[i] < 0) ? 1 : 0) + 1;
- uint32 field = abs(quest->RewRepValueId[i]);
+ uint32 row = ((quest->RewardFactionValueId[i] < 0) ? 1 : 0) + 1;
+ uint32 field = abs(quest->RewardFactionValueId[i]);
if (const QuestFactionRewEntry* pRow = sQuestFactionRewardStore.LookupEntry(row))
{
@@ -7059,12 +7045,12 @@ void Player::RewardReputation(Quest const* quest)
if (!repPoints)
continue;
- repPoints = CalculateReputationGain(GetQuestLevel(quest), repPoints, quest->RewRepFaction[i], true);
+ repPoints = CalculateReputationGain(GetQuestLevel(quest), repPoints, quest->RewardFactionId[i], true);
if (recruitAFriend)
repPoints = int32(repPoints * (1 + sWorld->getRate(RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS)));
- if (const FactionEntry* factionEntry = sFactionStore.LookupEntry(quest->RewRepFaction[i]))
+ if (const FactionEntry* factionEntry = sFactionStore.LookupEntry(quest->RewardFactionId[i]))
GetReputationMgr().ModifyReputation(factionEntry, repPoints);
}
}
@@ -7359,7 +7345,14 @@ uint32 Player::GetZoneIdFromDB(uint64 guid)
zone = sMapMgr->GetZoneId(map, posx, posy, posz);
if (zone > 0)
- CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ZONE);
+
+ stmt->setUInt16(0, uint16(zone));
+ stmt->setUInt32(1, guidLow);
+
+ CharacterDatabase.Execute(stmt);
+ }
}
return zone;
@@ -9533,7 +9526,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
// End Round (timer), better explain this by example, eg. ends in 19:59 -> A:BC
data << uint32(0xde9) << uint32(0x0); // 16 3561 C
data << uint32(0xde8) << uint32(0x0); // 17 3560 B
- data << uint32(0xde7) << uint32(0x0); // 18 3559 A
+ data << uint32(0xde7) << uint32(0x0); // 18 3559 A
data << uint32(0xe35) << uint32(0x0); // 19 3637 East g - Horde control
data << uint32(0xe34) << uint32(0x0); // 20 3636 West g - Horde control
data << uint32(0xe33) << uint32(0x0); // 21 3635 South g - Horde control
@@ -10408,7 +10401,7 @@ bool Player::HasItemOrGemWithLimitCategoryEquipped(uint32 limitCategory, uint32
return false;
}
-InventoryResult Player::_CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count) const
+InventoryResult Player::CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count) const
{
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(entry);
if (!pProto)
@@ -10492,7 +10485,7 @@ bool Player::HasItemTotemCategory(uint32 TotemCategory) const
return false;
}
-InventoryResult Player::_CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec &dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const
+InventoryResult Player::CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec &dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const
{
Item* pItem2 = GetItemByPos(bag, slot);
@@ -10566,9 +10559,9 @@ InventoryResult Player::_CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, Item
return EQUIP_ERR_OK;
}
-InventoryResult Player::_CanStoreItem_InBag(uint8 bag, ItemPosCountVec &dest, ItemTemplate const* pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const
+InventoryResult Player::CanStoreItem_InBag(uint8 bag, ItemPosCountVec &dest, ItemTemplate const* pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const
{
- // skip specific bag already processed in first called _CanStoreItem_InBag
+ // skip specific bag already processed in first called CanStoreItem_InBag
if (bag == skip_bag)
return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG;
@@ -10593,7 +10586,7 @@ InventoryResult Player::_CanStoreItem_InBag(uint8 bag, ItemPosCountVec &dest, It
for (uint32 j = 0; j < pBag->GetBagSize(); j++)
{
- // skip specific slot already processed in first called _CanStoreItem_InSpecificSlot
+ // skip specific slot already processed in first called CanStoreItem_InSpecificSlot
if (j == skip_slot)
continue;
@@ -10636,7 +10629,7 @@ InventoryResult Player::_CanStoreItem_InBag(uint8 bag, ItemPosCountVec &dest, It
return EQUIP_ERR_OK;
}
-InventoryResult Player::_CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 slot_end, ItemPosCountVec &dest, ItemTemplate const* pProto, uint32& count, bool merge, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const
+InventoryResult Player::CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 slot_end, ItemPosCountVec &dest, ItemTemplate const* pProto, uint32& count, bool merge, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const
{
//this is never called for non-bag slots so we can do this
if (pSrcItem && pSrcItem->IsNotEmptyBag())
@@ -10644,7 +10637,7 @@ InventoryResult Player::_CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 s
for (uint32 j = slot_begin; j < slot_end; j++)
{
- // skip specific slot already processed in first called _CanStoreItem_InSpecificSlot
+ // skip specific slot already processed in first called CanStoreItem_InSpecificSlot
if (INVENTORY_SLOT_BAG_0 == skip_bag && j == skip_slot)
continue;
@@ -10687,7 +10680,7 @@ InventoryResult Player::_CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 s
return EQUIP_ERR_OK;
}
-InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 entry, uint32 count, Item* pItem, bool swap, uint32* no_space_count) const
+InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 entry, uint32 count, Item* pItem, bool swap, uint32* no_space_count) const
{
sLog->outDebug(LOG_FILTER_PLAYER_ITEMS, "STORAGE: CanStoreItem bag = %u, slot = %u, item = %u, count = %u", bag, slot, entry, count);
@@ -10719,7 +10712,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
// check count of items (skip for auto move for same player from bank)
uint32 no_similar_count = 0; // can't store this amount similar items
- InventoryResult res = _CanTakeMoreSimilarItems(entry, count, pItem, &no_similar_count);
+ InventoryResult res = CanTakeMoreSimilarItems(entry, count, pItem, &no_similar_count);
if (res != EQUIP_ERR_OK)
{
if (count == no_similar_count)
@@ -10734,7 +10727,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
// in specific slot
if (bag != NULL_BAG && slot != NULL_SLOT)
{
- res = _CanStoreItem_InSpecificSlot(bag, slot, dest, pProto, count, swap, pItem);
+ res = CanStoreItem_InSpecificSlot(bag, slot, dest, pProto, count, swap, pItem);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10763,7 +10756,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
{
if (bag == INVENTORY_SLOT_BAG_0) // inventory
{
- res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(KEYRING_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10781,7 +10774,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
}
- res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10802,9 +10795,9 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
else // equipped bag
{
// we need check 2 time (specialized/non_specialized), use NULL_BAG to prevent skipping bag
- res = _CanStoreItem_InBag(bag, dest, pProto, count, true, false, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, true, false, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
- res = _CanStoreItem_InBag(bag, dest, pProto, count, true, true, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, true, true, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
{
@@ -10832,7 +10825,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
if (pProto->BagFamily & BAG_FAMILY_MASK_KEYS)
{
uint32 keyringSize = GetMaxKeyringSize();
- res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START, KEYRING_SLOT_START+keyringSize, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(KEYRING_SLOT_START, KEYRING_SLOT_START+keyringSize, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10850,7 +10843,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
}
- res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10870,7 +10863,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
}
else if (pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)
{
- res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10889,7 +10882,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
}
}
- res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10909,9 +10902,9 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
}
else // equipped bag
{
- res = _CanStoreItem_InBag(bag, dest, pProto, count, false, false, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, false, false, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
- res = _CanStoreItem_InBag(bag, dest, pProto, count, false, true, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, false, true, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
{
@@ -10937,7 +10930,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
// search stack for merge to
if (pProto->Stackable != 1)
{
- res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(KEYRING_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10955,7 +10948,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS;
}
- res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -10977,7 +10970,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
{
for (uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, true, false, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, true, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -10995,7 +10988,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
for (uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, true, true, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, true, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11017,7 +11010,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
if (pProto->BagFamily & BAG_FAMILY_MASK_KEYS)
{
uint32 keyringSize = GetMaxKeyringSize();
- res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START, KEYRING_SLOT_START+keyringSize, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(KEYRING_SLOT_START, KEYRING_SLOT_START+keyringSize, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -11037,7 +11030,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
}
else if (pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)
{
- res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START, CURRENCYTOKEN_SLOT_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -11058,7 +11051,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
for (uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, false, false, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, false, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11078,7 +11071,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
return EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG;
// search free slot
- res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START, INVENTORY_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
{
if (no_space_count)
@@ -11098,7 +11091,7 @@ InventoryResult Player::_CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &de
for (uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, false, true, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, false, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11597,7 +11590,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
return res;
}
- res = _CanStoreItem_InSpecificSlot(bag, slot, dest, pProto, count, swap, pItem);
+ res = CanStoreItem_InSpecificSlot(bag, slot, dest, pProto, count, swap, pItem);
if (res != EQUIP_ERR_OK)
return res;
@@ -11618,7 +11611,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
{
if (bag == INVENTORY_SLOT_BAG_0)
{
- res = _CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
return res;
@@ -11627,9 +11620,9 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
}
else
{
- res = _CanStoreItem_InBag(bag, dest, pProto, count, true, false, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, true, false, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
- res = _CanStoreItem_InBag(bag, dest, pProto, count, true, true, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, true, true, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
return res;
@@ -11642,7 +11635,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
// search free slot in bag
if (bag == INVENTORY_SLOT_BAG_0)
{
- res = _CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
return res;
@@ -11651,9 +11644,9 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
}
else
{
- res = _CanStoreItem_InBag(bag, dest, pProto, count, false, false, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, false, false, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
- res = _CanStoreItem_InBag(bag, dest, pProto, count, false, true, pItem, NULL_BAG, slot);
+ res = CanStoreItem_InBag(bag, dest, pProto, count, false, true, pItem, NULL_BAG, slot);
if (res != EQUIP_ERR_OK)
return res;
@@ -11669,7 +11662,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
if (pProto->Stackable != 1)
{
// in slots
- res = _CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
return res;
@@ -11681,7 +11674,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
{
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, true, false, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, true, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11692,7 +11685,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, true, true, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, true, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11706,7 +11699,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
{
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, false, false, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, false, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11716,7 +11709,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
}
// search free space
- res = _CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START, BANK_SLOT_ITEM_END, dest, pProto, count, false, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
return res;
@@ -11725,7 +11718,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest
for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; i++)
{
- res = _CanStoreItem_InBag(i, dest, pProto, count, false, true, pItem, bag, slot);
+ res = CanStoreItem_InBag(i, dest, pProto, count, false, true, pItem, bag, slot);
if (res != EQUIP_ERR_OK)
continue;
@@ -11898,8 +11891,14 @@ void Player::RemoveAmmo()
UpdateDamagePhysical(RANGED_ATTACK);
}
+Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update, int32 randomPropertyId)
+{
+ AllowedLooterSet allowedLooters;
+ return StoreNewItem(dest, item, update, randomPropertyId, allowedLooters);
+}
+
// Return stored item (if stored to stack, it can diff. from pItem). And pItem ca be deleted in this case.
-Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update, int32 randomPropertyId, AllowedLooterSet* allowedLooters)
+Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update, int32 randomPropertyId, AllowedLooterSet& allowedLooters)
{
uint32 count = 0;
for (ItemPosCountVec::const_iterator itr = dest.begin(); itr != dest.end(); ++itr)
@@ -11919,18 +11918,20 @@ Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update
if (proto->Spells[i].SpellTrigger == ITEM_SPELLTRIGGER_ON_NO_DELAY_USE && proto->Spells[i].SpellId > 0) // On obtain trigger
CastSpell(this, proto->Spells[i].SpellId, true, pItem);
- if (allowedLooters && pItem->GetTemplate()->GetMaxStackSize() == 1 && pItem->IsSoulBound())
+ if (allowedLooters.size() > 1 && pItem->GetTemplate()->GetMaxStackSize() == 1 && pItem->IsSoulBound())
{
- pItem->SetSoulboundTradeable(allowedLooters, this, true);
+ pItem->SetSoulboundTradeable(allowedLooters);
pItem->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, GetTotalPlayedTime());
m_itemSoulboundTradeable.push_back(pItem);
// save data
std::ostringstream ss;
- for (AllowedLooterSet::iterator itr = allowedLooters->begin(); itr != allowedLooters->end(); ++itr)
- ss << *itr << ' ';
+ AllowedLooterSet::const_iterator itr = allowedLooters.begin();
+ ss << *itr;
+ for (++itr; itr != allowedLooters.end(); ++itr)
+ ss << ' ' << *itr;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_ITEM_BOP_TRADE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_BOP_TRADE);
stmt->setUInt32(0, pItem->GetGUIDLow());
stmt->setString(1, ss.str());
CharacterDatabase.Execute(stmt);
@@ -12051,7 +12052,7 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool
pItem->SetOwnerGUID(GetGUID()); // prevent error at next SetState in case trade/mail/buy from vendor
pItem->SetNotRefundable(this);
- pItem->SetSoulboundTradeable(NULL, this, false);
+ pItem->ClearSoulboundTradeable(this);
RemoveTradeableItem(pItem);
pItem->SetState(ITEM_REMOVED, this);
}
@@ -12168,7 +12169,7 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update)
pItem->SetOwnerGUID(GetGUID()); // prevent error at next SetState in case trade/mail/buy from vendor
pItem->SetNotRefundable(this);
- pItem->SetSoulboundTradeable(NULL, this, false);
+ pItem->ClearSoulboundTradeable(this);
RemoveTradeableItem(pItem);
pItem->SetState(ITEM_REMOVED, this);
pItem2->SetState(ITEM_CHANGED, this);
@@ -12382,13 +12383,19 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update)
DestroyItem(slot, i, update);
if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
- CharacterDatabase.PExecute("DELETE FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
+
+ stmt->setUInt32(0, pItem->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
+ }
RemoveEnchantmentDurations(pItem);
RemoveItemDurations(pItem);
pItem->SetNotRefundable(this);
- pItem->SetSoulboundTradeable(NULL, this, false);
+ pItem->ClearSoulboundTradeable(this);
RemoveTradeableItem(pItem);
const ItemTemplate* proto = pItem->GetTemplate();
@@ -12896,6 +12903,8 @@ void Player::SwapItem(uint16 src, uint16 dst)
RemoveItem(srcbag, srcslot, true);
StoreItem(dest, pSrcItem, true);
+ if (IsBankPos(src))
+ ItemAddedQuestCheck(pSrcItem->GetEntry(), pSrcItem->GetCount());
}
else if (IsBankPos (dst))
{
@@ -12909,6 +12918,7 @@ void Player::SwapItem(uint16 src, uint16 dst)
RemoveItem(srcbag, srcslot, true);
BankItem(dest, pSrcItem, true);
+ ItemRemovedQuestCheck(pSrcItem->GetEntry(), pSrcItem->GetCount());
}
else if (IsEquipmentPos (dst))
{
@@ -13333,35 +13343,25 @@ void Player::UpdateSoulboundTradeItems()
// also checks for garbage data
for (ItemDurationList::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();)
{
- if (!*itr)
- {
- itr = m_itemSoulboundTradeable.erase(itr++);
- continue;
- }
+ ASSERT(*itr);
if ((*itr)->GetOwnerGUID() != GetGUID())
{
- itr = m_itemSoulboundTradeable.erase(itr++);
+ m_itemSoulboundTradeable.erase(itr++);
continue;
}
if ((*itr)->CheckSoulboundTradeExpire())
{
- itr = m_itemSoulboundTradeable.erase(itr++);
+ m_itemSoulboundTradeable.erase(itr++);
continue;
}
++itr;
}
}
+//TODO: should never allow an item to be added to m_itemSoulboundTradeable twice
void Player::RemoveTradeableItem(Item* item)
{
- for (ItemDurationList::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end(); ++itr)
- {
- if ((*itr) == item)
- {
- m_itemSoulboundTradeable.erase(itr);
- break;
- }
- }
+ m_itemSoulboundTradeable.remove(item);
}
void Player::UpdateItemDuration(uint32 time, bool realtimeonly)
@@ -13591,7 +13591,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
}
}
}
- // Cast custom spell vs all equal basepoints getted from enchant_amount
+ // Cast custom spell vs all equal basepoints got from enchant_amount
if (basepoints)
CastCustomSpell(this, enchant_spell_id, &basepoints, &basepoints, &basepoints, true, item);
else
@@ -14525,11 +14525,11 @@ Quest const* Player::GetNextQuest(uint64 guid, Quest const* quest)
bool Player::CanSeeStartQuest(Quest const* quest)
{
- if (SatisfyQuestRace(quest, false) && SatisfyQuestSkillOrClass(quest, false) &&
+ if (SatisfyQuestClass(quest, false) && SatisfyQuestRace(quest, false) && SatisfyQuestSkill(quest, false) &&
SatisfyQuestExclusiveGroup(quest, false) && SatisfyQuestReputation(quest, false) &&
SatisfyQuestPreviousQuest(quest, false) && SatisfyQuestNextChain(quest, false) &&
SatisfyQuestPrevChain(quest, false) && SatisfyQuestDay(quest, false) && SatisfyQuestWeek(quest, false) &&
- !DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), this))
+ SatisfyQuestSeasonal(quest, false) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), this))
{
return getLevel() + sWorld->getIntConfig(CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF) >= quest->GetMinLevel();
}
@@ -14540,12 +14540,12 @@ bool Player::CanSeeStartQuest(Quest const* quest)
bool Player::CanTakeQuest(Quest const* quest, bool msg)
{
return SatisfyQuestStatus(quest, msg) && SatisfyQuestExclusiveGroup(quest, msg)
- && SatisfyQuestRace(quest, msg) && SatisfyQuestLevel(quest, msg)
- && SatisfyQuestSkillOrClass(quest, msg) && SatisfyQuestReputation(quest, msg)
+ && SatisfyQuestClass(quest, msg) && SatisfyQuestRace(quest, msg) && SatisfyQuestLevel(quest, msg)
+ && SatisfyQuestSkill(quest, msg) && SatisfyQuestReputation(quest, msg)
&& SatisfyQuestPreviousQuest(quest, msg) && SatisfyQuestTimed(quest, msg)
&& SatisfyQuestNextChain(quest, msg) && SatisfyQuestPrevChain(quest, msg)
&& SatisfyQuestDay(quest, msg) && SatisfyQuestWeek(quest, msg)
- && !DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), this)
+ && SatisfyQuestSeasonal(quest,msg) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, quest->GetQuestId(), this)
&& SatisfyQuestConditions(quest, msg);
}
@@ -14581,8 +14581,7 @@ bool Player::CanCompleteQuest(uint32 quest_id)
if (!qInfo)
return false;
- RewardedQuestSet::iterator rewItr = m_RewardedQuests.find(quest_id);
- if (!qInfo->IsRepeatable() && rewItr != m_RewardedQuests.end())
+ if (!qInfo->IsRepeatable() && m_RewardedQuests.find(quest_id) != m_RewardedQuests.end())
return false; // not allow re-complete quest
// auto complete quest
@@ -14601,7 +14600,7 @@ bool Player::CanCompleteQuest(uint32 quest_id)
{
for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; i++)
{
- if (qInfo->ReqItemCount[i]!= 0 && q_status.m_itemcount[i] < qInfo->ReqItemCount[i])
+ if (qInfo->RequiredItemCount[i]!= 0 && q_status.m_itemcount[i] < qInfo->RequiredItemCount[i])
return false;
}
}
@@ -14610,10 +14609,10 @@ bool Player::CanCompleteQuest(uint32 quest_id)
{
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
{
- if (qInfo->ReqCreatureOrGOId[i] == 0)
+ if (qInfo->RequiredNpcOrGo[i] == 0)
continue;
- if (qInfo->ReqCreatureOrGOCount[i] != 0 && q_status.m_creatureOrGOcount[i] < qInfo->ReqCreatureOrGOCount[i])
+ if (qInfo->RequiredNpcOrGoCount[i] != 0 && q_status.m_creatureOrGOcount[i] < qInfo->RequiredNpcOrGoCount[i])
return false;
}
}
@@ -14654,7 +14653,7 @@ bool Player::CanCompleteRepeatableQuest(Quest const* quest)
if (quest->HasFlag(QUEST_TRINITY_FLAGS_DELIVER))
for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; i++)
- if (quest->ReqItemId[i] && quest->ReqItemCount[i] && !HasItemCount(quest->ReqItemId[i], quest->ReqItemCount[i]))
+ if (quest->RequiredItemId[i] && quest->RequiredItemCount[i] && !HasItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i]))
return false;
if (!CanRewardQuest(quest, false))
@@ -14670,7 +14669,7 @@ bool Player::CanRewardQuest(Quest const* quest, bool msg)
return false;
// daily quest can't be rewarded (25 daily quest already completed)
- if (!SatisfyQuestDay(quest, true) || !SatisfyQuestWeek(quest, true))
+ if (!SatisfyQuestDay(quest, true) || !SatisfyQuestWeek(quest, true) || !SatisfyQuestSeasonal(quest,true))
return false;
// rewarded and not repeatable quest (only cheating case, then ignore without message)
@@ -14682,11 +14681,11 @@ bool Player::CanRewardQuest(Quest const* quest, bool msg)
{
for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; i++)
{
- if (quest->ReqItemCount[i]!= 0 &&
- GetItemCount(quest->ReqItemId[i]) < quest->ReqItemCount[i])
+ if (quest->RequiredItemCount[i]!= 0 &&
+ GetItemCount(quest->RequiredItemId[i]) < quest->RequiredItemCount[i])
{
if (msg)
- SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL, quest->ReqItemId[i]);
+ SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL, quest->RequiredItemId[i]);
return false;
}
}
@@ -14707,13 +14706,13 @@ bool Player::CanRewardQuest(Quest const* quest, uint32 reward, bool msg)
if (quest->GetRewChoiceItemsCount() > 0)
{
- if (quest->RewChoiceItemId[reward])
+ if (quest->RewardChoiceItemId[reward])
{
ItemPosCountVec dest;
- InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, quest->RewChoiceItemId[reward], quest->RewChoiceItemCount[reward]);
+ InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, quest->RewardChoiceItemId[reward], quest->RewardChoiceItemCount[reward]);
if (res != EQUIP_ERR_OK)
{
- SendEquipError(res, NULL, NULL, quest->RewChoiceItemId[reward]);
+ SendEquipError(res, NULL, NULL, quest->RewardChoiceItemId[reward]);
return false;
}
}
@@ -14723,13 +14722,13 @@ bool Player::CanRewardQuest(Quest const* quest, uint32 reward, bool msg)
{
for (uint32 i = 0; i < quest->GetRewItemsCount(); ++i)
{
- if (quest->RewItemId[i])
+ if (quest->RewardItemId[i])
{
ItemPosCountVec dest;
- InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, quest->RewItemId[i], quest->RewItemCount[i]);
+ InventoryResult res = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, quest->RewardItemId[i], quest->RewardItemIdCount[i]);
if (res != EQUIP_ERR_OK)
{
- SendEquipError(res, NULL, NULL, quest->RewItemId[i]);
+ SendEquipError(res, NULL, NULL, quest->RewardItemId[i]);
return false;
}
}
@@ -14862,15 +14861,15 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
uint32 quest_id = quest->GetQuestId();
for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- if (quest->ReqItemId[i])
- DestroyItemCount(quest->ReqItemId[i], quest->ReqItemCount[i], true);
+ if (quest->RequiredItemId[i])
+ DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true);
for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
{
- if (quest->ReqSourceId[i])
+ if (quest->RequiredSourceItemId[i])
{
- uint32 count = quest->ReqSourceCount[i];
- DestroyItemCount(quest->ReqSourceId[i], count ? count : 9999, true);
+ uint32 count = quest->RequiredSourceItemCount[i];
+ DestroyItemCount(quest->RequiredSourceItemId[i], count ? count : 9999, true);
}
}
@@ -14878,13 +14877,13 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (quest->GetRewChoiceItemsCount() > 0)
{
- if (uint32 itemId = quest->RewChoiceItemId[reward])
+ if (uint32 itemId = quest->RewardChoiceItemId[reward])
{
ItemPosCountVec dest;
- if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, quest->RewChoiceItemCount[reward]) == EQUIP_ERR_OK)
+ if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, quest->RewardChoiceItemCount[reward]) == EQUIP_ERR_OK)
{
Item* item = StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
- SendNewItem(item, quest->RewChoiceItemCount[reward], true, false);
+ SendNewItem(item, quest->RewardChoiceItemCount[reward], true, false);
}
}
}
@@ -14893,13 +14892,13 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
{
for (uint32 i = 0; i < quest->GetRewItemsCount(); ++i)
{
- if (uint32 itemId = quest->RewItemId[i])
+ if (uint32 itemId = quest->RewardItemId[i])
{
ItemPosCountVec dest;
- if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, quest->RewItemCount[i]) == EQUIP_ERR_OK)
+ if (CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, quest->RewardItemIdCount[i]) == EQUIP_ERR_OK)
{
Item* item = StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
- SendNewItem(item, quest->RewItemCount[i], true, false);
+ SendNewItem(item, quest->RewardItemIdCount[i], true, false);
}
}
}
@@ -14911,8 +14910,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (log_slot < MAX_QUEST_LOG_SIZE)
SetQuestSlot(log_slot, 0);
- RewardedQuestSet::const_iterator rewItr = m_RewardedQuests.find(quest_id);
- bool rewarded = (rewItr != m_RewardedQuests.end());
+ bool rewarded = (m_RewardedQuests.find(quest_id) != m_RewardedQuests.end());
// Not give XP in case already completed once repeatable quest
uint32 XP = rewarded ? 0 : uint32(quest->XPValue(this)*sWorld->getRate(RATE_XP_QUEST));
@@ -14980,6 +14978,8 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
}
else if (quest->IsWeekly())
SetWeeklyQuestStatus(quest_id);
+ else if (quest->IsSeasonal())
+ SetSeasonalQuestStatus(quest_id);
RemoveActiveQuest(quest_id);
m_RewardedQuests.insert(quest_id);
@@ -15064,57 +15064,31 @@ void Player::FailQuest(uint32 questId)
// Destroy quest items on quest failure.
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- if (quest->ReqItemId[i] > 0 && quest->ReqItemCount[i] > 0)
- // Destroy items recieved on starting the quest.
- DestroyItemCount(quest->ReqItemId[i], quest->ReqItemCount[i], true, true);
+ if (quest->RequiredItemId[i] > 0 && quest->RequiredItemCount[i] > 0)
+ // Destroy items received on starting the quest.
+ DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true, true);
for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- if (quest->ReqSourceId[i] > 0 && quest->ReqSourceCount[i] > 0)
- // Destroy items recieved during the quest.
- DestroyItemCount(quest->ReqSourceId[i], quest->ReqSourceCount[i], true, true);
+ if (quest->RequiredSourceItemId[i] > 0 && quest->RequiredSourceItemCount[i] > 0)
+ // Destroy items received during the quest.
+ DestroyItemCount(quest->RequiredSourceItemId[i], quest->RequiredSourceItemCount[i], true, true);
}
}
-bool Player::SatisfyQuestSkillOrClass(Quest const* qInfo, bool msg)
+bool Player::SatisfyQuestSkill(Quest const* qInfo, bool msg) const
{
- int32 zoneOrSort = qInfo->GetZoneOrSort();
- int32 skillOrClassMask = qInfo->GetSkillOrClassMask();
+ uint32 skill = qInfo->GetRequiredSkill();
- // skip zone zoneOrSort and 0 case skillOrClass
- if (zoneOrSort >= 0 && skillOrClassMask == 0)
+ // skip 0 case RequiredSkill
+ if (skill == 0)
return true;
- int32 questSort = -zoneOrSort;
- uint8 reqSortClass = ClassByQuestSort(questSort);
-
- // check class sort cases in zoneOrSort
- if (reqSortClass != 0 && getClass() != reqSortClass)
+ // check skill value
+ if (GetSkillValue(skill) < qInfo->GetRequiredSkillValue())
{
if (msg)
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
- return false;
- }
- // check class
- if (skillOrClassMask < 0)
- {
- uint32 reqClassMask = -int32(skillOrClassMask);
- if (!(reqClassMask & getClassMask()))
- {
- if (msg)
- SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
- return false;
- }
- }
- // check skill
- else if (skillOrClassMask > 0)
- {
- uint32 reqSkill = skillOrClassMask;
- if (GetSkillValue(reqSkill) < qInfo->GetRequiredSkillValue())
- {
- if (msg)
- SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
- return false;
- }
+ return false;
}
return true;
@@ -15242,6 +15216,24 @@ bool Player::SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg)
return false;
}
+bool Player::SatisfyQuestClass(Quest const* qInfo, bool msg) const
+{
+ uint32 reqClass = qInfo->GetRequiredClasses();
+
+ if (reqClass == 0)
+ return true;
+
+ if ((reqClass & getClassMask()) == 0)
+ {
+ if (msg)
+ SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
+
+ return false;
+ }
+
+ return true;
+}
+
bool Player::SatisfyQuestRace(Quest const* qInfo, bool msg)
{
uint32 reqraces = qInfo->GetRequiredRaces();
@@ -15343,7 +15335,7 @@ bool Player::SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg)
// not allow have daily quest if daily quest from exclusive group already recently completed
Quest const* Nquest = sObjectMgr->GetQuestTemplate(exclude_Id);
- if (!SatisfyQuestDay(Nquest, false) || !SatisfyQuestWeek(Nquest, false))
+ if (!SatisfyQuestDay(Nquest, false) || !SatisfyQuestWeek(Nquest, false) || !SatisfyQuestSeasonal(Nquest,false))
{
if (msg)
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
@@ -15352,7 +15344,7 @@ bool Player::SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg)
}
// alternative quest already started or completed - but don't check rewarded states if both are repeatable
- if (GetQuestStatus(exclude_Id) != QUEST_STATUS_NONE || (!(qInfo->IsRepeatable() && Nquest->IsRepeatable()) && m_RewardedQuests.find(exclude_Id) != m_RewardedQuests.end()))
+ if (GetQuestStatus(exclude_Id) != QUEST_STATUS_NONE || (!(qInfo->IsRepeatable() && Nquest->IsRepeatable()) && (m_RewardedQuests.find(exclude_Id) != m_RewardedQuests.end())))
{
if (msg)
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
@@ -15453,6 +15445,15 @@ bool Player::SatisfyQuestWeek(Quest const* qInfo, bool /*msg*/)
return m_weeklyquests.find(qInfo->GetQuestId()) == m_weeklyquests.end();
}
+bool Player::SatisfyQuestSeasonal(Quest const* qInfo, bool /*msg*/)
+{
+ if (!qInfo->IsSeasonal() || m_seasonalquests.empty())
+ return true;
+ if (m_seasonalquests.find(qInfo->GetSeasonalQuestEvent()) == m_seasonalquests.end()) return false;
+ // if not found in cooldown list
+ return m_seasonalquests[qInfo->GetSeasonalQuestEvent()].find(qInfo->GetQuestId()) == m_seasonalquests[qInfo->GetSeasonalQuestEvent()].end();
+}
+
bool Player::GiveQuestSourceItem(Quest const* quest)
{
uint32 srcitem = quest->GetSrcItemId();
@@ -15499,7 +15500,7 @@ bool Player::TakeQuestSourceItem(uint32 questId, bool msg)
// exist two cases when destroy source quest item not possible:
// a) non un-equippable item (equipped non-empty bag, for example)
// b) when quest is started from an item and item also is needed in
- // the end as ReqItemId
+ // the end as RequiredItemId
InventoryResult res = CanUnequipItems(srcItemId, count);
if (res != EQUIP_ERR_OK)
{
@@ -15509,7 +15510,7 @@ bool Player::TakeQuestSourceItem(uint32 questId, bool msg)
}
for (uint8 n = 0; n < QUEST_ITEM_OBJECTIVES_COUNT; ++n)
- if (item->StartQuest == questId && srcItemId == quest->ReqItemId[n])
+ if (item->StartQuest == questId && srcItemId == quest->RequiredItemId[n])
destroyItem = false;
if (destroyItem)
@@ -15601,7 +15602,7 @@ uint16 Player::GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry)
return 0;
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
- if (qInfo->ReqCreatureOrGOId[j] == entry)
+ if (qInfo->RequiredNpcOrGo[j] == entry)
return m_QuestStatus[quest_id].m_creatureOrGOcount[j];
return 0;
@@ -15613,10 +15614,10 @@ void Player::AdjustQuestReqItemCount(Quest const* quest, QuestStatusData& questS
{
for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
{
- uint32 reqitemcount = quest->ReqItemCount[i];
+ uint32 reqitemcount = quest->RequiredItemCount[i];
if (reqitemcount != 0)
{
- uint32 curitemcount = GetItemCount(quest->ReqItemId[i], true);
+ uint32 curitemcount = GetItemCount(quest->RequiredItemId[i], true);
questStatusData.m_itemcount[i] = std::min(curitemcount, reqitemcount);
m_QuestStatusSave[quest->GetQuestId()] = true;
@@ -15661,11 +15662,11 @@ void Player::GroupEventHappens(uint32 questId, WorldObject const* pEventObject)
{
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pGroupGuy = itr->getSource();
+ Player* player = itr->getSource();
// for any leave or dead (with not released body) group member at appropriate distance
- if (pGroupGuy && pGroupGuy->IsAtGroupRewardDistance(pEventObject) && !pGroupGuy->GetCorpse())
- pGroupGuy->AreaExploredOrEventHappens(questId);
+ if (player && player->IsAtGroupRewardDistance(pEventObject) && !player->GetCorpse())
+ player->AreaExploredOrEventHappens(questId);
}
}
else
@@ -15691,10 +15692,10 @@ void Player::ItemAddedQuestCheck(uint32 entry, uint32 count)
for (uint8 j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
{
- uint32 reqitem = qInfo->ReqItemId[j];
+ uint32 reqitem = qInfo->RequiredItemId[j];
if (reqitem == entry)
{
- uint32 reqitemcount = qInfo->ReqItemCount[j];
+ uint32 reqitemcount = qInfo->RequiredItemCount[j];
uint16 curitemcount = q_status.m_itemcount[j];
if (curitemcount < reqitemcount)
{
@@ -15729,12 +15730,12 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count)
for (uint8 j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
{
- uint32 reqitem = qInfo->ReqItemId[j];
+ uint32 reqitem = qInfo->RequiredItemId[j];
if (reqitem == entry)
{
QuestStatusData& q_status = m_QuestStatus[questid];
- uint32 reqitemcount = qInfo->ReqItemCount[j];
+ uint32 reqitemcount = qInfo->RequiredItemCount[j];
uint16 curitemcount;
if (q_status.m_status != QUEST_STATUS_COMPLETE)
curitemcount = q_status.m_itemcount[j];
@@ -15798,18 +15799,18 @@ void Player::KilledMonsterCredit(uint32 entry, uint64 guid)
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
{
// skip GO activate objective or none
- if (qInfo->ReqCreatureOrGOId[j] <= 0)
+ if (qInfo->RequiredNpcOrGo[j] <= 0)
continue;
// skip Cast at creature objective
- if (qInfo->ReqSpell[j] != 0)
+ if (qInfo->RequiredSpellCast[j] != 0)
continue;
- uint32 reqkill = qInfo->ReqCreatureOrGOId[j];
+ uint32 reqkill = qInfo->RequiredNpcOrGo[j];
if (reqkill == real_entry)
{
- uint32 reqkillcount = qInfo->ReqCreatureOrGOCount[j];
+ uint32 reqkillcount = qInfo->RequiredNpcOrGoCount[j];
uint16 curkillcount = q_status.m_creatureOrGOcount[j];
if (curkillcount < reqkillcount)
{
@@ -15895,7 +15896,7 @@ void Player::CastedCreatureOrGO(uint32 entry, uint64 guid, uint32 spell_id)
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
{
// skip kill creature objective (0) or wrong spell casts
- if (qInfo->ReqSpell[j] != spell_id)
+ if (qInfo->RequiredSpellCast[j] != spell_id)
continue;
uint32 reqTarget = 0;
@@ -15903,32 +15904,32 @@ void Player::CastedCreatureOrGO(uint32 entry, uint64 guid, uint32 spell_id)
if (isCreature)
{
// creature activate objectives
- if (qInfo->ReqCreatureOrGOId[j] > 0)
+ if (qInfo->RequiredNpcOrGo[j] > 0)
{
// checked at quest_template loading
- reqTarget = qInfo->ReqCreatureOrGOId[j];
+ reqTarget = qInfo->RequiredNpcOrGo[j];
if (reqTarget != entry) // if entry doesn't match, check for killcredits referenced in template
{
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
- for (uint8 i = 0; i < MAX_KILL_CREDIT; ++i)
- if (cinfo->KillCredit[i] == reqTarget)
- entry = cinfo->KillCredit[i];
+ for (uint8 j = 0; j < MAX_KILL_CREDIT; ++j)
+ if (cinfo->KillCredit[j] == reqTarget)
+ entry = cinfo->KillCredit[j];
}
}
}
else
{
// GO activate objective
- if (qInfo->ReqCreatureOrGOId[j] < 0)
+ if (qInfo->RequiredNpcOrGo[j] < 0)
// checked at quest_template loading
- reqTarget = - qInfo->ReqCreatureOrGOId[j];
+ reqTarget = - qInfo->RequiredNpcOrGo[j];
}
// other not this creature/GO related objectives
if (reqTarget != entry)
continue;
- uint32 reqCastCount = qInfo->ReqCreatureOrGOCount[j];
+ uint32 reqCastCount = qInfo->RequiredNpcOrGoCount[j];
uint16 curCastCount = q_status.m_creatureOrGOcount[j];
if (curCastCount < reqCastCount)
{
@@ -15972,20 +15973,20 @@ void Player::TalkedToCreature(uint32 entry, uint64 guid)
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
{
// skip spell casts and Gameobject objectives
- if (qInfo->ReqSpell[j] > 0 || qInfo->ReqCreatureOrGOId[j] < 0)
+ if (qInfo->RequiredSpellCast[j] > 0 || qInfo->RequiredNpcOrGo[j] < 0)
continue;
uint32 reqTarget = 0;
- if (qInfo->ReqCreatureOrGOId[j] > 0) // creature activate objectives
+ if (qInfo->RequiredNpcOrGo[j] > 0) // creature activate objectives
// checked at quest_template loading
- reqTarget = qInfo->ReqCreatureOrGOId[j];
+ reqTarget = qInfo->RequiredNpcOrGo[j];
else
continue;
if (reqTarget == entry)
{
- uint32 reqTalkCount = qInfo->ReqCreatureOrGOCount[j];
+ uint32 reqTalkCount = qInfo->RequiredNpcOrGoCount[j];
uint16 curTalkCount = q_status.m_creatureOrGOcount[j];
if (curTalkCount < reqTalkCount)
{
@@ -16122,14 +16123,14 @@ bool Player::HasQuestForItem(uint32 itemid) const
// This part for ReqItem drop
for (uint8 j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
{
- if (itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j])
+ if (itemid == qinfo->RequiredItemId[j] && q_status.m_itemcount[j] < qinfo->RequiredItemCount[j])
return true;
}
// This part - for ReqSource
for (uint8 j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
{
// examined item is a source item
- if (qinfo->ReqSourceId[j] == itemid)
+ if (qinfo->RequiredSourceItemId[j] == itemid)
{
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid);
@@ -16138,9 +16139,9 @@ bool Player::HasQuestForItem(uint32 itemid) const
return true;
// allows custom amount drop when not 0
- if (qinfo->ReqSourceCount[j])
+ if (qinfo->RequiredSourceItemCount[j])
{
- if (GetItemCount(itemid, true) < qinfo->ReqSourceCount[j])
+ if (GetItemCount(itemid, true) < qinfo->RequiredSourceItemCount[j])
return true;
} else if (GetItemCount(itemid, true) < pProto->GetMaxStackSize())
return true;
@@ -16213,7 +16214,7 @@ void Player::SendQuestTimerFailed(uint32 quest_id)
}
}
-void Player::SendCanTakeQuestResponse(uint32 msg)
+void Player::SendCanTakeQuestResponse(uint32 msg) const
{
WorldPacket data(SMSG_QUESTGIVER_QUEST_INVALID, 4);
data << uint32(msg);
@@ -16258,7 +16259,7 @@ void Player::SendQuestUpdateAddItem(Quest const* /*quest*/, uint32 /*item_idx*/,
{
WorldPacket data(SMSG_QUESTUPDATE_ADD_ITEM, 0);
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_QUESTUPDATE_ADD_ITEM");
- //data << quest->ReqItemId[item_idx];
+ //data << quest->RequiredItemId[item_idx];
//data << count;
GetSession()->SendPacket(&data);
}
@@ -16267,7 +16268,7 @@ void Player::SendQuestUpdateAddCreatureOrGo(Quest const* quest, uint64 guid, uin
{
ASSERT(old_count + add_count < 65536 && "mob/GO count store in 16 bits 2^16 = 65536 (0..65536)");
- int32 entry = quest->ReqCreatureOrGOId[ creatureOrGO_idx ];
+ int32 entry = quest->RequiredNpcOrGo[ creatureOrGO_idx ];
if (entry < 0)
// client expected gameobject template id in form (id|0x80000000)
entry = (-entry) | 0x80000000;
@@ -16277,7 +16278,7 @@ void Player::SendQuestUpdateAddCreatureOrGo(Quest const* quest, uint64 guid, uin
data << uint32(quest->GetQuestId());
data << uint32(entry);
data << uint32(old_count + add_count);
- data << uint32(quest->ReqCreatureOrGOCount[ creatureOrGO_idx ]);
+ data << uint32(quest->RequiredNpcOrGoCount[ creatureOrGO_idx ]);
data << uint64(guid);
GetSession()->SendPacket(&data);
@@ -16444,7 +16445,7 @@ void Player::SetHomebind(WorldLocation const& /*loc*/, uint32 /*area_id*/)
m_homebindZ = GetPositionZ();
// update sql homebind
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_PLAYER_HOMEBIND);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYER_HOMEBIND);
stmt->setUInt16(0, m_homebindMapId);
stmt->setUInt16(1, m_homebindAreaId);
stmt->setFloat (2, m_homebindX);
@@ -16517,7 +16518,13 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS ||
(AccountMgr::IsPlayerAccount(GetSession()->GetSecurity()) && sObjectMgr->IsReservedName(m_name)))
{
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid ='%u'", uint32(AT_LOGIN_RENAME), guid);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(AT_LOGIN_RENAME));
+ stmt->setUInt32(1, guid);
+
+ CharacterDatabase.Execute(stmt);
+
return false;
}
@@ -16663,10 +16670,10 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
if (player_at_bg && currentBg->GetStatus() != STATUS_WAIT_LEAVE)
{
- BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(currentBg->GetTypeID(true), currentBg->GetArenaType());
+ BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(currentBg->GetTypeID(), currentBg->GetArenaType());
AddBattlegroundQueueId(bgQueueTypeId);
- m_bgData.bgTypeID = currentBg->GetTypeID(true);
+ m_bgData.bgTypeID = currentBg->GetTypeID();
//join player to battleground group
currentBg->EventPlayerLoggedIn(this);
@@ -16803,7 +16810,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
// NOW player must have valid map
// load the player's map here if it's not already loaded
- Map* map = sMapMgr->CreateMap(mapId, this, instanceId);
+ Map* map = sMapMgr->CreateMap(mapId, this);
if (!map)
{
@@ -16821,14 +16828,14 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
RelocateToHomebind();
}
- map = sMapMgr->CreateMap(mapId, this, 0);
+ map = sMapMgr->CreateMap(mapId, this);
if (!map)
{
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
mapId = info->mapId;
Relocate(info->positionX, info->positionY, info->positionZ, 0.0f);
sLog->outError("Player (guidlow %d) have invalid coordinates (X: %f Y: %f Z: %f O: %f). Teleport to default race/class locations.", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
- map = sMapMgr->CreateMap(mapId, this, 0);
+ map = sMapMgr->CreateMap(mapId, this);
if (!map)
{
sLog->outError("Player (guidlow %d) has invalid default map coordinates (X: %f Y: %f Z: %f O: %f). or instance couldn't be created", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
@@ -16838,7 +16845,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
}
// if the player is in an instance and it has been reset in the meantime teleport him to the entrance
- if (instanceId && !sInstanceSaveMgr->GetInstanceSave(instanceId))
+ if (instanceId && !sInstanceSaveMgr->GetInstanceSave(instanceId) && !map->IsBattlegroundOrArena())
{
AreaTrigger const* at = sObjectMgr->GetMapEntranceTrigger(mapId);
if (at)
@@ -16984,7 +16991,8 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
_LoadQuestStatus(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS));
_LoadQuestStatusRewarded(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADQUESTSTATUSREW));
_LoadDailyQuestStatus(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADDAILYQUESTSTATUS));
- _LoadWeeklyQuestStatus(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADWEKLYQUESTSTATUS));
+ _LoadWeeklyQuestStatus(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADWEEKLYQUESTSTATUS));
+ _LoadSeasonalQuestStatus(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADSEASONALQUESTSTATUS));
_LoadRandomBGStatus(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADRANDOMBG));
// after spell and quest load
@@ -17445,7 +17453,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
}
else
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_ITEM_REFUNDS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_REFUNDS);
stmt->setUInt32(0, item->GetGUIDLow());
stmt->setUInt32(1, GetGUIDLow());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
@@ -17465,7 +17473,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
}
else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE))
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_ITEM_BOP_TRADE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE);
stmt->setUInt32(0, item->GetGUIDLow());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
{
@@ -17474,7 +17482,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
AllowedLooterSet looters;
for (Tokens::iterator itr = GUIDlist.begin(); itr != GUIDlist.end(); ++itr)
looters.insert(atol(*itr));
- item->SetSoulboundTradeable(&looters, this, true);
+ item->SetSoulboundTradeable(looters);
m_itemSoulboundTradeable.push_back(item);
}
else
@@ -17528,7 +17536,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F
void Player::_LoadMailedItems(Mail* mail)
{
// data needs to be at first place for Item::LoadFromDB
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_MAILITEMS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS);
stmt->setUInt32(0, mail->messageID);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -17538,29 +17546,39 @@ void Player::_LoadMailedItems(Mail* mail)
{
Field* fields = result->Fetch();
- uint32 item_guid_low = fields[11].GetUInt32();
- uint32 item_template = fields[12].GetUInt32();
+ uint32 itemGuid = fields[11].GetUInt32();
+ uint32 itemTemplate = fields[12].GetUInt32();
- mail->AddItem(item_guid_low, item_template);
+ mail->AddItem(itemGuid, itemTemplate);
- ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item_template);
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemTemplate);
if (!proto)
{
- sLog->outError("Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUIDLow(), item_guid_low, item_template, mail->messageID);
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", item_guid_low);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
- stmt->setUInt32(0, item_guid_low);
+ sLog->outError("Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUIDLow(), itemGuid, itemTemplate, mail->messageID);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_MAIL_ITEM);
+ stmt->setUInt32(0, itemGuid);
+ CharacterDatabase.Execute(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
+ stmt->setUInt32(0, itemGuid);
CharacterDatabase.Execute(stmt);
continue;
}
Item* item = NewItemOrBag(proto);
- if (!item->LoadFromDB(item_guid_low, MAKE_NEW_GUID(fields[13].GetUInt32(), 0, HIGHGUID_PLAYER), fields, item_template))
+ if (!item->LoadFromDB(itemGuid, MAKE_NEW_GUID(fields[13].GetUInt32(), 0, HIGHGUID_PLAYER), fields, itemTemplate))
{
- sLog->outError("Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, item_guid_low);
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", item_guid_low);
+ sLog->outError("Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, itemGuid);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_ITEM);
+
+ stmt->setUInt32(0, itemGuid);
+
+ CharacterDatabase.Execute(stmt);
+
item->FSetState(ITEM_REMOVED);
SQLTransaction temp = SQLTransaction(NULL);
@@ -17840,6 +17858,29 @@ void Player::_LoadWeeklyQuestStatus(PreparedQueryResult result)
m_WeeklyQuestChanged = false;
}
+void Player::_LoadSeasonalQuestStatus(PreparedQueryResult result)
+{
+ m_seasonalquests.clear();
+
+ if (result)
+ {
+ do
+ {
+ uint32 quest_id = (*result)[0].GetUInt32();
+ uint16 event_id = (*result)[1].GetUInt16();
+ Quest const* quest = sObjectMgr->GetQuestTemplate(quest_id);
+ if (!quest)
+ continue;
+
+ m_seasonalquests[event_id].insert(quest_id);
+ sLog->outDebug(LOG_FILTER_PLAYER_LOADING, "Seasonal quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow());
+ }
+ while (result->NextRow());
+ }
+
+ m_SeasonalQuestChanged = false;
+}
+
void Player::_LoadSpells(PreparedQueryResult result)
{
//QueryResult* result = CharacterDatabase.PQuery("SELECT spell, active, disabled FROM character_spell WHERE guid = '%u'", GetGUIDLow());
@@ -17895,33 +17936,43 @@ void Player::_LoadBoundInstances(PreparedQueryResult result)
// so the value read from the DB may be wrong here but only if the InstanceSave is loaded
// and in that case it is not used
+ bool deleteInstance = false;
+
MapEntry const* mapEntry = sMapStore.LookupEntry(mapId);
if (!mapEntry || !mapEntry->IsDungeon())
{
sLog->outError("_LoadBoundInstances: player %s(%d) has bind to not existed or not dungeon map %d", GetName(), GetGUIDLow(), mapId);
- CharacterDatabase.PExecute("DELETE FROM character_instance WHERE guid = '%d' AND instance = '%d'", GetGUIDLow(), instanceId);
- continue;
+ deleteInstance = true;
}
-
- if (difficulty >= MAX_DIFFICULTY)
+ else if (difficulty >= MAX_DIFFICULTY)
{
sLog->outError("_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u", GetName(), GetGUIDLow(), difficulty, mapId);
- CharacterDatabase.PExecute("DELETE FROM character_instance WHERE guid = '%d' AND instance = '%d'", GetGUIDLow(), instanceId);
- continue;
+ deleteInstance = true;
}
-
- MapDifficulty const* mapDiff = GetMapDifficultyData(mapId, Difficulty(difficulty));
- if (!mapDiff)
+ else
{
- sLog->outError("_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u", GetName(), GetGUIDLow(), difficulty, mapId);
- CharacterDatabase.PExecute("DELETE FROM character_instance WHERE guid = '%d' AND instance = '%d'", GetGUIDLow(), instanceId);
- continue;
+ MapDifficulty const* mapDiff = GetMapDifficultyData(mapId, Difficulty(difficulty));
+ if (!mapDiff)
+ {
+ sLog->outError("_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u", GetName(), GetGUIDLow(), difficulty, mapId);
+ deleteInstance = true;
+ }
+ else if (!perm && group)
+ {
+ sLog->outError("_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d, %d, %d", GetName(), GetGUIDLow(), GUID_LOPART(group->GetGUID()), mapId, instanceId, difficulty);
+ deleteInstance = true;
+ }
}
- if (!perm && group)
+ if (deleteInstance)
{
- sLog->outError("_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d, %d, %d", GetName(), GetGUIDLow(), GUID_LOPART(group->GetGUID()), mapId, instanceId, difficulty);
- CharacterDatabase.PExecute("DELETE FROM character_instance WHERE guid = '%d' AND instance = '%d'", GetGUIDLow(), instanceId);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INSTANCE);
+
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(1, instanceId);
+
+ CharacterDatabase.Execute(stmt);
+
continue;
}
@@ -17970,7 +18021,15 @@ void Player::UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficu
if (itr != m_boundInstances[difficulty].end())
{
if (!unload)
- CharacterDatabase.PExecute("DELETE FROM character_instance WHERE guid = '%u' AND instance = '%u'", GetGUIDLow(), itr->second.save->GetInstanceId());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INSTANCE);
+
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(1, itr->second.save->GetInstanceId());
+
+ CharacterDatabase.Execute(stmt);
+ }
+
itr->second.save->RemovePlayer(this); // save can become invalid
m_boundInstances[difficulty].erase(itr++);
}
@@ -17986,11 +18045,28 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b
// update the save when the group kills a boss
if (permanent != bind.perm || save != bind.save)
if (!load)
- CharacterDatabase.PExecute("UPDATE character_instance SET instance = '%u', permanent = '%u' WHERE guid = '%u' AND instance = '%u'", save->GetInstanceId(), permanent, GetGUIDLow(), bind.save->GetInstanceId());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_INSTANCE);
+
+ stmt->setUInt32(0, save->GetInstanceId());
+ stmt->setBool(1, permanent);
+ stmt->setUInt32(2, GetGUIDLow());
+ stmt->setUInt32(3, bind.save->GetInstanceId());
+
+ CharacterDatabase.Execute(stmt);
+ }
}
else
if (!load)
- CharacterDatabase.PExecute("INSERT INTO character_instance (guid, instance, permanent) VALUES ('%u', '%u', '%u')", GetGUIDLow(), save->GetInstanceId(), permanent);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_INSTANCE);
+
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(1, save->GetInstanceId());
+ stmt->setBool(2, permanent);
+
+ CharacterDatabase.Execute(stmt);
+ }
if (bind.save != save)
{
@@ -18164,8 +18240,14 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report
missingQuest = ar->quest_H;
uint32 missingAchievement = 0;
- if (ar->achievement && !GetAchievementMgr().HasAchieved(sAchievementStore.LookupEntry(ar->achievement)))
- missingAchievement = ar->achievement;
+ Player* leader = this;
+ uint64 leaderGuid = GetGroup() ? GetGroup()->GetLeaderGUID() : GetGUID();
+ if (leaderGuid != GetGUID())
+ leader = ObjectAccessor::FindPlayer(leaderGuid);
+
+ if (ar->achievement)
+ if (!leader || !leader->GetAchievementMgr().HasAchieved(ar->achievement))
+ missingAchievement = ar->achievement;
Difficulty target_difficulty = GetDifficulty(mapEntry->IsRaid());
MapDifficulty const* mapDiff = GetDownscaledMapDifficultyData(target_map, target_difficulty);
@@ -18256,7 +18338,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
m_homebindY = info->positionY;
m_homebindZ = info->positionZ;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_PLAYER_HOMEBIND);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND);
stmt->setUInt32(0, GetGUIDLow());
stmt->setUInt16(1, m_homebindMapId);
stmt->setUInt16(2, m_homebindAreaId);
@@ -18276,7 +18358,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result)
/*** SAVE SYSTEM ***/
/*********************************************************/
-void Player::SaveToDB()
+void Player::SaveToDB(bool create /*=false*/)
{
// delay auto save at any saves (manual, in code, or autosave)
m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE);
@@ -18294,156 +18376,228 @@ void Player::SaveToDB()
sLog->outDebug(LOG_FILTER_UNITS, "The value of player %s at save: ", m_name.c_str());
outDebugValues();
- std::string sql_name = m_name;
- CharacterDatabase.EscapeString(sql_name);
+ PreparedStatement* stmt = NULL;
+ uint16 index = 0;
- std::ostringstream ss;
- ss << "REPLACE INTO characters (guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
- "map, instance_id, instance_mode_mask, position_x, position_y, position_z, orientation, "
- "taximask, online, cinematic, "
- "totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, "
- "trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, "
- "death_expire_time, taxi_path, arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, "
- "todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, health, power1, power2, power3, "
- "power4, power5, power6, power7, latency, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars, grantableLevels) VALUES ("
- << GetGUIDLow() << ','
- << GetSession()->GetAccountId() << ", '"
- << sql_name << "', "
- << uint32(getRace()) << ','
- << uint32(getClass()) << ','
- << uint32(getGender()) << ','
- << uint32(getLevel()) << ','
- << GetUInt32Value(PLAYER_XP) << ','
- << GetMoney() << ','
- << GetUInt32Value(PLAYER_BYTES) << ','
- << GetUInt32Value(PLAYER_BYTES_2) << ','
- << GetUInt32Value(PLAYER_FLAGS) << ',';
-
- if (!IsBeingTeleported())
- {
- ss << GetMapId() << ','
- << (uint32)GetInstanceId() << ','
- << uint32(uint8(GetDungeonDifficulty()) | uint8(GetRaidDifficulty()) << 4) << ','
- << finiteAlways(GetPositionX()) << ','
- << finiteAlways(GetPositionY()) << ','
- << finiteAlways(GetPositionZ()) << ','
- << finiteAlways(GetOrientation()) << ',';
- }
- else
+ if (create)
{
- ss << GetTeleportDest().GetMapId() << ','
- << (uint32)0 << ','
- << uint32(uint8(GetDungeonDifficulty()) | uint8(GetRaidDifficulty()) << 4) << ','
- << finiteAlways(GetTeleportDest().GetPositionX()) << ','
- << finiteAlways(GetTeleportDest().GetPositionY()) << ','
- << finiteAlways(GetTeleportDest().GetPositionZ()) << ','
- << finiteAlways(GetTeleportDest().GetOrientation()) << ',';
- }
-
- ss << m_taxi << ','; // string with TaxiMaskSize numbers
-
- ss << (IsInWorld() ? 1 : 0) << ',';
-
- ss << uint32(m_cinematic) << ',';
+ //! Insert query
+ //! TO DO: Filter out more redundant fields that can take their default value at player create
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER);
+ stmt->setUInt32(index++, GetGUIDLow());
+ stmt->setUInt32(index++, GetSession()->GetAccountId());
+ stmt->setString(index++, GetName());
+ stmt->setUInt8(index++, getRace());
+ stmt->setUInt8(index++, getClass());
+ stmt->setUInt8(index++, getGender());
+ stmt->setUInt8(index++, getLevel());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP));
+ stmt->setUInt32(index++, GetMoney());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_BYTES));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_BYTES_2));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS));
+ stmt->setUInt16(index++, (uint16)GetMapId());
+ stmt->setUInt32(index++, (uint32)GetInstanceId());
+ stmt->setUInt8(index++, (uint8(GetDungeonDifficulty()) | uint8(GetRaidDifficulty()) << 4));
+ stmt->setFloat(index++, finiteAlways(GetPositionX()));
+ stmt->setFloat(index++, finiteAlways(GetPositionY()));
+ stmt->setFloat(index++, finiteAlways(GetPositionZ()));
+ stmt->setFloat(index++, finiteAlways(GetOrientation()));
+
+ std::ostringstream ss;
+ ss << m_taxi;
+ stmt->setString(index++, ss.str());
+ stmt->setUInt8(index++, m_cinematic);
+ stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_TOTAL]);
+ stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]);
+ stmt->setFloat(index++, finiteAlways(m_rest_bonus));
+ stmt->setUInt32(index++, uint32(time(NULL)));
+ stmt->setUInt8(index++, (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0));
+ //save, far from tavern/city
+ //save, but in tavern/city
+ stmt->setUInt32(index++, m_resetTalentsCost);
+ stmt->setUInt32(index++, m_resetTalentsTime);
+ stmt->setUInt16(index++, (uint16)m_ExtraFlags);
+ stmt->setUInt8(index++, m_stableSlots);
+ stmt->setUInt16(index++, (uint16)m_atLoginFlags);
+ stmt->setUInt16(index++, GetZoneId());
+ stmt->setUInt32(index++, m_deathExpireTime);
+
+ ss.str("");
+ ss << m_taxi.SaveTaxiDestinationsToString();
+
+ stmt->setString(index++, ss.str());
+ stmt->setUInt32(index++, GetArenaPoints());
+ stmt->setUInt32(index++, GetHonorPoints());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
+ stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, 0));
+ stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, 1));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_CHOSEN_TITLE));
+ stmt->setUInt64(index++, GetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX));
+ stmt->setUInt16(index++, (uint16)(GetUInt32Value(PLAYER_BYTES_3) & 0xFFFE));
+ stmt->setUInt32(index++, GetHealth());
+
+ for (uint32 i = 0; i < MAX_POWERS; ++i)
+ stmt->setUInt32(index++, GetPower(Powers(i)));
+
+ stmt->setUInt32(index++, GetSession()->GetLatency());
+
+ stmt->setUInt8(index++, m_specsCount);
+ stmt->setUInt8(index++, m_activeSpec);
+
+ ss.str("");
+ for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
+ ss << GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + i) << ' ';
+ stmt->setString(index++, ss.str());
+
+ ss.str("");
+ // cache equipment...
+ for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 2; ++i)
+ ss << GetUInt32Value(PLAYER_VISIBLE_ITEM_1_ENTRYID + i) << ' ';
+
+ // ...and bags for enum opcode
+ for (uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; ++i)
+ {
+ if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
+ ss << item->GetEntry();
+ else
+ ss << '0';
+ ss << " 0 ";
+ }
- ss << m_Played_time[PLAYED_TIME_TOTAL] << ',';
- ss << m_Played_time[PLAYED_TIME_LEVEL] << ',';
+ stmt->setString(index++, ss.str());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_AMMO_ID));
- ss << finiteAlways(m_rest_bonus) << ',';
- ss << uint32(time(NULL)) << ',';
- ss << (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0) << ',';
- //save, far from tavern/city
- //save, but in tavern/city
- ss << m_resetTalentsCost << ',';
- ss << uint32(m_resetTalentsTime) << ',';
+ ss.str("");
+ for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i)
+ ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << ' ';
- ss << finiteAlways(m_movementInfo.t_pos.GetPositionX()) << ',';
- ss << finiteAlways(m_movementInfo.t_pos.GetPositionY()) << ',';
- ss << finiteAlways(m_movementInfo.t_pos.GetPositionZ()) << ',';
- ss << finiteAlways(m_movementInfo.t_pos.GetOrientation()) << ',';
- if (m_transport)
- ss << m_transport->GetGUIDLow();
+ stmt->setString(index++, ss.str());
+ stmt->setUInt8(index++, GetByteValue(PLAYER_FIELD_BYTES, 2));
+ stmt->setUInt32(index++, m_grantableLevels);
+ }
else
- ss << '0';
- ss << ',';
-
- ss << m_ExtraFlags << ',';
-
- ss << uint32(m_stableSlots) << ','; // to prevent save uint8 as char
-
- ss << uint32(m_atLoginFlags) << ',';
-
- ss << GetZoneId() << ',';
-
- ss << uint32(m_deathExpireTime) << ", '";
-
- ss << m_taxi.SaveTaxiDestinationsToString() << "', ";
-
- ss << GetArenaPoints() << ',';
-
- ss << GetHonorPoints() << ',';
-
- ss << GetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION) << ',';
-
- ss << GetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION) << ',';
-
- ss << GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS) << ',';
-
- ss << GetUInt16Value(PLAYER_FIELD_KILLS, 0) << ',';
-
- ss << GetUInt16Value(PLAYER_FIELD_KILLS, 1) << ',';
-
- ss << GetUInt32Value(PLAYER_CHOSEN_TITLE) << ',';
-
- ss << GetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES) << ',';
-
- ss << GetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX) << ',';
-
- ss << (uint16)(GetUInt32Value(PLAYER_BYTES_3) & 0xFFFE) << ',';
-
- ss << GetHealth();
-
- for (uint32 i = 0; i < MAX_POWERS; ++i)
- ss << ',' << GetPower(Powers(i));
- ss << ',';
- ss << GetSession()->GetLatency();
- ss << ',';
- ss << uint32(m_specsCount);
- ss << ',';
- ss << uint32(m_activeSpec) << ", '";
- for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
- ss << GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + i) << ' ';
-
- // cache equipment...
- ss << "', '";
- for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 2; ++i)
- ss << GetUInt32Value(PLAYER_VISIBLE_ITEM_1_ENTRYID + i) << ' ';
-
- // ...and bags for enum opcode
- for (uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; ++i)
{
- if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
- ss << item->GetEntry();
+ // Update query
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER);
+ stmt->setString(index++, GetName());
+ stmt->setUInt8(index++, getRace());
+ stmt->setUInt8(index++, getClass());
+ stmt->setUInt8(index++, getGender());
+ stmt->setUInt8(index++, getLevel());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP));
+ stmt->setUInt32(index++, GetMoney());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_BYTES));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_BYTES_2));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS));
+
+ if (!IsBeingTeleported())
+ {
+ stmt->setUInt16(index++, (uint16)GetMapId());
+ stmt->setUInt32(index++, (uint32)GetInstanceId());
+ stmt->setUInt8(index++, (uint8(GetDungeonDifficulty()) | uint8(GetRaidDifficulty()) << 4));
+ stmt->setFloat(index++, finiteAlways(GetPositionX()));
+ stmt->setFloat(index++, finiteAlways(GetPositionY()));
+ stmt->setFloat(index++, finiteAlways(GetPositionZ()));
+ stmt->setFloat(index++, finiteAlways(GetOrientation()));
+ }
else
- ss << '0';
- ss << " 0 ";
- }
+ {
+ stmt->setUInt16(index++, (uint16)GetTeleportDest().GetMapId());
+ stmt->setUInt32(index++, (uint32)0);
+ stmt->setUInt8(index++, (uint8(GetDungeonDifficulty()) | uint8(GetRaidDifficulty()) << 4));
+ stmt->setFloat(index++, finiteAlways(GetTeleportDest().GetPositionX()));
+ stmt->setFloat(index++, finiteAlways(GetTeleportDest().GetPositionY()));
+ stmt->setFloat(index++, finiteAlways(GetTeleportDest().GetPositionZ()));
+ stmt->setFloat(index++, finiteAlways(GetTeleportDest().GetOrientation()));
+ }
+
+ std::ostringstream ss;
+ ss << m_taxi;
+ stmt->setString(index++, ss.str());
+ stmt->setUInt8(index++, m_cinematic);
+ stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_TOTAL]);
+ stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]);
+ stmt->setFloat(index++, finiteAlways(m_rest_bonus));
+ stmt->setUInt32(index++, uint32(time(NULL)));
+ stmt->setUInt8(index++, (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0));
+ //save, far from tavern/city
+ //save, but in tavern/city
+ stmt->setUInt32(index++, m_resetTalentsCost);
+ stmt->setUInt32(index++, m_resetTalentsTime);
+ stmt->setUInt16(index++, (uint16)m_ExtraFlags);
+ stmt->setUInt8(index++, m_stableSlots);
+ stmt->setUInt16(index++, (uint16)m_atLoginFlags);
+ stmt->setUInt16(index++, GetZoneId());
+ stmt->setUInt32(index++, m_deathExpireTime);
+
+ ss.str("");
+ ss << m_taxi.SaveTaxiDestinationsToString();
+
+ stmt->setString(index++, ss.str());
+ stmt->setUInt32(index++, GetArenaPoints());
+ stmt->setUInt32(index++, GetHonorPoints());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
+ stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, 0));
+ stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, 1));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_CHOSEN_TITLE));
+ stmt->setUInt64(index++, GetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES));
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX));
+ stmt->setUInt16(index++, (uint16)(GetUInt32Value(PLAYER_BYTES_3) & 0xFFFE));
+ stmt->setUInt32(index++, GetHealth());
+
+ for (uint32 i = 0; i < MAX_POWERS; ++i)
+ stmt->setUInt32(index++, GetPower(Powers(i)));
+
+ stmt->setUInt32(index++, GetSession()->GetLatency());
+
+ stmt->setUInt8(index++, m_specsCount);
+ stmt->setUInt8(index++, m_activeSpec);
+
+ ss.str("");
+ for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i)
+ ss << GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + i) << ' ';
+ stmt->setString(index++, ss.str());
+
+ ss.str("");
+ // cache equipment...
+ for (uint32 i = 0; i < EQUIPMENT_SLOT_END * 2; ++i)
+ ss << GetUInt32Value(PLAYER_VISIBLE_ITEM_1_ENTRYID + i) << ' ';
+
+ // ...and bags for enum opcode
+ for (uint32 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; ++i)
+ {
+ if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
+ ss << item->GetEntry();
+ else
+ ss << '0';
+ ss << " 0 ";
+ }
- ss << "',";
+ stmt->setString(index++, ss.str());
+ stmt->setUInt32(index++, GetUInt32Value(PLAYER_AMMO_ID));
- ss << GetUInt32Value(PLAYER_AMMO_ID) << ", '";
- for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i)
- ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << ' ';
+ ss.str("");
+ for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i)
+ ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << ' ';
- ss << "',";
- ss << uint32(GetByteValue(PLAYER_FIELD_BYTES, 2));
- ss << ",";
- ss << uint32(m_grantableLevels);
- ss << ')';
+ stmt->setString(index++, ss.str());
+ stmt->setUInt8(index++, GetByteValue(PLAYER_FIELD_BYTES, 2));
+ stmt->setUInt32(index++, m_grantableLevels);
+
+ stmt->setUInt8(index++, IsInWorld() ? 1 : 0);
+ // Index
+ stmt->setUInt32(index++, GetGUIDLow());
+ }
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- trans->Append(ss.str().c_str());
+ trans->Append(stmt);
if (m_mailsUpdated) //save mails only when needed
_SaveMail(trans);
@@ -18453,6 +18607,7 @@ void Player::SaveToDB()
_SaveQuestStatus(trans);
_SaveDailyQuestStatus(trans);
_SaveWeeklyQuestStatus(trans);
+ _SaveSeasonalQuestStatus(trans);
_SaveTalents(trans);
_SaveSpells(trans);
_SaveSpellCooldowns(trans);
@@ -18554,7 +18709,7 @@ void Player::_SaveAuras(SQLTransaction& trans)
}
uint8 index = 0;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_AURA);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AURA);
stmt->setUInt32(index++, GetGUIDLow());
stmt->setUInt64(index++, itr->second->GetCasterGUID());
stmt->setUInt64(index++, itr->second->GetCastItemGUID());
@@ -18791,18 +18946,28 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans)
// save last daily quest time for all quests: we need only mostly reset time for reset check anyway
// we don't need transactions here.
- trans->PAppend("DELETE FROM character_queststatus_daily WHERE guid = '%u'", GetGUIDLow());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_DAILY_CHAR);
+ stmt->setUInt32(0, GetGUIDLow());
+ trans->Append(stmt);
for (uint32 quest_daily_idx = 0; quest_daily_idx < PLAYER_MAX_DAILY_QUESTS; ++quest_daily_idx)
if (GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx))
- trans->PAppend("INSERT INTO character_queststatus_daily (guid, quest, time) VALUES ('%u', '%u', '" UI64FMTD "')",
- GetGUIDLow(), GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx), uint64(m_lastDailyQuestTime));
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_DAILYQUESTSTATUS);
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(1, GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx));
+ stmt->setUInt64(2, uint64(m_lastDailyQuestTime));
+ trans->Append(stmt);
+ }
if (!m_DFQuests.empty())
{
for (DFQuestsDoneList::iterator itr = m_DFQuests.begin(); itr != m_DFQuests.end(); ++itr)
{
- trans->PAppend("INSERT INTO character_queststatus_daily (guid, quest, time) VALUES ('%u', '%u', '" UI64FMTD "')",
- GetGUIDLow(), (*itr), uint64(m_lastDailyQuestTime));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_DAILYQUESTSTATUS);
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(1, (*itr));
+ stmt->setUInt64(2, uint64(m_lastDailyQuestTime));
+ trans->Append(stmt);
}
}
}
@@ -18813,18 +18978,51 @@ void Player::_SaveWeeklyQuestStatus(SQLTransaction& trans)
return;
// we don't need transactions here.
- trans->PAppend("DELETE FROM character_queststatus_weekly WHERE guid = '%u'", GetGUIDLow());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY_CHAR);
+ stmt->setUInt32(0, GetGUIDLow());
+ trans->Append(stmt);
for (QuestSet::const_iterator iter = m_weeklyquests.begin(); iter != m_weeklyquests.end(); ++iter)
{
uint32 quest_id = *iter;
- trans->PAppend("INSERT INTO character_queststatus_weekly (guid, quest) VALUES ('%u', '%u')", GetGUIDLow(), quest_id);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_WEEKLYQUESTSTATUS);
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt32(1, quest_id);
+ trans->Append(stmt);
}
m_WeeklyQuestChanged = false;
}
+void Player::_SaveSeasonalQuestStatus(SQLTransaction& trans)
+{
+ if (!m_SeasonalQuestChanged || m_seasonalquests.empty())
+ return;
+
+ // we don't need transactions here.
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_SEASONAL_CHAR);
+ stmt->setUInt32(0, GetGUIDLow());
+ trans->Append(stmt);
+
+ for (SeasonalEventQuestMap::const_iterator iter = m_seasonalquests.begin(); iter != m_seasonalquests.end(); ++iter)
+ {
+ uint16 event_id = iter->first;
+ for (SeasonalQuestSet::const_iterator itr = (iter->second).begin(); itr != (iter->second).end(); ++itr)
+ {
+ uint32 quest_id = (*itr);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_SEASONALQUESTSTATUS);
+ stmt->setUInt32(0,GetGUIDLow());
+ stmt->setUInt32(1,quest_id);
+ stmt->setUInt16(1,event_id);
+ trans->Append(stmt);
+ }
+ }
+
+ m_SeasonalQuestChanged = false;
+}
+
void Player::_SaveSkills(SQLTransaction& trans)
{
// we don't need transactions here.
@@ -18868,7 +19066,7 @@ void Player::_SaveSkills(SQLTransaction& trans)
void Player::_SaveSpells(SQLTransaction& trans)
{
- for (PlayerSpellMap::iterator itr = m_spells.begin(), next = m_spells.begin(); itr != m_spells.end();)
+ for (PlayerSpellMap::iterator itr = m_spells.begin(); itr != m_spells.end();)
{
if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->state == PLAYERSPELL_CHANGED)
trans->PAppend("DELETE FROM character_spell WHERE guid = '%u' and spell = '%u'", GetGUIDLow(), itr->first);
@@ -18995,13 +19193,17 @@ void Player::SendAttackSwingNotInRange()
void Player::SavePositionInDB(uint32 mapid, float x, float y, float z, float o, uint32 zone, uint64 guid)
{
- std::ostringstream ss;
- ss << "UPDATE characters SET position_x='" << x << "', position_y='" << y
- << "', position_z='" << z << "', orientation='" << o << "', map='" << mapid
- << "', zone='" << zone << "', trans_x='0', trans_y='0', trans_z='0', "
- << "transguid='0', taxi_path='' WHERE guid='" << GUID_LOPART(guid) << '\'';
- sLog->outDebug(LOG_FILTER_UNITS, "%s", ss.str().c_str());
- CharacterDatabase.Execute(ss.str().c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_POSITION);
+
+ stmt->setFloat(0, x);
+ stmt->setFloat(1, y);
+ stmt->setFloat(2, z);
+ stmt->setFloat(3, o);
+ stmt->setUInt16(4, uint16(mapid));
+ stmt->setUInt16(5, uint16(zone));
+ stmt->setUInt32(6, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
}
void Player::SetUInt32ValueInArray(Tokens& tokens, uint16 index, uint32 value)
@@ -19024,11 +19226,18 @@ void Player::Customize(uint64 guid, uint8 gender, uint8 skin, uint8 face, uint8
Field* fields = result->Fetch();
- uint32 player_bytes2 = fields[0].GetUInt32();
- player_bytes2 &= ~0xFF;
- player_bytes2 |= facialHair;
+ uint32 playerBytes2 = fields[0].GetUInt32();
+ playerBytes2 &= ~0xFF;
+ playerBytes2 |= facialHair;
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GENDER_PLAYERBYTES);
+
+ stmt->setUInt8(0, gender);
+ stmt->setUInt32(1, skin | (face << 8) | (hairStyle << 16) | (hairColor << 24));
+ stmt->setUInt32(2, playerBytes2);
+ stmt->setUInt32(3, GUID_LOPART(guid));
- CharacterDatabase.PExecute("UPDATE characters SET gender = '%u', playerBytes = '%u', playerBytes2 = '%u' WHERE guid = '%u'", gender, skin | (face << 8) | (hairStyle << 16) | (hairColor << 24), player_bytes2, GUID_LOPART(guid));
+ CharacterDatabase.Execute(stmt);
}
void Player::SendAttackSwingDeadTarget()
@@ -19352,7 +19561,7 @@ inline void Player::BuildPlayerChat(WorldPacket* data, uint8 msgtype, const std:
*data << uint64(GetGUID());
*data << uint32(text.length() + 1);
*data << text;
- *data << uint8(chatTag());
+ *data << uint8(GetChatTag());
}
void Player::Say(const std::string& text, const uint32 language)
@@ -19795,7 +20004,7 @@ void Player::RemoveSpellMods(Spell* spell)
for (uint8 i=0; i<MAX_SPELLMOD; ++i)
{
- for (SpellModList::iterator itr = m_spellMods[i].begin(); itr != m_spellMods[i].end();)
+ for (SpellModList::const_iterator itr = m_spellMods[i].begin(); itr != m_spellMods[i].end();)
{
SpellModifier* mod = *itr;
++itr;
@@ -19827,8 +20036,7 @@ void Player::DropModCharge(SpellModifier* mod, Spell* spell)
if (spell && mod->ownerAura && mod->charges > 0)
{
- --mod->charges;
- if (mod->charges == 0)
+ if (--mod->charges == 0)
mod->charges = -1;
spell->m_appliedMods.insert(mod->ownerAura);
@@ -19876,9 +20084,22 @@ void Player::RemovePetitionsAndSigns(uint64 guid, uint32 type)
} while (result->NextRow());
if (type == 10)
- CharacterDatabase.PExecute("DELETE FROM petition_sign WHERE playerguid = '%u'", GUID_LOPART(guid));
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ALL_PETITION_SIGNATURES);
+
+ stmt->setUInt32(0, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
+ }
else
- CharacterDatabase.PExecute("DELETE FROM petition_sign WHERE playerguid = '%u' AND type = '%u'", GUID_LOPART(guid), type);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE);
+
+ stmt->setUInt32(0, GUID_LOPART(guid));
+ stmt->setUInt8(1, uint8(type));
+
+ CharacterDatabase.Execute(stmt);
+ }
}
SQLTransaction trans = CharacterDatabase.BeginTransaction();
@@ -19897,7 +20118,7 @@ void Player::RemovePetitionsAndSigns(uint64 guid, uint32 type)
void Player::LeaveAllArenaTeams(uint64 guid)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ARENA_TEAMS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PLAYER_ARENA_TEAMS);
stmt->setUInt32(0, GUID_LOPART(guid));
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -20137,9 +20358,9 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
if (sWorld->getBoolConfig(CONFIG_INSTANT_TAXI))
{
- TaxiNodesEntry const* lastnode = sTaxiNodesStore.LookupEntry(nodes[nodes.size()-1]);
+ TaxiNodesEntry const* lastPathNode = sTaxiNodesStore.LookupEntry(nodes[nodes.size()-1]);
m_taxi.ClearTaxiDestinations();
- TeleportTo(lastnode->map_id, lastnode->x, lastnode->y, lastnode->z, GetOrientation());
+ TeleportTo(lastPathNode->map_id, lastPathNode->x, lastPathNode->y, lastPathNode->z, GetOrientation());
return false;
}
else
@@ -20171,7 +20392,7 @@ bool Player::ActivateTaxiPathTo(uint32 taxi_path_id, uint32 spellid /*= 0*/)
void Player::CleanupAfterTaxiFlight()
{
m_taxi.ClearTaxiDestinations(); // not destinations, clear source node
- Unmount();
+ Dismount();
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT);
getHostileRefManager().setOnlineOfflineState(true);
}
@@ -21077,22 +21298,19 @@ WorldLocation Player::GetStartPosition() const
return WorldLocation(mapId, info->positionX, info->positionY, info->positionZ, 0);
}
-bool Player::isValid() const
+bool Player::IsNeverVisible() const
{
- if (!Unit::isValid())
- return false;
+ if (Unit::IsNeverVisible())
+ return true;
if (GetSession()->PlayerLogout() || GetSession()->PlayerLoading())
- return false;
+ return true;
- return true;
+ return false;
}
-bool Player::canSeeAlways(WorldObject const* obj) const
+bool Player::CanAlwaysSee(WorldObject const* obj) const
{
- if (Unit::canSeeAlways(obj))
- return true;
-
// Always can see self
if (m_mover == obj)
return true;
@@ -21104,9 +21322,9 @@ bool Player::canSeeAlways(WorldObject const* obj) const
return false;
}
-bool Player::isAlwaysDetectableFor(WorldObject const* seer) const
+bool Player::IsAlwaysDetectableFor(WorldObject const* seer) const
{
- if (Unit::isAlwaysDetectableFor(seer))
+ if (Unit::IsAlwaysDetectableFor(seer))
return true;
if (const Player* seerPlayer = seer->ToPlayer())
@@ -21499,7 +21717,7 @@ void Player::SendInitialPacketsBeforeAddToMap()
data.Initialize(SMSG_LOGIN_SETTIMESPEED, 4 + 4 + 4);
data << uint32(secsToTimeBitFields(sWorld->GetGameTime()));
- data << (float)0.01666667f; // game speed
+ data << float(0.01666667f); // game speed
data << uint32(0); // added in 3.1.2
GetSession()->SendPacket(&data);
@@ -21544,7 +21762,7 @@ void Player::SendInitialPacketsAfterAddToMap()
if (HasAuraType(SPELL_AURA_MOD_STUN))
SetMovement(MOVE_ROOT);
- // manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that don't must be re-applied.
+ // manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied.
if (HasAuraType(SPELL_AURA_MOD_ROOT))
{
WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10);
@@ -21897,6 +22115,16 @@ void Player::SetWeeklyQuestStatus(uint32 quest_id)
m_WeeklyQuestChanged = true;
}
+void Player::SetSeasonalQuestStatus(uint32 quest_id)
+{
+ Quest const* q = sObjectMgr->GetQuestTemplate(quest_id);
+ if (!q)
+ return;
+
+ m_seasonalquests[q->GetSeasonalQuestEvent()].insert(quest_id);
+ m_SeasonalQuestChanged = true;
+}
+
void Player::ResetDailyQuestStatus()
{
for (uint32 quest_daily_idx = 0; quest_daily_idx < PLAYER_MAX_DAILY_QUESTS; ++quest_daily_idx)
@@ -21919,6 +22147,16 @@ void Player::ResetWeeklyQuestStatus()
m_WeeklyQuestChanged = false;
}
+void Player::ResetSeasonalQuestStatus(uint16 event_id)
+{
+ if (m_seasonalquests.empty() || m_seasonalquests[event_id].empty())
+ return;
+
+ m_seasonalquests.erase(event_id);
+ // DB data deleted in caller
+ m_SeasonalQuestChanged = false;
+}
+
Battleground* Player::GetBattleground() const
{
if (GetBattlegroundId() == 0)
@@ -22017,10 +22255,10 @@ bool Player::HasQuestForGO(int32 GOId) const
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
{
- if (qinfo->ReqCreatureOrGOId[j] >= 0) //skip non GO case
+ if (qinfo->RequiredNpcOrGo[j] >= 0) //skip non GO case
continue;
- if ((-1)*GOId == qinfo->ReqCreatureOrGOId[j] && qs.m_creatureOrGOcount[j] < qinfo->ReqCreatureOrGOCount[j])
+ if ((-1)*GOId == qinfo->RequiredNpcOrGo[j] && qs.m_creatureOrGOcount[j] < qinfo->RequiredNpcOrGoCount[j])
return true;
}
}
@@ -22323,27 +22561,27 @@ bool Player::GetsRecruitAFriendBonus(bool forXP)
{
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pGroupGuy = itr->getSource();
- if (!pGroupGuy)
+ Player* player = itr->getSource();
+ if (!player)
continue;
- if (!pGroupGuy->IsAtRecruitAFriendDistance(this))
+ if (!player->IsAtRecruitAFriendDistance(this))
continue; // member (alive or dead) or his corpse at req. distance
if (forXP)
{
// level must be allowed to get RaF bonus
- if (pGroupGuy->getLevel() > sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL))
+ if (player->getLevel() > sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL))
continue;
// level difference must be small enough to get RaF bonus, UNLESS we are lower level
- if (pGroupGuy->getLevel() < getLevel())
- if (uint8(getLevel() - pGroupGuy->getLevel()) > sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE))
+ if (player->getLevel() < getLevel())
+ if (uint8(getLevel() - player->getLevel()) > sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE))
continue;
}
- bool ARecruitedB = (pGroupGuy->GetSession()->GetRecruiterId() == GetSession()->GetAccountId());
- bool BRecruitedA = (GetSession()->GetRecruiterId() == pGroupGuy->GetSession()->GetAccountId());
+ bool ARecruitedB = (player->GetSession()->GetRecruiterId() == GetSession()->GetAccountId());
+ bool BRecruitedA = (GetSession()->GetRecruiterId() == player->GetSession()->GetAccountId());
if (ARecruitedB || BRecruitedA)
{
recruitAFriend = true;
@@ -22371,16 +22609,16 @@ void Player::RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject* pRewar
{
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pGroupGuy = itr->getSource();
- if (!pGroupGuy)
+ Player* player = itr->getSource();
+ if (!player)
continue;
- if (!pGroupGuy->IsAtGroupRewardDistance(pRewardSource))
+ if (!player->IsAtGroupRewardDistance(pRewardSource))
continue; // member (alive or dead) or his corpse at req. distance
// quest objectives updated only for alive group member or dead but with not released body
- if (pGroupGuy->isAlive()|| !pGroupGuy->GetCorpse())
- pGroupGuy->KilledMonsterCredit(creature_id, creature_guid);
+ if (player->isAlive()|| !player->GetCorpse())
+ player->KilledMonsterCredit(creature_id, creature_guid);
}
}
else // if (!group)
@@ -22431,12 +22669,9 @@ uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const
void Player::ResurectUsingRequestData()
{
/// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse
- if (IS_PLAYER_GUID(m_resurrectGUID))
- TeleportTo(m_resurrectMap, m_resurrectX, m_resurrectY, m_resurrectZ, GetOrientation());
+ TeleportTo(m_resurrectMap, m_resurrectX, m_resurrectY, m_resurrectZ, GetOrientation());
- //we cannot resurrect player when we triggered far teleport
- //player will be resurrected upon teleportation
- if (IsBeingTeleportedFar())
+ if (IsBeingTeleported())
{
ScheduleDelayedOperation(DELAYED_RESURRECT_PLAYER);
return;
@@ -22782,10 +23017,6 @@ bool ItemPosCount::isContainedIn(ItemPosCountVec const& vec) const
return false;
}
-// ***********************************
-// -------------TRINITY---------------
-// ***********************************
-
void Player::StopCastingBindSight()
{
if (WorldObject* target = GetViewpoint())
@@ -22871,7 +23102,6 @@ bool Player::CanCaptureTowerPoint()
}
uint32 Player::GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 newfacialhair, BarberShopStyleEntry const* newSkin)
-
{
uint8 level = getLevel();
@@ -23070,6 +23300,9 @@ void Player::RemoveRunesByAuraEffect(AuraEffect const* aura)
void Player::RestoreBaseRune(uint8 index)
{
AuraEffect const* aura = m_runes->runes[index].ConvertAura;
+ // If rune was converted by a non-pasive aura that still active we should keep it converted
+ if (aura && !(aura->GetSpellInfo()->Attributes & SPELL_ATTR0_PASSIVE))
+ return;
ConvertRune(index, GetBaseRune(index));
SetRuneConvertAura(index, NULL);
// Don't drop passive talents providing rune convertion
@@ -23131,7 +23364,7 @@ void Player::InitRunes()
m_runes->runeState = 0;
m_runes->lastUsedRune = RUNE_BLOOD;
- for (uint32 i = 0; i < MAX_RUNES; ++i)
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
{
SetBaseRune(i, runeSlotTypes[i]); // init base types
SetCurrentRune(i, runeSlotTypes[i]); // init current types
@@ -23140,13 +23373,13 @@ void Player::InitRunes()
m_runes->SetRuneState(i);
}
- for (uint32 i = 0; i < NUM_RUNE_TYPES; ++i)
+ for (uint8 i = 0; i < NUM_RUNE_TYPES; ++i)
SetFloatValue(PLAYER_RUNE_REGEN_1 + i, 0.1f);
}
bool Player::IsBaseRuneSlotsOnCooldown(RuneType runeType) const
{
- for (uint32 i = 0; i < MAX_RUNES; ++i)
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
if (GetBaseRune(i) == runeType && GetRuneCooldown(i) == 0)
return false;
@@ -23205,8 +23438,8 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot)
InventoryResult msg = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, item->itemid, item->count);
if (msg == EQUIP_ERR_OK)
{
- AllowedLooterSet* looters = item->GetAllowedLooters();
- Item* newitem = StoreNewItem(dest, item->itemid, true, item->randomPropertyId, (looters->size() > 1) ? looters : NULL);
+ AllowedLooterSet looters = item->GetAllowedLooters();
+ Item* newitem = StoreNewItem(dest, item->itemid, true, item->randomPropertyId, looters);
if (qitem)
{
@@ -23317,7 +23550,14 @@ void Player::_LoadSkills(PreparedQueryResult result)
if (value == 0)
{
sLog->outError("Character %u has skill %u with value 0. Will be deleted.", GetGUIDLow(), skill);
- CharacterDatabase.PExecute("DELETE FROM character_skills WHERE guid = '%u' AND skill = '%u' ", GetGUIDLow(), skill);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SKILL);
+
+ stmt->setUInt32(0, GetGUIDLow());
+ stmt->setUInt16(1, skill);
+
+ CharacterDatabase.Execute(stmt);
+
continue;
}
@@ -24106,7 +24346,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
++itr;
break; // nothing do
case EQUIPMENT_SET_CHANGED:
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_EQUIP_SET);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_EQUIP_SET);
stmt->setString(j++, eqset.Name.c_str());
stmt->setString(j++, eqset.IconName.c_str());
for (uint8 i=0; i<EQUIPMENT_SLOT_END; ++i)
@@ -24119,7 +24359,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans)
++itr;
break;
case EQUIPMENT_SET_NEW:
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_EQUIP_SET);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_EQUIP_SET);
stmt->setUInt32(j++, GetGUIDLow());
stmt->setUInt64(j++, eqset.Guid);
stmt->setUInt32(j++, index);
@@ -24147,7 +24387,7 @@ void Player::_SaveBGData(SQLTransaction& trans)
stmt->setUInt32(0, GetGUIDLow());
trans->Append(stmt);
/* guid, bgInstanceID, bgTeam, x, y, z, o, map, taxi[0], taxi[1], mountSpell */
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_PLAYER_BGDATA);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_BGDATA);
stmt->setUInt32(0, GetGUIDLow());
stmt->setUInt32(1, m_bgData.bgInstanceID);
stmt->setUInt16(2, m_bgData.bgTeam);
@@ -24177,12 +24417,19 @@ void Player::DeleteEquipmentSet(uint64 setGuid)
}
}
-void Player::RemoveAtLoginFlag(AtLoginFlags f, bool in_db_also /*= false*/)
+void Player::RemoveAtLoginFlag(AtLoginFlags flags, bool persist /*= false*/)
{
- m_atLoginFlags &= ~f;
+ m_atLoginFlags &= ~flags;
- if (in_db_also)
- CharacterDatabase.PExecute("UPDATE characters set at_login = at_login & ~ %u WHERE guid ='%u'", uint32(f), GetGUIDLow());
+ if (persist)
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_REM_AT_LOGIN_FLAG);
+
+ stmt->setUInt16(0, uint16(flags));
+ stmt->setUInt32(1, GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
+ }
}
void Player::SendClearCooldown(uint32 spell_id, Unit* target)
@@ -24349,9 +24596,9 @@ void Player::ActivateSpec(uint8 spec)
// Let client clear his current Actions
SendActionButtons(2);
// m_actionButtons.clear() is called in the next _LoadActionButtons
- for (uint32 i = 0; i < sTalentStore.GetNumRows(); ++i)
+ for (uint32 talentId = 0; talentId < sTalentStore.GetNumRows(); ++talentId)
{
- TalentEntry const* talentInfo = sTalentStore.LookupEntry(i);
+ TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentId);
if (!talentInfo)
continue;
@@ -24442,7 +24689,7 @@ void Player::ActivateSpec(uint8 spec)
InitTalentForLevel();
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ACTIONS_SPEC);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC);
stmt->setUInt32(0, GetGUIDLow());
stmt->setUInt8(1, m_activeSpec);
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
@@ -24694,7 +24941,13 @@ void Player::SetRandomWinner(bool isWinner)
{
m_IsBGRandomWinner = isWinner;
if (m_IsBGRandomWinner)
- CharacterDatabase.PExecute("INSERT INTO character_battleground_random (guid) VALUES ('%u')", GetGUIDLow());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_BATTLEGROUND_RANDOM);
+
+ stmt->setUInt32(0, GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
+ }
}
void Player::_LoadRandomBGStatus(PreparedQueryResult result)
@@ -24719,7 +24972,7 @@ float Player::GetAverageItemLevel()
if (m_items[i] && m_items[i]->GetTemplate())
sum += m_items[i]->GetTemplate()->GetItemLevelIncludingQuality();
- count++;
+ ++count;
}
return ((float)sum) / count;
@@ -24748,7 +25001,7 @@ void Player::_SaveInstanceTimeRestrictions(SQLTransaction& trans)
for (InstanceTimeMap::const_iterator itr = _instanceResetTimes.begin(); itr != _instanceResetTimes.end(); ++itr)
{
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_ACCOUNT_INSTANCE_LOCK_TIMES);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES);
stmt->setUInt32(0, GetSession()->GetAccountId());
stmt->setUInt32(1, itr->first);
stmt->setUInt64(2, itr->second);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 05ef060add9..21c87a993dc 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -395,10 +395,10 @@ enum PlayerFlags
PLAYER_FLAGS_NO_XP_GAIN = 0x02000000,
PLAYER_FLAGS_UNK26 = 0x04000000,
PLAYER_FLAGS_UNK27 = 0x08000000,
- PLAYER_FLAGS_UNK28 = 0x01000000,
- PLAYER_FLAGS_UNK29 = 0x02000000,
- PLAYER_FLAGS_UNK30 = 0x04000000,
- PLAYER_FLAGS_UNK31 = 0x08000000,
+ PLAYER_FLAGS_UNK28 = 0x10000000,
+ PLAYER_FLAGS_UNK29 = 0x20000000,
+ PLAYER_FLAGS_UNK30 = 0x40000000,
+ PLAYER_FLAGS_UNK31 = 0x80000000,
};
// used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
@@ -743,8 +743,8 @@ enum RestType
enum DuelCompleteType
{
DUEL_INTERRUPTED = 0,
- DUEL_WON = 1,
- DUEL_FLED = 2
+ DUEL_WON = 1,
+ DUEL_FLED = 2
};
enum TeleportToOptions
@@ -768,6 +768,16 @@ enum EnviromentalDamage
DAMAGE_FALL_TO_VOID = 6 // custom case for fall without durability loss
};
+enum PlayerChatTag
+{
+ CHAT_TAG_NONE = 0x00,
+ CHAT_TAG_AFK = 0x01,
+ CHAT_TAG_DND = 0x02,
+ CHAT_TAG_GM = 0x04,
+ CHAT_TAG_COM = 0x08, // Commentator
+ CHAT_TAG_DEV = 0x10,
+};
+
enum PlayedTimeIndex
{
PLAYED_TIME_TOTAL = 0,
@@ -805,11 +815,12 @@ enum PlayerLoginQueryIndex
PLAYER_LOGIN_QUERY_LOADTALENTS = 23,
PLAYER_LOGIN_QUERY_LOADACCOUNTDATA = 24,
PLAYER_LOGIN_QUERY_LOADSKILLS = 25,
- PLAYER_LOGIN_QUERY_LOADWEKLYQUESTSTATUS = 26,
+ PLAYER_LOGIN_QUERY_LOADWEEKLYQUESTSTATUS = 26,
PLAYER_LOGIN_QUERY_LOADRANDOMBG = 27,
PLAYER_LOGIN_QUERY_LOADBANNED = 28,
PLAYER_LOGIN_QUERY_LOADQUESTSTATUSREW = 29,
PLAYER_LOGIN_QUERY_LOADINSTANCELOCKTIMES = 30,
+ PLAYER_LOGIN_QUERY_LOADSEASONALQUESTSTATUS = 31,
MAX_PLAYER_LOGIN_QUERY,
};
@@ -1081,13 +1092,10 @@ class Player : public Unit, public GridObject<Player>
void RemoveFromWorld();
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options = 0);
- void TeleportOutOfMap(Map* oldMap);
-
bool TeleportTo(WorldLocation const &loc, uint32 options = 0)
{
return TeleportTo(loc.GetMapId(), loc.GetPositionX(), loc.GetPositionY(), loc.GetPositionZ(), loc.GetOrientation(), options);
}
-
bool TeleportToBGEntryPoint();
void SetSummonPoint(uint32 mapid, float x, float y, float z)
@@ -1104,7 +1112,7 @@ class Player : public Unit, public GridObject<Player>
void Update(uint32 time);
- static bool BuildEnumData(QueryResult result, WorldPacket* data);
+ static bool BuildEnumData(PreparedQueryResult result, WorldPacket* data);
void SetInWater(bool apply);
@@ -1125,7 +1133,7 @@ class Player : public Unit, public GridObject<Player>
bool ToggleDND();
bool isAFK() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); }
bool isDND() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); }
- uint8 chatTag() const;
+ uint8 GetChatTag() const;
std::string afkMsg;
std::string dndMsg;
@@ -1242,18 +1250,18 @@ class Player : public Unit, public GridObject<Player>
bool CanNoReagentCast(SpellInfo const* spellInfo) const;
bool HasItemOrGemWithIdEquipped(uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const;
bool HasItemOrGemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;
- InventoryResult CanTakeMoreSimilarItems(Item* pItem) const { return _CanTakeMoreSimilarItems(pItem->GetEntry(), pItem->GetCount(), pItem); }
- InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count) const { return _CanTakeMoreSimilarItems(entry, count, NULL); }
+ InventoryResult CanTakeMoreSimilarItems(Item* pItem) const { return CanTakeMoreSimilarItems(pItem->GetEntry(), pItem->GetCount(), pItem); }
+ InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count) const { return CanTakeMoreSimilarItems(entry, count, NULL); }
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 item, uint32 count, uint32* no_space_count = NULL) const
{
- return _CanStoreItem(bag, slot, dest, item, count, NULL, false, no_space_count);
+ return CanStoreItem(bag, slot, dest, item, count, NULL, false, no_space_count);
}
InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, Item* pItem, bool swap = false) const
{
if (!pItem)
return EQUIP_ERR_ITEM_NOT_FOUND;
uint32 count = pItem->GetCount();
- return _CanStoreItem(bag, slot, dest, pItem->GetEntry(), count, pItem, swap, NULL);
+ return CanStoreItem(bag, slot, dest, pItem->GetEntry(), count, pItem, swap, NULL);
}
InventoryResult CanStoreItems(Item** pItem, int count) const;
@@ -1269,8 +1277,8 @@ class Player : public Unit, public GridObject<Player>
bool HasItemTotemCategory(uint32 TotemCategory) const;
InventoryResult CanUseItem(ItemTemplate const* pItem) const;
InventoryResult CanUseAmmo(uint32 item) const;
-
- Item* StoreNewItem(ItemPosCountVec const& pos, uint32 item, bool update, int32 randomPropertyId = 0, AllowedLooterSet* allowedLooters = NULL);
+ Item* StoreNewItem(ItemPosCountVec const& pos, uint32 item, bool update, int32 randomPropertyId = 0);
+ Item* StoreNewItem(ItemPosCountVec const& pos, uint32 item, bool update, int32 randomPropertyId, AllowedLooterSet &allowedLooters);
Item* StoreItem(ItemPosCountVec const& pos, Item* pItem, bool update);
Item* EquipNewItem(uint16 pos, uint32 item, bool update);
Item* EquipItem(uint16 pos, Item* pItem, bool update);
@@ -1280,8 +1288,8 @@ class Player : public Unit, public GridObject<Player>
void AutoStoreLoot(uint32 loot_id, LootStore const& store, bool broadcast = false) { AutoStoreLoot(NULL_BAG, NULL_SLOT, loot_id, store, broadcast); }
void StoreLootItem(uint8 lootSlot, Loot* loot);
- InventoryResult _CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count = NULL) const;
- InventoryResult _CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 entry, uint32 count, Item* pItem = NULL, bool swap = false, uint32* no_space_count = NULL) const;
+ InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count = NULL) const;
+ InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 entry, uint32 count, Item* pItem = NULL, bool swap = false, uint32* no_space_count = NULL) const;
void AddRefundReference(uint32 it);
void DeleteRefundReference(uint32 it);
@@ -1400,10 +1408,11 @@ class Player : public Unit, public GridObject<Player>
void IncompleteQuest(uint32 quest_id);
void RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, bool announce = true);
void FailQuest(uint32 quest_id);
- bool SatisfyQuestSkillOrClass(Quest const* qInfo, bool msg);
+ bool SatisfyQuestSkill(Quest const* qInfo, bool msg) const;
bool SatisfyQuestLevel(Quest const* qInfo, bool msg);
bool SatisfyQuestLog(bool msg);
bool SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg);
+ bool SatisfyQuestClass(Quest const* qInfo, bool msg) const;
bool SatisfyQuestRace(Quest const* qInfo, bool msg);
bool SatisfyQuestReputation(Quest const* qInfo, bool msg);
bool SatisfyQuestStatus(Quest const* qInfo, bool msg);
@@ -1414,6 +1423,7 @@ class Player : public Unit, public GridObject<Player>
bool SatisfyQuestPrevChain(Quest const* qInfo, bool msg);
bool SatisfyQuestDay(Quest const* qInfo, bool msg);
bool SatisfyQuestWeek(Quest const* qInfo, bool msg);
+ bool SatisfyQuestSeasonal(Quest const* qInfo, bool msg);
bool GiveQuestSourceItem(Quest const* quest);
bool TakeQuestSourceItem(uint32 questId, bool msg);
bool GetQuestRewardStatus(uint32 quest_id) const;
@@ -1424,8 +1434,10 @@ class Player : public Unit, public GridObject<Player>
void SetDailyQuestStatus(uint32 quest_id);
void SetWeeklyQuestStatus(uint32 quest_id);
+ void SetSeasonalQuestStatus(uint32 quest_id);
void ResetDailyQuestStatus();
void ResetWeeklyQuestStatus();
+ void ResetSeasonalQuestStatus(uint16 event_id);
uint16 FindQuestSlot(uint32 quest_id) const;
uint32 GetQuestSlotQuestId(uint16 slot) const { return GetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET); }
@@ -1483,7 +1495,7 @@ class Player : public Unit, public GridObject<Player>
void SendQuestReward(Quest const* quest, uint32 XP, Object* questGiver);
void SendQuestFailed(uint32 questId, InventoryResult reason = EQUIP_ERR_OK);
void SendQuestTimerFailed(uint32 quest_id);
- void SendCanTakeQuestResponse(uint32 msg);
+ void SendCanTakeQuestResponse(uint32 msg) const;
void SendQuestConfirmAccept(Quest const* quest, Player* pReceiver);
void SendPushToPartyResponse(Player* player, uint32 msg);
void SendQuestUpdateAddItem(Quest const* quest, uint32 item_idx, uint16 count);
@@ -1520,7 +1532,7 @@ class Player : public Unit, public GridObject<Player>
/*** SAVE SYSTEM ***/
/*********************************************************/
- void SaveToDB();
+ void SaveToDB(bool create = false);
void SaveInventoryAndGoldToDB(SQLTransaction& trans); // fast save function for item/money cheating preventing
void SaveGoldToDB(SQLTransaction& trans);
@@ -1642,7 +1654,7 @@ class Player : public Unit, public GridObject<Player>
void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask);
void SendInitialSpells();
- bool addSpell(uint32 spell_id, bool active, bool learning, bool dependent, bool disabled, bool loading = false);
+ bool addSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false);
void learnSpell(uint32 spell_id, bool dependent);
void removeSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true);
void resetSpells(bool myClassOnly = false);
@@ -1666,7 +1678,7 @@ class Player : public Unit, public GridObject<Player>
void LearnTalent(uint32 talentId, uint32 talentRank);
void LearnPetTalent(uint64 petGuid, uint32 talentId, uint32 talentRank);
- bool AddTalent(uint32 spell, uint8 spec, bool learning);
+ bool AddTalent(uint32 spellId, uint8 spec, bool learning);
bool HasTalent(uint32 spell_id, uint8 spec) const;
uint32 CalculateTalentsPoints() const;
@@ -2290,6 +2302,7 @@ class Player : public Unit, public GridObject<Player>
m_mover = target;
m_mover->m_movedPlayer = this;
}
+
void SetSeer(WorldObject* target) { m_seer = target; }
void SetViewpoint(WorldObject* target, bool apply);
WorldObject* GetViewpoint() const;
@@ -2326,9 +2339,9 @@ class Player : public Unit, public GridObject<Player>
bool HaveAtClient(WorldObject const* u) const { return u == this || m_clientGUIDs.find(u->GetGUID()) != m_clientGUIDs.end(); }
- bool isValid() const;
+ bool IsNeverVisible() const;
- bool IsVisibleGloballyFor(Player* pl) const;
+ bool IsVisibleGloballyFor(Player* player) const;
void SendInitialVisiblePackets(Unit* target);
void UpdateObjectVisibility(bool forced = true);
@@ -2343,7 +2356,7 @@ class Player : public Unit, public GridObject<Player>
bool HasAtLoginFlag(AtLoginFlags f) const { return m_atLoginFlags & f; }
void SetAtLoginFlag(AtLoginFlags f) { m_atLoginFlags |= f; }
- void RemoveAtLoginFlag(AtLoginFlags f, bool in_db_also = false);
+ void RemoveAtLoginFlag(AtLoginFlags flags, bool persist = false);
bool isUsingLfg();
@@ -2483,6 +2496,41 @@ class Player : public Unit, public GridObject<Player>
void AddWhisperWhiteList(uint64 guid) { WhisperList.push_back(guid); }
bool IsInWhisperWhiteList(uint64 guid);
+ //! Return collision height sent to client
+ float GetCollisionHeight(bool mounted)
+ {
+ if (mounted)
+ {
+ CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID));
+ if (!mountDisplayInfo)
+ return GetCollisionHeight(false);
+
+ CreatureModelDataEntry const* mountModelData = sCreatureModelDataStore.LookupEntry(mountDisplayInfo->ModelId);
+ if (!mountModelData)
+ return GetCollisionHeight(false);
+
+ CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId());
+ ASSERT(displayInfo);
+ CreatureModelDataEntry const* modelData = sCreatureModelDataStore.LookupEntry(displayInfo->ModelId);
+ ASSERT(modelData);
+
+ float scaleMod = GetFloatValue(OBJECT_FIELD_SCALE_X); // 99% sure about this
+
+ return scaleMod * mountModelData->MountHeight + modelData->CollisionHeight * 0.5f;
+ }
+ else
+ {
+ //! Dismounting case - use basic default model data
+ CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId());
+ ASSERT(displayInfo);
+ CreatureModelDataEntry const* modelData = sCreatureModelDataStore.LookupEntry(displayInfo->ModelId);
+ ASSERT(modelData);
+
+ return modelData->CollisionHeight;
+ }
+ //! TODO: Need a proper calculation for collision height when mounted
+ }
+
protected:
// Gamemaster whisper whitelist
WhisperListContainer WhisperList;
@@ -2514,8 +2562,11 @@ class Player : public Unit, public GridObject<Player>
//We allow only one timed quest active at the same time. Below can then be simple value instead of set.
typedef std::set<uint32> QuestSet;
+ typedef std::set<uint32> SeasonalQuestSet;
+ typedef UNORDERED_MAP<uint32,SeasonalQuestSet> SeasonalEventQuestMap;
QuestSet m_timedquests;
QuestSet m_weeklyquests;
+ SeasonalEventQuestMap m_seasonalquests;
uint64 m_divider;
uint32 m_ingametime;
@@ -2536,6 +2587,7 @@ class Player : public Unit, public GridObject<Player>
void _LoadQuestStatusRewarded(PreparedQueryResult result);
void _LoadDailyQuestStatus(PreparedQueryResult result);
void _LoadWeeklyQuestStatus(PreparedQueryResult result);
+ void _LoadSeasonalQuestStatus(PreparedQueryResult result);
void _LoadRandomBGStatus(PreparedQueryResult result);
void _LoadGroup(PreparedQueryResult result);
void _LoadSkills(PreparedQueryResult result);
@@ -2561,6 +2613,7 @@ class Player : public Unit, public GridObject<Player>
void _SaveQuestStatus(SQLTransaction& trans);
void _SaveDailyQuestStatus(SQLTransaction& trans);
void _SaveWeeklyQuestStatus(SQLTransaction& trans);
+ void _SaveSeasonalQuestStatus(SQLTransaction& trans);
void _SaveSkills(SQLTransaction& trans);
void _SaveSpells(SQLTransaction& trans);
void _SaveEquipmentSets(SQLTransaction& trans);
@@ -2672,6 +2725,7 @@ class Player : public Unit, public GridObject<Player>
bool m_DailyQuestChanged;
bool m_WeeklyQuestChanged;
+ bool m_SeasonalQuestChanged;
time_t m_lastDailyQuestTime;
uint32 m_drunkTimer;
@@ -2734,17 +2788,17 @@ class Player : public Unit, public GridObject<Player>
Runes *m_runes;
EquipmentSets m_EquipmentSets;
- bool canSeeAlways(WorldObject const* obj) const;
+ bool CanAlwaysSee(WorldObject const* obj) const;
- bool isAlwaysDetectableFor(WorldObject const* seer) const;
+ bool IsAlwaysDetectableFor(WorldObject const* seer) const;
uint8 m_grantableLevels;
private:
// internal common parts for CanStore/StoreItem functions
- InventoryResult _CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const;
- InventoryResult _CanStoreItem_InBag(uint8 bag, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const;
- InventoryResult _CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool merge, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const;
+ InventoryResult CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const;
+ InventoryResult CanStoreItem_InBag(uint8 bag, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const;
+ InventoryResult CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool merge, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const;
Item* _StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool update);
Item* _LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, Field* fields);
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 4d343d02146..cb327b83d17 100755
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -47,7 +47,7 @@ uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag)
return counter;
}
-bool PlayerSocial::AddToSocialList(uint32 friend_guid, bool ignore)
+bool PlayerSocial::AddToSocialList(uint32 friendGuid, bool ignore)
{
// check client limits
if (ignore)
@@ -65,25 +65,39 @@ bool PlayerSocial::AddToSocialList(uint32 friend_guid, bool ignore)
if (ignore)
flag = SOCIAL_FLAG_IGNORED;
- PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friend_guid);
+ PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
if (itr != m_playerSocialMap.end())
{
- CharacterDatabase.PExecute("UPDATE character_social SET flags = (flags | %u) WHERE guid = '%u' AND friend = '%u'", flag, GetPlayerGUID(), friend_guid);
- m_playerSocialMap[friend_guid].Flags |= flag;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_CHARACTER_SOCIAL_FLAGS);
+
+ stmt->setUInt8(0, uint8(flag));
+ stmt->setUInt32(1, GetPlayerGUID());
+ stmt->setUInt32(2, friendGuid);
+
+ CharacterDatabase.Execute(stmt);
+
+ m_playerSocialMap[friendGuid].Flags |= flag;
}
else
{
- CharacterDatabase.PExecute("INSERT INTO character_social (guid, friend, flags) VALUES ('%u', '%u', '%u')", GetPlayerGUID(), friend_guid, flag);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_SOCIAL);
+
+ stmt->setUInt32(0, GetPlayerGUID());
+ stmt->setUInt32(1, friendGuid);
+ stmt->setUInt8(2, uint8(flag));
+
+ CharacterDatabase.Execute(stmt);
+
FriendInfo fi;
fi.Flags |= flag;
- m_playerSocialMap[friend_guid] = fi;
+ m_playerSocialMap[friendGuid] = fi;
}
return true;
}
-void PlayerSocial::RemoveFromSocialList(uint32 friend_guid, bool ignore)
+void PlayerSocial::RemoveFromSocialList(uint32 friendGuid, bool ignore)
{
- PlayerSocialMap::iterator itr = m_playerSocialMap.find(friend_guid);
+ PlayerSocialMap::iterator itr = m_playerSocialMap.find(friendGuid);
if (itr == m_playerSocialMap.end()) // not exist
return;
@@ -94,43 +108,63 @@ void PlayerSocial::RemoveFromSocialList(uint32 friend_guid, bool ignore)
itr->second.Flags &= ~flag;
if (itr->second.Flags == 0)
{
- CharacterDatabase.PExecute("DELETE FROM character_social WHERE guid = '%u' AND friend = '%u'", GetPlayerGUID(), friend_guid);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SOCIAL);
+
+ stmt->setUInt32(0, GetPlayerGUID());
+ stmt->setUInt32(1, friendGuid);
+
+ CharacterDatabase.Execute(stmt);
+
m_playerSocialMap.erase(itr);
}
else
- CharacterDatabase.PExecute("UPDATE character_social SET flags = (flags & ~%u) WHERE guid = '%u' AND friend = '%u'", flag, GetPlayerGUID(), friend_guid);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_REM_CHARACTER_SOCIAL_FLAGS);
+
+ stmt->setUInt8(0, uint8(flag));
+ stmt->setUInt32(1, GetPlayerGUID());
+ stmt->setUInt32(2, friendGuid);
+
+ CharacterDatabase.Execute(stmt);
+ }
}
-void PlayerSocial::SetFriendNote(uint32 friend_guid, std::string note)
+void PlayerSocial::SetFriendNote(uint32 friendGuid, std::string note)
{
- PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friend_guid);
+ PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid);
if (itr == m_playerSocialMap.end()) // not exist
return;
utf8truncate(note, 48); // DB and client size limitation
- CharacterDatabase.EscapeString(note);
- CharacterDatabase.PExecute("UPDATE character_social SET note = '%s' WHERE guid = '%u' AND friend = '%u'", note.c_str(), GetPlayerGUID(), friend_guid);
- m_playerSocialMap[friend_guid].Note = note;
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_SOCIAL_NOTE);
+
+ stmt->setString(0, note);
+ stmt->setUInt32(1, GetPlayerGUID());
+ stmt->setUInt32(2, friendGuid);
+
+ CharacterDatabase.Execute(stmt);
+
+ m_playerSocialMap[friendGuid].Note = note;
}
-void PlayerSocial::SendSocialList(Player* plr)
+void PlayerSocial::SendSocialList(Player* player)
{
- if (!plr)
+ if (!player)
return;
uint32 size = m_playerSocialMap.size();
WorldPacket data(SMSG_CONTACT_LIST, (4+4+size*25)); // just can guess size
- data << uint32(7); // unk flag (0x1, 0x2, 0x4), 0x7 if it include ignore list
+ data << uint32(7); // 0x1 = Friendlist update. 0x2 = Ignorelist update. 0x4 = Mutelist update.
data << uint32(size); // friends count
for (PlayerSocialMap::iterator itr = m_playerSocialMap.begin(); itr != m_playerSocialMap.end(); ++itr)
{
- sSocialMgr->GetFriendInfo(plr, itr->first, itr->second);
+ sSocialMgr->GetFriendInfo(player, itr->first, itr->second);
data << uint64(itr->first); // player guid
- data << uint32(itr->second.Flags); // player flag (0x1-friend?, 0x2-ignored?, 0x4-muted?)
+ data << uint32(itr->second.Flags); // player flag (0x1 = Friend, 0x2 = Ignored, 0x4 = Muted)
data << itr->second.Note; // string note
if (itr->second.Flags & SOCIAL_FLAG_FRIEND) // if IsFriend()
{
@@ -144,7 +178,7 @@ void PlayerSocial::SendSocialList(Player* plr)
}
}
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_CONTACT_LIST");
}
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index 5faa8f1987c..540b425588e 100755
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -122,9 +122,9 @@ class PlayerSocial
// adding/removing
bool AddToSocialList(uint32 friend_guid, bool ignore);
void RemoveFromSocialList(uint32 friend_guid, bool ignore);
- void SetFriendNote(uint32 friend_guid, std::string note);
+ void SetFriendNote(uint32 friendGuid, std::string note);
// Packet send's
- void SendSocialList(Player* plr);
+ void SendSocialList(Player* player);
// Misc
bool HasFriend(uint32 friend_guid);
bool HasIgnore(uint32 ignore_guid);
diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp
index 10c54720350..80c5de35e59 100755
--- a/src/server/game/Entities/Totem/Totem.cpp
+++ b/src/server/game/Entities/Totem/Totem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
#include "SpellMgr.h"
#include "SpellInfo.h"
-Totem::Totem(SummonPropertiesEntry const* properties, Unit* owner) : Minion(properties, owner)
+Totem::Totem(SummonPropertiesEntry const* properties, Unit* owner) : Minion(properties, owner, false)
{
m_unitTypeMask |= UNIT_MASK_TOTEM;
m_duration = 0;
@@ -86,9 +86,10 @@ void Totem::InitStats(uint32 duration)
void Totem::InitSummon()
{
- // use AddAura instead of CastSpell - this in fact should be an AddSpell equivalent for creatures, but nothing like that exists so far.
if (m_type == TOTEM_PASSIVE)
- AddAura(GetSpell(), this);
+ {
+ CastSpell(this, GetSpell(), true);
+ }
// Some totems can have both instant effect and passive spell
if (GetSpell(1))
diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h
index 93fc2145901..8b00da34d73 100755
--- a/src/server/game/Entities/Totem/Totem.h
+++ b/src/server/game/Entities/Totem/Totem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 28d916fe0af..67d1636c7e2 100755
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -98,7 +98,7 @@ void MapManager::LoadTransports()
m_TransportsByMap[*i].insert(t);
//If we someday decide to use the grid to track transports, here:
- t->SetMap(sMapMgr->CreateMap(mapid, t, 0));
+ t->SetMap(sMapMgr->CreateBaseMap(mapid));
t->AddToWorld();
++count;
@@ -365,9 +365,9 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
if (keyFrames[keyFrames.size() - 1].node->mapid != keyFrames[0].node->mapid)
teleport = true;
- WayPoint pos(keyFrames[0].node->mapid, keyFrames[0].node->x, keyFrames[0].node->y, keyFrames[0].node->z, teleport, 0,
+ m_WayPoints[0] = WayPoint(keyFrames[0].node->mapid, keyFrames[0].node->x, keyFrames[0].node->y, keyFrames[0].node->z, teleport, 0,
keyFrames[0].node->arrivalEventID, keyFrames[0].node->departureEventID);
- m_WayPoints[0] = pos;
+
t += keyFrames[0].node->delay * 1000;
uint32 cM = keyFrames[0].node->mapid;
@@ -387,12 +387,11 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
if (d > 0)
{
- float newX, newY, newZ;
- newX = keyFrames[i].node->x + (keyFrames[i + 1].node->x - keyFrames[i].node->x) * d / keyFrames[i + 1].distFromPrev;
- newY = keyFrames[i].node->y + (keyFrames[i + 1].node->y - keyFrames[i].node->y) * d / keyFrames[i + 1].distFromPrev;
- newZ = keyFrames[i].node->z + (keyFrames[i + 1].node->z - keyFrames[i].node->z) * d / keyFrames[i + 1].distFromPrev;
+ float newX = keyFrames[i].node->x + (keyFrames[i + 1].node->x - keyFrames[i].node->x) * d / keyFrames[i + 1].distFromPrev;
+ float newY = keyFrames[i].node->y + (keyFrames[i + 1].node->y - keyFrames[i].node->y) * d / keyFrames[i + 1].distFromPrev;
+ float newZ = keyFrames[i].node->z + (keyFrames[i + 1].node->z - keyFrames[i].node->z) * d / keyFrames[i + 1].distFromPrev;
- bool teleport = false;
+ teleport = false;
if (keyFrames[i].node->mapid != cM)
{
teleport = true;
@@ -400,9 +399,8 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
}
// sLog->outString("T: %d, D: %f, x: %f, y: %f, z: %f", t, d, newX, newY, newZ);
- WayPoint pos(keyFrames[i].node->mapid, newX, newY, newZ, teleport, 0);
if (teleport)
- m_WayPoints[t] = pos;
+ m_WayPoints[t] = WayPoint(keyFrames[i].node->mapid, newX, newY, newZ, teleport, 0);
}
if (tFrom < tTo) // caught in tFrom dock's "gravitational pull"
@@ -439,25 +437,18 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
else
t += (long)keyFrames[i + 1].tTo % 100;
- bool teleport = false;
+ teleport = false;
if ((keyFrames[i + 1].node->actionFlag == 1) || (keyFrames[i + 1].node->mapid != keyFrames[i].node->mapid))
{
teleport = true;
cM = keyFrames[i + 1].node->mapid;
}
- WayPoint pos(keyFrames[i + 1].node->mapid, keyFrames[i + 1].node->x, keyFrames[i + 1].node->y, keyFrames[i + 1].node->z, teleport,
+ m_WayPoints[t] = WayPoint(keyFrames[i + 1].node->mapid, keyFrames[i + 1].node->x, keyFrames[i + 1].node->y, keyFrames[i + 1].node->z, teleport,
0, keyFrames[i + 1].node->arrivalEventID, keyFrames[i + 1].node->departureEventID);
// sLog->outString("T: %d, x: %f, y: %f, z: %f, t:%d", t, pos.x, pos.y, pos.z, teleport);
-/*
- if (keyFrames[i+1].delay > 5)
- pos.delayed = true;
-*/
- //if (teleport)
- m_WayPoints[t] = pos;
t += keyFrames[i + 1].node->delay * 1000;
- // sLog->outString("------");
}
uint32 timer = t;
@@ -489,13 +480,13 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z)
for (PlayerSet::const_iterator itr = m_passengers.begin(); itr != m_passengers.end();)
{
- Player* plr = *itr;
+ Player* player = *itr;
++itr;
- if (plr->isDead() && !plr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
- plr->ResurrectPlayer(1.0f);
+ if (player->isDead() && !player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ player->ResurrectPlayer(1.0f);
- plr->TeleportTo(newMapid, x, y, z, GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT);
+ player->TeleportTo(newMapid, x, y, z, GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT);
}
//we need to create and save new Map object with 'newMapid' because if not done -> lead to invalid Map object reference...
@@ -503,7 +494,7 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z)
RemoveFromWorld();
ResetMap();
- Map* newMap = sMapMgr->CreateMap(newMapid, this, 0);
+ Map* newMap = sMapMgr->CreateBaseMap(newMapid);
SetMap(newMap);
ASSERT (GetMap());
AddToWorld();
@@ -584,13 +575,13 @@ void Transport::Update(uint32 p_diff)
void Transport::UpdateForMap(Map const* targetMap)
{
- Map::PlayerList const& pl = targetMap->GetPlayers();
- if (pl.isEmpty())
+ Map::PlayerList const& player = targetMap->GetPlayers();
+ if (player.isEmpty())
return;
if (GetMapId() == targetMap->GetId())
{
- for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
+ for (Map::PlayerList::const_iterator itr = player.begin(); itr != player.end(); ++itr)
{
if (this != itr->getSource()->GetTransport())
{
@@ -609,7 +600,7 @@ void Transport::UpdateForMap(Map const* targetMap)
WorldPacket out_packet;
transData.BuildPacket(&out_packet);
- for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
+ for (Map::PlayerList::const_iterator itr = player.begin(); itr != player.end(); ++itr)
if (this != itr->getSource()->GetTransport())
itr->getSource()->SendDirectMessage(&out_packet);
}
@@ -642,7 +633,8 @@ void Transport::BuildStopMovePacket(Map const* targetMap)
uint32 Transport::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, float z, float o, uint32 anim)
{
Map* map = GetMap();
- Creature* creature = new Creature;
+ //make it world object so it will not be unloaded with grid
+ Creature* creature = new Creature(true);
if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, GetPhaseMask(), entry, 0, GetGOInfo()->faction, 0, 0, 0, 0))
{
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 8fcecffe239..518dcf6359d 100755
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 594203e0c46..c0bd5cb95a6 100755
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -641,20 +641,21 @@ const float m_diminishing_k[MAX_CLASSES] =
float Player::GetMissPercentageFromDefence() const
{
- const float miss_cap[MAX_CLASSES] =
+ float const miss_cap[MAX_CLASSES] =
{
- 16.00f, // Warrior //correct
- 16.00f, // Paladin //correct
- 16.00f, // Hunter //?
- 16.00f, // Rogue //?
- 16.00f, // Priest //?
- 16.00f, // DK //correct
- 16.00f, // Shaman //?
- 16.00f, // Mage //?
- 16.00f, // Warlock //?
- 0.0f, // ??
- 16.00f // Druid //?
+ 16.00f, // Warrior //correct
+ 16.00f, // Paladin //correct
+ 16.00f, // Hunter //?
+ 16.00f, // Rogue //?
+ 16.00f, // Priest //?
+ 16.00f, // DK //correct
+ 16.00f, // Shaman //?
+ 16.00f, // Mage //?
+ 16.00f, // Warlock //?
+ 0.0f, // ??
+ 16.00f // Druid //?
};
+
float diminishing = 0.0f, nondiminishing = 0.0f;
// Modify value from defense skill (only bonus from defense rating diminishes)
nondiminishing += (GetSkillValue(SKILL_DEFENSE) - GetMaxSkillValueForLevel()) * 0.04f;
@@ -669,17 +670,17 @@ void Player::UpdateParryPercentage()
{
const float parry_cap[MAX_CLASSES] =
{
- 47.003525f, // Warrior
- 47.003525f, // Paladin
- 145.560408f, // Hunter
- 145.560408f, // Rogue
- 0.0f, // Priest
- 47.003525f, // DK
- 145.560408f, // Shaman
- 0.0f, // Mage
- 0.0f, // Warlock
- 0.0f, // ??
- 0.0f // Druid
+ 47.003525f, // Warrior
+ 47.003525f, // Paladin
+ 145.560408f, // Hunter
+ 145.560408f, // Rogue
+ 0.0f, // Priest
+ 47.003525f, // DK
+ 145.560408f, // Shaman
+ 0.0f, // Mage
+ 0.0f, // Warlock
+ 0.0f, // ??
+ 0.0f // Druid
};
// No parry
@@ -706,17 +707,17 @@ void Player::UpdateDodgePercentage()
{
const float dodge_cap[MAX_CLASSES] =
{
- 88.129021f, // Warrior
- 88.129021f, // Paladin
- 145.560408f, // Hunter
- 145.560408f, // Rogue
- 150.375940f, // Priest
- 88.129021f, // DK
- 145.560408f, // Shaman
- 150.375940f, // Mage
- 150.375940f, // Warlock
- 0.0f, // ??
- 116.890707f // Druid
+ 88.129021f, // Warrior
+ 88.129021f, // Paladin
+ 145.560408f, // Hunter
+ 145.560408f, // Rogue
+ 150.375940f, // Priest
+ 88.129021f, // DK
+ 145.560408f, // Shaman
+ 150.375940f, // Mage
+ 150.375940f, // Warlock
+ 0.0f, // ??
+ 116.890707f // Druid
};
float diminishing = 0.0f, nondiminishing = 0.0f;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 12c3992c980..ea2564947a9 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -144,7 +144,7 @@ _hitMask(hitMask), _spell(spell), _damageInfo(damageInfo), _healInfo(healInfo)
#ifdef _MSC_VER
#pragma warning(disable:4355)
#endif
-Unit::Unit(): WorldObject(),
+Unit::Unit(bool isWorldObject): WorldObject(isWorldObject),
m_movedPlayer(NULL), m_lastSanctuaryTime(0), IsAIEnabled(false), NeedChangeAI(false),
m_ControlledByPlayer(false), i_AI(NULL), i_disabledAI(NULL), m_procDeep(0),
m_removedAurasCount(0), i_motionMaster(this), m_ThreatManager(this), m_vehicle(NULL),
@@ -181,7 +181,8 @@ m_vehicleKit(NULL), m_unitTypeMask(UNIT_MASK_NONE), m_HostileRefManager(this)
for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
m_SummonSlot[i] = 0;
- m_ObjectSlot[0] = m_ObjectSlot[1] = m_ObjectSlot[2] = m_ObjectSlot[3] = 0;
+ for (uint8 i = 0; i < MAX_GAMEOBJECT_SLOT; ++i)
+ m_ObjectSlot[i] = 0;
m_auraUpdateIterator = m_ownedAuras.end();
@@ -585,7 +586,7 @@ bool Unit::IsWithinMeleeRange(const Unit* obj, float dist) const
void Unit::GetRandomContactPoint(const Unit* obj, float &x, float &y, float &z, float distance2dMin, float distance2dMax) const
{
float combat_reach = GetCombatReach();
- if (combat_reach < 0.1) // sometimes bugged for players
+ if (combat_reach < 0.1f) // sometimes bugged for players
combat_reach = DEFAULT_COMBAT_REACH;
uint32 attacker_number = getAttackers().size();
@@ -1126,7 +1127,7 @@ void Unit::DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss)
SpellInfo const* spellProto = sSpellMgr->GetSpellInfo(damageInfo->SpellID);
if (spellProto == NULL)
{
- sLog->outDebug(LOG_FILTER_UNITS, "Unit::DealSpellDamage have wrong damageInfo->SpellID: %u", damageInfo->SpellID);
+ sLog->outDebug(LOG_FILTER_UNITS, "Unit::DealSpellDamage has wrong damageInfo->SpellID: %u", damageInfo->SpellID);
return;
}
@@ -1477,9 +1478,13 @@ bool Unit::IsDamageReducedByArmor(SpellSchoolMask schoolMask, SpellInfo const* s
return false;
// bleeding effects are not reduced by armor
- if (effIndex != MAX_SPELL_EFFECTS && spellInfo->Effects[effIndex].ApplyAuraName == SPELL_AURA_PERIODIC_DAMAGE)
- if (spellInfo->GetEffectMechanicMask(effIndex) & (1<<MECHANIC_BLEED))
- return false;
+ if (effIndex != MAX_SPELL_EFFECTS)
+ {
+ if (spellInfo->Effects[effIndex].ApplyAuraName == SPELL_AURA_PERIODIC_DAMAGE ||
+ spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_SCHOOL_DAMAGE)
+ if (spellInfo->GetEffectMechanicMask(effIndex) & (1<<MECHANIC_BLEED))
+ return false;
+ }
}
return true;
}
@@ -1511,44 +1516,36 @@ uint32 Unit::CalcArmorReducedDamage(Unit* victim, const uint32 damage, SpellInfo
armor = floor(AddPctN(armor, -(*j)->GetAmount()));
}
+ // Apply Player CR_ARMOR_PENETRATION rating and buffs from stances\specializations etc.
if (GetTypeId() == TYPEID_PLAYER)
{
+ float bonusPct = 0;
AuraEffectList const& ResIgnoreAuras = GetAuraEffectsByType(SPELL_AURA_MOD_ARMOR_PENETRATION_PCT);
for (AuraEffectList::const_iterator itr = ResIgnoreAuras.begin(); itr != ResIgnoreAuras.end(); ++itr)
{
- // item neutral spell
if ((*itr)->GetSpellInfo()->EquippedItemClass == -1)
{
- armor = floor(AddPctN(armor, -(*itr)->GetAmount()));
- continue;
+ if (!spellInfo || (*itr)->IsAffectedOnSpell(spellInfo) || (*itr)->GetMiscValue() & spellInfo->GetSchoolMask())
+ bonusPct += (*itr)->GetAmount();
+ else if (!(*itr)->GetMiscValue() && !(*itr)->HasSpellClassMask())
+ bonusPct += (*itr)->GetAmount();
}
-
- // item dependent spell - check current weapons
- for (int i = 0; i < MAX_ATTACK; ++i)
+ else
{
- Item* weapon = ToPlayer()->GetWeaponForAttack(WeaponAttackType(i), true);
-
- if (weapon && weapon->IsFitToSpellRequirements((*itr)->GetSpellInfo()))
- {
- armor = floor(AddPctN(armor, -(*itr)->GetAmount()));
- break;
- }
+ if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*itr)->GetSpellInfo()))
+ bonusPct += (*itr)->GetAmount();
}
}
- }
- // Apply Player CR_ARMOR_PENETRATION rating
- if (GetTypeId() == TYPEID_PLAYER)
- {
float maxArmorPen = 0;
- if (getLevel() < 60)
+ if (victim->getLevel() < 60)
maxArmorPen = float(400 + 85 * victim->getLevel());
else
maxArmorPen = 400 + 85 * victim->getLevel() + 4.5f * 85 * (victim->getLevel() - 59);
// Cap armor penetration to this number
maxArmorPen = std::min((armor + maxArmorPen) / 3, armor);
// Figure out how much armor do we ignore
- float armorPen = CalculatePctF(maxArmorPen, ToPlayer()->GetRatingBonusValue(CR_ARMOR_PENETRATION));
+ float armorPen = CalculatePctF(maxArmorPen, bonusPct + ToPlayer()->GetRatingBonusValue(CR_ARMOR_PENETRATION));
// Got the value, apply it
armor -= std::min(armorPen, maxArmorPen);
}
@@ -1573,7 +1570,7 @@ uint32 Unit::CalcArmorReducedDamage(Unit* victim, const uint32 damage, SpellInfo
return (newdamage > 1) ? newdamage : 1;
}
-void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32 *absorb, uint32 *resist, SpellInfo const* spellInfo)
+void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffectType damagetype, uint32 const damage, uint32 *absorb, uint32 *resist, SpellInfo const* spellInfo)
{
if (!victim || !victim->isAlive() || !damage)
return;
@@ -1583,15 +1580,19 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
// Magic damage, check for resists
if ((schoolMask & SPELL_SCHOOL_MASK_NORMAL) == 0)
{
- float baseVictimResistance = float(victim->GetResistance(GetFirstSchoolInMask(schoolMask)));
- float ignoredResistance = float(GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask));
+ float victimResistance = float(victim->GetResistance(schoolMask));
+ victimResistance += float(GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask));
+
if (Player* player = ToPlayer())
- ignoredResistance += float(player->GetSpellPenetrationItemMod());
- float victimResistance = baseVictimResistance + ignoredResistance;
+ victimResistance -= float(player->GetSpellPenetrationItemMod());
+
+ // Resistance can't be lower then 0.
+ if (victimResistance < 0.0f)
+ victimResistance = 0.0f;
- static const uint32 BOSS_LEVEL = 83;
- static const float BOSS_RESISTANCE_CONSTANT = 510.0;
- uint32 level = getLevel();
+ static uint32 const BOSS_LEVEL = 83;
+ static float const BOSS_RESISTANCE_CONSTANT = 510.0f;
+ uint32 level = victim->getLevel();
float resistanceConstant = 0.0f;
if (level == BOSS_LEVEL)
@@ -1682,12 +1683,12 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
if (currentAbsorb < 0)
currentAbsorb = 0;
- uint32 absorb = currentAbsorb;
+ uint32 tempAbsorb = uint32(currentAbsorb);
bool defaultPrevented = false;
- absorbAurEff->GetBase()->CallScriptEffectAbsorbHandlers(absorbAurEff, aurApp, dmgInfo, absorb, defaultPrevented);
- currentAbsorb = absorb;
+ absorbAurEff->GetBase()->CallScriptEffectAbsorbHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb, defaultPrevented);
+ currentAbsorb = tempAbsorb;
if (defaultPrevented)
continue;
@@ -1700,8 +1701,8 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
dmgInfo.AbsorbDamage(currentAbsorb);
- absorb = currentAbsorb;
- absorbAurEff->GetBase()->CallScriptEffectAfterAbsorbHandlers(absorbAurEff, aurApp, dmgInfo, absorb);
+ tempAbsorb = currentAbsorb;
+ absorbAurEff->GetBase()->CallScriptEffectAfterAbsorbHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb);
// Check if our aura is using amount to count damage
if (absorbAurEff->GetAmount() >= 0)
@@ -1733,12 +1734,12 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
if (currentAbsorb < 0)
currentAbsorb = 0;
- uint32 absorb = currentAbsorb;
+ uint32 tempAbsorb = currentAbsorb;
bool defaultPrevented = false;
- absorbAurEff->GetBase()->CallScriptEffectManaShieldHandlers(absorbAurEff, aurApp, dmgInfo, absorb, defaultPrevented);
- currentAbsorb = absorb;
+ absorbAurEff->GetBase()->CallScriptEffectManaShieldHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb, defaultPrevented);
+ currentAbsorb = tempAbsorb;
if (defaultPrevented)
continue;
@@ -1761,8 +1762,8 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
dmgInfo.AbsorbDamage(currentAbsorb);
- absorb = currentAbsorb;
- absorbAurEff->GetBase()->CallScriptEffectAfterManaShieldHandlers(absorbAurEff, aurApp, dmgInfo, absorb);
+ tempAbsorb = currentAbsorb;
+ absorbAurEff->GetBase()->CallScriptEffectAfterManaShieldHandlers(absorbAurEff, aurApp, dmgInfo, tempAbsorb);
// Check if our aura is using amount to count damage
if (absorbAurEff->GetAmount() >= 0)
@@ -1925,12 +1926,7 @@ void Unit::AttackerStateUpdate (Unit* victim, WeaponAttackType attType, bool ext
CombatStart(victim);
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MELEE_ATTACK);
- uint32 hitInfo;
- if (attType == BASE_ATTACK)
- hitInfo = HITINFO_NORMALSWING2;
- else if (attType == OFF_ATTACK)
- hitInfo = HITINFO_LEFTSWING;
- else
+ if (attType != BASE_ATTACK && attType != OFF_ATTACK)
return; // ignore ranged case
// melee attack spell casted at main hand attack only - no normal melee dmg dealt
@@ -2215,22 +2211,23 @@ void Unit::SendMeleeAttackStart(Unit* victim)
WorldPacket data(SMSG_ATTACKSTART, 8 + 8);
data << uint64(GetGUID());
data << uint64(victim->GetGUID());
-
SendMessageToSet(&data, true);
sLog->outStaticDebug("WORLD: Sent SMSG_ATTACKSTART");
}
void Unit::SendMeleeAttackStop(Unit* victim)
{
- if (!victim)
- return;
-
WorldPacket data(SMSG_ATTACKSTOP, (8+8+4)); // we guess size
data.append(GetPackGUID());
- data.append(victim->GetPackGUID()); // can be 0x00...
- data << uint32(0); // can be 0x1
+ data.append(victim ? victim->GetPackGUID() : 0); // can be 0x00...
+ data << uint32(0); // can be 0x1
SendMessageToSet(&data, true);
- sLog->outDetail("%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow());
+ sLog->outStaticDebug("WORLD: Sent SMSG_ATTACKSTART");
+
+ if (victim)
+ sLog->outDetail("%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow());
+ else
+ sLog->outDetail("%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow());
}
bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType)
@@ -2400,7 +2397,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spell)
case MELEE_HIT_BLOCK: canBlock = false; break;
case MELEE_HIT_PARRY: canParry = false; break;
default:
- sLog->outStaticDebug("Spell %u SPELL_AURA_IGNORE_COMBAT_RESULT have unhandled state %d", (*i)->GetId(), (*i)->GetMiscValue());
+ sLog->outStaticDebug("Spell %u SPELL_AURA_IGNORE_COMBAT_RESULT has unhandled state %d", (*i)->GetId(), (*i)->GetMiscValue());
break;
}
}
@@ -3007,7 +3004,7 @@ void Unit::InterruptSpell(CurrentSpellTypes spellType, bool withDelayed, bool wi
Spell* spell = m_currentSpells[spellType];
if (spell
&& (withDelayed || spell->getState() != SPELL_STATE_DELAYED)
- && (withInstant || spell->CalcCastTime() > 0))
+ && (withInstant || spell->GetCastTime() > 0))
{
// for example, do not let self-stun aura interrupt itself
if (!spell->IsInterruptable())
@@ -3044,7 +3041,7 @@ bool Unit::IsNonMeleeSpellCasted(bool withDelayed, bool skipChanneled, bool skip
// Maybe later some special spells will be excluded too.
// if skipInstant then instant spells shouldn't count as being casted
- if (skipInstant && m_currentSpells[CURRENT_GENERIC_SPELL] && !m_currentSpells[CURRENT_GENERIC_SPELL]->CalcCastTime())
+ if (skipInstant && m_currentSpells[CURRENT_GENERIC_SPELL] && !m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime())
return false;
// generic spells are casted when they are not finished and not delayed
@@ -3095,7 +3092,7 @@ Spell* Unit::FindCurrentSpellBySpellId(uint32 spell_id) const
int32 Unit::GetCurrentSpellCastTime(uint32 spell_id) const
{
if (Spell const* spell = FindCurrentSpellBySpellId(spell_id))
- return spell->CalcCastTime();
+ return spell->GetCastTime();
return 0;
}
@@ -3471,10 +3468,10 @@ void Unit::RemoveOwnedAura(AuraMap::iterator &i, AuraRemoveMode removeMode)
i = m_ownedAuras.begin();
}
-void Unit::RemoveOwnedAura(uint32 spellId, uint64 caster, uint8 reqEffMask, AuraRemoveMode removeMode)
+void Unit::RemoveOwnedAura(uint32 spellId, uint64 casterGUID, uint8 reqEffMask, AuraRemoveMode removeMode)
{
for (AuraMap::iterator itr = m_ownedAuras.lower_bound(spellId); itr != m_ownedAuras.upper_bound(spellId);)
- if (((itr->second->GetEffectMask() & reqEffMask) == reqEffMask) && (!caster || itr->second->GetCasterGUID() == caster))
+ if (((itr->second->GetEffectMask() & reqEffMask) == reqEffMask) && (!casterGUID || itr->second->GetCasterGUID() == casterGUID))
{
RemoveOwnedAura(itr, removeMode);
itr = m_ownedAuras.lower_bound(spellId);
@@ -3577,13 +3574,13 @@ void Unit::RemoveAura(Aura* aura, AuraRemoveMode mode)
RemoveAura(aurApp, mode);
}
-void Unit::RemoveAurasDueToSpell(uint32 spellId, uint64 caster, uint8 reqEffMask, AuraRemoveMode removeMode)
+void Unit::RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID, uint8 reqEffMask, AuraRemoveMode removeMode)
{
for (AuraApplicationMap::iterator iter = m_appliedAuras.lower_bound(spellId); iter != m_appliedAuras.upper_bound(spellId);)
{
Aura const* aura = iter->second->GetBase();
if (((aura->GetEffectMask() & reqEffMask) == reqEffMask)
- && (!caster || aura->GetCasterGUID() == caster))
+ && (!casterGUID || aura->GetCasterGUID() == casterGUID))
{
RemoveAura(iter, removeMode);
iter = m_appliedAuras.lower_bound(spellId);
@@ -3593,13 +3590,13 @@ void Unit::RemoveAurasDueToSpell(uint32 spellId, uint64 caster, uint8 reqEffMask
}
}
-void Unit::RemoveAuraFromStack(uint32 spellId, uint64 caster, AuraRemoveMode removeMode)
+void Unit::RemoveAuraFromStack(uint32 spellId, uint64 casterGUID, AuraRemoveMode removeMode)
{
for (AuraMap::iterator iter = m_ownedAuras.lower_bound(spellId); iter != m_ownedAuras.upper_bound(spellId);)
{
Aura* aura = iter->second;
if ((aura->GetType() == UNIT_AURA_TYPE)
- && (!caster || aura->GetCasterGUID() == caster))
+ && (!casterGUID || aura->GetCasterGUID() == casterGUID))
{
aura->ModStackAmount(-1, removeMode);
return;
@@ -3738,13 +3735,13 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit*
// Cast duration to unsigned to prevent permanent aura's such as Righteous Fury being permanently added to caster
uint32 dur = std::min(2u * MINUTE * IN_MILLISECONDS, uint32(aura->GetDuration()));
- if (Aura* newAura = stealer->GetAura(aura->GetId(), aura->GetCasterGUID()))
+ if (Aura* oldAura = stealer->GetAura(aura->GetId(), aura->GetCasterGUID()))
{
if (stealCharge)
- newAura->ModCharges(1);
+ oldAura->ModCharges(1);
else
- newAura->ModStackAmount(1);
- newAura->SetDuration(int32(dur));
+ oldAura->ModStackAmount(1);
+ oldAura->SetDuration(int32(dur));
}
else
{
@@ -4421,14 +4418,26 @@ int32 Unit::GetTotalAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask)
float Unit::GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 misc_mask) const
{
+ std::map<SpellGroup, int32> SameEffectSpellGroup;
float multiplier = 1.0f;
AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
{
- if ((*i)->GetMiscValue()& misc_mask)
- AddPctN(multiplier, (*i)->GetAmount());
+ if (((*i)->GetMiscValue() & misc_mask))
+ {
+ // Check if the Aura Effect has a the Same Effect Stack Rule and if so, use the highest amount of that SpellGroup
+ // If the Aura Effect does not have this Stack Rule, it returns false so we can add to the multiplier as usual
+ if (!sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
+ AddPctN(multiplier, (*i)->GetAmount());
+ }
}
+ // Add the highest of the Same Effect Stack Rule SpellGroups to the multiplier
+ for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
+ {
+ AddPctN(multiplier, itr->second);
+ }
+
return multiplier;
}
@@ -4634,7 +4643,7 @@ void Unit::AddGameObject(GameObject* gameObj)
SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(gameObj->GetSpellId());
// Need disable spell use for owner
if (createBySpell && createBySpell->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE)
- // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases)
+ // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases)
ToPlayer()->AddSpellAndCategoryCooldowns(createBySpell, 0, NULL, true);
}
}
@@ -4645,7 +4654,7 @@ void Unit::RemoveGameObject(GameObject* gameObj, bool del)
gameObj->SetOwnerGUID(0);
- for (uint32 i = 0; i < 4; ++i)
+ for (uint8 i = 0; i < MAX_GAMEOBJECT_SLOT; ++i)
{
if (m_ObjectSlot[i] == gameObj->GetGUID())
{
@@ -4664,7 +4673,7 @@ void Unit::RemoveGameObject(GameObject* gameObj, bool del)
SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(spellid);
// Need activate spell use for owner
if (createBySpell && createBySpell->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE)
- // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases)
+ // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases)
ToPlayer()->SendCooldownEvent(createBySpell);
}
}
@@ -4705,12 +4714,13 @@ void Unit::RemoveGameObject(uint32 spellid, bool del)
void Unit::RemoveAllGameObjects()
{
// remove references to unit
- for (GameObjectList::iterator i = m_gameObj.begin(); i != m_gameObj.end();)
+ while (!m_gameObj.empty())
{
+ GameObjectList::iterator i = m_gameObj.begin();
(*i)->SetOwnerGUID(0);
(*i)->SetRespawnTime(0);
(*i)->Delete();
- i = m_gameObj.erase(i);
+ m_gameObj.erase(i);
}
}
@@ -4958,7 +4968,7 @@ bool Unit::HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (!triggerEntry)
{
- sLog->outError("Unit::HandleHasteAuraProc: Spell %u have not existed triggered spell %u", hasteSpell->Id, triggered_spell_id);
+ sLog->outError("Unit::HandleHasteAuraProc: Spell %u has non-existing triggered spell %u", hasteSpell->Id, triggered_spell_id);
return false;
}
@@ -5016,7 +5026,7 @@ bool Unit::HandleSpellCritChanceAuraProc(Unit* victim, uint32 /*damage*/, AuraEf
if (!triggerEntry)
{
- sLog->outError("Unit::HandleHasteAuraProc: Spell %u have not existed triggered spell %u", triggeredByAuraSpell->Id, triggered_spell_id);
+ sLog->outError("Unit::HandleHasteAuraProc: Spell %u has non-existing triggered spell %u", triggeredByAuraSpell->Id, triggered_spell_id);
return false;
}
@@ -5223,6 +5233,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
break;
case CLASS_ROGUE: // 39511, 40997, 40998, 41002, 41005, 41011
case CLASS_WARRIOR: // 39511, 40997, 40998, 41002, 41005, 41011
+ case CLASS_DEATH_KNIGHT:
triggered_spell_id = RAND(39511, 40997, 40998, 41002, 41005, 41011);
cooldown_spell_id = 39511;
break;
@@ -5270,7 +5281,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (ToPlayer()->GetReputationRank(934) == REP_EXALTED)
{
// triggered at positive/self casts also, current attack target used then
- if (IsFriendlyTo(target))
+ if (target && IsFriendlyTo(target))
{
target = getVictim();
if (!target)
@@ -5458,7 +5469,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
case CLASS_DRUID:
RandomSpells.push_back(71484);
RandomSpells.push_back(71485);
- RandomSpells.push_back(71486);
+ RandomSpells.push_back(71492);
break;
case CLASS_HUNTER:
RandomSpells.push_back(71486);
@@ -5504,7 +5515,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
case CLASS_DRUID:
RandomSpells.push_back(71561);
RandomSpells.push_back(71556);
- RandomSpells.push_back(71558);
+ RandomSpells.push_back(71560);
break;
case CLASS_HUNTER:
RandomSpells.push_back(71558);
@@ -5611,7 +5622,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
case SPELLFAMILY_MAGE:
{
// Magic Absorption
- if (dummySpell->SpellIconID == 459) // only this spell have SpellIconID == 459 and dummy aura
+ if (dummySpell->SpellIconID == 459) // only this spell has SpellIconID == 459 and dummy aura
{
if (getPowerType() != POWER_MANA)
return false;
@@ -5747,11 +5758,11 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
// Glyph of Ice Block
case 56372:
{
- Player* plr = ToPlayer();
- if (!plr)
+ Player* player = ToPlayer();
+ if (!player)
return false;
- SpellCooldowns const cooldowns = plr->GetSpellCooldowns();
+ SpellCooldowns const cooldowns = player->GetSpellCooldowns();
// remove cooldowns on all ranks of Frost Nova
for (SpellCooldowns::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr)
{
@@ -5759,7 +5770,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
// Frost Nova
if (cdSpell && cdSpell->SpellFamilyName == SPELLFAMILY_MAGE
&& cdSpell->SpellFamilyFlags[0] & 0x00000040)
- plr->RemoveSpellCooldown(cdSpell->Id, true);
+ player->RemoveSpellCooldown(cdSpell->Id, true);
}
break;
}
@@ -6042,6 +6053,16 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 37378;
break;
}
+ // Glyph of Succubus
+ case 56250:
+ {
+ if (!target)
+ return false;
+ target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE, 0, target->GetAura(32409)); // SW:D shall not be removed.
+ target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
+ target->RemoveAurasByType(SPELL_AURA_PERIODIC_LEECH);
+ return true;
+ }
}
break;
}
@@ -6271,7 +6292,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
{
if (procSpell->SpellVisual[0] == 750 && procSpell->Effects[1].ApplyAuraName == 3)
{
- if (target->GetTypeId() == TYPEID_UNIT)
+ if (target && target->GetTypeId() == TYPEID_UNIT)
{
triggered_spell_id = 54820;
break;
@@ -6470,6 +6491,16 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 32747;
break;
}
+ case 57934: // Tricks of the Trade
+ {
+ Unit* redirectTarget = GetMisdirectionTarget();
+ RemoveAura(57934);
+ if (!redirectTarget)
+ break;
+ CastSpell(this,59628,true);
+ CastSpell(redirectTarget,57933,true);
+ break;
+ }
}
switch (dummySpell->SpellIconID)
@@ -6972,26 +7003,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
{
switch (dummySpell->Id)
{
- // Earthen Power (Rank 1, 2)
- case 51523:
- case 51524:
- {
- // Totem itself must be a caster of this spell
- Unit* caster = NULL;
- for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) {
- if ((*itr)->GetEntry() != 2630)
- continue;
-
- caster = *itr;
- break;
- }
-
- if (!caster)
- return false;
-
- caster->CastSpell(caster, 59566, true, castItem, triggeredByAura, originalCaster);
- return true;
- }
// Tidal Force
case 55198:
{
@@ -7038,29 +7049,31 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 28850;
break;
}
- // Windfury Weapon (Passive) 1-5 Ranks
+ // Windfury Weapon (Passive) 1-8 Ranks
case 33757:
{
- Player* plr = ToPlayer();
- if (!plr || !castItem || !castItem->IsEquipped() || !victim || !victim->isAlive())
+ Player* player = ToPlayer();
+ if (!player || !castItem || !castItem->IsEquipped() || !victim || !victim->isAlive())
return false;
// custom cooldown processing case
- if (cooldown && plr->HasSpellCooldown(dummySpell->Id))
+ if (cooldown && player->HasSpellCooldown(dummySpell->Id))
return false;
if (triggeredByAura->GetBase() && castItem->GetGUID() != triggeredByAura->GetBase()->GetCastItemGUID())
return false;
- WeaponAttackType attType = WeaponAttackType(plr->GetAttackBySlot(castItem->GetSlot()));
- if ((attType != BASE_ATTACK && attType != OFF_ATTACK) || !isAttackReady(attType))
- return false;
+ WeaponAttackType attType = WeaponAttackType(player->GetAttackBySlot(castItem->GetSlot()));
+ if ((attType != BASE_ATTACK && attType != OFF_ATTACK)
+ || attType == BASE_ATTACK && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK
+ || attType == OFF_ATTACK && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK)
+ return false;
// Now compute real proc chance...
uint32 chance = 20;
- plr->ApplySpellMod(dummySpell->Id, SPELLMOD_CHANCE_OF_SUCCESS, chance);
+ player->ApplySpellMod(dummySpell->Id, SPELLMOD_CHANCE_OF_SUCCESS, chance);
- Item* addWeapon = plr->GetWeaponForAttack(attType == BASE_ATTACK ? OFF_ATTACK : BASE_ATTACK, true);
+ Item* addWeapon = player->GetWeaponForAttack(attType == BASE_ATTACK ? OFF_ATTACK : BASE_ATTACK, true);
uint32 enchant_id_add = addWeapon ? addWeapon->GetEnchantmentId(EnchantmentSlot(TEMP_ENCHANTMENT_SLOT)) : 0;
SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(enchant_id_add);
if (pEnchant && pEnchant->spellid[0] == dummySpell->Id)
@@ -7093,19 +7106,24 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
SpellInfo const* windfurySpellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!windfurySpellInfo)
{
- sLog->outError("Unit::HandleDummyAuraProc: non existed spell id: %u (Windfury)", spellId);
+ sLog->outError("Unit::HandleDummyAuraProc: non-existing spell id: %u (Windfury)", spellId);
return false;
}
int32 extra_attack_power = CalculateSpellDamage(victim, windfurySpellInfo, 1);
// Value gained from additional AP
- basepoints0 = int32(extra_attack_power / 14.0f * GetAttackTime(BASE_ATTACK) / 1000);
- triggered_spell_id = 25504;
+ basepoints0 = int32(extra_attack_power / 14.0f * GetAttackTime(attType) / 1000);
+
+ if (procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK)
+ triggered_spell_id = 25504;
+
+ if (procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK)
+ triggered_spell_id = 33750;
// apply cooldown before cast to prevent processing itself
if (cooldown)
- plr->AddSpellCooldown(dummySpell->Id, 0, time(NULL) + cooldown);
+ player->AddSpellCooldown(dummySpell->Id, 0, time(NULL) + cooldown);
// Attack Twice
for (uint32 i = 0; i < 2; ++i)
@@ -7231,7 +7249,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
// Item - Shaman T10 Elemental 4P Bonus
case 70817:
{
- if(!target)
+ if (!target)
return false;
// try to find spell Flame Shock on the target
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, 0x10000000, 0x0, 0x0, GetGUID()))
@@ -7339,6 +7357,13 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (GetTypeId() != TYPEID_PLAYER || !victim || !victim->isAlive() || !castItem || !castItem->IsEquipped())
return false;
+ Player* player = ToPlayer();
+ WeaponAttackType attType = WeaponAttackType(player->GetAttackBySlot(castItem->GetSlot()));
+ if ((attType != BASE_ATTACK && attType != OFF_ATTACK)
+ || attType == BASE_ATTACK && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK
+ || attType == OFF_ATTACK && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK)
+ return false;
+
float fire_onhit = float(CalculatePctF(dummySpell->Effects[EFFECT_0]. CalcValue(), 1.0f));
float add_spellpower = (float)(SpellBaseDamageBonus(SPELL_SCHOOL_MASK_FIRE)
@@ -7348,7 +7373,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
ApplyPctF(add_spellpower, 3.84f);
// Enchant on Off-Hand and ready?
- if (castItem->GetSlot() == EQUIPMENT_SLOT_OFFHAND && isAttackReady(OFF_ATTACK))
+ if (castItem->GetSlot() == EQUIPMENT_SLOT_OFFHAND && procFlag & PROC_FLAG_DONE_OFFHAND_ATTACK)
{
float BaseWeaponSpeed = GetAttackTime(OFF_ATTACK) / 1000.0f;
@@ -7358,7 +7383,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
}
// Enchant on Main-Hand and ready?
- else if (castItem->GetSlot() == EQUIPMENT_SLOT_MAINHAND && isAttackReady(BASE_ATTACK))
+ else if (castItem->GetSlot() == EQUIPMENT_SLOT_MAINHAND && procFlag & PROC_FLAG_DONE_MAINHAND_ATTACK)
{
float BaseWeaponSpeed = GetAttackTime(BASE_ATTACK) / 1000.0f;
@@ -7400,7 +7425,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
return false;
}
// Lightning Overload
- if (dummySpell->SpellIconID == 2018) // only this spell have SpellFamily Shaman SpellIconID == 2018 and dummy aura
+ if (dummySpell->SpellIconID == 2018) // only this spell has SpellFamily Shaman SpellIconID == 2018 and dummy aura
{
if (!procSpell || GetTypeId() != TYPEID_PLAYER || !victim)
return false;
@@ -7452,7 +7477,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (!roll_chance_f(chance))
return false;
- // Remove cooldown (Chain Lightning - have Category Recovery time)
+ // Remove cooldown (Chain Lightning - has Category Recovery time)
ToPlayer()->RemoveSpellCooldown(spellId);
}
@@ -7731,6 +7756,9 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
// Guard Dog
case 201:
{
+ if (!victim)
+ return false;
+
triggered_spell_id = 54445;
target = this;
float addThreat = float(CalculatePctN(procSpell->Effects[0].CalcValue(this), triggerAmount));
@@ -7760,7 +7788,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id);
if (!triggerEntry)
{
- sLog->outError("Unit::HandleDummyAuraProc: Spell %u have not existed triggered spell %u", dummySpell->Id, triggered_spell_id);
+ sLog->outError("Unit::HandleDummyAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id);
return false;
}
@@ -7818,7 +7846,7 @@ bool Unit::HandleObsModEnergyAuraProc(Unit* victim, uint32 /*damage*/, AuraEffec
// Try handle unknown trigger spells
if (!triggerEntry)
{
- sLog->outError("Unit::HandleObsModEnergyAuraProc: Spell %u have not existed triggered spell %u", dummySpell->Id, triggered_spell_id);
+ sLog->outError("Unit::HandleObsModEnergyAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id);
return false;
}
@@ -7871,7 +7899,7 @@ bool Unit::HandleModDamagePctTakenAuraProc(Unit* victim, uint32 /*damage*/, Aura
if (!triggerEntry)
{
- sLog->outError("Unit::HandleModDamagePctTakenAuraProc: Spell %u have not existed triggered spell %u", dummySpell->Id, triggered_spell_id);
+ sLog->outError("Unit::HandleModDamagePctTakenAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id);
return false;
}
@@ -7979,11 +8007,8 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp
else if (dummySpell->SpellIconID == 3015)
{
*handled = true;
- if (procSpell->Category == SPELLCATEGORY_JUDGEMENT)
- {
- CastSpell(victim, 68055, true);
- return true;
- }
+ CastSpell(victim, 68055, true);
+ return true;
}
// Glyph of Divinity
else if (dummySpell->Id == 54939)
@@ -8053,9 +8078,9 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp
{
*handled = true;
// Convert recently used Blood Rune to Death Rune
- if (Player* plr = ToPlayer())
+ if (Player* player = ToPlayer())
{
- if (plr->getClass() != CLASS_DEATH_KNIGHT)
+ if (player->getClass() != CLASS_DEATH_KNIGHT)
return false;
RuneType rune = ToPlayer()->GetLastUsedRune();
@@ -8079,22 +8104,22 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp
{
if (dummySpell->SpellIconID == 2622)
{
- if (plr->GetCurrentRune(i) == RUNE_DEATH ||
- plr->GetBaseRune(i) == RUNE_BLOOD)
+ if (player->GetCurrentRune(i) == RUNE_DEATH ||
+ player->GetBaseRune(i) == RUNE_BLOOD)
continue;
}
else
{
- if (plr->GetCurrentRune(i) == RUNE_DEATH ||
- plr->GetBaseRune(i) != RUNE_BLOOD)
+ if (player->GetCurrentRune(i) == RUNE_DEATH ||
+ player->GetBaseRune(i) != RUNE_BLOOD)
continue;
}
- if (plr->GetRuneCooldown(i) != plr->GetRuneBaseCooldown(i))
+ if (player->GetRuneCooldown(i) != player->GetRuneBaseCooldown(i))
continue;
--runesLeft;
// Mark aura as used
- plr->AddRuneByAuraEffect(i, RUNE_DEATH, aurEff);
+ player->AddRuneByAuraEffect(i, RUNE_DEATH, aurEff);
}
return true;
}
@@ -8388,6 +8413,13 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
basepoints0 += victim->GetRemainingPeriodicAmount(GetGUID(), trigger_spell_id, SPELL_AURA_PERIODIC_DAMAGE);
break;
}
+ // Item - Hunter T9 4P Bonus
+ if (auraSpellInfo->Id == 67151)
+ {
+ trigger_spell_id = 68130;
+ target = this;
+ break;
+ }
break;
}
case SPELLFAMILY_PALADIN:
@@ -8613,8 +8645,8 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(trigger_spell_id);
if (triggerEntry == NULL)
{
- // Not cast unknown spell
- // sLog->outError("Unit::HandleProcTriggerSpell: Spell %u have 0 in EffectTriggered[%d], not handled custom case?", auraSpellInfo->Id, triggeredByAura->GetEffIndex());
+ // Don't cast unknown spell
+ // sLog->outError("Unit::HandleProcTriggerSpell: Spell %u has 0 in EffectTriggered[%d]. Unhandled custom case?", auraSpellInfo->Id, triggeredByAura->GetEffIndex());
return false;
}
@@ -8701,7 +8733,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
if (!victim || !victim->isAlive())
return false;
- // Not give if target already have full health
+ // Doesn't proc if target already has full health
if (victim->IsFullHealth())
return false;
// If your Greater Heal brings the target to full health, you gain $37595s1 mana.
@@ -8730,7 +8762,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
case 63156:
case 63158:
// Can proc only if target has hp below 35%
- if (!victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, procSpell, this))
+ if (!victim || !victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, procSpell, this))
return false;
break;
// Deathbringer Saurfang - Blood Beast's Blood Link
@@ -8770,11 +8802,11 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
// Blade Barrier
if (auraSpellInfo->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT && auraSpellInfo->SpellIconID == 85)
{
- Player* plr = ToPlayer();
- if (!plr || plr->getClass() != CLASS_DEATH_KNIGHT)
+ Player* player = ToPlayer();
+ if (!player || player->getClass() != CLASS_DEATH_KNIGHT)
return false;
- if (!plr->IsBaseRuneSlotsOnCooldown(RUNE_BLOOD))
+ if (!player->IsBaseRuneSlotsOnCooldown(RUNE_BLOOD))
return false;
}
@@ -8881,6 +8913,20 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
}
break;
}
+ case 46916: // Slam! (Bloodsurge proc)
+ case 52437: // Sudden Death
+ {
+ // Item - Warrior T10 Melee 4P Bonus
+ if (AuraEffect const* aurEff = GetAuraEffect(70847, 0))
+ {
+ if (!roll_chance_i(aurEff->GetAmount()))
+ break;
+ CastSpell(this, 70849, true, castItem, triggeredByAura); // Extra Charge!
+ CastSpell(this, 71072, true, castItem, triggeredByAura); // Slam GCD Reduced
+ CastSpell(this, 71069, true, castItem, triggeredByAura); // Execute GCD Reduced
+ }
+ break;
+ }
// Sword and Board
case 50227:
{
@@ -8898,7 +8944,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
if ((maelstrom->GetStackAmount() == maelstrom->GetSpellInfo()->StackAmount) && roll_chance_i(aurEff->GetAmount()))
CastSpell(this, 70831, true, castItem, triggeredByAura);
- // have rank dependent proc chance, ignore too often cases
+ // has rank dependant proc chance, ignore too often cases
// PPM = 2.5 * (rank of talent),
uint32 rank = auraSpellInfo->GetRank();
// 5 rank -> 100% 4 rank -> 80% and etc from full rate
@@ -9252,7 +9298,7 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
&& selfPlayerOwner->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP))
return REP_HOSTILE;
- // if faction have reputation then hostile state dependent only from at_war state
+ // if faction has reputation, hostile state depends only from AtWar state
if (selfPlayerOwner->GetReputationMgr().IsAtWar(targetFactionEntry))
return REP_HOSTILE;
return REP_FRIENDLY;
@@ -10123,20 +10169,20 @@ Unit* Unit::GetNextRandomRaidMemberOrPet(float radius)
// only called in Player::SetSeer
// so move it to Player?
-void Unit::AddPlayerToVision(Player* plr)
+void Unit::AddPlayerToVision(Player* player)
{
if (m_sharedVision.empty())
{
setActive(true);
SetWorldObject(true);
}
- m_sharedVision.push_back(plr);
+ m_sharedVision.push_back(player);
}
// only called in Player::SetSeer
-void Unit::RemovePlayerFromVision(Player* plr)
+void Unit::RemovePlayerFromVision(Player* player)
{
- m_sharedVision.remove(plr);
+ m_sharedVision.remove(player);
if (m_sharedVision.empty())
{
setActive(false);
@@ -10398,7 +10444,7 @@ uint32 Unit::SpellDamageBonus(Unit* victim, SpellInfo const* spellProto, uint32
{
if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
{
- // effect 0 have expected value but in negative state
+ // effect 0 has expected value but in negative state
int32 bonus = -(*i)->GetBase()->GetEffect(0)->GetAmount();
AddPctN(DoneTotalMod, bonus);
}
@@ -10592,11 +10638,6 @@ uint32 Unit::SpellDamageBonus(Unit* victim, SpellInfo const* spellProto, uint32
AddPctF(TakenTotalMod, std::max(mod, float((*i)->GetAmount())));
}
break;
- // Ebon Plague
- case 1933:
- if ((*i)->GetMiscValue() & (spellProto ? spellProto->GetSchoolMask() : 0))
- AddPctN(TakenTotalMod, (*i)->GetAmount());
- break;
}
}
@@ -10879,12 +10920,6 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
if (victim->HasAura(6788))
crit_chance+=(*i)->GetAmount();
break;
- case 21: // Test of Faith
- case 6935:
- case 6918:
- if (victim->HealthBelowPct(50))
- crit_chance+=(*i)->GetAmount();
- break;
default:
break;
}
@@ -11109,11 +11144,6 @@ uint32 Unit::SpellHealingBonus(Unit* victim, SpellInfo const* spellProto, uint32
case 3736: // Hateful Totem of the Third Wind / Increased Lesser Healing Wave / LK Arena (4/5/6) Totem of the Third Wind / Savage Totem of the Third Wind
DoneTotal += (*i)->GetAmount();
break;
- case 7997: // Renewed Hope
- case 7998:
- if (victim->HasAura(6788))
- AddPctN(DoneTotalMod, (*i)->GetAmount());
- break;
case 21: // Test of Faith
case 6935:
case 6918:
@@ -11672,7 +11702,7 @@ void Unit::MeleeDamageBonus(Unit* victim, uint32 *pdamage, WeaponAttackType attT
{
if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
{
- // effect 0 have expected value but in negative state
+ // effect 0 has expected value but in negative state
int32 bonus = -(*i)->GetBase()->GetEffect(0)->GetAmount();
AddPctN(DoneTotalMod, bonus);
}
@@ -11738,23 +11768,6 @@ void Unit::MeleeDamageBonus(Unit* victim, uint32 *pdamage, WeaponAttackType attT
AddPctF(TakenTotalMod, std::max(mod, float((*i)->GetAmount())));
}
break;
- // Blessing of Sanctuary
- // Greater Blessing of Sanctuary
- case 19:
- case 1804:
- {
- if ((*i)->GetSpellInfo()->SpellFamilyName != SPELLFAMILY_PALADIN)
- continue;
-
- if ((*i)->GetMiscValue() & (spellProto ? spellProto->GetSchoolMask() : 0))
- AddPctN(TakenTotalMod, (*i)->GetAmount());
- break;
- }
- // Ebon Plague
- case 1933:
- if ((*i)->GetMiscValue() & (spellProto ? spellProto->GetSchoolMask() : 0))
- AddPctN(TakenTotalMod, (*i)->GetAmount());
- break;
}
}
@@ -11878,7 +11891,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
- if (Player* plr = ToPlayer())
+ if (Player* player = ToPlayer())
{
// mount as a vehicle
if (VehicleId)
@@ -11894,7 +11907,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
SendMessageToSet(&data, true);
data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
// mounts can also have accessories
GetVehicleKit()->InstallAllAccessories(false);
@@ -11902,7 +11915,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
}
// unsummon pet
- Pet* pet = plr->GetPet();
+ Pet* pet = player->GetPet();
if (pet)
{
Battleground* bg = ToPlayer()->GetBattleground();
@@ -11910,14 +11923,20 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
if (bg && bg->isArena())
pet->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
else
- plr->UnsummonPetTemporaryIfAny();
+ player->UnsummonPetTemporaryIfAny();
}
+
+ WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
+ data.append(GetPackGUID());
+ data << uint32(sWorld->GetGameTime()); // Packet counter
+ data << player->GetCollisionHeight(true);
+ player->GetSession()->SendPacket(&data);
}
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
}
-void Unit::Unmount()
+void Unit::Dismount()
{
if (!IsMounted())
return;
@@ -11925,15 +11944,24 @@ void Unit::Unmount()
SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
+ if (Player* thisPlayer = ToPlayer())
+ {
+ WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
+ data.append(GetPackGUID());
+ data << uint32(sWorld->GetGameTime()); // Packet counter
+ data << thisPlayer->GetCollisionHeight(false);
+ thisPlayer->GetSession()->SendPacket(&data);
+ }
+
WorldPacket data(SMSG_DISMOUNT, 8);
data.appendPackGUID(GetGUID());
SendMessageToSet(&data, true);
- // unmount as a vehicle
+ // dismount as a vehicle
if (GetTypeId() == TYPEID_PLAYER && GetVehicleKit())
{
// Send other players that we are no longer a vehicle
- WorldPacket data(SMSG_PLAYER_VEHICLE_DATA, 8+4);
+ data.Initialize(SMSG_PLAYER_VEHICLE_DATA, 8+4);
data.appendPackGUID(GetGUID());
data << uint32(0);
ToPlayer()->SendMessageToSet(&data, true);
@@ -11946,15 +11974,15 @@ void Unit::Unmount()
// only resummon old pet if the player is already added to a map
// this prevents adding a pet to a not created map which would otherwise cause a crash
// (it could probably happen when logging in after a previous crash)
- if (Player* plr = ToPlayer())
+ if (Player* player = ToPlayer())
{
- if (Pet* pPet = plr->GetPet())
+ if (Pet* pPet = player->GetPet())
{
if (pPet->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && !pPet->HasUnitState(UNIT_STAT_STUNNED))
pPet->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
else
- plr->ResummonPetTemporaryUnSummonedIfAny();
+ player->ResummonPetTemporaryUnSummonedIfAny();
}
}
@@ -12051,7 +12079,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy)
}
if (!(creature->GetCreatureInfo()->type_flags & CREATURE_TYPEFLAGS_MOUNTED_COMBAT))
- Unmount();
+ Dismount();
}
for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
@@ -12384,9 +12412,18 @@ int32 Unit::ModifyPower(Powers power, int32 dVal)
return gain;
}
-bool Unit::isAlwaysVisibleFor(WorldObject const* seer) const
+// returns negative amount on power reduction
+int32 Unit::ModifyPowerPct(Powers power, float pct, bool apply)
{
- if (WorldObject::isAlwaysVisibleFor(seer))
+ float amount = (float)GetMaxPower(power);
+ ApplyPercentModFloatVar(amount, pct, apply);
+
+ return ModifyPower(power, (int32)amount - (int32)GetMaxPower(power));
+}
+
+bool Unit::IsAlwaysVisibleFor(WorldObject const* seer) const
+{
+ if (WorldObject::IsAlwaysVisibleFor(seer))
return true;
// Always seen by owner
@@ -12397,9 +12434,9 @@ bool Unit::isAlwaysVisibleFor(WorldObject const* seer) const
return false;
}
-bool Unit::isAlwaysDetectableFor(WorldObject const* seer) const
+bool Unit::IsAlwaysDetectableFor(WorldObject const* seer) const
{
- if (WorldObject::isAlwaysDetectableFor(seer))
+ if (WorldObject::IsAlwaysDetectableFor(seer))
return true;
if (HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, seer->GetGUID()))
@@ -12707,6 +12744,10 @@ void Unit::setDeathState(DeathState s)
// do not why since in IncreaseMaxHealth currenthealth is checked
SetHealth(0);
SetPower(getPowerType(), 0);
+
+ // players in instance don't have ZoneScript, but they have InstanceScript
+ if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : (ZoneScript*)GetInstanceScript())
+ zoneScript->OnUnitDeath(this);
}
else if (s == JUST_ALIVED)
RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
@@ -12930,7 +12971,7 @@ Unit* Creature::SelectVictim()
// last case when creature must not go to evade mode:
// it in combat but attacker not make any damage and not enter to aggro radius to have record in threat list
// for example at owner command to pet attack some far away creature
- // Note: creature not have targeted movement generator but have attacker in this case
+ // Note: creature does not have targeted movement generator but has attacker in this case
for (AttackerSet::const_iterator itr = m_attackers.begin(); itr != m_attackers.end(); ++itr)
{
if ((*itr) && !canCreatureAttack(*itr) && (*itr)->GetTypeId() != TYPEID_PLAYER
@@ -13019,16 +13060,16 @@ int32 Unit::CalcSpellDuration(SpellInfo const* spellProto)
return duration;
}
-int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, int32 duration, bool positive)
+int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, int32 duration, bool positive, uint32 effectMask)
{
- // don't mod permament auras duration
+ // don't mod permanent auras duration
if (duration < 0)
return duration;
// cut duration only of negative effects
if (!positive)
{
- int32 mechanic = spellProto->GetAllEffectsMechanicMask();
+ int32 mechanic = spellProto->GetSpellMechanicMaskByEffectMask(effectMask);
int32 durationMod;
int32 durationMod_always = 0;
@@ -13316,7 +13357,7 @@ bool Unit::HandleStatModifier(UnitMods unitMod, UnitModifierType modifierType, f
{
if (unitMod >= UNIT_MOD_END || modifierType >= MODIFIER_TYPE_END)
{
- sLog->outError("ERROR in HandleStatModifier(): non existed UnitMods or wrong UnitModifierType!");
+ sLog->outError("ERROR in HandleStatModifier(): non-existing UnitMods or wrong UnitModifierType!");
return false;
}
@@ -13381,7 +13422,7 @@ float Unit::GetModifierValue(UnitMods unitMod, UnitModifierType modifierType) co
{
if (unitMod >= UNIT_MOD_END || modifierType >= MODIFIER_TYPE_END)
{
- sLog->outError("trial to access non existed modifier value from UnitMods!");
+ sLog->outError("attempt to access non-existing modifier value from UnitMods!");
return 0.0f;
}
@@ -13411,7 +13452,7 @@ float Unit::GetTotalAuraModValue(UnitMods unitMod) const
{
if (unitMod >= UNIT_MOD_END)
{
- sLog->outError("trial to access non existed UnitMods in GetTotalAuraModValue()!");
+ sLog->outError("attempt to access non-existing UnitMods in GetTotalAuraModValue()!");
return 0.0f;
}
@@ -13531,10 +13572,10 @@ void Unit::SetHealth(uint32 val)
SetUInt32Value(UNIT_FIELD_HEALTH, val);
// group update
- if (Player* plr = ToPlayer())
+ if (Player* player = ToPlayer())
{
- if (plr->GetGroup())
- plr->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_CUR_HP);
+ if (player->GetGroup())
+ player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_CUR_HP);
}
else if (Pet* pet = ToCreature()->ToPet())
{
@@ -13640,7 +13681,7 @@ void Unit::SetMaxPower(Powers power, uint32 val)
uint32 Unit::GetCreatePowers(Powers power) const
{
- // POWER_FOCUS and POWER_HAPPINESS only have hunter pet
+ // Only hunter pets have POWER_FOCUS and POWER_HAPPINESS
switch (power)
{
case POWER_MANA: return GetCreateMana();
@@ -14068,12 +14109,12 @@ bool InitTriggerAuraData()
isTriggerAura[SPELL_AURA_DUMMY] = true;
isTriggerAura[SPELL_AURA_MOD_CONFUSE] = true;
isTriggerAura[SPELL_AURA_MOD_THREAT] = true;
- isTriggerAura[SPELL_AURA_MOD_STUN] = true; // Aura not have charges but need remove him on trigger
+ isTriggerAura[SPELL_AURA_MOD_STUN] = true; // Aura does not have charges but needs to be removed on trigger
isTriggerAura[SPELL_AURA_MOD_DAMAGE_DONE] = true;
isTriggerAura[SPELL_AURA_MOD_DAMAGE_TAKEN] = true;
isTriggerAura[SPELL_AURA_MOD_RESISTANCE] = true;
isTriggerAura[SPELL_AURA_MOD_STEALTH] = true;
- isTriggerAura[SPELL_AURA_MOD_FEAR] = true; // Aura not have charges but need remove him on trigger
+ isTriggerAura[SPELL_AURA_MOD_FEAR] = true; // Aura does not have charges but needs to be removed on trigger
isTriggerAura[SPELL_AURA_MOD_ROOT] = true;
isTriggerAura[SPELL_AURA_TRANSFORM] = true;
isTriggerAura[SPELL_AURA_REFLECT_SPELLS] = true;
@@ -14270,6 +14311,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
if (procTriggered.empty())
return;
+ // Note: must SetCantProc(false) before return
if (procExtra & (PROC_EX_INTERNAL_TRIGGERED | PROC_EX_INTERNAL_CANT_PROC))
SetCantProc(true);
@@ -14294,6 +14336,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
if (GetTypeId() == TYPEID_PLAYER && i->spellProcEvent && i->spellProcEvent->cooldown)
cooldown = i->spellProcEvent->cooldown;
+ // Note: must SetCantProc(false) before return
if (spellInfo->AttributesEx3 & SPELL_ATTR3_DISABLE_PROC)
SetCantProc(true);
@@ -14306,172 +14349,179 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
}
if (!handled)
- for (uint8 effIndex = 0; effIndex<MAX_SPELL_EFFECTS; ++effIndex)
{
- if (!(i->effMask & (1<<effIndex)))
- continue;
-
- AuraEffect* triggeredByAura = i->aura->GetEffect(effIndex);
- ASSERT(triggeredByAura);
-
- switch (triggeredByAura->GetAuraType())
+ for (uint8 effIndex = 0; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
{
- case SPELL_AURA_PROC_TRIGGER_SPELL:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- // Don`t drop charge or add cooldown for not started trigger
- if (HandleProcTriggerSpell(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
- takeCharges = true;
- break;
- }
- case SPELL_AURA_PROC_TRIGGER_DAMAGE:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: doing %u damage from spell id %u (triggered by %s aura of spell %u)", triggeredByAura->GetAmount(), spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- SpellNonMeleeDamage damageInfo(this, target, spellInfo->Id, spellInfo->SchoolMask);
- uint32 damage = SpellDamageBonus(target, spellInfo, triggeredByAura->GetAmount(), SPELL_DIRECT_DAMAGE);
- CalculateSpellDamageTaken(&damageInfo, damage, spellInfo);
- DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
- SendSpellNonMeleeDamageLog(&damageInfo);
- DealSpellDamage(&damageInfo, true);
- takeCharges = true;
- break;
- }
- case SPELL_AURA_MANA_SHIELD:
- case SPELL_AURA_DUMMY:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s dummy aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- if (HandleDummyAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
- takeCharges = true;
- break;
- }
- case SPELL_AURA_OBS_MOD_POWER:
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- if (HandleObsModEnergyAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
- takeCharges = true;
- break;
- case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN:
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- if (HandleModDamagePctTakenAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
- takeCharges = true;
- break;
- case SPELL_AURA_MOD_MELEE_HASTE:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s haste aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- if (HandleHasteAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
- takeCharges = true;
- break;
- }
- case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- if (HandleOverrideClassScriptAuraProc(target, damage, triggeredByAura, procSpell, cooldown))
- takeCharges = true;
- break;
- }
- case SPELL_AURA_RAID_PROC_FROM_CHARGE_WITH_VALUE:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting mending (triggered by %s dummy aura of spell %u)",
- (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (!(i->effMask & (1<<effIndex)))
+ continue;
- HandleAuraRaidProcFromChargeWithValue(triggeredByAura);
- takeCharges = true;
- break;
- }
- case SPELL_AURA_RAID_PROC_FROM_CHARGE:
- {
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting mending (triggered by %s dummy aura of spell %u)",
- (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ AuraEffect* triggeredByAura = i->aura->GetEffect(effIndex);
+ ASSERT(triggeredByAura);
- HandleAuraRaidProcFromCharge(triggeredByAura);
- takeCharges = true;
- break;
- }
- case SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE:
+ switch (triggeredByAura->GetAuraType())
{
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell %u (triggered with value by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ case SPELL_AURA_PROC_TRIGGER_SPELL:
+ {
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ // Don`t drop charge or add cooldown for not started trigger
+ if (HandleProcTriggerSpell(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ }
+ case SPELL_AURA_PROC_TRIGGER_DAMAGE:
+ {
+ // target has to be valid
+ if (!target)
+ break;
- if (HandleProcTriggerSpell(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
- takeCharges = true;
- break;
- }
- case SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK:
- // Skip melee hits or instant cast spells
- if (procSpell && procSpell->CalcCastTime() != 0)
- takeCharges = true;
- break;
- case SPELL_AURA_REFLECT_SPELLS_SCHOOL:
- // Skip Melee hits and spells ws wrong school
- if (procSpell && (triggeredByAura->GetMiscValue() & procSpell->SchoolMask)) // School check
- takeCharges = true;
- break;
- case SPELL_AURA_MOD_POWER_COST_SCHOOL_PCT:
- case SPELL_AURA_MOD_POWER_COST_SCHOOL:
- // Skip melee hits and spells ws wrong school or zero cost
- if (procSpell &&
- (procSpell->ManaCost != 0 || procSpell->ManaCostPercentage != 0) && // Cost check
- (triggeredByAura->GetMiscValue() & procSpell->SchoolMask)) // School check
- takeCharges = true;
- break;
- case SPELL_AURA_MECHANIC_IMMUNITY:
- // Compare mechanic
- if (procSpell && procSpell->Mechanic == uint32(triggeredByAura->GetMiscValue()))
- takeCharges = true;
- break;
- case SPELL_AURA_MOD_MECHANIC_RESISTANCE:
- // Compare mechanic
- if (procSpell && procSpell->Mechanic == uint32(triggeredByAura->GetMiscValue()))
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: doing %u damage from spell id %u (triggered by %s aura of spell %u)", triggeredByAura->GetAmount(), spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ SpellNonMeleeDamage damageInfo(this, target, spellInfo->Id, spellInfo->SchoolMask);
+ uint32 newDamage = SpellDamageBonus(target, spellInfo, triggeredByAura->GetAmount(), SPELL_DIRECT_DAMAGE);
+ CalculateSpellDamageTaken(&damageInfo, newDamage, spellInfo);
+ DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
+ SendSpellNonMeleeDamageLog(&damageInfo);
+ DealSpellDamage(&damageInfo, true);
takeCharges = true;
- break;
- case SPELL_AURA_MOD_DAMAGE_FROM_CASTER:
- // Compare casters
- if (triggeredByAura->GetCasterGUID() == target->GetGUID())
- takeCharges = true;
- break;
- case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s spell crit chance aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
- if (procSpell && HandleSpellCritChanceAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ break;
+ }
+ case SPELL_AURA_MANA_SHIELD:
+ case SPELL_AURA_DUMMY:
+ {
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s dummy aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (HandleDummyAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ }
+ case SPELL_AURA_OBS_MOD_POWER:
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (HandleObsModEnergyAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN:
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (HandleModDamagePctTakenAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MOD_MELEE_HASTE:
+ {
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s haste aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (HandleHasteAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ }
+ case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS:
+ {
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (HandleOverrideClassScriptAuraProc(target, damage, triggeredByAura, procSpell, cooldown))
+ takeCharges = true;
+ break;
+ }
+ case SPELL_AURA_RAID_PROC_FROM_CHARGE_WITH_VALUE:
+ {
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting mending (triggered by %s dummy aura of spell %u)",
+ (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+
+ HandleAuraRaidProcFromChargeWithValue(triggeredByAura);
takeCharges = true;
- break;
- // CC Auras which use their amount amount to drop
- // Are there any more auras which need this?
- case SPELL_AURA_MOD_CONFUSE:
- case SPELL_AURA_MOD_FEAR:
- case SPELL_AURA_MOD_STUN:
- case SPELL_AURA_MOD_ROOT:
- case SPELL_AURA_TRANSFORM:
- {
- // chargeable mods are breaking on hit
- if (useCharges)
+ break;
+ }
+ case SPELL_AURA_RAID_PROC_FROM_CHARGE:
+ {
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting mending (triggered by %s dummy aura of spell %u)",
+ (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+
+ HandleAuraRaidProcFromCharge(triggeredByAura);
takeCharges = true;
- else
+ break;
+ }
+ case SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE:
{
- // Spell own direct damage at apply wont break the CC
- if (procSpell && (procSpell->Id == triggeredByAura->GetId()))
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell %u (triggered with value by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+
+ if (HandleProcTriggerSpell(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ }
+ case SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK:
+ // Skip melee hits or instant cast spells
+ if (procSpell && procSpell->CalcCastTime() != 0)
+ takeCharges = true;
+ break;
+ case SPELL_AURA_REFLECT_SPELLS_SCHOOL:
+ // Skip Melee hits and spells ws wrong school
+ if (procSpell && (triggeredByAura->GetMiscValue() & procSpell->SchoolMask)) // School check
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MOD_POWER_COST_SCHOOL_PCT:
+ case SPELL_AURA_MOD_POWER_COST_SCHOOL:
+ // Skip melee hits and spells ws wrong school or zero cost
+ if (procSpell &&
+ (procSpell->ManaCost != 0 || procSpell->ManaCostPercentage != 0) && // Cost check
+ (triggeredByAura->GetMiscValue() & procSpell->SchoolMask)) // School check
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MECHANIC_IMMUNITY:
+ // Compare mechanic
+ if (procSpell && procSpell->Mechanic == uint32(triggeredByAura->GetMiscValue()))
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MOD_MECHANIC_RESISTANCE:
+ // Compare mechanic
+ if (procSpell && procSpell->Mechanic == uint32(triggeredByAura->GetMiscValue()))
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MOD_DAMAGE_FROM_CASTER:
+ // Compare casters
+ if (triggeredByAura->GetCasterGUID() == target->GetGUID())
+ takeCharges = true;
+ break;
+ case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s spell crit chance aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId());
+ if (procSpell && HandleSpellCritChanceAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown))
+ takeCharges = true;
+ break;
+ // CC Auras which use their amount amount to drop
+ // Are there any more auras which need this?
+ case SPELL_AURA_MOD_CONFUSE:
+ case SPELL_AURA_MOD_FEAR:
+ case SPELL_AURA_MOD_STUN:
+ case SPELL_AURA_MOD_ROOT:
+ case SPELL_AURA_TRANSFORM:
+ {
+ // chargeable mods are breaking on hit
+ if (useCharges)
+ takeCharges = true;
+ else
{
- Aura* aura = triggeredByAura->GetBase();
- // called from spellcast, should not have ticked yet
- if (aura->GetDuration() == aura->GetMaxDuration())
- break;
+ // Spell own direct damage at apply wont break the CC
+ if (procSpell && (procSpell->Id == triggeredByAura->GetId()))
+ {
+ Aura* aura = triggeredByAura->GetBase();
+ // called from spellcast, should not have ticked yet
+ if (aura->GetDuration() == aura->GetMaxDuration())
+ break;
+ }
+ int32 damageLeft = triggeredByAura->GetAmount();
+ // No damage left
+ if (damageLeft < int32(damage))
+ i->aura->Remove();
+ else
+ triggeredByAura->SetAmount(damageLeft - damage);
}
- int32 damageLeft = triggeredByAura->GetAmount();
- // No damage left
- if (damageLeft < int32(damage))
- i->aura->Remove();
- else
- triggeredByAura->SetAmount(damageLeft - damage);
+ break;
}
- break;
- }
- //case SPELL_AURA_ADD_FLAT_MODIFIER:
- //case SPELL_AURA_ADD_PCT_MODIFIER:
- // HandleSpellModAuraProc
- //break;
- default:
- // nothing do, just charges counter
- takeCharges = true;
- break;
- }
- }
+ //case SPELL_AURA_ADD_FLAT_MODIFIER:
+ //case SPELL_AURA_ADD_PCT_MODIFIER:
+ // HandleSpellModAuraProc
+ //break;
+ default:
+ // nothing do, just charges counter
+ takeCharges = true;
+ break;
+ } // switch (triggeredByAura->GetAuraType())
+ } // for (uint8 effIndex = 0; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
+ } // if (!handled)
+
// Remove charge (aura can be removed by triggers)
if (useCharges && takeCharges)
i->aura->DropCharge(AURA_REMOVE_BY_EXPIRE);
@@ -14743,9 +14793,9 @@ void Unit::ClearComboPointHolders()
{
uint32 lowguid = *m_ComboPointHolders.begin();
- Player* plr = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(lowguid, 0, HIGHGUID_PLAYER));
- if (plr && plr->GetComboTarget() == GetGUID()) // recheck for safe
- plr->ClearComboPoints(); // remove also guid from m_ComboPointHolders;
+ Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(lowguid, 0, HIGHGUID_PLAYER));
+ if (player && player->GetComboTarget() == GetGUID()) // recheck for safe
+ player->ClearComboPoints(); // remove also guid from m_ComboPointHolders;
else
m_ComboPointHolders.erase(lowguid); // or remove manually
}
@@ -15273,7 +15323,7 @@ bool Unit::HandleAuraRaidProcFromCharge(AuraEffect* triggeredByAura)
damageSpellId = 43594;
break;
default:
- sLog->outError("Unit::HandleAuraRaidProcFromCharge, received not handled spell: %u", spellProto->Id);
+ sLog->outError("Unit::HandleAuraRaidProcFromCharge, received unhandled spell: %u", spellProto->Id);
return false;
}
@@ -15312,9 +15362,9 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
return;
// Inform pets (if any) when player kills target)
- if (Player* plr = ToPlayer())
+ if (Player* player = ToPlayer())
{
- Pet* pet = plr->GetPet();
+ Pet* pet = player->GetPet();
if (pet && pet->isAlive() && pet->isControlled())
pet->AI()->KilledUnit(victim);
}
@@ -15559,29 +15609,17 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
}
// Hook for OnPVPKill Event
- if (GetTypeId() == TYPEID_PLAYER)
+ if (Player* killerPlr = ToPlayer())
{
- if (victim->GetTypeId() == TYPEID_PLAYER)
- {
- Player* killer = ToPlayer();
- Player* killed = victim->ToPlayer();
- sScriptMgr->OnPVPKill(killer, killed);
- }
- else if (victim->GetTypeId() == TYPEID_UNIT)
- {
- Player* killer = ToPlayer();
- Creature* killed = victim->ToCreature();
- sScriptMgr->OnCreatureKill(killer, killed);
- }
+ if (Player* killedPlr = victim->ToPlayer())
+ sScriptMgr->OnPVPKill(killerPlr, killedPlr);
+ else if (Creature* killedCre = victim->ToCreature())
+ sScriptMgr->OnCreatureKill(killerPlr, killedCre);
}
- else if (GetTypeId() == TYPEID_UNIT)
+ else if (Creature* killerCre = ToCreature())
{
- if (victim->GetTypeId() == TYPEID_PLAYER)
- {
- Creature* killer = ToCreature();
- Player* killed = victim->ToPlayer();
- sScriptMgr->OnPlayerKilledByCreature(killer, killed);
- }
+ if (Player* killed = victim->ToPlayer())
+ sScriptMgr->OnPlayerKilledByCreature(killerCre, killed);
}
if (victim->GetVehicle())
@@ -15609,6 +15647,9 @@ void Unit::SetControlled(bool apply, UnitState state)
case UNIT_STAT_CONFUSED:
if (!HasUnitState(UNIT_STAT_STUNNED))
{
+ ClearUnitState(UNIT_STAT_MELEE_ATTACKING);
+ SendMeleeAttackStop();
+ // SendAutoRepeatCancel ?
SetConfused(true);
CastStop();
}
@@ -15616,6 +15657,9 @@ void Unit::SetControlled(bool apply, UnitState state)
case UNIT_STAT_FLEEING:
if (!HasUnitState(UNIT_STAT_STUNNED | UNIT_STAT_CONFUSED))
{
+ ClearUnitState(UNIT_STAT_MELEE_ATTACKING);
+ SendMeleeAttackStop();
+ // SendAutoRepeatCancel ?
SetFeared(true);
CastStop();
}
@@ -15692,7 +15736,7 @@ void Unit::SetStunned(bool apply)
if (!owner || (owner->GetTypeId() == TYPEID_PLAYER && !owner->ToPlayer()->IsMounted()))
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
- if (!HasUnitState(UNIT_STAT_ROOT)) // prevent allow move if have also root effect
+ if (!HasUnitState(UNIT_STAT_ROOT)) // prevent moving if it also has root effect
{
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 8+4);
data.append(GetPackGUID());
@@ -15734,7 +15778,7 @@ void Unit::SetRooted(bool apply)
}
else
{
- if (!HasUnitState(UNIT_STAT_STUNNED)) // prevent allow move if have also stun effect
+ if (!HasUnitState(UNIT_STAT_STUNNED)) // prevent moving if it also has stun effect
{
if (GetTypeId() == TYPEID_PLAYER)
{
@@ -15811,9 +15855,9 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
if (!charmer)
return false;
- // unmount players when charmed
+ // dismount players when charmed
if (GetTypeId() == TYPEID_PLAYER)
- Unmount();
+ Dismount();
ASSERT(type != CHARM_TYPE_POSSESS || charmer->GetTypeId() == TYPEID_PLAYER);
ASSERT((type == CHARM_TYPE_VEHICLE) == IsVehicle());
@@ -15886,10 +15930,10 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
}
else
{
- Player* plr = ToPlayer();
- if (plr->isAFK())
- plr->ToggleAFK();
- plr->SetClientControl(this, 0);
+ Player* player = ToPlayer();
+ if (player->isAFK())
+ player->ToggleAFK();
+ player->SetClientControl(this, 0);
}
// charm is set by aura, and aura effect remove handler was called during apply handler execution
@@ -16533,10 +16577,9 @@ float Unit::GetCombatRatingReduction(CombatRating cr) const
if (Player const* player = ToPlayer())
return player->GetRatingBonusValue(cr);
// Player's pet get resilience from owner
- else if (isPet())
- if (Unit* owner = GetOwner())
- if (Player* player = owner->ToPlayer())
- return player->GetRatingBonusValue(cr);
+ else if (isPet() && GetOwner())
+ if (Player* owner = GetOwner()->ToPlayer())
+ return owner->GetRatingBonusValue(cr);
return 0.0f;
}
@@ -16952,25 +16995,25 @@ void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* a
if (aurApp && aurApp->GetRemoveMode())
return;
- if (Player* plr = ToPlayer())
+ if (Player* player = ToPlayer())
{
- if (vehicle->GetBase()->GetTypeId() == TYPEID_PLAYER && plr->isInCombat())
+ if (vehicle->GetBase()->GetTypeId() == TYPEID_PLAYER && player->isInCombat())
return;
InterruptNonMeleeSpells(false);
- plr->StopCastingCharm();
- plr->StopCastingBindSight();
- Unmount();
+ player->StopCastingCharm();
+ player->StopCastingBindSight();
+ Dismount();
RemoveAurasByType(SPELL_AURA_MOUNTED);
// drop flag at invisible in bg
- if (Battleground* bg = plr->GetBattleground())
- bg->EventPlayerDroppedFlag(plr);
+ if (Battleground* bg = player->GetBattleground())
+ bg->EventPlayerDroppedFlag(player);
WorldPacket data(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
- plr->UnsummonPetTemporaryIfAny();
+ player->UnsummonPetTemporaryIfAny();
}
ASSERT(!m_vehicle);
@@ -17044,8 +17087,8 @@ void Unit::_ExitVehicle(Position const* exitPosition)
SendMonsterMoveExitVehicle(&pos);
Relocate(&pos);
- if (Player* plr = ToPlayer())
- plr->ResummonPetTemporaryUnSummonedIfAny();
+ if (Player* player = ToPlayer())
+ player->ResummonPetTemporaryUnSummonedIfAny();
WorldPacket data2;
BuildHeartBeatMsg(&data2);
@@ -17060,7 +17103,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
// Vehicle just died, we die too
if (vehicle->GetBase()->getDeathState() == JUST_DIED)
setDeathState(JUST_DIED);
- // If for other reason we as minion are exiting the vehicle (ejected, master unmounted) - unsummon
+ // If for other reason we as minion are exiting the vehicle (ejected, master dismounted) - unsummon
else
ToTempSummon()->UnSummon(2000); // Approximation
}
@@ -17360,7 +17403,7 @@ uint32 Unit::GetRemainingPeriodicAmount(uint64 caster, uint32 spellId, AuraType
AuraEffectList const& periodicAuras = GetAuraEffectsByType(auraType);
for (AuraEffectList::const_iterator i = periodicAuras.begin(); i != periodicAuras.end(); ++i)
{
- if ((*i)->GetCasterGUID() != caster || (*i)->GetId() != spellId || (*i)->GetEffIndex() != effectIndex || (*i)->GetTotalTicks() == 0)
+ if ((*i)->GetCasterGUID() != caster || (*i)->GetId() != spellId || (*i)->GetEffIndex() != effectIndex || !(*i)->GetTotalTicks())
continue;
amount += uint32(((*i)->GetAmount() * std::max<int32>((*i)->GetTotalTicks() - int32((*i)->GetTickNumber()), 0)) / (*i)->GetTotalTicks());
break;
@@ -17376,6 +17419,17 @@ void Unit::SendClearTarget()
SendMessageToSet(&data, false);
}
+uint32 Unit::GetResistance(SpellSchoolMask mask) const
+{
+ int32 resist = -1;
+ for (int i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
+ if (mask & (1 << i) && (resist < 0 || resist > int32(GetResistance(SpellSchools(i)))))
+ resist = int32(GetResistance(SpellSchools(i)));
+
+ // resist value will never be negative here
+ return uint32(resist);
+}
+
void CharmInfo::SetIsCommandAttack(bool val)
{
m_isCommandAttack = val;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 236f183e3b9..5a6b34bc380 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -44,8 +44,8 @@ enum SpellInterruptFlags
{
SPELL_INTERRUPT_FLAG_MOVEMENT = 0x01, // why need this for instant?
SPELL_INTERRUPT_FLAG_PUSH_BACK = 0x02, // push back
- SPELL_INTERRUPT_FLAG_INTERRUPT = 0x04, // interrupt
- SPELL_INTERRUPT_FLAG_AUTOATTACK = 0x08, // enter combat
+ SPELL_INTERRUPT_FLAG_UNK3 = 0x04, // any info?
+ SPELL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt
SPELL_INTERRUPT_FLAG_ABORT_ON_DMG = 0x10, // _complete_ interrupt on direct damage
//SPELL_INTERRUPT_UNK = 0x20 // unk, 564 of 727 spells having this spell start with "Glyph"
};
@@ -53,7 +53,8 @@ enum SpellInterruptFlags
// See SpellAuraInterruptFlags for other values definitions
enum SpellChannelInterruptFlags
{
- CHANNEL_FLAG_DELAY = 0x4000
+ CHANNEL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt
+ CHANNEL_FLAG_DELAY = 0x4000
};
enum SpellAuraInterruptFlags
@@ -64,7 +65,7 @@ enum SpellAuraInterruptFlags
AURA_INTERRUPT_FLAG_MOVE = 0x00000008, // 3 removed by any movement
AURA_INTERRUPT_FLAG_TURNING = 0x00000010, // 4 removed by any turning
AURA_INTERRUPT_FLAG_JUMP = 0x00000020, // 5 removed by entering combat
- AURA_INTERRUPT_FLAG_NOT_MOUNTED = 0x00000040, // 6 removed by unmounting
+ AURA_INTERRUPT_FLAG_NOT_MOUNTED = 0x00000040, // 6 removed by dismounting
AURA_INTERRUPT_FLAG_NOT_ABOVEWATER = 0x00000080, // 7 removed by entering water
AURA_INTERRUPT_FLAG_NOT_UNDERWATER = 0x00000100, // 8 removed by leaving water
AURA_INTERRUPT_FLAG_NOT_SHEATHED = 0x00000200, // 9 removed by unsheathing
@@ -1007,8 +1008,8 @@ enum CurrentSpellTypes
{
CURRENT_MELEE_SPELL = 0,
CURRENT_GENERIC_SPELL = 1,
- CURRENT_AUTOREPEAT_SPELL = 2,
- CURRENT_CHANNELED_SPELL = 3
+ CURRENT_CHANNELED_SPELL = 2,
+ CURRENT_AUTOREPEAT_SPELL = 3
};
#define CURRENT_FIRST_NON_MELEE_SPELL 1
@@ -1208,6 +1209,8 @@ enum ReactiveType
#define SUMMON_SLOT_QUEST 6
#define MAX_SUMMON_SLOT 7
+#define MAX_GAMEOBJECT_SLOT 4
+
enum PlayerTotemType
{
SUMMON_TYPE_TOTEM_FIRE = 63,
@@ -1307,7 +1310,7 @@ class Unit : public WorldObject
void CombatStopWithPets(bool includingCast = false);
void StopAttackFaction(uint32 faction_id);
Unit* SelectNearbyTarget(float dist = NOMINAL_MELEE_RANGE) const;
- void SendMeleeAttackStop(Unit* victim);
+ void SendMeleeAttackStop(Unit* victim = NULL);
void SendMeleeAttackStart(Unit* pVictim);
void AddUnitState(uint32 f) { m_state |= f; }
@@ -1343,6 +1346,7 @@ class Unit : public WorldObject
void SetArmor(int32 val) { SetResistance(SPELL_SCHOOL_NORMAL, val); }
uint32 GetResistance(SpellSchools school) const { return GetUInt32Value(UNIT_FIELD_RESISTANCES+school); }
+ uint32 GetResistance(SpellSchoolMask mask) const;
void SetResistance(SpellSchools school, int32 val) { SetStatInt32Value(UNIT_FIELD_RESISTANCES+school, val); }
uint32 GetHealth() const { return GetUInt32Value(UNIT_FIELD_HEALTH); }
@@ -1371,6 +1375,7 @@ class Unit : public WorldObject
void SetMaxPower(Powers power, uint32 val);
// returns the change in power
int32 ModifyPower(Powers power, int32 val);
+ int32 ModifyPowerPct(Powers power, float pct, bool apply = true);
uint32 GetAttackTime(WeaponAttackType att) const
{
@@ -1436,7 +1441,7 @@ class Unit : public WorldObject
bool IsMounted() const { return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT); }
uint32 GetMountID() const { return GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID); }
void Mount(uint32 mount, uint32 vehicleId = 0, uint32 creatureEntry = 0);
- void Unmount();
+ void Dismount();
uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; }
void DealDamageMods(Unit* pVictim, uint32 &damage, uint32* absorb);
@@ -1502,6 +1507,20 @@ class Unit : public WorldObject
}
virtual uint32 GetShieldBlockValue() const =0;
+ uint32 GetShieldBlockValue(uint32 soft_cap, uint32 hard_cap) const
+ {
+ uint32 value = GetShieldBlockValue();
+ if (value >= hard_cap)
+ {
+ value = (soft_cap + hard_cap) / 2;
+ }
+ else if (value > soft_cap)
+ {
+ value = soft_cap + ((value - soft_cap) / 2);
+ }
+
+ return value;
+ }
uint32 GetUnitMeleeSkill(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; }
uint32 GetDefenseSkillValue(Unit const* target = NULL) const;
uint32 GetWeaponSkillValue(WeaponAttackType attType, Unit const* target = NULL) const;
@@ -1712,8 +1731,8 @@ class Unit : public WorldObject
//Player* GetMoverSource() const;
Player* m_movedPlayer;
SharedVisionList const& GetSharedVisionList() { return m_sharedVision; }
- void AddPlayerToVision(Player* plr);
- void RemovePlayerFromVision(Player* plr);
+ void AddPlayerToVision(Player* player);
+ void RemovePlayerFromVision(Player* player);
bool HasSharedVision() const { return !m_sharedVision.empty(); }
void RemoveBindSightAuras();
void RemoveCharmAuras();
@@ -1740,7 +1759,7 @@ class Unit : public WorldObject
AuraMap const& GetOwnedAuras() const { return m_ownedAuras; }
void RemoveOwnedAura(AuraMap::iterator &i, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
- void RemoveOwnedAura(uint32 spellId, uint64 caster = 0, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
+ void RemoveOwnedAura(uint32 spellId, uint64 casterGUID = 0, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
void RemoveOwnedAura(Aura* aura, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
Aura* GetOwnedAura(uint32 spellId, uint64 casterGUID = 0, uint64 itemCasterGUID = 0, uint8 reqEffMask = 0, Aura* except = NULL) const;
@@ -1750,12 +1769,12 @@ class Unit : public WorldObject
AuraApplicationMap const& GetAppliedAuras() const { return m_appliedAuras; }
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
- void RemoveAura(uint32 spellId, uint64 caster = 0, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
+ void RemoveAura(uint32 spellId, uint64 casterGUID = 0, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
void RemoveAura(AuraApplication * aurApp, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
void RemoveAura(Aura* aur, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
- void RemoveAurasDueToSpell(uint32 spellId, uint64 caster = 0, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
- void RemoveAuraFromStack(uint32 spellId, uint64 caster = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
+ void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID = 0, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
+ void RemoveAuraFromStack(uint32 spellId, uint64 casterGUID = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
void RemoveAurasDueToSpellByDispel(uint32 spellId, uint64 casterGUID, Unit* dispeller, uint8 chargesRemoved = 1);
void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit* stealer);
void RemoveAurasDueToItemSpell(Item* castItem, uint32 spellId);
@@ -1876,7 +1895,7 @@ class Unit : public WorldObject
uint32 m_addDmgOnce;
uint64 m_SummonSlot[MAX_SUMMON_SLOT];
- uint64 m_ObjectSlot[4];
+ uint64 m_ObjectSlot[MAX_GAMEOBJECT_SLOT];
ShapeshiftForm GetShapeshiftForm() const { return ShapeshiftForm(GetByteValue(UNIT_FIELD_BYTES_2, 3)); }
void SetShapeshiftForm(ShapeshiftForm form)
@@ -1945,9 +1964,6 @@ class Unit : public WorldObject
void SetVisible(bool x);
// common function for visibility checks for player/creatures with detection code
-
- bool isValid() const { return WorldObject::isValid(); }
-
void SetPhaseMask(uint32 newPhaseMask, bool update);// overwrite WorldObject::SetPhaseMask
void UpdateObjectVisibility(bool forced = true);
@@ -2056,7 +2072,7 @@ class Unit : public WorldObject
float ApplyEffectModifiers(SpellInfo const* spellProto, uint8 effect_index, float value) const;
int32 CalculateSpellDamage(Unit const* target, SpellInfo const* spellProto, uint8 effect_index, int32 const* basePoints = NULL) const;
int32 CalcSpellDuration(SpellInfo const* spellProto);
- int32 ModSpellDuration(SpellInfo const* spellProto, Unit const* target, int32 duration, bool positive);
+ int32 ModSpellDuration(SpellInfo const* spellProto, Unit const* target, int32 duration, bool positive, uint32 effectMask);
void ModSpellCastTime(SpellInfo const* spellProto, int32 & castTime, Spell* spell=NULL);
float CalculateLevelPenalty(SpellInfo const* spellProto) const;
@@ -2217,7 +2233,7 @@ class Unit : public WorldObject
}
protected:
- explicit Unit ();
+ explicit Unit (bool isWorldObject);
UnitAI* i_AI, *i_disabledAI;
@@ -2285,12 +2301,8 @@ class Unit : public WorldObject
uint32 m_unitTypeMask;
- bool isAlwaysVisibleFor(WorldObject const* seer) const;
- bool canSeeAlways(WorldObject const* obj) const { return WorldObject::canSeeAlways(obj); }
-
- bool isVisibleForInState(WorldObject const* seer) const { return WorldObject::isVisibleForInState(seer); };
-
- bool isAlwaysDetectableFor(WorldObject const* seer) const;
+ bool IsAlwaysVisibleFor(WorldObject const* seer) const;
+ bool IsAlwaysDetectableFor(WorldObject const* seer) const;
private:
bool IsTriggeredAtSpellProcEvent(Unit* pVictim, Aura* aura, SpellInfo const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const* & spellProcEvent);
bool HandleDummyAuraProc(Unit* pVictim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 107e275d47b..7e4bebaab95 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -172,8 +172,12 @@ void Vehicle::ApplyAllImmunities()
// Different immunities for vehicles goes below
switch (GetVehicleInfo()->m_ID)
{
- case 160:
+ // code below prevents a bug with movable cannons
+ case 160: // Strand of the Ancients
+ case 244: // Wintergrasp
+ case 510: // Isle of Conquest
_me->SetControlled(true, UNIT_STAT_ROOT);
+ // why we need to apply this? we can simple add immunities to slow mechanic in DB
_me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_DECREASE_SPEED, true);
break;
default:
@@ -337,7 +341,7 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId)
}
}
- if (seat->second.SeatInfo->m_flags && !(seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_UNK11))
+ if (seat->second.SeatInfo->m_flags && !(seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_UNK1))
unit->AddUnitState(UNIT_STAT_ONVEHICLE);
unit->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 51ad500572b..213be5a21fe 100755
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index 4d46ce956de..2b1d27243a8 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index cb42b898406..e1900c6c994 100755
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
#include "GossipDef.h"
#include "Player.h"
#include "BattlegroundMgr.h"
+#include "UnitAI.h"
+#include "GameObjectAI.h"
bool GameEventMgr::CheckOneGameEvent(uint16 entry) const
{
@@ -757,6 +759,47 @@ void GameEventMgr::LoadFromDB()
}
}
+ sLog->outString("Loading Game Event Seasonal Quest Relations...");
+ {
+ uint32 oldMSTime = getMSTime();
+
+ // 0 1
+ QueryResult result = WorldDatabase.Query("SELECT quest, event FROM game_event_seasonal_questrelation");
+
+ if (!result)
+ {
+ sLog->outString(">> Loaded 0 seasonal quests additions in game events. DB table `game_event_seasonal_questrelation` is empty.");
+ sLog->outString();
+ }
+ else
+ {
+ uint32 count = 0;
+ do
+ {
+ Field* fields = result->Fetch();
+
+ uint32 quest = fields[0].GetUInt32();
+ uint16 event_id = fields[1].GetUInt16();
+
+ if (event_id >= mGameEvent.size())
+ {
+ sLog->outErrorDb("`game_event_seasonal_questrelation` event id (%u) is out of range compared to max event in `game_event`", event_id);
+ continue;
+ }
+
+ Quest * qInfo = sObjectMgr->GetQuestTemplate(quest);
+ if (qInfo)
+ qInfo->SetSeasonalQuestEvent(event_id);
+
+ ++count;
+ }
+ while (result->NextRow());
+
+ sLog->outString(">> Loaded %u quests additions in game events in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ sLog->outString();
+ }
+ }
+
sLog->outString("Loading Game Event Vendor Additions Data...");
{
uint32 oldMSTime = getMSTime();
@@ -1059,6 +1102,8 @@ uint32 GameEventMgr::Update() // return the next e
void GameEventMgr::UnApplyEvent(uint16 event_id)
{
sLog->outDetail("GameEvent %u \"%s\" removed.", event_id, mGameEvent[event_id].description.c_str());
+ //! Run SAI scripts with SMART_EVENT_GAME_EVENT_END
+ RunSmartAIScripts(event_id, false);
// un-spawn positive event tagged objects
GameEventUnspawn(event_id);
// spawn negative event tagget objects
@@ -1075,6 +1120,8 @@ void GameEventMgr::UnApplyEvent(uint16 event_id)
UpdateEventNPCVendor(event_id, false);
// update bg holiday
UpdateBattlegroundSettings();
+ // check for seasonal quest reset.
+ sWorld->ResetEventSeasonalQuests(event_id);
}
void GameEventMgr::ApplyNewEvent(uint16 event_id)
@@ -1090,6 +1137,9 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id)
sLog->outDetail("GameEvent %u \"%s\" started.", event_id, mGameEvent[event_id].description.c_str());
+ //! Run SAI scripts with SMART_EVENT_GAME_EVENT_END
+ RunSmartAIScripts(event_id, true);
+
// spawn positive event tagget objects
GameEventSpawn(event_id);
// un-spawn negative event tagged objects
@@ -1170,16 +1220,14 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
sObjectMgr->AddCreatureToGrid(*itr, data);
// Spawn if necessary (loaded grids only)
- Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
+ Map* map = sMapMgr->CreateBaseMap(data->mapid);
// We use spawn coords to spawn
- if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY))
+ if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
{
Creature* creature = new Creature;
//sLog->outDebug("Spawning creature %u", *itr);
- if (!creature->LoadFromDB(*itr, map))
+ if (!creature->LoadCreatureFromDB(*itr, map))
delete creature;
- else
- map->AddToMap(creature);
}
}
}
@@ -1199,13 +1247,14 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
sObjectMgr->AddGameobjectToGrid(*itr, data);
// Spawn if necessary (loaded grids only)
// this base map checked as non-instanced and then only existed
- Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
+ Map* map = sMapMgr->CreateBaseMap(data->mapid);
// We use current coords to unspawn, not spawn coords since creature can have changed grid
- if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY))
+ if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
{
GameObject* pGameobject = new GameObject;
//sLog->outDebug("Spawning gameobject %u", *itr);
- if (!pGameobject->LoadFromDB(*itr, map))
+ //TODO: find out when it is add to map
+ if (!pGameobject->LoadGameObjectFromDB(*itr, map, false))
delete pGameobject;
else
{
@@ -1538,7 +1587,7 @@ void GameEventMgr::HandleQuestComplete(uint32 quest_id)
stmt->setUInt32(1, condition);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GAME_EVENT_CONDITION_SAVE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GAME_EVENT_CONDITION_SAVE);
stmt->setUInt8(0, uint8(event_id));
stmt->setUInt32(1, condition);
stmt->setFloat(2, citr->second.done);
@@ -1582,7 +1631,7 @@ void GameEventMgr::SaveWorldEventStateToDB(uint16 event_id)
stmt->setUInt8(0, uint8(event_id));
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GAME_EVENT_SAVE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GAME_EVENT_SAVE);
stmt->setUInt8(0, uint8(event_id));
stmt->setUInt8(1, mGameEvent[event_id].state);
stmt->setUInt32(2, mGameEvent[event_id].nextstart ? uint32(mGameEvent[event_id].nextstart) : 0);
@@ -1590,15 +1639,35 @@ void GameEventMgr::SaveWorldEventStateToDB(uint16 event_id)
CharacterDatabase.CommitTransaction(trans);
}
-void GameEventMgr::SendWorldStateUpdate(Player* plr, uint16 event_id)
+void GameEventMgr::SendWorldStateUpdate(Player* player, uint16 event_id)
{
GameEventConditionMap::const_iterator itr;
for (itr = mGameEvent[event_id].conditions.begin(); itr !=mGameEvent[event_id].conditions.end(); ++itr)
{
if (itr->second.done_world_state)
- plr->SendUpdateWorldState(itr->second.done_world_state, (uint32)(itr->second.done));
+ player->SendUpdateWorldState(itr->second.done_world_state, (uint32)(itr->second.done));
if (itr->second.max_world_state)
- plr->SendUpdateWorldState(itr->second.max_world_state, (uint32)(itr->second.reqNum));
+ player->SendUpdateWorldState(itr->second.max_world_state, (uint32)(itr->second.reqNum));
+ }
+}
+
+void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate)
+{
+ //! Iterate over every supported source type (creature and gameobject)
+ //! Not entirely sure how this will affect units in non-loaded grids.
+ {
+ TRINITY_READ_GUARD(HashMapHolder<Creature>::LockType, *HashMapHolder<Creature>::GetLock());
+ HashMapHolder<Creature>::MapType const& m = ObjectAccessor::GetCreatures();
+ for (HashMapHolder<Creature>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
+ if (iter->second->IsInWorld())
+ iter->second->AI()->sOnGameEvent(activate, event_id);
+ }
+ {
+ TRINITY_READ_GUARD(HashMapHolder<GameObject>::LockType, *HashMapHolder<GameObject>::GetLock());
+ HashMapHolder<GameObject>::MapType const& m = ObjectAccessor::GetGameObjects();
+ for (HashMapHolder<GameObject>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
+ if (iter->second->IsInWorld())
+ iter->second->AI()->OnGameEvent(activate, event_id);
}
}
diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h
index 7337110fd65..34258bac499 100755
--- a/src/server/game/Events/GameEventMgr.h
+++ b/src/server/game/Events/GameEventMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -115,11 +115,11 @@ class GameEventMgr
bool StartEvent(uint16 event_id, bool overwrite = false);
void StopEvent(uint16 event_id, bool overwrite = false);
void HandleQuestComplete(uint32 quest_id); // called on world event type quest completions
- void HandleWorldEventGossip(Player* plr, Creature* c);
+ void HandleWorldEventGossip(Player* player, Creature* c);
uint32 GetNPCFlag(Creature* cr);
uint32 GetNpcTextId(uint32 guid);
private:
- void SendWorldStateUpdate(Player* plr, uint16 event_id);
+ void SendWorldStateUpdate(Player* player, uint16 event_id);
void AddActiveEvent(uint16 event_id) { m_ActiveEvents.insert(event_id); }
void RemoveActiveEvent(uint16 event_id) { m_ActiveEvents.erase(event_id); }
void ApplyNewEvent(uint16 event_id);
@@ -132,6 +132,7 @@ class GameEventMgr
void UpdateEventNPCFlags(uint16 event_id);
void UpdateEventNPCVendor(uint16 event_id, bool activate);
void UpdateBattlegroundSettings();
+ void RunSmartAIScripts(uint16 event_id, bool activate); //! Runs SMART_EVENT_GAME_EVENT_START/_END SAI
bool CheckOneGameEventConditions(uint16 event_id);
void SaveWorldEventStateToDB(uint16 event_id);
bool hasCreatureQuestActiveEventExcept(uint32 quest_id, uint16 event_id);
diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp
index f98702d4393..1a069a27825 100755
--- a/src/server/game/Globals/ObjectAccessor.cpp
+++ b/src/server/game/Globals/ObjectAccessor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -165,9 +165,9 @@ Unit* ObjectAccessor::FindUnit(uint64 guid)
Player* ObjectAccessor::FindPlayerByName(const char* name)
{
- ACE_GUARD_RETURN(LockType, g, *HashMapHolder<Player>::GetLock(), NULL);
- HashMapHolder<Player>::MapType& m = HashMapHolder<Player>::GetContainer();
- for (HashMapHolder<Player>::MapType::iterator iter = m.begin(); iter != m.end(); ++iter)
+ TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ HashMapHolder<Player>::MapType const& m = GetPlayers();
+ for (HashMapHolder<Player>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
if (iter->second->IsInWorld() && strcmp(name, iter->second->GetName()) == 0)
return iter->second;
@@ -176,15 +176,15 @@ Player* ObjectAccessor::FindPlayerByName(const char* name)
void ObjectAccessor::SaveAllPlayers()
{
- ACE_GUARD(LockType, g, *HashMapHolder<Player>::GetLock());
- HashMapHolder<Player>::MapType& m = HashMapHolder<Player>::GetContainer();
- for (HashMapHolder<Player>::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ HashMapHolder<Player>::MapType const& m = GetPlayers();
+ for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
itr->second->SaveToDB();
}
Corpse* ObjectAccessor::GetCorpseForPlayerGUID(uint64 guid)
{
- ACE_GUARD_RETURN(LockType, guard, i_corpseGuard, NULL);
+ TRINITY_READ_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid);
if (iter == i_player2corpse.end())
@@ -199,27 +199,33 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
{
ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
+ //TODO: more works need to be done for corpse and other world object
if (Map* map = corpse->FindMap())
{
corpse->DestroyForNearbyPlayers();
- map->RemoveFromMap(corpse, false);
+ if (corpse->IsInGrid())
+ map->RemoveFromMap(corpse, false);
+ else
+ {
+ corpse->RemoveFromWorld();
+ corpse->ResetMap();
+ }
}
else
+
corpse->RemoveFromWorld();
// Critical section
{
- ACE_GUARD(LockType, g, i_corpseGuard);
+ TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID());
if (iter == i_player2corpse.end()) // TODO: Fix this
return;
// build mapid*cellid -> guid_set map
- CellPair cell_pair = Trinity::ComputeCellPair(corpse->GetPositionX(), corpse->GetPositionY());
- uint32 cell_id = (cell_pair.y_coord * TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cell_id, GUID_LOPART(corpse->GetOwnerGUID()));
+ CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
+ sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), GUID_LOPART(corpse->GetOwnerGUID()));
i_player2corpse.erase(iter);
}
@@ -231,26 +237,28 @@ void ObjectAccessor::AddCorpse(Corpse* corpse)
// Critical section
{
- ACE_GUARD(LockType, g, i_corpseGuard);
+ TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
ASSERT(i_player2corpse.find(corpse->GetOwnerGUID()) == i_player2corpse.end());
i_player2corpse[corpse->GetOwnerGUID()] = corpse;
// build mapid*cellid -> guid_set map
- CellPair cell_pair = Trinity::ComputeCellPair(corpse->GetPositionX(), corpse->GetPositionY());
- uint32 cell_id = (cell_pair.y_coord * TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- sObjectMgr->AddCorpseCellData(corpse->GetMapId(), cell_id, GUID_LOPART(corpse->GetOwnerGUID()), corpse->GetInstanceId());
+ CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
+ sObjectMgr->AddCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), GUID_LOPART(corpse->GetOwnerGUID()), corpse->GetInstanceId());
}
}
-void ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair, GridType& grid, Map* map)
+void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map)
{
- ACE_GUARD(LockType, g, i_corpseGuard);
+ TRINITY_READ_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter)
{
- if (iter->second->GetGrid() == gridpair)
+ // We need this check otherwise a corpose may be added to a grid twice
+ if (iter->second->IsInGrid())
+ continue;
+
+ if (iter->second->GetGridCoord() == gridpair)
{
// verify, if the corpse in our instance (add only corpses which are)
if (map->Instanceable())
@@ -281,6 +289,7 @@ Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia
// remove corpse from player_guid -> corpse map and from current map
RemoveCorpse(corpse);
+
// remove corpse from DB
SQLTransaction trans = CharacterDatabase.BeginTransaction();
corpse->DeleteFromDB(trans);
@@ -301,7 +310,7 @@ Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia
for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type
bones->SetUInt32Value(i, corpse->GetUInt32Value(i));
- bones->SetGrid(corpse->GetGrid());
+ bones->SetGridCoord(corpse->GetGridCoord());
// bones->m_time = m_time; // don't overwrite time
// bones->m_type = m_type; // don't overwrite type
bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation());
@@ -346,17 +355,12 @@ void ObjectAccessor::Update(uint32 /*diff*/)
{
UpdateDataMapType update_players;
- // Critical section
+ while (!i_objects.empty())
{
- ACE_GUARD(LockType, g, i_updateGuard);
-
- while (!i_objects.empty())
- {
- Object* obj = *i_objects.begin();
- ASSERT(obj && obj->IsInWorld());
- i_objects.erase(i_objects.begin());
- obj->BuildUpdate(update_players);
- }
+ Object* obj = *i_objects.begin();
+ ASSERT(obj && obj->IsInWorld());
+ i_objects.erase(i_objects.begin());
+ obj->BuildUpdate(update_players);
}
WorldPacket packet; // here we allocate a std::vector with a size of 0x10000
@@ -380,7 +384,7 @@ void ObjectAccessor::UnloadAll()
/// Define the static members of HashMapHolder
template <class T> UNORDERED_MAP< uint64, T* > HashMapHolder<T>::m_objectMap;
-template <class T> ACE_Thread_Mutex HashMapHolder<T>::i_lock;
+template <class T> typename HashMapHolder<T>::LockType HashMapHolder<T>::i_lock;
/// Global definitions for the hashmap storage
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index a9be8b4971f..92a7a24571e 100755
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -48,23 +48,23 @@ class HashMapHolder
public:
typedef UNORDERED_MAP<uint64, T*> MapType;
- typedef ACE_Thread_Mutex LockType;
+ typedef ACE_RW_Thread_Mutex LockType;
static void Insert(T* o)
{
- ACE_GUARD(LockType, Guard, i_lock);
+ TRINITY_WRITE_GUARD(LockType, i_lock);
m_objectMap[o->GetGUID()] = o;
}
static void Remove(T* o)
{
- ACE_GUARD(LockType, Guard, i_lock);
+ TRINITY_WRITE_GUARD(LockType, i_lock);
m_objectMap.erase(o->GetGUID());
}
static T* Find(uint64 guid)
{
- ACE_GUARD_RETURN(LockType, Guard, i_lock, NULL);
+ TRINITY_READ_GUARD(LockType, i_lock);
typename MapType::iterator itr = m_objectMap.find(guid);
return (itr != m_objectMap.end()) ? itr->second : NULL;
}
@@ -84,8 +84,7 @@ class HashMapHolder
class ObjectAccessor
{
- friend class ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>;
- friend class WorldRunnable;
+ friend class ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>;
private:
ObjectAccessor();
~ObjectAccessor();
@@ -93,15 +92,13 @@ class ObjectAccessor
ObjectAccessor& operator=(const ObjectAccessor&);
public:
- typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType;
- typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType;
-
// TODO: override these template functions for each holder type and add assertions
template<class T> static T* GetObjectInOrOutOfWorld(uint64 guid, T* /*typeSpecifier*/)
{
return HashMapHolder<T>::Find(guid);
}
+
static Unit* GetObjectInOrOutOfWorld(uint64 guid, Unit* /*typeSpecifier*/)
{
if (IS_PLAYER_GUID(guid))
@@ -155,15 +152,15 @@ class ObjectAccessor
if (!obj || obj->GetMapId() != mapid)
return NULL;
- CellPair p = Trinity::ComputeCellPair(x, y);
- if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ CellCoord p = Trinity::ComputeCellCoord(x, y);
+ if (!p.IsCoordValid())
{
sLog->outError("ObjectAccessor::GetObjectInWorld: invalid coordinates supplied X:%f Y:%f grid cell [%u:%u]", x, y, p.x_coord, p.y_coord);
return NULL;
}
- CellPair q = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
- if (q.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || q.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ CellCoord q = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
+ if (!q.IsCoordValid())
{
sLog->outError("ObjectAccessor::GetObjecInWorld: object (GUID: %u TypeId: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUIDLow(), obj->GetTypeId(), obj->GetPositionX(), obj->GetPositionY(), q.x_coord, q.y_coord);
return NULL;
@@ -195,83 +192,77 @@ class ObjectAccessor
static Pet* FindPet(uint64);
static Player* FindPlayer(uint64);
static Unit* FindUnit(uint64);
- Player* FindPlayerByName(const char* name);
+ static Player* FindPlayerByName(const char* name);
// when using this, you must use the hashmapholder's lock
- HashMapHolder<Player>::MapType& GetPlayers()
+ static HashMapHolder<Player>::MapType const& GetPlayers()
{
return HashMapHolder<Player>::GetContainer();
}
// when using this, you must use the hashmapholder's lock
- HashMapHolder<Creature>::MapType& GetCreatures()
+ static HashMapHolder<Creature>::MapType const& GetCreatures()
{
return HashMapHolder<Creature>::GetContainer();
}
// when using this, you must use the hashmapholder's lock
- HashMapHolder<GameObject>::MapType& GetGameObjects()
+ static HashMapHolder<GameObject>::MapType const& GetGameObjects()
{
return HashMapHolder<GameObject>::GetContainer();
}
- template<class T> void AddObject(T* object)
+ template<class T> static void AddObject(T* object)
{
HashMapHolder<T>::Insert(object);
}
- template<class T> void RemoveObject(T* object)
+ template<class T> static void RemoveObject(T* object)
{
HashMapHolder<T>::Remove(object);
}
- void RemoveObject(Player* pl)
- {
- HashMapHolder<Player>::Remove(pl);
- RemoveUpdateObject((Object*)pl);
- }
-
- void SaveAllPlayers();
+ static void SaveAllPlayers();
+ //non-static functions
void AddUpdateObject(Object* obj)
{
- ACE_GUARD(LockType, Guard, i_updateGuard);
+ TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
i_objects.insert(obj);
}
void RemoveUpdateObject(Object* obj)
{
- ACE_GUARD(LockType, Guard, i_updateGuard);
+ TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
i_objects.erase(obj);
}
- void Update(uint32 diff);
-
+ //Thread safe
Corpse* GetCorpseForPlayerGUID(uint64 guid);
void RemoveCorpse(Corpse* corpse);
void AddCorpse(Corpse* corpse);
- void AddCorpsesToGrid(GridPair const& gridpair, GridType& grid, Map* map);
+ void AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map);
Corpse* ConvertCorpseForPlayer(uint64 player_guid, bool insignia = false);
- void RemoveOldCorpses();
- typedef ACE_Thread_Mutex LockType;
-
- protected:
+ //Thread unsafe
+ void Update(uint32 diff);
+ void RemoveOldCorpses();
void UnloadAll();
private:
-
- Player2CorpsesMapType i_player2corpse;
-
static void _buildChangeObjectForPlayer(WorldObject*, UpdateDataMapType&);
static void _buildPacket(Player*, Object*, UpdateDataMapType&);
void _update();
+ typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType;
+ typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType;
+
std::set<Object*> i_objects;
+ Player2CorpsesMapType i_player2corpse;
- LockType i_updateGuard;
- LockType i_corpseGuard;
+ ACE_Thread_Mutex i_objectLock;
+ ACE_RW_Thread_Mutex i_corpseLock;
};
-#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>::instance()
+#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>::instance()
#endif
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ae7e2d57991..086dd610ee2 100755
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -535,7 +535,7 @@ void ObjectMgr::LoadCreatureTemplateAddons()
if (!result)
{
- sLog->outString(">> Loaded 0 creature template addon definitions. DB table `creature_addon` is empty.");
+ sLog->outString(">> Loaded 0 creature template addon definitions. DB table `creature_template_addon` is empty.");
sLog->outString();
return;
}
@@ -569,7 +569,7 @@ void ObjectMgr::LoadCreatureTemplateAddons()
SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(uint32(atol(*itr)));
if (!AdditionalSpellInfo)
{
- sLog->outErrorDb("Creature (GUID: %u) has wrong spell %u defined in `auras` field in `creature_addon`.", entry, uint32(atol(*itr)));
+ sLog->outErrorDb("Creature (Entry: %u) has wrong spell %u defined in `auras` field in `creature_template_addon`.", entry, uint32(atol(*itr)));
continue;
}
creatureAddon.auras[i++] = uint32(atol(*itr));
@@ -579,13 +579,13 @@ void ObjectMgr::LoadCreatureTemplateAddons()
{
if (!sCreatureDisplayInfoStore.LookupEntry(creatureAddon.mount))
{
- sLog->outErrorDb("Creature (GUID: %u) has invalid displayInfoId (%u) for mount defined in `creature_addon`", entry, creatureAddon.mount);
+ sLog->outErrorDb("Creature (Entry: %u) has invalid displayInfoId (%u) for mount defined in `creature_template_addon`", entry, creatureAddon.mount);
creatureAddon.mount = 0;
}
}
if (!sEmotesStore.LookupEntry(creatureAddon.emote))
- sLog->outErrorDb("Creature (GUID: %u) has invalid emote (%u) defined in `creature_addon`.", entry, creatureAddon.emote);
+ sLog->outErrorDb("Creature (Entry: %u) has invalid emote (%u) defined in `creature_template_addon`.", entry, creatureAddon.emote);
++count;
}
@@ -1400,7 +1400,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow)
uint64 linkedGuid = MAKE_NEW_GUID(linkedGuidLow, slave->id, HIGHGUID_UNIT);
mLinkedRespawnMap[guid] = linkedGuid;
- PreparedStatement *stmt = WorldDatabase.GetPreparedStatement(WORLD_REP_CRELINKED_RESPAWN);
+ PreparedStatement *stmt = WorldDatabase.GetPreparedStatement(WORLD_REP_CREATURE_LINKED_RESPAWN);
stmt->setUInt32(0, guidLow);
stmt->setUInt32(1, linkedGuidLow);
WorldDatabase.Execute(stmt);
@@ -1568,10 +1568,8 @@ void ObjectMgr::AddCreatureToGrid(uint32 guid, CreatureData const* data)
{
if (mask & 1)
{
- CellPair cell_pair = Trinity::ComputeCellPair(data->posX, data->posY);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
+ CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
+ CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
cell_guids.creatures.insert(guid);
}
}
@@ -1584,10 +1582,8 @@ void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data)
{
if (mask & 1)
{
- CellPair cell_pair = Trinity::ComputeCellPair(data->posX, data->posY);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
+ CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
+ CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
cell_guids.creatures.erase(guid);
}
}
@@ -1599,7 +1595,7 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
if (!goinfo)
return 0;
- Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(mapId));
+ Map* map = sMapMgr->CreateBaseMap(mapId);
if (!map)
return 0;
@@ -1627,16 +1623,15 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
// Spawn if necessary (loaded grids only)
// We use spawn coords to spawn
- if (!map->Instanceable() && map->IsLoaded(x, y))
+ if (!map->Instanceable() && map->IsGridLoaded(x, y))
{
GameObject* go = new GameObject;
- if (!go->LoadFromDB(guid, map))
+ if (!go->LoadGameObjectFromDB(guid, map))
{
sLog->outError("AddGOData: cannot add gameobject entry %u to map", entry);
delete go;
return 0;
}
- map->AddToMap(go);
}
sLog->outDebug(LOG_FILTER_MAPS, "AddGOData: dbguid %u entry %u map %u x %f y %f z %f o %f", guid, entry, mapId, x, y, z, o);
@@ -1660,19 +1655,18 @@ bool ObjectMgr::MoveCreData(uint32 guid, uint32 mapId, Position pos)
AddCreatureToGrid(guid, &data);
// Spawn if necessary (loaded grids only)
- if (Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(mapId)))
+ if (Map* map = sMapMgr->CreateBaseMap(mapId))
{
// We use spawn coords to spawn
- if (!map->Instanceable() && map->IsLoaded(data.posX, data.posY))
+ if (!map->Instanceable() && map->IsGridLoaded(data.posX, data.posY))
{
Creature* creature = new Creature;
- if (!creature->LoadFromDB(guid, map))
+ if (!creature->LoadCreatureFromDB(guid, map))
{
sLog->outError("AddCreature: cannot add creature entry %u to map", guid);
delete creature;
return false;
}
- map->AddToMap(creature);
}
}
return true;
@@ -1713,19 +1707,18 @@ uint32 ObjectMgr::AddCreData(uint32 entry, uint32 /*team*/, uint32 mapId, float
AddCreatureToGrid(guid, &data);
// Spawn if necessary (loaded grids only)
- if (Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(mapId)))
+ if (Map* map = sMapMgr->CreateBaseMap(mapId))
{
// We use spawn coords to spawn
if (!map->Instanceable() && !map->IsRemovalGrid(x, y))
{
Creature* creature = new Creature;
- if (!creature->LoadFromDB(guid, map))
+ if (!creature->LoadCreatureFromDB(guid, map))
{
sLog->outError("AddCreature: cannot add creature entry %u to map", entry);
delete creature;
return 0;
}
- map->AddToMap(creature);
}
}
@@ -1880,10 +1873,8 @@ void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data)
{
if (mask & 1)
{
- CellPair cell_pair = Trinity::ComputeCellPair(data->posX, data->posY);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
+ CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
+ CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
cell_guids.gameobjects.insert(guid);
}
}
@@ -1896,10 +1887,8 @@ void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data
{
if (mask & 1)
{
- CellPair cell_pair = Trinity::ComputeCellPair(data->posX, data->posY);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
+ CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
+ CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
cell_guids.gameobjects.erase(guid);
}
}
@@ -1911,7 +1900,7 @@ void ObjectMgr::LoadCreatureRespawnTimes()
uint32 count = 0;
- PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_LOAD_CREATURE_RESPAWNS));
+ PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_CREATURE_RESPAWNS));
if (!result)
{
sLog->outString(">> Loaded 0 creature respawn time.");
@@ -1945,7 +1934,7 @@ void ObjectMgr::LoadGameobjectRespawnTimes()
uint32 count = 0;
- PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_LOAD_GO_RESPAWNS));
+ PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_GO_RESPAWNS));
if (!result)
{
sLog->outString(">> Loaded 0 gameobject respawn times. DB table `gameobject_respawn` is empty!");
@@ -3691,42 +3680,41 @@ void ObjectMgr::LoadQuests()
mExclusiveQuestGroups.clear();
- // 0 1 2 3 4 5 6 7 8 9
- QueryResult result = WorldDatabase.Query("SELECT entry, Method, ZoneOrSort, SkillOrClassMask, MinLevel, MaxLevel, QuestLevel, Type, RequiredRaces, RequiredSkillValue, "
- // 10 11 12 13 14 15 16 17 18 19
- "RepObjectiveFaction, RepObjectiveValue, RepObjectiveFaction2, RepObjectiveValue2, RequiredMinRepFaction, RequiredMinRepValue, RequiredMaxRepFaction, RequiredMaxRepValue, SuggestedPlayers, LimitTime, "
- // 20 21 22 23 24 25 26 27 28 29 30 31 32 33
- "QuestFlags, SpecialFlags, CharTitleId, PlayersSlain, BonusTalents, RewardArenaPoints, PrevQuestId, NextQuestId, ExclusiveGroup, NextQuestInChain, RewXPId, SrcItemId, SrcItemCount, SrcSpell, "
- // 34 35 36 37 38 39 40 41 42 43 44
- "Title, Details, Objectives, OfferRewardText, RequestItemsText, EndText, CompletedText, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, "
- // 45 46 47 48 49 50 51 52 53 54 55 56
- "ReqItemId1, ReqItemId2, ReqItemId3, ReqItemId4, ReqItemId5, ReqItemId6, ReqItemCount1, ReqItemCount2, ReqItemCount3, ReqItemCount4, ReqItemCount5, ReqItemCount6, "
- // 57 58 59 60 61 62 63 64
- "ReqSourceId1, ReqSourceId2, ReqSourceId3, ReqSourceId4, ReqSourceCount1, ReqSourceCount2, ReqSourceCount3, ReqSourceCount4, "
- // 65 66 67 68 69 70 71 72
- "ReqCreatureOrGOId1, ReqCreatureOrGOId2, ReqCreatureOrGOId3, ReqCreatureOrGOId4, ReqCreatureOrGOCount1, ReqCreatureOrGOCount2, ReqCreatureOrGOCount3, ReqCreatureOrGOCount4, "
- // 73 74 75 76
- "ReqSpellCast1, ReqSpellCast2, ReqSpellCast3, ReqSpellCast4, "
- // 77 78 79 80 81 82
- "RewChoiceItemId1, RewChoiceItemId2, RewChoiceItemId3, RewChoiceItemId4, RewChoiceItemId5, RewChoiceItemId6, "
- // 83 84 85 86 87 88
- "RewChoiceItemCount1, RewChoiceItemCount2, RewChoiceItemCount3, RewChoiceItemCount4, RewChoiceItemCount5, RewChoiceItemCount6, "
- // 89 90 91 92 93 94 95 96
- "RewItemId1, RewItemId2, RewItemId3, RewItemId4, RewItemCount1, RewItemCount2, RewItemCount3, RewItemCount4, "
- // 97 98 99 100 101 102 103 104 105 106
- "RewRepFaction1, RewRepFaction2, RewRepFaction3, RewRepFaction4, RewRepFaction5, RewRepValueId1, RewRepValueId2, RewRepValueId3, RewRepValueId4, RewRepValueId5, "
- // 107 108 109 110 111
- "RewRepValue1, RewRepValue2, RewRepValue3, RewRepValue4, RewRepValue5, "
- // 112 113 114 115 116 117 118 119 120 121 122 123
- "RewHonorAddition, RewHonorMultiplier, RewOrReqMoney, RewMoneyMaxLevel, RewSpell, RewSpellCast, RewMailTemplateId, RewMailDelaySecs, PointMapId, PointX, PointY, PointOpt, "
- // 124 125 126 127 128 129 130 131
- "DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, "
- // 132 133 134 135 136 137
- "IncompleteEmote, CompleteEmote, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, "
- // 138 139 140 141
- "OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, "
- // 142 143
- "StartScript, CompleteScript"
+ QueryResult result = WorldDatabase.Query("SELECT "
+ //0 1 2 3 4 5 6 7 8 9 10 11 12
+ "Id, Method, Level, MinLevel, MaxLevel, ZoneOrSort, Type, SuggestedPlayers, LimitTime, RequiredClasses, RequiredRaces, RequiredSkillId, RequiredSkillPoints, "
+ // 13 14 15 16 17 18 19 20
+ "RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, RequiredMinRepFaction, RequiredMaxRepFaction, RequiredMinRepValue, RequiredMaxRepValue, "
+ // 21 22 23 24 25 26 27 28 29 30 31
+ "PrevQuestId, NextQuestId, ExclusiveGroup, NextQuestIdChain, RewardXPId, RewardOrRequiredMoney, RewardMoneyMaxLevel, RewardSpell, RewardSpellCast, RewardHonor, RewardHonorMultiplier, "
+ // 32 33 34 35 36 37 38 39 40 41 42
+ "RewardMailTemplateId, RewardMailDelay, SourceItemId, SourceItemCount, SourceSpellId, Flags, SpecialFlags, RewardTitleId, RequiredPlayerKills, RewardTalents, RewardArenaPoints, "
+ // 43 44 45 46 47 48 49 50
+ "RewardItemId1, RewardItemId2, RewardItemId3, RewardItemId4, RewardItemCount1, RewardItemCount2, RewardItemCount3, RewardItemCount4, "
+ // 51 52 53 54 55 56 57 58 59 60 61 62
+ "RewardChoiceItemId1, RewardChoiceItemId2, RewardChoiceItemId3, RewardChoiceItemId4, RewardChoiceItemId5, RewardChoiceItemId6, RewardChoiceItemCount1, RewardChoiceItemCount2, RewardChoiceItemCount3, RewardChoiceItemCount4, RewardChoiceItemCount5, RewardChoiceItemCount6, "
+ // 63 64 65 66 67 68 69 70 71 72
+ "RewardFactionId1, RewardFactionId2, RewardFactionId3, RewardFactionId4, RewardFactionId5, RewardFactionValueId1, RewardFactionValueId2, RewardFactionValueId3, RewardFactionValueId4, RewardFactionValueId5, "
+ // 73 74 75 76 77
+ "RewardFactionValueIdOverride1, RewardFactionValueIdOverride2, RewardFactionValueIdOverride3, RewardFactionValueIdOverride4, RewardFactionValueIdOverride5, "
+ // 78 79 80 81
+ "PointMapId, PointX, PointY, PointOption, "
+ // 82 83 84 85 86 87 88
+ "Title, Objectives, Details, EndText, OfferRewardText, RequestItemsText, CompletedText, "
+ // 89 90 91 92 93 94 95 96
+ "RequiredNpcOrGo1, RequiredNpcOrGo2, RequiredNpcOrGo3, RequiredNpcOrGo4, RequiredNpcOrGoCount1, RequiredNpcOrGoCount2, RequiredNpcOrGoCount3, RequiredNpcOrGoCount4, "
+ // 97 98 99 100 101 102 103 104
+ "RequiredSourceItemId1, RequiredSourceItemId2, RequiredSourceItemId3, RequiredSourceItemId4, RequiredSourceItemCount1, RequiredSourceItemCount2, RequiredSourceItemCount3, RequiredSourceItemCount4, "
+ // 105 106 107 108 109 110 111 112 113 114 115 116
+ "RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
+ // 117 118 119 120 121 122 123 124 125
+ "RequiredSpellCast1, RequiredSpellCast2, RequiredSpellCast3, RequiredSpellCast4, Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, "
+ // 126 127 128 129 130 131 132 133 134 135
+ "DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, EmoteOnIncomplete, EmoteOnComplete, "
+ // 136 137 138 139 140 141 142 143
+ "OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, "
+ // 144 145 146
+ "StartScript, CompleteScript, WDBVerified"
" FROM quest_template");
if (!result)
{
@@ -3764,45 +3752,45 @@ void ObjectMgr::LoadQuests()
sLog->outErrorDb("Quest %u has `Method` = %u, expected values are 0, 1 or 2.", qinfo->GetQuestId(), qinfo->GetQuestMethod());
}
- if (qinfo->QuestFlags & ~QUEST_TRINITY_FLAGS_DB_ALLOWED)
+ if (qinfo->Flags & ~QUEST_TRINITY_FLAGS_DB_ALLOWED)
{
sLog->outErrorDb("Quest %u has `SpecialFlags` = %u > max allowed value. Correct `SpecialFlags` to value <= %u",
- qinfo->GetQuestId(), qinfo->QuestFlags >> 20, QUEST_TRINITY_FLAGS_DB_ALLOWED >> 20);
- qinfo->QuestFlags &= QUEST_TRINITY_FLAGS_DB_ALLOWED;
+ qinfo->GetQuestId(), qinfo->Flags >> 20, QUEST_TRINITY_FLAGS_DB_ALLOWED >> 20);
+ qinfo->Flags &= QUEST_TRINITY_FLAGS_DB_ALLOWED;
}
- if (qinfo->QuestFlags & QUEST_FLAGS_DAILY && qinfo->QuestFlags & QUEST_FLAGS_WEEKLY)
+ if (qinfo->Flags & QUEST_FLAGS_DAILY && qinfo->Flags & QUEST_FLAGS_WEEKLY)
{
- sLog->outErrorDb("Weekly Quest %u is marked as daily quest in `QuestFlags`, removed daily flag.", qinfo->GetQuestId());
- qinfo->QuestFlags &= ~QUEST_FLAGS_DAILY;
+ sLog->outErrorDb("Weekly Quest %u is marked as daily quest in `Flags`, removed daily flag.", qinfo->GetQuestId());
+ qinfo->Flags &= ~QUEST_FLAGS_DAILY;
}
- if (qinfo->QuestFlags & QUEST_FLAGS_DAILY)
+ if (qinfo->Flags & QUEST_FLAGS_DAILY)
{
- if (!(qinfo->QuestFlags & QUEST_TRINITY_FLAGS_REPEATABLE))
+ if (!(qinfo->Flags & QUEST_TRINITY_FLAGS_REPEATABLE))
{
sLog->outErrorDb("Daily Quest %u not marked as repeatable in `SpecialFlags`, added.", qinfo->GetQuestId());
- qinfo->QuestFlags |= QUEST_TRINITY_FLAGS_REPEATABLE;
+ qinfo->Flags |= QUEST_TRINITY_FLAGS_REPEATABLE;
}
}
- if (qinfo->QuestFlags & QUEST_FLAGS_WEEKLY)
+ if (qinfo->Flags & QUEST_FLAGS_WEEKLY)
{
- if (!(qinfo->QuestFlags & QUEST_TRINITY_FLAGS_REPEATABLE))
+ if (!(qinfo->Flags & QUEST_TRINITY_FLAGS_REPEATABLE))
{
sLog->outErrorDb("Weekly Quest %u not marked as repeatable in `SpecialFlags`, added.", qinfo->GetQuestId());
- qinfo->QuestFlags |= QUEST_TRINITY_FLAGS_REPEATABLE;
+ qinfo->Flags |= QUEST_TRINITY_FLAGS_REPEATABLE;
}
}
- if (qinfo->QuestFlags & QUEST_FLAGS_AUTO_REWARDED)
+ if (qinfo->Flags & QUEST_FLAGS_AUTO_REWARDED)
{
- // at auto-reward can be rewarded only RewChoiceItemId[0]
+ // at auto-reward can be rewarded only RewardChoiceItemId[0]
for (int j = 1; j < QUEST_REWARD_CHOICES_COUNT; ++j )
{
- if (uint32 id = qinfo->RewChoiceItemId[j])
+ if (uint32 id = qinfo->RewardChoiceItemId[j])
{
- sLog->outErrorDb("Quest %u has `RewChoiceItemId%d` = %u but item from `RewChoiceItemId%d` can't be rewarded with quest flag QUEST_FLAGS_AUTO_REWARDED.",
+ sLog->outErrorDb("Quest %u has `RewardChoiceItemId%d` = %u but item from `RewardChoiceItemId%d` can't be rewarded with quest flag QUEST_FLAGS_AUTO_REWARDED.",
qinfo->GetQuestId(), j+1, id, j+1);
// no changes, quest ignore this data
}
@@ -3829,77 +3817,68 @@ void ObjectMgr::LoadQuests()
qinfo->GetQuestId(), qinfo->ZoneOrSort);
// no changes, quest not dependent from this value but can have problems at client (note some may be 0, we must allow this so no check)
}
- //check SkillOrClass value (class case).
- if (ClassByQuestSort(-int32(qinfo->ZoneOrSort)))
+ //check for proper RequiredSkillId value (skill case)
+ if (uint32 skill_id = SkillByQuestSort(-int32(qinfo->ZoneOrSort)))
{
- // SkillOrClass should not have class case when class case already set in ZoneOrSort.
- if (qinfo->SkillOrClassMask < 0)
+ if (qinfo->RequiredSkillId != skill_id)
{
- sLog->outErrorDb("Quest %u has `ZoneOrSort` = %i (class sort case) and `SkillOrClassMask` = %i (class case), redundant.",
- qinfo->GetQuestId(), qinfo->ZoneOrSort, qinfo->SkillOrClassMask);
- }
- }
- //check for proper SkillOrClass value (skill case)
- if (int32 skill_id = SkillByQuestSort(-int32(qinfo->ZoneOrSort)))
- {
- // skill is positive value in SkillOrClass
- if (qinfo->SkillOrClassMask != skill_id)
- {
- sLog->outErrorDb("Quest %u has `ZoneOrSort` = %i (skill sort case) but `SkillOrClassMask` does not have a corresponding value (%i).",
+ sLog->outErrorDb("Quest %u has `ZoneOrSort` = %i but `RequiredSkillId` does not have a corresponding value (%d).",
qinfo->GetQuestId(), qinfo->ZoneOrSort, skill_id);
//override, and force proper value here?
}
}
}
- // SkillOrClassMask (class case)
- if (qinfo->SkillOrClassMask < 0)
+ // RequiredClasses, can be 0/CLASSMASK_ALL_PLAYABLE to allow any class
+ if (qinfo->RequiredClasses)
{
- if (!(-int32(qinfo->SkillOrClassMask) & CLASSMASK_ALL_PLAYABLE))
+ if (!(qinfo->RequiredClasses & CLASSMASK_ALL_PLAYABLE))
{
- sLog->outErrorDb("Quest %u has `SkillOrClassMask` = %i (class case) but classmask does not have valid class",
- qinfo->GetQuestId(), qinfo->SkillOrClassMask);
+ sLog->outErrorDb("Quest %u does not contain any playable classes in `RequiredClasses` (%u), value set to 0 (all classes).", qinfo->GetQuestId(), qinfo->RequiredClasses);
+ qinfo->RequiredClasses = 0;
}
}
- // SkillOrClassMask (skill case)
- if (qinfo->SkillOrClassMask > 0)
+ // RequiredRaces, can be 0/RACEMASK_ALL_PLAYABLE to allow any race
+ if (qinfo->RequiredRaces)
+ {
+ if (!(qinfo->RequiredRaces & RACEMASK_ALL_PLAYABLE))
+ {
+ sLog->outErrorDb("Quest %u does not contain any playable races in `RequiredRaces` (%u), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->RequiredRaces);
+ qinfo->RequiredRaces = 0;
+ }
+ }
+ // RequiredSkillId, can be 0
+ if (qinfo->RequiredSkillId)
{
- if (!sSkillLineStore.LookupEntry(qinfo->SkillOrClassMask))
+ if (!sSkillLineStore.LookupEntry(qinfo->RequiredSkillId))
{
- sLog->outErrorDb("Quest %u has `SkillOrClass` = %u (skill case) but skill (%i) does not exist",
- qinfo->GetQuestId(), qinfo->SkillOrClassMask, qinfo->SkillOrClassMask);
+ sLog->outErrorDb("Quest %u has `RequiredSkillId` = %u but this skill does not exist",
+ qinfo->GetQuestId(), qinfo->RequiredSkillId);
}
}
- if (qinfo->RequiredSkillValue)
+ if (qinfo->RequiredSkillPoints)
{
- if (qinfo->RequiredSkillValue > sWorld->GetConfigMaxSkillValue())
+ if (qinfo->RequiredSkillPoints > sWorld->GetConfigMaxSkillValue())
{
- sLog->outErrorDb("Quest %u has `RequiredSkillValue` = %u but max possible skill is %u, quest can't be done.",
- qinfo->GetQuestId(), qinfo->RequiredSkillValue, sWorld->GetConfigMaxSkillValue());
+ sLog->outErrorDb("Quest %u has `RequiredSkillPoints` = %u but max possible skill is %u, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->RequiredSkillPoints, sWorld->GetConfigMaxSkillValue());
// no changes, quest can't be done for this requirement
}
-
- if (qinfo->SkillOrClassMask <= 0)
- {
- sLog->outErrorDb("Quest %u has `RequiredSkillValue` = %u but `SkillOrClass` = %i (class case), value ignored.",
- qinfo->GetQuestId(), qinfo->RequiredSkillValue, qinfo->SkillOrClassMask);
- // no changes, quest can't be done for this requirement (fail at wrong skill id)
- }
}
// else Skill quests can have 0 skill level, this is ok
- if (qinfo->RepObjectiveFaction2 && !sFactionStore.LookupEntry(qinfo->RepObjectiveFaction2))
+ if (qinfo->RequiredFactionId2 && !sFactionStore.LookupEntry(qinfo->RequiredFactionId2))
{
- sLog->outErrorDb("Quest %u has `RepObjectiveFaction2` = %u but faction template %u does not exist, quest can't be done.",
- qinfo->GetQuestId(), qinfo->RepObjectiveFaction2, qinfo->RepObjectiveFaction2);
+ sLog->outErrorDb("Quest %u has `RequiredFactionId2` = %u but faction template %u does not exist, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->RequiredFactionId2, qinfo->RequiredFactionId2);
// no changes, quest can't be done for this requirement
}
- if (qinfo->RepObjectiveFaction && !sFactionStore.LookupEntry(qinfo->RepObjectiveFaction))
+ if (qinfo->RequiredFactionId1 && !sFactionStore.LookupEntry(qinfo->RequiredFactionId1))
{
- sLog->outErrorDb("Quest %u has `RepObjectiveFaction` = %u but faction template %u does not exist, quest can't be done.",
- qinfo->GetQuestId(), qinfo->RepObjectiveFaction, qinfo->RepObjectiveFaction);
+ sLog->outErrorDb("Quest %u has `RequiredFactionId1` = %u but faction template %u does not exist, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->RequiredFactionId1, qinfo->RequiredFactionId1);
// no changes, quest can't be done for this requirement
}
@@ -3931,17 +3910,17 @@ void ObjectMgr::LoadQuests()
// no changes, quest can't be done for this requirement
}
- if (!qinfo->RepObjectiveFaction && qinfo->RepObjectiveValue != 0)
+ if (!qinfo->RequiredFactionId1 && qinfo->RequiredFactionValue1 != 0)
{
- sLog->outErrorDb("Quest %u has `RepObjectiveValue` = %d but `RepObjectiveFaction` is 0, value has no effect",
- qinfo->GetQuestId(), qinfo->RepObjectiveValue);
+ sLog->outErrorDb("Quest %u has `RequiredFactionValue1` = %d but `RequiredFactionId1` is 0, value has no effect",
+ qinfo->GetQuestId(), qinfo->RequiredFactionValue1);
// warning
}
- if (!qinfo->RepObjectiveFaction2 && qinfo->RepObjectiveValue2 != 0)
+ if (!qinfo->RequiredFactionId2 && qinfo->RequiredFactionValue2 != 0)
{
- sLog->outErrorDb("Quest %u has `RepObjectiveValue2` = %d but `RepObjectiveFaction2` is 0, value has no effect",
- qinfo->GetQuestId(), qinfo->RepObjectiveValue2);
+ sLog->outErrorDb("Quest %u has `RequiredFactionValue2` = %d but `RequiredFactionId2` is 0, value has no effect",
+ qinfo->GetQuestId(), qinfo->RequiredFactionValue2);
// warning
}
@@ -3959,61 +3938,61 @@ void ObjectMgr::LoadQuests()
// warning
}
- if (qinfo->CharTitleId && !sCharTitlesStore.LookupEntry(qinfo->CharTitleId))
+ if (qinfo->RewardTitleId && !sCharTitlesStore.LookupEntry(qinfo->RewardTitleId))
{
- sLog->outErrorDb("Quest %u has `CharTitleId` = %u but CharTitle Id %u does not exist, quest can't be rewarded with title.",
+ sLog->outErrorDb("Quest %u has `RewardTitleId` = %u but CharTitle Id %u does not exist, quest can't be rewarded with title.",
qinfo->GetQuestId(), qinfo->GetCharTitleId(), qinfo->GetCharTitleId());
- qinfo->CharTitleId = 0;
+ qinfo->RewardTitleId = 0;
// quest can't reward this title
}
- if (qinfo->SrcItemId)
+ if (qinfo->SourceItemId)
{
- if (!sObjectMgr->GetItemTemplate(qinfo->SrcItemId))
+ if (!sObjectMgr->GetItemTemplate(qinfo->SourceItemId))
{
- sLog->outErrorDb("Quest %u has `SrcItemId` = %u but item with entry %u does not exist, quest can't be done.",
- qinfo->GetQuestId(), qinfo->SrcItemId, qinfo->SrcItemId);
- qinfo->SrcItemId = 0; // quest can't be done for this requirement
+ sLog->outErrorDb("Quest %u has `SourceItemId` = %u but item with entry %u does not exist, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->SourceItemId, qinfo->SourceItemId);
+ qinfo->SourceItemId = 0; // quest can't be done for this requirement
}
- else if (qinfo->SrcItemCount == 0)
+ else if (qinfo->SourceItemIdCount == 0)
{
- sLog->outErrorDb("Quest %u has `SrcItemId` = %u but `SrcItemCount` = 0, set to 1 but need fix in DB.",
- qinfo->GetQuestId(), qinfo->SrcItemId);
- qinfo->SrcItemCount = 1; // update to 1 for allow quest work for backward compatibility with DB
+ sLog->outErrorDb("Quest %u has `SourceItemId` = %u but `SourceItemIdCount` = 0, set to 1 but need fix in DB.",
+ qinfo->GetQuestId(), qinfo->SourceItemId);
+ qinfo->SourceItemIdCount = 1; // update to 1 for allow quest work for backward compatibility with DB
}
}
- else if (qinfo->SrcItemCount>0)
+ else if (qinfo->SourceItemIdCount>0)
{
- sLog->outErrorDb("Quest %u has `SrcItemId` = 0 but `SrcItemCount` = %u, useless value.",
- qinfo->GetQuestId(), qinfo->SrcItemCount);
- qinfo->SrcItemCount=0; // no quest work changes in fact
+ sLog->outErrorDb("Quest %u has `SourceItemId` = 0 but `SourceItemIdCount` = %u, useless value.",
+ qinfo->GetQuestId(), qinfo->SourceItemIdCount);
+ qinfo->SourceItemIdCount=0; // no quest work changes in fact
}
- if (qinfo->SrcSpell)
+ if (qinfo->SourceSpellid)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->SrcSpell);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->SourceSpellid);
if (!spellInfo)
{
- sLog->outErrorDb("Quest %u has `SrcSpell` = %u but spell %u doesn't exist, quest can't be done.",
- qinfo->GetQuestId(), qinfo->SrcSpell, qinfo->SrcSpell);
- qinfo->SrcSpell = 0; // quest can't be done for this requirement
+ sLog->outErrorDb("Quest %u has `SourceSpellid` = %u but spell %u doesn't exist, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->SourceSpellid, qinfo->SourceSpellid);
+ qinfo->SourceSpellid = 0; // quest can't be done for this requirement
}
else if (!SpellMgr::IsSpellValid(spellInfo))
{
- sLog->outErrorDb("Quest %u has `SrcSpell` = %u but spell %u is broken, quest can't be done.",
- qinfo->GetQuestId(), qinfo->SrcSpell, qinfo->SrcSpell);
- qinfo->SrcSpell = 0; // quest can't be done for this requirement
+ sLog->outErrorDb("Quest %u has `SourceSpellid` = %u but spell %u is broken, quest can't be done.",
+ qinfo->GetQuestId(), qinfo->SourceSpellid, qinfo->SourceSpellid);
+ qinfo->SourceSpellid = 0; // quest can't be done for this requirement
}
}
for (uint8 j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
{
- uint32 id = qinfo->ReqItemId[j];
+ uint32 id = qinfo->RequiredItemId[j];
if (id)
{
- if (qinfo->ReqItemCount[j] == 0)
+ if (qinfo->RequiredItemCount[j] == 0)
{
- sLog->outErrorDb("Quest %u has `ReqItemId%d` = %u but `ReqItemCount%d` = 0, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RequiredItemId%d` = %u but `RequiredItemCount%d` = 0, quest can't be done.",
qinfo->GetQuestId(), j+1, id, j+1);
// no changes, quest can't be done for this requirement
}
@@ -4022,37 +4001,37 @@ void ObjectMgr::LoadQuests()
if (!sObjectMgr->GetItemTemplate(id))
{
- sLog->outErrorDb("Quest %u has `ReqItemId%d` = %u but item with entry %u does not exist, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RequiredItemId%d` = %u but item with entry %u does not exist, quest can't be done.",
qinfo->GetQuestId(), j+1, id, id);
- qinfo->ReqItemCount[j] = 0; // prevent incorrect work of quest
+ qinfo->RequiredItemCount[j] = 0; // prevent incorrect work of quest
}
}
- else if (qinfo->ReqItemCount[j]>0)
+ else if (qinfo->RequiredItemCount[j]>0)
{
- sLog->outErrorDb("Quest %u has `ReqItemId%d` = 0 but `ReqItemCount%d` = %u, quest can't be done.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->ReqItemCount[j]);
- qinfo->ReqItemCount[j] = 0; // prevent incorrect work of quest
+ sLog->outErrorDb("Quest %u has `RequiredItemId%d` = 0 but `RequiredItemCount%d` = %u, quest can't be done.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->RequiredItemCount[j]);
+ qinfo->RequiredItemCount[j] = 0; // prevent incorrect work of quest
}
}
for (uint8 j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
{
- uint32 id = qinfo->ReqSourceId[j];
+ uint32 id = qinfo->RequiredSourceItemId[j];
if (id)
{
if (!sObjectMgr->GetItemTemplate(id))
{
- sLog->outErrorDb("Quest %u has `ReqSourceId%d` = %u but item with entry %u does not exist, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RequiredSourceItemId%d` = %u but item with entry %u does not exist, quest can't be done.",
qinfo->GetQuestId(), j+1, id, id);
// no changes, quest can't be done for this requirement
}
}
else
{
- if (qinfo->ReqSourceCount[j]>0)
+ if (qinfo->RequiredSourceItemCount[j]>0)
{
- sLog->outErrorDb("Quest %u has `ReqSourceId%d` = 0 but `ReqSourceCount%d` = %u.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->ReqSourceCount[j]);
+ sLog->outErrorDb("Quest %u has `RequiredSourceItemId%d` = 0 but `RequiredSourceItemCount%d` = %u.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->RequiredSourceItemCount[j]);
// no changes, quest ignore this data
}
}
@@ -4060,7 +4039,7 @@ void ObjectMgr::LoadQuests()
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
{
- uint32 id = qinfo->ReqSpell[j];
+ uint32 id = qinfo->RequiredSpellCast[j];
if (id)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(id);
@@ -4071,12 +4050,12 @@ void ObjectMgr::LoadQuests()
continue;
}
- if (!qinfo->ReqCreatureOrGOId[j])
+ if (!qinfo->RequiredNpcOrGo[j])
{
bool found = false;
for (uint8 k = 0; k < MAX_SPELL_EFFECTS; ++k)
{
- if ((spellInfo->Effects[k].Effect == SPELL_EFFECT_QUEST_COMPLETE && uint32(spellInfo->Effects[k].MiscValue) == qinfo->QuestId) ||
+ if ((spellInfo->Effects[k].Effect == SPELL_EFFECT_QUEST_COMPLETE && uint32(spellInfo->Effects[k].MiscValue) == qinfo->Id) ||
spellInfo->Effects[k].Effect == SPELL_EFFECT_SEND_EVENT)
{
found = true;
@@ -4088,7 +4067,7 @@ void ObjectMgr::LoadQuests()
{
if (!qinfo->HasFlag(QUEST_TRINITY_FLAGS_EXPLORATION_OR_EVENT))
{
- sLog->outErrorDb("Spell (id: %u) have SPELL_EFFECT_QUEST_COMPLETE or SPELL_EFFECT_SEND_EVENT for quest %u and ReqCreatureOrGOId%d = 0, but quest not have flag QUEST_TRINITY_FLAGS_EXPLORATION_OR_EVENT. Quest flags or ReqCreatureOrGOId%d must be fixed, quest modified to enable objective.", spellInfo->Id, qinfo->QuestId, j+1, j+1);
+ sLog->outErrorDb("Spell (id: %u) have SPELL_EFFECT_QUEST_COMPLETE or SPELL_EFFECT_SEND_EVENT for quest %u and RequiredNpcOrGo%d = 0, but quest not have flag QUEST_TRINITY_FLAGS_EXPLORATION_OR_EVENT. Quest flags or RequiredNpcOrGo%d must be fixed, quest modified to enable objective.", spellInfo->Id, qinfo->Id, j+1, j+1);
// this will prevent quest completing without objective
const_cast<Quest*>(qinfo)->SetFlag(QUEST_TRINITY_FLAGS_EXPLORATION_OR_EVENT);
@@ -4096,7 +4075,7 @@ void ObjectMgr::LoadQuests()
}
else
{
- sLog->outErrorDb("Quest %u has `ReqSpellCast%d` = %u and ReqCreatureOrGOId%d = 0 but spell %u does not have SPELL_EFFECT_QUEST_COMPLETE or SPELL_EFFECT_SEND_EVENT effect for this quest, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `ReqSpellCast%d` = %u and RequiredNpcOrGo%d = 0 but spell %u does not have SPELL_EFFECT_QUEST_COMPLETE or SPELL_EFFECT_SEND_EVENT effect for this quest, quest can't be done.",
qinfo->GetQuestId(), j+1, id, j+1, id);
// no changes, quest can't be done for this requirement
}
@@ -4106,19 +4085,19 @@ void ObjectMgr::LoadQuests()
for (uint8 j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
{
- int32 id = qinfo->ReqCreatureOrGOId[j];
+ int32 id = qinfo->RequiredNpcOrGo[j];
if (id < 0 && !sObjectMgr->GetGameObjectTemplate(-id))
{
- sLog->outErrorDb("Quest %u has `ReqCreatureOrGOId%d` = %i but gameobject %u does not exist, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RequiredNpcOrGo%d` = %i but gameobject %u does not exist, quest can't be done.",
qinfo->GetQuestId(), j+1, id, uint32(-id));
- qinfo->ReqCreatureOrGOId[j] = 0; // quest can't be done for this requirement
+ qinfo->RequiredNpcOrGo[j] = 0; // quest can't be done for this requirement
}
if (id > 0 && !sObjectMgr->GetCreatureTemplate(id))
{
- sLog->outErrorDb("Quest %u has `ReqCreatureOrGOId%d` = %i but creature with entry %u does not exist, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RequiredNpcOrGo%d` = %i but creature with entry %u does not exist, quest can't be done.",
qinfo->GetQuestId(), j+1, id, uint32(id));
- qinfo->ReqCreatureOrGOId[j] = 0; // quest can't be done for this requirement
+ qinfo->RequiredNpcOrGo[j] = 0; // quest can't be done for this requirement
}
if (id)
@@ -4127,179 +4106,179 @@ void ObjectMgr::LoadQuests()
qinfo->SetFlag(QUEST_TRINITY_FLAGS_KILL_OR_CAST | QUEST_TRINITY_FLAGS_SPEAKTO);
- if (!qinfo->ReqCreatureOrGOCount[j])
+ if (!qinfo->RequiredNpcOrGoCount[j])
{
- sLog->outErrorDb("Quest %u has `ReqCreatureOrGOId%d` = %u but `ReqCreatureOrGOCount%d` = 0, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RequiredNpcOrGo%d` = %u but `RequiredNpcOrGoCount%d` = 0, quest can't be done.",
qinfo->GetQuestId(), j+1, id, j+1);
// no changes, quest can be incorrectly done, but we already report this
}
}
- else if (qinfo->ReqCreatureOrGOCount[j]>0)
+ else if (qinfo->RequiredNpcOrGoCount[j]>0)
{
- sLog->outErrorDb("Quest %u has `ReqCreatureOrGOId%d` = 0 but `ReqCreatureOrGOCount%d` = %u.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->ReqCreatureOrGOCount[j]);
+ sLog->outErrorDb("Quest %u has `RequiredNpcOrGo%d` = 0 but `RequiredNpcOrGoCount%d` = %u.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->RequiredNpcOrGoCount[j]);
// no changes, quest ignore this data
}
}
for (uint8 j = 0; j < QUEST_REWARD_CHOICES_COUNT; ++j)
{
- uint32 id = qinfo->RewChoiceItemId[j];
+ uint32 id = qinfo->RewardChoiceItemId[j];
if (id)
{
if (!sObjectMgr->GetItemTemplate(id))
{
- sLog->outErrorDb("Quest %u has `RewChoiceItemId%d` = %u but item with entry %u does not exist, quest will not reward this item.",
+ sLog->outErrorDb("Quest %u has `RewardChoiceItemId%d` = %u but item with entry %u does not exist, quest will not reward this item.",
qinfo->GetQuestId(), j+1, id, id);
- qinfo->RewChoiceItemId[j] = 0; // no changes, quest will not reward this
+ qinfo->RewardChoiceItemId[j] = 0; // no changes, quest will not reward this
}
- if (!qinfo->RewChoiceItemCount[j])
+ if (!qinfo->RewardChoiceItemCount[j])
{
- sLog->outErrorDb("Quest %u has `RewChoiceItemId%d` = %u but `RewChoiceItemCount%d` = 0, quest can't be done.",
+ sLog->outErrorDb("Quest %u has `RewardChoiceItemId%d` = %u but `RewardChoiceItemCount%d` = 0, quest can't be done.",
qinfo->GetQuestId(), j+1, id, j+1);
// no changes, quest can't be done
}
}
- else if (qinfo->RewChoiceItemCount[j]>0)
+ else if (qinfo->RewardChoiceItemCount[j]>0)
{
- sLog->outErrorDb("Quest %u has `RewChoiceItemId%d` = 0 but `RewChoiceItemCount%d` = %u.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->RewChoiceItemCount[j]);
+ sLog->outErrorDb("Quest %u has `RewardChoiceItemId%d` = 0 but `RewardChoiceItemCount%d` = %u.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->RewardChoiceItemCount[j]);
// no changes, quest ignore this data
}
}
for (uint8 j = 0; j < QUEST_REWARDS_COUNT; ++j)
{
- uint32 id = qinfo->RewItemId[j];
+ uint32 id = qinfo->RewardItemId[j];
if (id)
{
if (!sObjectMgr->GetItemTemplate(id))
{
- sLog->outErrorDb("Quest %u has `RewItemId%d` = %u but item with entry %u does not exist, quest will not reward this item.",
+ sLog->outErrorDb("Quest %u has `RewardItemId%d` = %u but item with entry %u does not exist, quest will not reward this item.",
qinfo->GetQuestId(), j+1, id, id);
- qinfo->RewItemId[j] = 0; // no changes, quest will not reward this item
+ qinfo->RewardItemId[j] = 0; // no changes, quest will not reward this item
}
- if (!qinfo->RewItemCount[j])
+ if (!qinfo->RewardItemIdCount[j])
{
- sLog->outErrorDb("Quest %u has `RewItemId%d` = %u but `RewItemCount%d` = 0, quest will not reward this item.",
+ sLog->outErrorDb("Quest %u has `RewardItemId%d` = %u but `RewardItemIdCount%d` = 0, quest will not reward this item.",
qinfo->GetQuestId(), j+1, id, j+1);
// no changes
}
}
- else if (qinfo->RewItemCount[j]>0)
+ else if (qinfo->RewardItemIdCount[j]>0)
{
- sLog->outErrorDb("Quest %u has `RewItemId%d` = 0 but `RewItemCount%d` = %u.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->RewItemCount[j]);
+ sLog->outErrorDb("Quest %u has `RewardItemId%d` = 0 but `RewardItemIdCount%d` = %u.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->RewardItemIdCount[j]);
// no changes, quest ignore this data
}
}
for (uint8 j = 0; j < QUEST_REPUTATIONS_COUNT; ++j)
{
- if (qinfo->RewRepFaction[j])
+ if (qinfo->RewardFactionId[j])
{
- if (abs(qinfo->RewRepValueId[j]) > 9)
+ if (abs(qinfo->RewardFactionValueId[j]) > 9)
{
- sLog->outErrorDb("Quest %u has RewRepValueId%d = %i. That is outside the range of valid values (-9 to 9).", qinfo->GetQuestId(), j+1, qinfo->RewRepValueId[j]);
+ sLog->outErrorDb("Quest %u has RewardFactionValueId%d = %i. That is outside the range of valid values (-9 to 9).", qinfo->GetQuestId(), j+1, qinfo->RewardFactionValueId[j]);
}
- if (!sFactionStore.LookupEntry(qinfo->RewRepFaction[j]))
+ if (!sFactionStore.LookupEntry(qinfo->RewardFactionId[j]))
{
- sLog->outErrorDb("Quest %u has `RewRepFaction%d` = %u but raw faction (faction.dbc) %u does not exist, quest will not reward reputation for this faction.", qinfo->GetQuestId(), j+1, qinfo->RewRepFaction[j], qinfo->RewRepFaction[j]);
- qinfo->RewRepFaction[j] = 0; // quest will not reward this
+ sLog->outErrorDb("Quest %u has `RewardFactionId%d` = %u but raw faction (faction.dbc) %u does not exist, quest will not reward reputation for this faction.", qinfo->GetQuestId(), j+1, qinfo->RewardFactionId[j], qinfo->RewardFactionId[j]);
+ qinfo->RewardFactionId[j] = 0; // quest will not reward this
}
}
- else if (qinfo->RewRepValue[j] != 0)
+ else if (qinfo->RewardFactionValueIdOverride[j] != 0)
{
- sLog->outErrorDb("Quest %u has `RewRepFaction%d` = 0 but `RewRepValue%d` = %i.",
- qinfo->GetQuestId(), j+1, j+1, qinfo->RewRepValue[j]);
+ sLog->outErrorDb("Quest %u has `RewardFactionId%d` = 0 but `RewardFactionValueIdOverride%d` = %i.",
+ qinfo->GetQuestId(), j+1, j+1, qinfo->RewardFactionValueIdOverride[j]);
// no changes, quest ignore this data
}
}
- if (qinfo->RewSpell)
+ if (qinfo->RewardSpell)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewSpell);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpell);
if (!spellInfo)
{
- sLog->outErrorDb("Quest %u has `RewSpell` = %u but spell %u does not exist, spell removed as display reward.",
- qinfo->GetQuestId(), qinfo->RewSpell, qinfo->RewSpell);
- qinfo->RewSpell = 0; // no spell reward will display for this quest
+ sLog->outErrorDb("Quest %u has `RewardSpell` = %u but spell %u does not exist, spell removed as display reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
+ qinfo->RewardSpell = 0; // no spell reward will display for this quest
}
else if (!SpellMgr::IsSpellValid(spellInfo))
{
- sLog->outErrorDb("Quest %u has `RewSpell` = %u but spell %u is broken, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewSpell, qinfo->RewSpell);
- qinfo->RewSpell = 0; // no spell reward will display for this quest
+ sLog->outErrorDb("Quest %u has `RewardSpell` = %u but spell %u is broken, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
+ qinfo->RewardSpell = 0; // no spell reward will display for this quest
}
- else if (GetTalentSpellCost(qinfo->RewSpell))
+ else if (GetTalentSpellCost(qinfo->RewardSpell))
{
- sLog->outErrorDb("Quest %u has `RewSpell` = %u but spell %u is talent, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewSpell, qinfo->RewSpell);
- qinfo->RewSpell = 0; // no spell reward will display for this quest
+ sLog->outErrorDb("Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell);
+ qinfo->RewardSpell = 0; // no spell reward will display for this quest
}
}
- if (qinfo->RewSpellCast > 0)
+ if (qinfo->RewardSpellCast > 0)
{
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewSpellCast);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpellCast);
if (!spellInfo)
{
- sLog->outErrorDb("Quest %u has `RewSpellCast` = %u but spell %u does not exist, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewSpellCast, qinfo->RewSpellCast);
- qinfo->RewSpellCast = 0; // no spell will be casted on player
+ sLog->outErrorDb("Quest %u has `RewardSpellCast` = %u but spell %u does not exist, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast);
+ qinfo->RewardSpellCast = 0; // no spell will be casted on player
}
else if (!SpellMgr::IsSpellValid(spellInfo))
{
- sLog->outErrorDb("Quest %u has `RewSpellCast` = %u but spell %u is broken, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewSpellCast, qinfo->RewSpellCast);
- qinfo->RewSpellCast = 0; // no spell will be casted on player
+ sLog->outErrorDb("Quest %u has `RewardSpellCast` = %u but spell %u is broken, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast);
+ qinfo->RewardSpellCast = 0; // no spell will be casted on player
}
- else if (GetTalentSpellCost(qinfo->RewSpellCast))
+ else if (GetTalentSpellCost(qinfo->RewardSpellCast))
{
- sLog->outErrorDb("Quest %u has `RewSpell` = %u but spell %u is talent, quest will not have a spell reward.",
- qinfo->GetQuestId(), qinfo->RewSpellCast, qinfo->RewSpellCast);
- qinfo->RewSpellCast = 0; // no spell will be casted on player
+ sLog->outErrorDb("Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.",
+ qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast);
+ qinfo->RewardSpellCast = 0; // no spell will be casted on player
}
}
- if (qinfo->RewMailTemplateId)
+ if (qinfo->RewardMailTemplateId)
{
- if (!sMailTemplateStore.LookupEntry(qinfo->RewMailTemplateId))
+ if (!sMailTemplateStore.LookupEntry(qinfo->RewardMailTemplateId))
{
- sLog->outErrorDb("Quest %u has `RewMailTemplateId` = %u but mail template %u does not exist, quest will not have a mail reward.",
- qinfo->GetQuestId(), qinfo->RewMailTemplateId, qinfo->RewMailTemplateId);
- qinfo->RewMailTemplateId = 0; // no mail will send to player
- qinfo->RewMailDelaySecs = 0; // no mail will send to player
+ sLog->outErrorDb("Quest %u has `RewardMailTemplateId` = %u but mail template %u does not exist, quest will not have a mail reward.",
+ qinfo->GetQuestId(), qinfo->RewardMailTemplateId, qinfo->RewardMailTemplateId);
+ qinfo->RewardMailTemplateId = 0; // no mail will send to player
+ qinfo->RewardMailDelay = 0; // no mail will send to player
}
- else if (usedMailTemplates.find(qinfo->RewMailTemplateId) != usedMailTemplates.end())
+ else if (usedMailTemplates.find(qinfo->RewardMailTemplateId) != usedMailTemplates.end())
{
- std::map<uint32, uint32>::const_iterator used_mt_itr = usedMailTemplates.find(qinfo->RewMailTemplateId);
- sLog->outErrorDb("Quest %u has `RewMailTemplateId` = %u but mail template %u already used for quest %u, quest will not have a mail reward.",
- qinfo->GetQuestId(), qinfo->RewMailTemplateId, qinfo->RewMailTemplateId, used_mt_itr->second);
- qinfo->RewMailTemplateId = 0; // no mail will send to player
- qinfo->RewMailDelaySecs = 0; // no mail will send to player
+ std::map<uint32, uint32>::const_iterator used_mt_itr = usedMailTemplates.find(qinfo->RewardMailTemplateId);
+ sLog->outErrorDb("Quest %u has `RewardMailTemplateId` = %u but mail template %u already used for quest %u, quest will not have a mail reward.",
+ qinfo->GetQuestId(), qinfo->RewardMailTemplateId, qinfo->RewardMailTemplateId, used_mt_itr->second);
+ qinfo->RewardMailTemplateId = 0; // no mail will send to player
+ qinfo->RewardMailDelay = 0; // no mail will send to player
}
else
- usedMailTemplates[qinfo->RewMailTemplateId] = qinfo->GetQuestId();
+ usedMailTemplates[qinfo->RewardMailTemplateId] = qinfo->GetQuestId();
}
- if (qinfo->NextQuestInChain)
+ if (qinfo->NextQuestIdChain)
{
- QuestMap::iterator qNextItr = mQuestTemplates.find(qinfo->NextQuestInChain);
+ QuestMap::iterator qNextItr = mQuestTemplates.find(qinfo->NextQuestIdChain);
if (qNextItr == mQuestTemplates.end())
{
- sLog->outErrorDb("Quest %u has `NextQuestInChain` = %u but quest %u does not exist, quest chain will not work.",
- qinfo->GetQuestId(), qinfo->NextQuestInChain, qinfo->NextQuestInChain);
- qinfo->NextQuestInChain = 0;
+ sLog->outErrorDb("Quest %u has `NextQuestIdChain` = %u but quest %u does not exist, quest chain will not work.",
+ qinfo->GetQuestId(), qinfo->NextQuestIdChain, qinfo->NextQuestIdChain);
+ qinfo->NextQuestIdChain = 0;
}
else
qNextItr->second->prevChainQuests.push_back(qinfo->GetQuestId());
@@ -4336,7 +4315,7 @@ void ObjectMgr::LoadQuests()
mExclusiveQuestGroups.insert(std::pair<int32, uint32>(qinfo->ExclusiveGroup, qinfo->GetQuestId()));
if (qinfo->LimitTime)
qinfo->SetFlag(QUEST_TRINITY_FLAGS_TIMED);
- if (qinfo->PlayersSlain)
+ if (qinfo->RequiredPlayerKills)
qinfo->SetFlag(QUEST_TRINITY_FLAGS_PLAYER_KILL);
}
@@ -5325,7 +5304,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
stmt->setUInt64(0, basetime);
CharacterDatabase.Execute(stmt);
}
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_EXPIRED_MAIL);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_EXPIRED_MAIL);
stmt->setUInt64(0, basetime);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -5336,7 +5315,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
}
std::map<uint32 /*messageId*/, MailItemInfoVec> itemsCache;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_EXPIRED_MAIL_ITEMS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_EXPIRED_MAIL_ITEMS);
stmt->setUInt64(0, basetime);
if (PreparedQueryResult items = CharacterDatabase.Query(stmt))
{
@@ -5369,11 +5348,11 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
m->checked = fields[7].GetUInt32();
m->mailTemplateId = fields[8].GetInt16();
- Player* pl = NULL;
+ Player* player = NULL;
if (serverUp)
- pl = ObjectAccessor::FindPlayer((uint64)m->receiver);
+ player = ObjectAccessor::FindPlayer((uint64)m->receiver);
- if (pl && pl->m_mailsLoaded)
+ if (player && player->m_mailsLoaded)
{ // this code will run very improbably (the time is between 4 and 5 am, in game is online a player, who has old mail
// his in mailbox and he has already listed his mails)
delete m;
@@ -5392,7 +5371,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
// mail open and then not returned
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
stmt->setUInt32(0, itr2->item_guid);
CharacterDatabase.Execute(stmt);
}
@@ -5400,7 +5379,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
else
{
// Mail will be returned
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_MAIL_RETURNED);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_MAIL_RETURNED);
stmt->setUInt32(0, m->receiver);
stmt->setUInt32(1, m->sender);
stmt->setUInt64(2, basetime + 30 * DAY);
@@ -5411,12 +5390,12 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
{
// Update receiver in mail items for its proper delivery, and in instance_item for avoid lost item at sender delete
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_MAIL_ITEM_RECEIVER);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_MAIL_ITEM_RECEIVER);
stmt->setUInt32(0, m->sender);
stmt->setUInt32(1, itr2->item_guid);
CharacterDatabase.Execute(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_ITEM_OWNER);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
stmt->setUInt32(0, m->sender);
stmt->setUInt32(1, itr2->item_guid);
CharacterDatabase.Execute(stmt);
@@ -5894,7 +5873,7 @@ GraveYardData const* ObjectMgr::FindGraveYardData(uint32 id, uint32 zoneId)
return NULL;
}
-bool ObjectMgr::AddGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool inDB)
+bool ObjectMgr::AddGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool persist /*= true*/)
{
if (FindGraveYardData(id, zoneId))
return false;
@@ -5907,16 +5886,21 @@ bool ObjectMgr::AddGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool inD
mGraveYardMap.insert(GraveYardMap::value_type(zoneId, data));
// add link to DB
- if (inDB)
+ if (persist)
{
- WorldDatabase.PExecute("INSERT INTO game_graveyard_zone (id, ghost_zone, faction) "
- "VALUES ('%u', '%u', '%u')", id, zoneId, team);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GRAVEYARD_ZONE);
+
+ stmt->setUInt32(0, id);
+ stmt->setUInt32(1, zoneId);
+ stmt->setUInt16(2, uint16(team));
+
+ WorldDatabase.Execute(stmt);
}
return true;
}
-void ObjectMgr::RemoveGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool inDB)
+void ObjectMgr::RemoveGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool persist /*= false*/)
{
GraveYardMap::iterator graveLow = mGraveYardMap.lower_bound(zoneId);
GraveYardMap::iterator graveUp = mGraveYardMap.upper_bound(zoneId);
@@ -5955,9 +5939,15 @@ void ObjectMgr::RemoveGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool
mGraveYardMap.erase(itr);
// remove link from DB
- if (inDB)
+ if (persist)
{
- WorldDatabase.PExecute("DELETE FROM game_graveyard_zone WHERE id = '%u' AND ghost_zone = '%u' AND faction = '%u'", id, zoneId, team);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GRAVEYARD_ZONE);
+
+ stmt->setUInt32(0, id);
+ stmt->setUInt32(1, zoneId);
+ stmt->setUInt16(2, uint16(team));
+
+ WorldDatabase.Execute(stmt);
}
return;
@@ -6181,10 +6171,10 @@ void ObjectMgr::SetHighestGuids()
m_hiItemGuid = (*result)[0].GetUInt32()+1;
// Cleanup other tables from not existed guids ( >= m_hiItemGuid)
- CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", m_hiItemGuid);
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", m_hiItemGuid);
- CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", m_hiItemGuid);
- CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", m_hiItemGuid);
+ CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", m_hiItemGuid); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", m_hiItemGuid); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", m_hiItemGuid); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", m_hiItemGuid); // One-time query
result = WorldDatabase.Query("SELECT MAX(guid) FROM gameobject");
if (result)
@@ -6729,7 +6719,7 @@ void ObjectMgr::LoadCorpses()
{
uint32 oldMSTime = getMSTime();
- PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_LOAD_CORPSES));
+ PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSES));
if (!result)
{
sLog->outString(">> Loaded 0 corpses. DB table `pet_name_generation` is empty.");
@@ -6742,9 +6732,15 @@ void ObjectMgr::LoadCorpses()
{
Field* fields = result->Fetch();
uint32 guid = fields[16].GetUInt32();
+ CorpseType type = CorpseType(fields[13].GetUInt8());
+ if (type >= MAX_CORPSE_TYPE)
+ {
+ sLog->outError("Corpse (guid: %u) have wrong corpse type (%u), not loading.", guid, type);
+ continue;
+ }
- Corpse* corpse = new Corpse();
- if (!corpse->LoadFromDB(guid, fields))
+ Corpse* corpse = new Corpse(type);
+ if (!corpse->LoadCorpseFromDB(guid, fields))
{
delete corpse;
continue;
@@ -7084,13 +7080,13 @@ void ObjectMgr::LoadQuestPOI()
{
// The first result should have the highest questId
Field* fields = points->Fetch();
- uint32 questId = fields[0].GetUInt32();
- POIs.resize(questId + 1);
+ uint32 questIdMax = fields[0].GetUInt32();
+ POIs.resize(questIdMax + 1);
do
{
- Field* fields = points->Fetch();
+ fields = points->Fetch();
uint32 questId = fields[0].GetUInt32();
uint32 id = fields[1].GetUInt32();
@@ -7266,7 +7262,7 @@ void ObjectMgr::SaveCreatureRespawnTime(uint32 loguid, uint32 instance, time_t t
m_CreatureRespawnTimesMtx.release();
}
- PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CREATURE_RESPAWN);
+ PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CREATURE_RESPAWN);
stmt->setUInt32(0, loguid);
stmt->setUInt64(1, uint64(t));
stmt->setUInt32(2, instance);
@@ -7314,7 +7310,7 @@ void ObjectMgr::SaveGORespawnTime(uint32 loguid, uint32 instance, time_t t)
m_GORespawnTimesMtx.release();
}
- PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GO_RESPAWN);
+ PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GO_RESPAWN);
stmt->setUInt32(0, loguid);
stmt->setUInt64(1, uint64(t));
stmt->setUInt32(2, instance);
@@ -8061,8 +8057,18 @@ bool ObjectMgr::AddGameTele(GameTele& tele)
m_GameTeleMap[new_id] = tele;
- WorldDatabase.PExecute("INSERT INTO game_tele (id, position_x, position_y, position_z, orientation, map, name) VALUES (%u, %f, %f, %f, %f, %d, '%s')",
- new_id, tele.position_x, tele.position_y, tele.position_z, tele.orientation, tele.mapId, tele.name.c_str());
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAME_TELE);
+
+ stmt->setUInt32(0, new_id);
+ stmt->setFloat(1, tele.position_x);
+ stmt->setFloat(2, tele.position_y);
+ stmt->setFloat(3, tele.position_z);
+ stmt->setFloat(4, tele.orientation);
+ stmt->setUInt16(5, uint16(tele.mapId));
+ stmt->setString(6, tele.name);
+
+ WorldDatabase.Execute(stmt);
+
return true;
}
@@ -8080,7 +8086,12 @@ bool ObjectMgr::DeleteGameTele(const std::string& name)
{
if (itr->second.wnameLow == wname)
{
- WorldDatabase.PExecute("DELETE FROM game_tele WHERE name = '%s'", itr->second.name.c_str());
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_TELE);
+
+ stmt->setString(0, itr->second.name);
+
+ WorldDatabase.Execute(stmt);
+
m_GameTeleMap.erase(itr);
return true;
}
@@ -8468,16 +8479,26 @@ void ObjectMgr::LoadGossipMenuItems()
sLog->outString();
}
-void ObjectMgr::AddVendorItem(uint32 entry, uint32 item, int32 maxcount, uint32 incrtime, uint32 extendedcost, bool savetodb)
+void ObjectMgr::AddVendorItem(uint32 entry, uint32 item, int32 maxcount, uint32 incrtime, uint32 extendedCost, bool persist /*= true*/)
{
VendorItemData& vList = m_mCacheVendorItemMap[entry];
- vList.AddItem(item, maxcount, incrtime, extendedcost);
+ vList.AddItem(item, maxcount, incrtime, extendedCost);
- if (savetodb)
- WorldDatabase.PExecute("INSERT INTO npc_vendor (entry, item, maxcount, incrtime, extendedcost) VALUES('%u', '%u', '%u', '%u', '%u')", entry, item, maxcount, incrtime, extendedcost);
+ if (persist)
+ {
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_NPC_VENODR);
+
+ stmt->setUInt32(0, entry);
+ stmt->setUInt32(1, item);
+ stmt->setUInt8(2, maxcount);
+ stmt->setUInt32(3, incrtime);
+ stmt->setUInt32(4, extendedCost);
+
+ WorldDatabase.Execute(stmt);
+ }
}
-bool ObjectMgr::RemoveVendorItem(uint32 entry, uint32 item, bool savetodb)
+bool ObjectMgr::RemoveVendorItem(uint32 entry, uint32 item, bool persist /*= true*/)
{
CacheVendorItemMap::iterator iter = m_mCacheVendorItemMap.find(entry);
if (iter == m_mCacheVendorItemMap.end())
@@ -8486,17 +8507,26 @@ bool ObjectMgr::RemoveVendorItem(uint32 entry, uint32 item, bool savetodb)
if (!iter->second.RemoveItem(item))
return false;
- if (savetodb) WorldDatabase.PExecute("DELETE FROM npc_vendor WHERE entry='%u' AND item='%u'", entry, item);
+ if (persist)
+ {
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_NPC_VENDOR);
+
+ stmt->setUInt32(0, entry);
+ stmt->setUInt32(1, item);
+
+ WorldDatabase.Execute(stmt);
+ }
+
return true;
}
-bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 maxcount, uint32 incrtime, uint32 ExtendedCost, Player* pl, std::set<uint32>* skip_vendors, uint32 ORnpcflag) const
+bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 maxcount, uint32 incrtime, uint32 ExtendedCost, Player* player, std::set<uint32>* skip_vendors, uint32 ORnpcflag) const
{
CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(vendor_entry);
if (!cInfo)
{
- if (pl)
- ChatHandler(pl).SendSysMessage(LANG_COMMAND_VENDORSELECTION);
+ if (player)
+ ChatHandler(player).SendSysMessage(LANG_COMMAND_VENDORSELECTION);
else
sLog->outErrorDb("Table `(game_event_)npc_vendor` have data for not existed creature template (Entry: %u), ignore", vendor_entry);
return false;
@@ -8506,8 +8536,8 @@ bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 max
{
if (!skip_vendors || skip_vendors->count(vendor_entry) == 0)
{
- if (pl)
- ChatHandler(pl).SendSysMessage(LANG_COMMAND_VENDORSELECTION);
+ if (player)
+ ChatHandler(player).SendSysMessage(LANG_COMMAND_VENDORSELECTION);
else
sLog->outErrorDb("Table `(game_event_)npc_vendor` have data for not creature template (Entry: %u) without vendor flag, ignore", vendor_entry);
@@ -8519,8 +8549,8 @@ bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 max
if (!sObjectMgr->GetItemTemplate(item_id))
{
- if (pl)
- ChatHandler(pl).PSendSysMessage(LANG_ITEM_NOT_FOUND, item_id);
+ if (player)
+ ChatHandler(player).PSendSysMessage(LANG_ITEM_NOT_FOUND, item_id);
else
sLog->outErrorDb("Table `(game_event_)npc_vendor` for Vendor (Entry: %u) have in item list non-existed item (%u), ignore", vendor_entry, item_id);
return false;
@@ -8528,8 +8558,8 @@ bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 max
if (ExtendedCost && !sItemExtendedCostStore.LookupEntry(ExtendedCost))
{
- if (pl)
- ChatHandler(pl).PSendSysMessage(LANG_EXTENDED_COST_NOT_EXIST, ExtendedCost);
+ if (player)
+ ChatHandler(player).PSendSysMessage(LANG_EXTENDED_COST_NOT_EXIST, ExtendedCost);
else
sLog->outErrorDb("Table `(game_event_)npc_vendor` have Item (Entry: %u) with wrong ExtendedCost (%u) for vendor (%u), ignore", item_id, ExtendedCost, vendor_entry);
return false;
@@ -8537,16 +8567,16 @@ bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 max
if (maxcount > 0 && incrtime == 0)
{
- if (pl)
- ChatHandler(pl).PSendSysMessage("MaxCount != 0 (%u) but IncrTime == 0", maxcount);
+ if (player)
+ ChatHandler(player).PSendSysMessage("MaxCount != 0 (%u) but IncrTime == 0", maxcount);
else
sLog->outErrorDb("Table `(game_event_)npc_vendor` has `maxcount` (%u) for item %u of vendor (Entry: %u) but `incrtime`=0, ignore", maxcount, item_id, vendor_entry);
return false;
}
else if (maxcount == 0 && incrtime > 0)
{
- if (pl)
- ChatHandler(pl).PSendSysMessage("MaxCount == 0 but IncrTime<>= 0");
+ if (player)
+ ChatHandler(player).PSendSysMessage("MaxCount == 0 but IncrTime<>= 0");
else
sLog->outErrorDb("Table `(game_event_)npc_vendor` has `maxcount`=0 for item %u of vendor (Entry: %u) but `incrtime`<>0, ignore", item_id, vendor_entry);
return false;
@@ -8558,8 +8588,8 @@ bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 max
if (vItems->FindItemCostPair(item_id, ExtendedCost))
{
- if (pl)
- ChatHandler(pl).PSendSysMessage(LANG_ITEM_ALREADY_IN_LIST, item_id, ExtendedCost);
+ if (player)
+ ChatHandler(player).PSendSysMessage(LANG_ITEM_ALREADY_IN_LIST, item_id, ExtendedCost);
else
sLog->outErrorDb("Table `npc_vendor` has duplicate items %u (with extended cost %u) for vendor (Entry: %u), ignoring", item_id, ExtendedCost, vendor_entry);
return false;
@@ -8567,8 +8597,8 @@ bool ObjectMgr::IsVendorItemValid(uint32 vendor_entry, uint32 item_id, int32 max
if (vItems->GetItemCount() >= MAX_VENDOR_ITEMS)
{
- if (pl)
- ChatHandler(pl).SendSysMessage(LANG_COMMAND_ADDVENDORITEMITEMS);
+ if (player)
+ ChatHandler(player).SendSysMessage(LANG_COMMAND_ADDVENDORITEMITEMS);
else
sLog->outErrorDb("Table `npc_vendor` has too many items (%u >= %i) for vendor (Entry: %u), ignore", vItems->GetItemCount(), MAX_VENDOR_ITEMS, vendor_entry);
return false;
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index c557af1c2b2..1b6d90da0a6 100755
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -687,6 +687,11 @@ class ObjectMgr
QuestMap::const_iterator itr = mQuestTemplates.find(quest_id);
return itr != mQuestTemplates.end() ? itr->second : NULL;
}
+ Quest * GetQuestTemplate(uint32 quest_id)
+ {
+ QuestMap::const_iterator itr = mQuestTemplates.find(quest_id);
+ return itr != mQuestTemplates.end() ? itr->second : NULL;
+ }
QuestMap const& GetQuestTemplates() const { return mQuestTemplates; }
uint32 GetQuestForAreaTrigger(uint32 Trigger_ID) const
@@ -710,8 +715,8 @@ class ObjectMgr
WorldSafeLocsEntry const* GetDefaultGraveYard(uint32 team);
WorldSafeLocsEntry const* GetClosestGraveYard(float x, float y, float z, uint32 MapId, uint32 team);
- bool AddGraveYardLink(uint32 id, uint32 zone, uint32 team, bool inDB = true);
- void RemoveGraveYardLink(uint32 id, uint32 zone, uint32 team, bool inDB = false);
+ bool AddGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool persist = true);
+ void RemoveGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool persist = false);
void LoadGraveyardZones();
GraveYardData const* FindGraveYardData(uint32 id, uint32 zone);
@@ -1076,14 +1081,14 @@ class ObjectMgr
time_t GetCreatureRespawnTime(uint32 loguid, uint32 instance)
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, m_CreatureRespawnTimesMtx, 0);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_CreatureRespawnTimesMtx);
return mCreatureRespawnTimes[MAKE_PAIR64(loguid, instance)];
}
void SaveCreatureRespawnTime(uint32 loguid, uint32 instance, time_t t);
void RemoveCreatureRespawnTime(uint32 loguid, uint32 instance);
time_t GetGORespawnTime(uint32 loguid, uint32 instance)
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, m_GORespawnTimesMtx, 0);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_GORespawnTimesMtx);
return mGORespawnTimes[MAKE_PAIR64(loguid, instance)];
}
void SaveGORespawnTime(uint32 loguid, uint32 instance, time_t t);
@@ -1138,9 +1143,9 @@ class ObjectMgr
return &iter->second;
}
- void AddVendorItem(uint32 entry, uint32 item, int32 maxcount, uint32 incrtime, uint32 ExtendedCost, bool savetodb = true); // for event
- bool RemoveVendorItem(uint32 entry, uint32 item, bool savetodb = true); // for event
- bool IsVendorItemValid(uint32 vendor_entry, uint32 item, int32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set<uint32>* skip_vendors = NULL, uint32 ORnpcflag = 0) const;
+ void AddVendorItem(uint32 entry, uint32 item, int32 maxcount, uint32 incrtime, uint32 extendedCost, bool persist = true); // for event
+ bool RemoveVendorItem(uint32 entry, uint32 item, bool persist = true); // for event
+ bool IsVendorItemValid(uint32 vendor_entry, uint32 item, int32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* player = NULL, std::set<uint32>* skip_vendors = NULL, uint32 ORnpcflag = 0) const;
void LoadScriptNames();
ScriptNameMap &GetScriptNames() { return m_scriptNames; }
diff --git a/src/server/game/Grids/Cells/Cell.h b/src/server/game/Grids/Cells/Cell.h
index a7fd879358e..67b862845b9 100755
--- a/src/server/game/Grids/Cells/Cell.h
+++ b/src/server/game/Grids/Cells/Cell.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -29,87 +29,34 @@
class Map;
class WorldObject;
-enum District
-{
- UPPER_DISTRICT = 1,
- LOWER_DISTRICT = 1 << 1,
- LEFT_DISTRICT = 1 << 2,
- RIGHT_DISTRICT = 1 << 3,
- CENTER_DISTRICT = 1 << 4,
- UPPER_LEFT_DISTRICT = (UPPER_DISTRICT | LEFT_DISTRICT),
- UPPER_RIGHT_DISTRICT = (UPPER_DISTRICT | RIGHT_DISTRICT),
- LOWER_LEFT_DISTRICT = (LOWER_DISTRICT | LEFT_DISTRICT),
- LOWER_RIGHT_DISTRICT = (LOWER_DISTRICT | RIGHT_DISTRICT),
- ALL_DISTRICT = (UPPER_DISTRICT | LOWER_DISTRICT | LEFT_DISTRICT | RIGHT_DISTRICT | CENTER_DISTRICT)
-};
-
struct CellArea
{
- CellArea() : right_offset(0), left_offset(0), upper_offset(0), lower_offset(0) {}
- CellArea(int right, int left, int upper, int lower) : right_offset(right), left_offset(left), upper_offset(upper), lower_offset(lower) {}
- bool operator!() const { return !right_offset && !left_offset && !upper_offset && !lower_offset; }
+ CellArea() {}
+ CellArea(CellCoord low, CellCoord high) : low_bound(low), high_bound(high) {}
+
+ bool operator!() const { return low_bound == high_bound; }
- void ResizeBorders(CellPair& begin_cell, CellPair& end_cell) const
+ void ResizeBorders(CellCoord& begin_cell, CellCoord& end_cell) const
{
- begin_cell << left_offset;
- begin_cell -= lower_offset;
- end_cell >> right_offset;
- end_cell += upper_offset;
+ begin_cell = low_bound;
+ end_cell = high_bound;
}
- int right_offset;
- int left_offset;
- int upper_offset;
- int lower_offset;
+ CellCoord low_bound;
+ CellCoord high_bound;
};
struct Cell
{
Cell() { data.All = 0; }
- Cell(const Cell &cell) { data.All = cell.data.All; }
- explicit Cell(CellPair const& p);
-
- void operator|=(Cell &cell)
- {
- data.Part.reserved = 0;
- cell.data.Part.reserved = 0;
- uint32 x, y, old_x, old_y;
- Compute(x, y);
- cell.Compute(old_x, old_y);
-
- if (std::abs(int(x-old_x)) > 1 || std::abs(int(y-old_y)) > 1)
- {
- data.Part.reserved = ALL_DISTRICT;
- cell.data.Part.reserved = ALL_DISTRICT;
- return;
- }
-
- if (x < old_x)
- {
- data.Part.reserved |= LEFT_DISTRICT;
- cell.data.Part.reserved |= RIGHT_DISTRICT;
- }
- else if (old_x < x)
- {
- data.Part.reserved |= RIGHT_DISTRICT;
- cell.data.Part.reserved |= LEFT_DISTRICT;
- }
- if (y < old_y)
- {
- data.Part.reserved |= UPPER_DISTRICT;
- cell.data.Part.reserved |= LOWER_DISTRICT;
- }
- else if (old_y < y)
- {
- data.Part.reserved |= LOWER_DISTRICT;
- cell.data.Part.reserved |= UPPER_DISTRICT;
- }
- }
+ Cell(Cell const& cell) { data.All = cell.data.All; }
+ explicit Cell(CellCoord const& p);
+ explicit Cell(float x, float y);
void Compute(uint32 &x, uint32 &y) const
{
- x = data.Part.grid_x*MAX_NUMBER_OF_CELLS + data.Part.cell_x;
- y = data.Part.grid_y*MAX_NUMBER_OF_CELLS + data.Part.cell_y;
+ x = data.Part.grid_x * MAX_NUMBER_OF_CELLS + data.Part.cell_x;
+ y = data.Part.grid_y * MAX_NUMBER_OF_CELLS + data.Part.cell_y;
}
bool DiffCell(const Cell &cell) const
@@ -131,21 +78,21 @@ struct Cell
bool NoCreate() const { return data.Part.nocreate; }
void SetNoCreate() { data.Part.nocreate = 1; }
- CellPair cellPair() const
+ CellCoord GetCellCoord() const
{
- return CellPair(
- data.Part.grid_x*MAX_NUMBER_OF_CELLS+data.Part.cell_x,
- data.Part.grid_y*MAX_NUMBER_OF_CELLS+data.Part.cell_y);
+ return CellCoord(
+ data.Part.grid_x * MAX_NUMBER_OF_CELLS+data.Part.cell_x,
+ data.Part.grid_y * MAX_NUMBER_OF_CELLS+data.Part.cell_y);
}
- Cell& operator=(const Cell &cell)
+ Cell& operator=(Cell const& cell)
{
this->data.All = cell.data.All;
return *this;
}
- bool operator == (const Cell &cell) const { return (data.All == cell.data.All); }
- bool operator != (const Cell &cell) const { return !operator == (cell); }
+ bool operator == (Cell const& cell) const { return (data.All == cell.data.All); }
+ bool operator != (Cell const& cell) const { return !operator == (cell); }
union
{
struct
@@ -160,15 +107,13 @@ struct Cell
uint32 All;
} data;
- template<class T, class CONTAINER> void Visit(const CellPair&, TypeContainerVisitor<T, CONTAINER> &visitor, Map &) const;
- template<class T, class CONTAINER> void Visit(const CellPair&, TypeContainerVisitor<T, CONTAINER> &visitor, Map &, const WorldObject&, float) const;
- template<class T, class CONTAINER> void Visit(const CellPair&, TypeContainerVisitor<T, CONTAINER> &visitor, Map &, float, float, float) const;
+ template<class T, class CONTAINER> void Visit(CellCoord const&, TypeContainerVisitor<T, CONTAINER>& visitor, Map &, WorldObject const&, float) const;
+ template<class T, class CONTAINER> void Visit(CellCoord const&, TypeContainerVisitor<T, CONTAINER>& visitor, Map &, float, float, float) const;
- static CellArea CalculateCellArea(const WorldObject &obj, float radius);
static CellArea CalculateCellArea(float x, float y, float radius);
private:
- template<class T, class CONTAINER> void VisitCircle(TypeContainerVisitor<T, CONTAINER> &, Map &, const CellPair&, const CellPair&) const;
+ template<class T, class CONTAINER> void VisitCircle(TypeContainerVisitor<T, CONTAINER> &, Map &, CellCoord const&, CellCoord const&) const;
};
#endif
diff --git a/src/server/game/Grids/Cells/CellImpl.h b/src/server/game/Grids/Cells/CellImpl.h
index d36892ffcb0..77830bc59d5 100755..100644
--- a/src/server/game/Grids/Cells/CellImpl.h
+++ b/src/server/game/Grids/Cells/CellImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
#include "Map.h"
#include "Object.h"
-inline Cell::Cell(CellPair const& p)
+inline Cell::Cell(CellCoord const& p)
{
data.Part.grid_x = p.x_coord / MAX_NUMBER_OF_CELLS;
data.Part.grid_y = p.y_coord / MAX_NUMBER_OF_CELLS;
@@ -35,143 +35,35 @@ inline Cell::Cell(CellPair const& p)
data.Part.reserved = 0;
}
-template<class T, class CONTAINER>
-inline void
-Cell::Visit(const CellPair& standing_cell, TypeContainerVisitor<T, CONTAINER> &visitor, Map &m) const
-{
- if (standing_cell.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || standing_cell.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
- return;
-
- uint16 district = (District)this->data.Part.reserved;
- if (district == CENTER_DISTRICT)
- {
- m.Visit(*this, visitor);
- return;
- }
-
- // set up the cell range based on the district
- // the overloaded operators handle range checking
- CellPair begin_cell = standing_cell;
- CellPair end_cell = standing_cell;
-
- switch (district)
- {
- case ALL_DISTRICT:
- {
- begin_cell << 1; begin_cell -= 1; // upper left
- end_cell >> 1; end_cell += 1; // lower right
- break;
- }
- case UPPER_LEFT_DISTRICT:
- {
- begin_cell << 1; begin_cell -= 1; // upper left
- break;
- }
- case UPPER_RIGHT_DISTRICT:
- {
- begin_cell -= 1; // up
- end_cell >> 1; // right
- break;
- }
- case LOWER_LEFT_DISTRICT:
- {
- begin_cell << 1; // left
- end_cell += 1; // down
- break;
- }
- case LOWER_RIGHT_DISTRICT:
- {
- end_cell >> 1; end_cell += 1; // lower right
- break;
- }
- case LEFT_DISTRICT:
- {
- begin_cell -= 1; // up
- end_cell >> 1; end_cell += 1; // lower right
- break;
- }
- case RIGHT_DISTRICT:
- {
- begin_cell << 1; begin_cell -= 1; // upper left
- end_cell += 1; // down
- break;
- }
- case UPPER_DISTRICT:
- {
- begin_cell << 1; begin_cell -= 1; // upper left
- end_cell >> 1; // right
- break;
- }
- case LOWER_DISTRICT:
- {
- begin_cell << 1; // left
- end_cell >> 1; end_cell += 1; // lower right
- break;
- }
- default:
- {
- ASSERT(false);
- break;
- }
- }
-
- // loop the cell range
- for (uint32 x = begin_cell.x_coord; x <= end_cell.x_coord; x++)
- {
- for (uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; y++)
- {
- CellPair cell_pair(x, y);
- Cell r_zone(cell_pair);
- r_zone.data.Part.nocreate = this->data.Part.nocreate;
- m.Visit(r_zone, visitor);
- }
- }
-}
-
-inline int CellHelper(const float radius)
-{
- if (radius < 1.0f)
- return 0;
-
- return (int)ceilf(radius/SIZE_OF_GRID_CELL);
-}
-
-inline CellArea Cell::CalculateCellArea(const WorldObject &obj, float radius)
+inline Cell::Cell(float x, float y)
{
- return Cell::CalculateCellArea(obj.GetPositionX(), obj.GetPositionY(), radius);
+ CellCoord p = Trinity::ComputeCellCoord(x, y);
+ data.Part.grid_x = p.x_coord / MAX_NUMBER_OF_CELLS;
+ data.Part.grid_y = p.y_coord / MAX_NUMBER_OF_CELLS;
+ data.Part.cell_x = p.x_coord % MAX_NUMBER_OF_CELLS;
+ data.Part.cell_y = p.y_coord % MAX_NUMBER_OF_CELLS;
+ data.Part.nocreate = 0;
+ data.Part.reserved = 0;
}
inline CellArea Cell::CalculateCellArea(float x, float y, float radius)
{
if (radius <= 0.0f)
- return CellArea();
-
- //lets calculate object coord offsets from cell borders.
- //TODO: add more correct/generic method for this task
- const float x_offset = (x - CENTER_GRID_CELL_OFFSET)/SIZE_OF_GRID_CELL;
- const float y_offset = (y - CENTER_GRID_CELL_OFFSET)/SIZE_OF_GRID_CELL;
-
- const float x_val = floor(x_offset + CENTER_GRID_CELL_ID + 0.5f);
- const float y_val = floor(y_offset + CENTER_GRID_CELL_ID + 0.5f);
-
- const float x_off = (x_offset - x_val + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
- const float y_off = (y_offset - y_val + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
+ {
+ CellCoord center = Trinity::ComputeCellCoord(x, y).normalize();
+ return CellArea(center, center);
+ }
- const float tmp_diff = radius - CENTER_GRID_CELL_OFFSET;
- //lets calculate upper/lower/right/left corners for cell search
- int right = CellHelper(tmp_diff + x_off);
- int left = CellHelper(tmp_diff - x_off);
- int upper = CellHelper(tmp_diff + y_off);
- int lower = CellHelper(tmp_diff - y_off);
+ CellCoord centerX = Trinity::ComputeCellCoord(x - radius, y - radius).normalize();
+ CellCoord centerY = Trinity::ComputeCellCoord(x + radius, y + radius).normalize();
- return CellArea(right, left, upper, lower);
+ return CellArea(centerX, centerY);
}
template<class T, class CONTAINER>
-inline void
-Cell::Visit(const CellPair& standing_cell, TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, float radius, float x_off, float y_off) const
+inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, float radius, float x_off, float y_off) const
{
- if (standing_cell.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || standing_cell.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ if (!standing_cell.IsCoordValid())
return;
//no jokes here... Actually placing ASSERT() here was good idea, but
@@ -179,7 +71,7 @@ Cell::Visit(const CellPair& standing_cell, TypeContainerVisitor<T, CONTAINER> &v
//maybe it is better to just return when radius <= 0.0f?
if (radius <= 0.0f)
{
- m.Visit(*this, visitor);
+ map.Visit(*this, visitor);
return;
}
//lets limit the upper value for search radius
@@ -191,57 +83,51 @@ Cell::Visit(const CellPair& standing_cell, TypeContainerVisitor<T, CONTAINER> &v
//if radius fits inside standing cell
if (!area)
{
- m.Visit(*this, visitor);
+ map.Visit(*this, visitor);
return;
}
- CellPair begin_cell = standing_cell;
- CellPair end_cell = standing_cell;
-
- area.ResizeBorders(begin_cell, end_cell);
//visit all cells, found in CalculateCellArea()
//if radius is known to reach cell area more than 4x4 then we should call optimized VisitCircle
//currently this technique works with MAX_NUMBER_OF_CELLS 16 and higher, with lower values
//there are nothing to optimize because SIZE_OF_GRID_CELL is too big...
- if (((end_cell.x_coord - begin_cell.x_coord) > 4) && ((end_cell.y_coord - begin_cell.y_coord) > 4))
+ if (((area.high_bound.x_coord - area.low_bound.x_coord) > 4) && ((area.high_bound.y_coord - area.low_bound.y_coord) > 4))
{
- VisitCircle(visitor, m, begin_cell, end_cell);
+ VisitCircle(visitor, map, area.low_bound, area.high_bound);
return;
}
//ALWAYS visit standing cell first!!! Since we deal with small radiuses
//it is very essential to call visitor for standing cell firstly...
- m.Visit(*this, visitor);
+ map.Visit(*this, visitor);
// loop the cell range
- for (uint32 x = begin_cell.x_coord; x <= end_cell.x_coord; ++x)
+ for (uint32 x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x)
{
- for (uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; ++y)
+ for (uint32 y = area.low_bound.y_coord; y <= area.high_bound.y_coord; ++y)
{
- CellPair cell_pair(x, y);
+ CellCoord cellCoord(x, y);
//lets skip standing cell since we already visited it
- if (cell_pair != standing_cell)
+ if (cellCoord != standing_cell)
{
- Cell r_zone(cell_pair);
+ Cell r_zone(cellCoord);
r_zone.data.Part.nocreate = this->data.Part.nocreate;
- m.Visit(r_zone, visitor);
+ map.Visit(r_zone, visitor);
}
}
}
}
template<class T, class CONTAINER>
-inline void
-Cell::Visit(const CellPair& l, TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, const WorldObject &obj, float radius) const
+inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, WorldObject const& obj, float radius) const
{
//we should increase search radius by object's radius, otherwise
//we could have problems with huge creatures, which won't attack nearest players etc
- Visit(l, visitor, m, radius + obj.GetObjectSize(), obj.GetPositionX(), obj.GetPositionY());
+ Visit(standing_cell, visitor, map, radius + obj.GetObjectSize(), obj.GetPositionX(), obj.GetPositionY());
}
template<class T, class CONTAINER>
-inline void
-Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, const CellPair& begin_cell, const CellPair& end_cell) const
+inline void Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, CellCoord const& begin_cell, CellCoord const& end_cell) const
{
//here is an algorithm for 'filling' circum-squared octagon
uint32 x_shift = (uint32)ceilf((end_cell.x_coord - begin_cell.x_coord) * 0.3f - 0.5f);
@@ -254,10 +140,10 @@ Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, const Cel
{
for (uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; ++y)
{
- CellPair cell_pair(x, y);
- Cell r_zone(cell_pair);
+ CellCoord cellCoord(x, y);
+ Cell r_zone(cellCoord);
r_zone.data.Part.nocreate = this->data.Part.nocreate;
- m.Visit(r_zone, visitor);
+ map.Visit(r_zone, visitor);
}
}
@@ -278,16 +164,16 @@ Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, const Cel
{
//we visit cells symmetrically from both sides, heading from center to sides and from up to bottom
//e.g. filling 2 trapezoids after filling central cell strip...
- CellPair cell_pair_left(x_start - step, y);
- Cell r_zone_left(cell_pair_left);
+ CellCoord cellCoord_left(x_start - step, y);
+ Cell r_zone_left(cellCoord_left);
r_zone_left.data.Part.nocreate = this->data.Part.nocreate;
- m.Visit(r_zone_left, visitor);
+ map.Visit(r_zone_left, visitor);
//right trapezoid cell visit
- CellPair cell_pair_right(x_end + step, y);
- Cell r_zone_right(cell_pair_right);
+ CellCoord cellCoord_right(x_end + step, y);
+ Cell r_zone_right(cellCoord_right);
r_zone_right.data.Part.nocreate = this->data.Part.nocreate;
- m.Visit(r_zone_right, visitor);
+ map.Visit(r_zone_right, visitor);
}
}
}
diff --git a/src/server/game/Grids/Grid.h b/src/server/game/Grids/Grid.h
index a6e1316718e..d9350e9e897 100755
--- a/src/server/game/Grids/Grid.h
+++ b/src/server/game/Grids/Grid.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -58,63 +58,71 @@ class Grid
*/
template<class SPECIFIC_OBJECT> void AddWorldObject(SPECIFIC_OBJECT *obj)
{
- if (!i_objects.template insert<SPECIFIC_OBJECT>(obj))
- ASSERT(false);
+ i_objects.template insert<SPECIFIC_OBJECT>(obj);
+ ASSERT(obj->IsInGrid());
}
/** an object of interested exits the grid
*/
- template<class SPECIFIC_OBJECT> void RemoveWorldObject(SPECIFIC_OBJECT *obj)
- {
- if (!i_objects.template remove<SPECIFIC_OBJECT>(obj))
- ASSERT(false);
- }
+ //Actually an unlink is enough, no need to go through the container
+ //template<class SPECIFIC_OBJECT> void RemoveWorldObject(SPECIFIC_OBJECT *obj)
+ //{
+ // ASSERT(obj->GetGridRef().isValid());
+ // i_objects.template remove<SPECIFIC_OBJECT>(obj);
+ // ASSERT(!obj->GetGridRef().isValid());
+ //}
/** Refreshes/update the grid. This required for remote grids.
*/
- void RefreshGrid(void) { /* TBI */}
+ //void RefreshGrid(void) { /* TBI */}
/** Locks a grid. Any object enters must wait until the grid is unlock.
*/
- void LockGrid(void) { /* TBI */ }
+ //void LockGrid(void) { /* TBI */ }
/** Unlocks the grid.
*/
- void UnlockGrid(void) { /* TBI */ }
+ //void UnlockGrid(void) { /* TBI */ }
- /** Grid visitor for grid objects
- */
- template<class T> void Visit(TypeContainerVisitor<T, TypeMapContainer<GRID_OBJECT_TYPES> > &visitor)
+ // Visit grid objects
+ template<class T>
+ void Visit(TypeContainerVisitor<T, TypeMapContainer<GRID_OBJECT_TYPES> > &visitor)
{
visitor.Visit(i_container);
}
- /** Grid visitor for world objects
- */
- template<class T> void Visit(TypeContainerVisitor<T, TypeMapContainer<WORLD_OBJECT_TYPES> > &visitor)
+ // Visit world objects
+ template<class T>
+ void Visit(TypeContainerVisitor<T, TypeMapContainer<WORLD_OBJECT_TYPES> > &visitor)
{
visitor.Visit(i_objects);
}
/** Returns the number of object within the grid.
*/
- unsigned int ActiveObjectsInGrid(void) const { return /*m_activeGridObjects.size()+*/i_objects.template Count<ACTIVE_OBJECT>(); }
+ //unsigned int ActiveObjectsInGrid(void) const { return i_objects.template Count<ACTIVE_OBJECT>(); }
+ template<class T>
+ uint32 GetWorldObjectCountInGrid() const
+ {
+ return i_objects.template Count<T>();
+ }
/** Inserts a container type object into the grid.
*/
template<class SPECIFIC_OBJECT> void AddGridObject(SPECIFIC_OBJECT *obj)
{
- if (!i_container.template insert<SPECIFIC_OBJECT>(obj))
- ASSERT(false);
+ i_container.template insert<SPECIFIC_OBJECT>(obj);
+ ASSERT(obj->IsInGrid());
}
/** Removes a containter type object from the grid
*/
- template<class SPECIFIC_OBJECT> void RemoveGridObject(SPECIFIC_OBJECT *obj)
- {
- if (!i_container.template remove<SPECIFIC_OBJECT>(obj))
- ASSERT(false);
- }
+ //template<class SPECIFIC_OBJECT> void RemoveGridObject(SPECIFIC_OBJECT *obj)
+ //{
+ // ASSERT(obj->GetGridRef().isValid());
+ // i_container.template remove<SPECIFIC_OBJECT>(obj);
+ // ASSERT(!obj->GetGridRef().isValid());
+ //}
/*bool NoWorldObjectInGrid() const
{
diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h
index a284e342ca9..8651680cb49 100755..100644
--- a/src/server/game/Grids/GridDefines.h
+++ b/src/server/game/Grids/GridDefines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -71,21 +71,27 @@ typedef NGrid<MAX_NUMBER_OF_CELLS, Player, AllWorldObjectTypes, AllGridObjectTyp
typedef TypeMapContainer<AllGridObjectTypes> GridTypeMapContainer;
typedef TypeMapContainer<AllWorldObjectTypes> WorldTypeMapContainer;
-template<const unsigned int LIMIT>
+template<uint32 LIMIT>
struct CoordPair
{
- CoordPair(uint32 x=0, uint32 y=0) : x_coord(x), y_coord(y) {}
- CoordPair(const CoordPair<LIMIT> &obj) : x_coord(obj.x_coord), y_coord(obj.y_coord) {}
- bool operator == (const CoordPair<LIMIT> &obj) const { return (obj.x_coord == x_coord && obj.y_coord == y_coord); }
- bool operator != (const CoordPair<LIMIT> &obj) const { return !operator == (obj); }
- CoordPair<LIMIT>& operator=(const CoordPair<LIMIT> &obj)
+ CoordPair(uint32 x=0, uint32 y=0)
+ : x_coord(x)
+ , y_coord(y)
+ {}
+
+ CoordPair(const CoordPair<LIMIT> &obj)
+ : x_coord(obj.x_coord)
+ , y_coord(obj.y_coord)
+ {}
+
+ CoordPair<LIMIT> & operator=(const CoordPair<LIMIT> &obj)
{
x_coord = obj.x_coord;
y_coord = obj.y_coord;
return *this;
}
- void operator<<(const uint32 val)
+ void dec_x(uint32 val)
{
if (x_coord > val)
x_coord -= val;
@@ -93,15 +99,15 @@ struct CoordPair
x_coord = 0;
}
- void operator>>(const uint32 val)
+ void inc_x(uint32 val)
{
- if (x_coord+val < LIMIT)
+ if (x_coord + val < LIMIT)
x_coord += val;
else
x_coord = LIMIT - 1;
}
- void operator-=(const uint32 val)
+ void dec_y(uint32 val)
{
if (y_coord > val)
y_coord -= val;
@@ -109,20 +115,49 @@ struct CoordPair
y_coord = 0;
}
- void operator+=(const uint32 val)
+ void inc_y(uint32 val)
{
- if (y_coord+val < LIMIT)
+ if (y_coord + val < LIMIT)
y_coord += val;
else
y_coord = LIMIT - 1;
}
+ bool IsCoordValid() const
+ {
+ return x_coord < LIMIT && y_coord < LIMIT;
+ }
+
+ CoordPair& normalize()
+ {
+ x_coord = std::min(x_coord, LIMIT - 1);
+ y_coord = std::min(y_coord, LIMIT - 1);
+ return *this;
+ }
+
+ uint32 GetId() const
+ {
+ return y_coord * LIMIT + x_coord;
+ }
+
uint32 x_coord;
uint32 y_coord;
};
-typedef CoordPair<MAX_NUMBER_OF_GRIDS> GridPair;
-typedef CoordPair<TOTAL_NUMBER_OF_CELLS_PER_MAP> CellPair;
+template<uint32 LIMIT>
+bool operator==(const CoordPair<LIMIT> &p1, const CoordPair<LIMIT> &p2)
+{
+ return (p1.x_coord == p2.x_coord && p1.y_coord == p2.y_coord);
+}
+
+template<uint32 LIMIT>
+bool operator!=(const CoordPair<LIMIT> &p1, const CoordPair<LIMIT> &p2)
+{
+ return !(p1 == p2);
+}
+
+typedef CoordPair<MAX_NUMBER_OF_GRIDS> GridCoord;
+typedef CoordPair<TOTAL_NUMBER_OF_CELLS_PER_MAP> CellCoord;
namespace Trinity
{
@@ -133,44 +168,44 @@ namespace Trinity
double x_offset = (double(x) - center_offset)/size;
double y_offset = (double(y) - center_offset)/size;
- int x_val = int(x_offset+CENTER_VAL + 0.5);
- int y_val = int(y_offset+CENTER_VAL + 0.5);
+ int x_val = int(x_offset+CENTER_VAL + 0.5f);
+ int y_val = int(y_offset+CENTER_VAL + 0.5f);
return RET_TYPE(x_val, y_val);
}
- inline GridPair ComputeGridPair(float x, float y)
+ inline GridCoord ComputeGridCoord(float x, float y)
{
- return Compute<GridPair, CENTER_GRID_ID>(x, y, CENTER_GRID_OFFSET, SIZE_OF_GRIDS);
+ return Compute<GridCoord, CENTER_GRID_ID>(x, y, CENTER_GRID_OFFSET, SIZE_OF_GRIDS);
}
- inline CellPair ComputeCellPair(float x, float y)
+ inline CellCoord ComputeCellCoord(float x, float y)
{
- return Compute<CellPair, CENTER_GRID_CELL_ID>(x, y, CENTER_GRID_CELL_OFFSET, SIZE_OF_GRID_CELL);
+ return Compute<CellCoord, CENTER_GRID_CELL_ID>(x, y, CENTER_GRID_CELL_OFFSET, SIZE_OF_GRID_CELL);
}
- inline CellPair ComputeCellPair(float x, float y, float &x_off, float &y_off)
+ inline CellCoord ComputeCellCoord(float x, float y, float &x_off, float &y_off)
{
double x_offset = (double(x) - CENTER_GRID_CELL_OFFSET)/SIZE_OF_GRID_CELL;
double y_offset = (double(y) - CENTER_GRID_CELL_OFFSET)/SIZE_OF_GRID_CELL;
- int x_val = int(x_offset + CENTER_GRID_CELL_ID + 0.5);
- int y_val = int(y_offset + CENTER_GRID_CELL_ID + 0.5);
+ int x_val = int(x_offset + CENTER_GRID_CELL_ID + 0.5f);
+ int y_val = int(y_offset + CENTER_GRID_CELL_ID + 0.5f);
x_off = (float(x_offset) - x_val + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
y_off = (float(y_offset) - y_val + CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL;
- return CellPair(x_val, y_val);
+ return CellCoord(x_val, y_val);
}
inline void NormalizeMapCoord(float &c)
{
- if (c > MAP_HALFSIZE - 0.5)
- c = MAP_HALFSIZE - 0.5;
- else if (c < -(MAP_HALFSIZE - 0.5))
- c = -(MAP_HALFSIZE - 0.5);
+ if (c > MAP_HALFSIZE - 0.5f)
+ c = MAP_HALFSIZE - 0.5f;
+ else if (c < -(MAP_HALFSIZE - 0.5f))
+ c = -(MAP_HALFSIZE - 0.5f);
}
inline bool IsValidMapCoord(float c)
{
- return finite(c) && (std::fabs(c) <= MAP_HALFSIZE - 0.5);
+ return finite(c) && (std::fabs(c) <= MAP_HALFSIZE - 0.5f);
}
inline bool IsValidMapCoord(float x, float y)
diff --git a/src/server/game/Grids/GridLoader.h b/src/server/game/Grids/GridLoader.h
index 0e762d3a07e..85393872eb9 100755
--- a/src/server/game/Grids/GridLoader.h
+++ b/src/server/game/Grids/GridLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -30,6 +30,8 @@
GridLoader manages the grid (both local and remote).
*/
+//I cannot see why this cannot be replaced by a Grid::Visit
+/*
#include "Define.h"
#include "Grid.h"
#include "TypeContainerVisitor.h"
@@ -44,8 +46,7 @@ class GridLoader
{
public:
- /** Loads the grid
- */
+ // Loads the grid
template<class LOADER>
void Load(Grid<ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> &grid, LOADER &loader)
{
@@ -54,8 +55,7 @@ class GridLoader
grid.UnlockGrid();
}
- /** Stop the grid
- */
+ // Stop the grid
template<class STOPER>
void Stop(Grid<ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> &grid, STOPER &stoper)
{
@@ -63,8 +63,8 @@ class GridLoader
stoper.Stop(grid);
grid.UnlockGrid();
}
- /** Unloads the grid
- */
+
+ // Unloads the grid
template<class UNLOADER>
void Unload(Grid<ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> &grid, UNLOADER &unloader)
{
@@ -73,5 +73,6 @@ class GridLoader
grid.UnlockGrid();
}
};
+*/
#endif
diff --git a/src/server/game/Grids/GridRefManager.h b/src/server/game/Grids/GridRefManager.h
index cd972e237ca..66b6313c997 100755
--- a/src/server/game/Grids/GridRefManager.h
+++ b/src/server/game/Grids/GridRefManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Grids/GridReference.h b/src/server/game/Grids/GridReference.h
index 601542daa0d..107bddf04eb 100755
--- a/src/server/game/Grids/GridReference.h
+++ b/src/server/game/Grids/GridReference.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Grids/GridStates.cpp b/src/server/game/Grids/GridStates.cpp
index 91bb926fd02..c2f66bc3e8a 100755
--- a/src/server/game/Grids/GridStates.cpp
+++ b/src/server/game/Grids/GridStates.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -21,24 +21,23 @@
#include "Grid.h"
#include "Log.h"
-void
-InvalidState::Update(Map &, NGridType &, GridInfo &, const uint32 /*x*/, const uint32 /*y*/, const uint32) const
+void InvalidState::Update(Map &, NGridType &, GridInfo &, const uint32) const
{
}
-void
-ActiveState::Update(Map &m, NGridType &grid, GridInfo & info, const uint32 x, const uint32 y, const uint32 t_diff) const
+void ActiveState::Update(Map &m, NGridType &grid, GridInfo & info, const uint32 t_diff) const
{
// Only check grid activity every (grid_expiry/10) ms, because it's really useless to do it every cycle
info.UpdateTimeTracker(t_diff);
if (info.getTimeTracker().Passed())
{
- if (grid.ActiveObjectsInGrid() == 0 && !m.ActiveObjectsNearGrid(x, y))
+ if (!grid.GetWorldObjectCountInNGrid<Player>() && !m.ActiveObjectsNearGrid(grid))
{
- ObjectGridStoper stoper(grid);
- stoper.StopN();
+ ObjectGridStoper worker;
+ TypeContainerVisitor<ObjectGridStoper, GridTypeMapContainer> visitor(worker);
+ grid.VisitAllGrids(visitor);
grid.SetGridState(GRID_STATE_IDLE);
- sLog->outDebug(LOG_FILTER_MAPS, "Grid[%u, %u] on map %u moved to IDLE state", x, y, m.GetId());
+ sLog->outDebug(LOG_FILTER_MAPS, "Grid[%u, %u] on map %u moved to IDLE state", grid.getX(), grid.getY(), m.GetId());
}
else
{
@@ -47,25 +46,23 @@ ActiveState::Update(Map &m, NGridType &grid, GridInfo & info, const uint32 x, co
}
}
-void
-IdleState::Update(Map &m, NGridType &grid, GridInfo &, const uint32 x, const uint32 y, const uint32) const
+void IdleState::Update(Map &m, NGridType &grid, GridInfo &, const uint32) const
{
m.ResetGridExpiry(grid);
grid.SetGridState(GRID_STATE_REMOVAL);
- sLog->outDebug(LOG_FILTER_MAPS, "Grid[%u, %u] on map %u moved to REMOVAL state", x, y, m.GetId());
+ sLog->outDebug(LOG_FILTER_MAPS, "Grid[%u, %u] on map %u moved to REMOVAL state", grid.getX(), grid.getY(), m.GetId());
}
-void
-RemovalState::Update(Map &m, NGridType &grid, GridInfo &info, const uint32 x, const uint32 y, const uint32 t_diff) const
+void RemovalState::Update(Map &m, NGridType &grid, GridInfo &info, const uint32 t_diff) const
{
if (!info.getUnloadLock())
{
info.UpdateTimeTracker(t_diff);
if (info.getTimeTracker().Passed())
{
- if (!m.UnloadGrid(x, y, false))
+ if (!m.UnloadGrid(grid, false))
{
- sLog->outDebug(LOG_FILTER_MAPS, "Grid[%u, %u] for map %u differed unloading due to players or active objects nearby", x, y, m.GetId());
+ sLog->outDebug(LOG_FILTER_MAPS, "Grid[%u, %u] for map %u differed unloading due to players or active objects nearby", grid.getX(), grid.getY(), m.GetId());
m.ResetGridExpiry(grid);
}
}
diff --git a/src/server/game/Grids/GridStates.h b/src/server/game/Grids/GridStates.h
index 81bf749b63f..08b66f6bb35 100755
--- a/src/server/game/Grids/GridStates.h
+++ b/src/server/game/Grids/GridStates.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -40,35 +40,31 @@ class GridState
void setMagic() { i_Magic = MAGIC_TESTVAL; }
unsigned int i_Magic;
#endif
- virtual void Update(Map &, NGridType&, GridInfo &, const uint32 x, const uint32 y, const uint32 t_diff) const = 0;
+ virtual void Update(Map &, NGridType&, GridInfo &, const uint32 t_diff) const = 0;
};
class InvalidState : public GridState
{
public:
-
- void Update(Map &, NGridType &, GridInfo &, const uint32 x, const uint32 y, const uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, const uint32 t_diff) const;
};
class ActiveState : public GridState
{
public:
-
- void Update(Map &, NGridType &, GridInfo &, const uint32 x, const uint32 y, const uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, const uint32 t_diff) const;
};
class IdleState : public GridState
{
public:
-
- void Update(Map &, NGridType &, GridInfo &, const uint32 x, const uint32 y, const uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, const uint32 t_diff) const;
};
class RemovalState : public GridState
{
public:
-
- void Update(Map &, NGridType &, GridInfo &, const uint32 x, const uint32 y, const uint32 t_diff) const;
+ void Update(Map &, NGridType &, GridInfo &, const uint32 t_diff) const;
};
#endif
diff --git a/src/server/game/Grids/NGrid.h b/src/server/game/Grids/NGrid.h
index cd2345e439d..b5701a7a590 100755
--- a/src/server/game/Grids/NGrid.h
+++ b/src/server/game/Grids/NGrid.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -69,7 +69,7 @@ typedef enum
template
<
-unsigned int N,
+uint32 N,
class ACTIVE_OBJECT,
class WORLD_OBJECT_TYPES,
class GRID_OBJECT_TYPES
@@ -77,7 +77,6 @@ class GRID_OBJECT_TYPES
class NGrid
{
public:
-
typedef Grid<ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> GridType;
NGrid(uint32 id, int32 x, int32 y, time_t expiry, bool unload = true)
: i_gridId(id), i_x(x), i_y(y), i_cellstate(GRID_STATE_INVALID), i_GridObjectDataLoaded(false)
@@ -85,17 +84,15 @@ class NGrid
i_GridInfo = GridInfo(expiry, unload);
}
- const GridType& operator()(unsigned short x, unsigned short y) const
+ GridType& GetGridType(const uint32 x, const uint32 y)
{
- ASSERT(x < N);
- ASSERT(y < N);
+ ASSERT(x < N && y < N);
return i_cells[x][y];
}
- GridType& operator()(unsigned short x, unsigned short y)
+ GridType const& GetGridType(const uint32 x, const uint32 y) const
{
- ASSERT(x < N);
- ASSERT(y < N);
+ ASSERT(x < N && y < N);
return i_cells[x][y];
}
@@ -123,56 +120,68 @@ class NGrid
void ResetTimeTracker(time_t interval) { i_GridInfo.ResetTimeTracker(interval); }
void UpdateTimeTracker(time_t diff) { i_GridInfo.UpdateTimeTracker(diff); }
+ /*
template<class SPECIFIC_OBJECT> void AddWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
{
- getGridType(x, y).AddWorldObject(obj);
+ GetGridType(x, y).AddWorldObject(obj);
}
template<class SPECIFIC_OBJECT> void RemoveWorldObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
{
- getGridType(x, y).RemoveWorldObject(obj);
+ GetGridType(x, y).RemoveWorldObject(obj);
}
- template<class T, class TT> void Visit(TypeContainerVisitor<T, TypeMapContainer<TT> > &visitor)
+ template<class SPECIFIC_OBJECT> void AddGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
{
- for (unsigned int x=0; x < N; ++x)
- for (unsigned int y=0; y < N; ++y)
- getGridType(x, y).Visit(visitor);
+ GetGridType(x, y).AddGridObject(obj);
}
- template<class T, class TT> void Visit(const uint32 x, const uint32 y, TypeContainerVisitor<T, TypeMapContainer<TT> > &visitor)
+ template<class SPECIFIC_OBJECT> void RemoveGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
{
- getGridType(x, y).Visit(visitor);
+ GetGridType(x, y).RemoveGridObject(obj);
}
+ */
- unsigned int ActiveObjectsInGrid(void) const
+ // Visit all Grids (cells) in NGrid (grid)
+ template<class T, class TT>
+ void VisitAllGrids(TypeContainerVisitor<T, TypeMapContainer<TT> > &visitor)
{
- unsigned int count=0;
- for (unsigned int x=0; x < N; ++x)
- for (unsigned int y=0; y < N; ++y)
- count += i_cells[x][y].ActiveObjectsInGrid();
- return count;
+ for (uint32 x = 0; x < N; ++x)
+ for (uint32 y = 0; y < N; ++y)
+ GetGridType(x, y).Visit(visitor);
}
- template<class SPECIFIC_OBJECT> bool AddGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
+ // Visit a single Grid (cell) in NGrid (grid)
+ template<class T, class TT>
+ void VisitGrid(const uint32 x, const uint32 y, TypeContainerVisitor<T, TypeMapContainer<TT> > &visitor)
{
- return getGridType(x, y).AddGridObject(obj);
+ GetGridType(x, y).Visit(visitor);
}
- template<class SPECIFIC_OBJECT> bool RemoveGridObject(const uint32 x, const uint32 y, SPECIFIC_OBJECT *obj)
+ //This gets the player count in grid
+ //I disable this to avoid confusion (active object usually means something else)
+ /*
+ uint32 GetActiveObjectCountInGrid() const
{
- return getGridType(x, y).RemoveGridObject(obj);
+ uint32 count = 0;
+ for (uint32 x = 0; x < N; ++x)
+ for (uint32 y = 0; y < N; ++y)
+ count += i_cells[x][y].ActiveObjectsInGrid();
+ return count;
}
+ */
- private:
-
- GridType& getGridType(const uint32 x, const uint32 y)
+ template<class T>
+ uint32 GetWorldObjectCountInNGrid() const
{
- ASSERT(x < N);
- ASSERT(y < N);
- return i_cells[x][y];
+ uint32 count = 0;
+ for (uint32 x = 0; x < N; ++x)
+ for (uint32 y = 0; y < N; ++y)
+ count += i_cells[x][y].template GetWorldObjectCountInGrid<T>();
+ return count;
}
+ private:
uint32 i_gridId;
GridInfo i_GridInfo;
GridReference<NGrid<N, ACTIVE_OBJECT, WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> > i_Reference;
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
index dc938859e92..5e5fbf4a9a6 100755
--- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -30,8 +30,7 @@
using namespace Trinity;
-void
-VisibleNotifier::SendToSelf()
+void VisibleNotifier::SendToSelf()
{
// at this moment i_clientGUIDs have guids that not iterate at grid level checks
// but exist one case when this possible and object not out of range: transports
@@ -56,9 +55,9 @@ VisibleNotifier::SendToSelf()
if (IS_PLAYER_GUID(*it))
{
- Player* plr = ObjectAccessor::FindPlayer(*it);
- if (plr && plr->IsInWorld() && !plr->isNeedNotify(NOTIFY_VISIBILITY_CHANGED))
- plr->UpdateVisibilityOf(&i_player);
+ Player* player = ObjectAccessor::FindPlayer(*it);
+ if (player && player->IsInWorld() && !player->isNeedNotify(NOTIFY_VISIBILITY_CHANGED))
+ player->UpdateVisibilityOf(&i_player);
}
}
@@ -73,10 +72,9 @@ VisibleNotifier::SendToSelf()
i_player.SendInitialVisiblePackets(*it);
}
-void
-VisibleChangesNotifier::Visit(PlayerMapType &m)
+void VisibleChangesNotifier::Visit(PlayerMapType &m)
{
- for (PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter)
+ for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
{
if (iter->getSource() == &i_object)
continue;
@@ -91,8 +89,7 @@ VisibleChangesNotifier::Visit(PlayerMapType &m)
}
}
-void
-VisibleChangesNotifier::Visit(CreatureMapType &m)
+void VisibleChangesNotifier::Visit(CreatureMapType &m)
{
for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
if (!iter->getSource()->GetSharedVisionList().empty())
@@ -102,8 +99,7 @@ VisibleChangesNotifier::Visit(CreatureMapType &m)
(*i)->UpdateVisibilityOf(&i_object);
}
-void
-VisibleChangesNotifier::Visit(DynamicObjectMapType &m)
+void VisibleChangesNotifier::Visit(DynamicObjectMapType &m)
{
for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
if (IS_PLAYER_GUID(iter->getSource()->GetCasterGUID()))
@@ -126,16 +122,16 @@ void PlayerRelocationNotifier::Visit(PlayerMapType &m)
{
for (PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter)
{
- Player* plr = iter->getSource();
+ Player* player = iter->getSource();
- vis_guids.erase(plr->GetGUID());
+ vis_guids.erase(player->GetGUID());
- i_player.UpdateVisibilityOf(plr, i_data, i_visibleNow);
+ i_player.UpdateVisibilityOf(player, i_data, i_visibleNow);
- if (plr->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED))
+ if (player->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED))
continue;
- plr->UpdateVisibilityOf(&i_player);
+ player->UpdateVisibilityOf(&i_player);
}
}
@@ -160,12 +156,12 @@ void CreatureRelocationNotifier::Visit(PlayerMapType &m)
{
for (PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter)
{
- Player* pl = iter->getSource();
+ Player* player = iter->getSource();
- if (!pl->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED))
- pl->UpdateVisibilityOf(&i_creature);
+ if (!player->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED))
+ player->UpdateVisibilityOf(&i_creature);
- CreatureUnitRelocationWorker(&i_creature, pl);
+ CreatureUnitRelocationWorker(&i_creature, player);
}
}
@@ -215,7 +211,7 @@ void DelayedUnitRelocation::Visit(PlayerMapType &m)
if (player != viewPoint && !viewPoint->IsPositionValid())
continue;
- CellPair pair2(Trinity::ComputeCellPair(viewPoint->GetPositionX(), viewPoint->GetPositionY()));
+ CellCoord pair2(Trinity::ComputeCellCoord(viewPoint->GetPositionX(), viewPoint->GetPositionY()));
Cell cell2(pair2);
//cell.SetNoCreate(); need load cells around viewPoint or player, that's why its commented
@@ -241,8 +237,7 @@ void AIRelocationNotifier::Visit(CreatureMapType &m)
}
}
-void
-MessageDistDeliverer::Visit(PlayerMapType &m)
+void MessageDistDeliverer::Visit(PlayerMapType &m)
{
for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
{
@@ -312,17 +307,17 @@ void MessageDistDeliverer::Visit(DynamicObjectMapType &m)
/*
void
-MessageDistDeliverer::VisitObject(Player* plr)
+MessageDistDeliverer::VisitObject(Player* player)
{
- if (!i_ownTeamOnly || (i_source.GetTypeId() == TYPEID_PLAYER && plr->GetTeam() == ((Player&)i_source).GetTeam()))
+ if (!i_ownTeamOnly || (i_source.GetTypeId() == TYPEID_PLAYER && player->GetTeam() == ((Player&)i_source).GetTeam()))
{
- SendPacket(plr);
+ SendPacket(player);
}
}
*/
-template<class T> void
-ObjectUpdater::Visit(GridRefManager<T> &m)
+template<class T>
+void ObjectUpdater::Visit(GridRefManager<T> &m)
{
for (typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter)
{
@@ -349,7 +344,7 @@ bool AnyDeadUnitObjectInRangeCheck::operator()(Creature* u)
bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Player* u)
{
return AnyDeadUnitObjectInRangeCheck::operator()(u)
- && i_spellInfo->CheckTarget(i_searchObj, u, true)
+ && (i_spellInfo->CheckTarget(i_searchObj, u, true) == SPELL_CAST_OK)
&& i_searchObj->IsTargetMatchingCheck(u, i_check);
}
@@ -357,14 +352,14 @@ bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Corpse* u)
{
Player* owner = ObjectAccessor::FindPlayer(u->GetOwnerGUID());
return owner && AnyDeadUnitObjectInRangeCheck::operator()(u)
- && i_spellInfo->CheckTarget(i_searchObj, owner, true)
+ && (i_spellInfo->CheckTarget(i_searchObj, owner, true) == SPELL_CAST_OK)
&& i_searchObj->IsTargetMatchingCheck(owner, i_check);
}
bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Creature* u)
{
return AnyDeadUnitObjectInRangeCheck::operator()(u)
- && i_spellInfo->CheckTarget(i_searchObj, u, true)
+ && (i_spellInfo->CheckTarget(i_searchObj, u, true) == SPELL_CAST_OK)
&& i_searchObj->IsTargetMatchingCheck(u, i_check);
}
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index 0cd15143cee..dd73cdcb1f0 100755
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -61,7 +61,7 @@ namespace Trinity
struct PlayerRelocationNotifier : public VisibleNotifier
{
- PlayerRelocationNotifier(Player &pl) : VisibleNotifier(pl) {}
+ PlayerRelocationNotifier(Player &player) : VisibleNotifier(player) {}
template<class T> void Visit(GridRefManager<T> &m) { VisibleNotifier::Visit(m); }
void Visit(CreatureMapType &);
@@ -81,9 +81,9 @@ namespace Trinity
{
Map &i_map;
Cell &cell;
- CellPair &p;
+ CellCoord &p;
const float i_radius;
- DelayedUnitRelocation(Cell &c, CellPair &pair, Map &map, float radius) :
+ DelayedUnitRelocation(Cell &c, CellCoord &pair, Map &map, float radius) :
i_map(map), cell(c), p(pair), i_radius(radius) {}
template<class T> void Visit(GridRefManager<T> &) {}
void Visit(CreatureMapType &);
@@ -137,16 +137,16 @@ namespace Trinity
void Visit(DynamicObjectMapType &m);
template<class SKIP> void Visit(GridRefManager<SKIP> &) {}
- void SendPacket(Player* plr)
+ void SendPacket(Player* player)
{
// never send packet to self
- if (plr == i_source || (team && plr->GetTeam() != team) || skipped_receiver == plr)
+ if (player == i_source || (team && player->GetTeam() != team) || skipped_receiver == player)
return;
- if (!plr->HaveAtClient(i_source))
+ if (!player->HaveAtClient(i_source))
return;
- if (WorldSession* session = plr->GetSession())
+ if (WorldSession* session = player->GetSession())
session->SendPacket(i_message);
}
};
diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h
index dcd4207e3e1..34fe7757c5f 100755
--- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -28,8 +28,7 @@
#include "SpellAuras.h"
template<class T>
-inline void
-Trinity::VisibleNotifier::Visit(GridRefManager<T> &m)
+inline void Trinity::VisibleNotifier::Visit(GridRefManager<T> &m)
{
for (typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter)
{
@@ -38,8 +37,7 @@ Trinity::VisibleNotifier::Visit(GridRefManager<T> &m)
}
}
-inline void
-Trinity::ObjectUpdater::Visit(CreatureMapType &m)
+inline void Trinity::ObjectUpdater::Visit(CreatureMapType &m)
{
for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
if (iter->getSource()->IsInWorld())
diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp
index ee488f404dc..519a53ad184 100755
--- a/src/server/game/Grids/ObjectGridLoader.cpp
+++ b/src/server/game/Grids/ObjectGridLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -28,26 +28,7 @@
#include "CellImpl.h"
#include "CreatureAI.h"
-class ObjectGridRespawnMover
-{
- public:
- ObjectGridRespawnMover() {}
-
- void Move(GridType &grid);
-
- template<class T> void Visit(GridRefManager<T> &) {}
- void Visit(CreatureMapType &m);
-};
-
-void
-ObjectGridRespawnMover::Move(GridType &grid)
-{
- TypeContainerVisitor<ObjectGridRespawnMover, GridTypeMapContainer > mover(*this);
- grid.Visit(mover);
-}
-
-void
-ObjectGridRespawnMover::Visit(CreatureMapType &m)
+void ObjectGridEvacuator::Visit(CreatureMapType &m)
{
// creature in unloading grid can have respawn point in another grid
// if it will be unloaded then it will not respawn in original grid until unload/load original grid
@@ -63,6 +44,7 @@ ObjectGridRespawnMover::Visit(CreatureMapType &m)
}
// for loading world object at grid loading (Corpses)
+//TODO: to implement npc on transport, also need to load npcs at grid loading
class ObjectWorldLoader
{
public:
@@ -82,21 +64,21 @@ class ObjectWorldLoader
uint32 i_corpses;
};
-template<class T> void ObjectGridLoader::SetObjectCell(T* /*obj*/, CellPair const& /*cell_pair*/)
+template<class T> void ObjectGridLoader::SetObjectCell(T* /*obj*/, CellCoord const& /*cellCoord*/)
{
}
-template<> void ObjectGridLoader::SetObjectCell(Creature* obj, CellPair const& cell_pair)
+template<> void ObjectGridLoader::SetObjectCell(Creature* obj, CellCoord const& cellCoord)
{
- Cell cell(cell_pair);
+ Cell cell(cellCoord);
obj->SetCurrentCell(cell);
}
template <class T>
-void AddObjectHelper(CellPair &cell, GridRefManager<T> &m, uint32 &count, Map* map, T *obj)
+void AddObjectHelper(CellCoord &cell, GridRefManager<T> &m, uint32 &count, Map* map, T *obj)
{
- obj->GetGridRef().link(&m, obj);
+ obj->AddToGrid(m);
ObjectGridLoader::SetObjectCell(obj, cell);
obj->AddToWorld();
if (obj->isActiveObject())
@@ -106,7 +88,7 @@ void AddObjectHelper(CellPair &cell, GridRefManager<T> &m, uint32 &count, Map* m
}
template <class T>
-void LoadHelper(CellGuidSet const& guid_set, CellPair &cell, GridRefManager<T> &m, uint32 &count, Map* map)
+void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager<T> &m, uint32 &count, Map* map)
{
for (CellGuidSet::const_iterator i_guid = guid_set.begin(); i_guid != guid_set.end(); ++i_guid)
{
@@ -123,7 +105,7 @@ void LoadHelper(CellGuidSet const& guid_set, CellPair &cell, GridRefManager<T> &
}
}
-void LoadHelper(CellCorpseSet const& cell_corpses, CellPair &cell, CorpseMapType &m, uint32 &count, Map* map)
+void LoadHelper(CellCorpseSet const& cell_corpses, CellCoord &cell, CorpseMapType &m, uint32 &count, Map* map)
{
if (cell_corpses.empty())
return;
@@ -145,63 +127,36 @@ void LoadHelper(CellCorpseSet const& cell_corpses, CellPair &cell, CorpseMapType
// in that case map == currMap
obj->SetMap(map);
+ if (obj->IsInGrid())
+ {
+ obj->AddToWorld();
+ continue;
+ }
+
AddObjectHelper(cell, m, count, map, obj);
}
}
-void
-ObjectGridLoader::Visit(GameObjectMapType &m)
+void ObjectGridLoader::Visit(GameObjectMapType &m)
{
- uint32 x = (i_cell.GridX()*MAX_NUMBER_OF_CELLS) + i_cell.CellX();
- uint32 y = (i_cell.GridY()*MAX_NUMBER_OF_CELLS) + i_cell.CellY();
- CellPair cell_pair(x, y);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cell_id);
-
- LoadHelper(cell_guids.gameobjects, cell_pair, m, i_gameObjects, i_map);
+ CellCoord cellCoord = i_cell.GetCellCoord();
+ CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cellCoord.GetId());
+ LoadHelper(cell_guids.gameobjects, cellCoord, m, i_gameObjects, i_map);
}
-void
-ObjectGridLoader::Visit(CreatureMapType &m)
+void ObjectGridLoader::Visit(CreatureMapType &m)
{
- uint32 x = (i_cell.GridX()*MAX_NUMBER_OF_CELLS) + i_cell.CellX();
- uint32 y = (i_cell.GridY()*MAX_NUMBER_OF_CELLS) + i_cell.CellY();
- CellPair cell_pair(x, y);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
- CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cell_id);
-
- LoadHelper(cell_guids.creatures, cell_pair, m, i_creatures, i_map);
+ CellCoord cellCoord = i_cell.GetCellCoord();
+ CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cellCoord.GetId());
+ LoadHelper(cell_guids.creatures, cellCoord, m, i_creatures, i_map);
}
-void
-ObjectWorldLoader::Visit(CorpseMapType &m)
+void ObjectWorldLoader::Visit(CorpseMapType &m)
{
- uint32 x = (i_cell.GridX()*MAX_NUMBER_OF_CELLS) + i_cell.CellX();
- uint32 y = (i_cell.GridY()*MAX_NUMBER_OF_CELLS) + i_cell.CellY();
- CellPair cell_pair(x, y);
- uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
-
+ CellCoord cellCoord = i_cell.GetCellCoord();
// corpses are always added to spawn mode 0 and they are spawned by their instance id
- CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), 0, cell_id);
- LoadHelper(cell_guids.corpses, cell_pair, m, i_corpses, i_map);
-}
-
-void
-ObjectGridLoader::Load(GridType &grid)
-{
- {
- TypeContainerVisitor<ObjectGridLoader, GridTypeMapContainer > loader(*this);
- grid.Visit(loader);
- }
-
- {
- ObjectWorldLoader wloader(*this);
- TypeContainerVisitor<ObjectWorldLoader, WorldTypeMapContainer > loader(wloader);
- grid.Visit(loader);
- i_corpses = wloader.i_corpses;
- }
+ CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), 0, cellCoord.GetId());
+ LoadHelper(cell_guids.corpses, cellCoord, m, i_corpses, i_map);
}
void ObjectGridLoader::LoadN(void)
@@ -214,35 +169,27 @@ void ObjectGridLoader::LoadN(void)
for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y)
{
i_cell.data.Part.cell_y = y;
- GridLoader<Player, AllWorldObjectTypes, AllGridObjectTypes> loader;
- loader.Load(i_grid(x, y), *this);
- }
- }
- sLog->outDebug(LOG_FILTER_MAPS, "%u GameObjects, %u Creatures, and %u Corpses/Bones loaded for grid %u on map %u", i_gameObjects, i_creatures, i_corpses, i_grid.GetGridId(), i_map->GetId());
-}
-void ObjectGridUnloader::MoveToRespawnN()
-{
- for (unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x)
- {
- for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y)
- {
- ObjectGridRespawnMover mover;
- mover.Move(i_grid(x, y));
+ //Load creatures and game objects
+ {
+ TypeContainerVisitor<ObjectGridLoader, GridTypeMapContainer> visitor(*this);
+ i_grid.VisitGrid(x, y, visitor);
+ }
+
+ //Load corpses (not bones)
+ {
+ ObjectWorldLoader worker(*this);
+ TypeContainerVisitor<ObjectWorldLoader, WorldTypeMapContainer> visitor(worker);
+ i_grid.VisitGrid(x, y, visitor);
+ i_corpses += worker.i_corpses;
+ }
}
}
-}
-
-void
-ObjectGridUnloader::Unload(GridType &grid)
-{
- TypeContainerVisitor<ObjectGridUnloader, GridTypeMapContainer > unloader(*this);
- grid.Visit(unloader);
+ sLog->outDebug(LOG_FILTER_MAPS, "%u GameObjects, %u Creatures, and %u Corpses/Bones loaded for grid %u on map %u", i_gameObjects, i_creatures, i_corpses, i_grid.GetGridId(), i_map->GetId());
}
template<class T>
-void
-ObjectGridUnloader::Visit(GridRefManager<T> &m)
+void ObjectGridUnloader::Visit(GridRefManager<T> &m)
{
while (!m.isEmpty())
{
@@ -250,20 +197,17 @@ ObjectGridUnloader::Visit(GridRefManager<T> &m)
// if option set then object already saved at this moment
if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
obj->SaveRespawnTime();
+ //Some creatures may summon other temp summons in CleanupsBeforeDelete()
+ //So we need this even after cleaner (maybe we can remove cleaner)
+ //Example: Flame Leviathan Turret 33139 is summoned when a creature is deleted
+ //TODO: Check if that script has the correct logic. Do we really need to summons something before deleting?
+ obj->CleanupsBeforeDelete();
///- object will get delinked from the manager when deleted
delete obj;
}
}
-void
-ObjectGridStoper::Stop(GridType &grid)
-{
- TypeContainerVisitor<ObjectGridStoper, GridTypeMapContainer > stoper(*this);
- grid.Visit(stoper);
-}
-
-void
-ObjectGridStoper::Visit(CreatureMapType &m)
+void ObjectGridStoper::Visit(CreatureMapType &m)
{
// stop any fights at grid de-activation and remove dynobjects created at cast by creatures
for (CreatureMapType::iterator iter=m.begin(); iter != m.end(); ++iter)
@@ -278,32 +222,18 @@ ObjectGridStoper::Visit(CreatureMapType &m)
}
}
-void
-ObjectGridCleaner::Stop(GridType &grid)
-{
- TypeContainerVisitor<ObjectGridCleaner, GridTypeMapContainer > stoper(*this);
- grid.Visit(stoper);
-}
-
-void
-ObjectGridCleaner::Visit(CreatureMapType &m)
-{
- for (CreatureMapType::iterator iter=m.begin(); iter != m.end(); ++iter)
- iter->getSource()->CleanupsBeforeDelete();
-}
-
template<class T>
-void
-ObjectGridCleaner::Visit(GridRefManager<T> &m)
+void ObjectGridCleaner::Visit(GridRefManager<T> &m)
{
for (typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter)
- iter->getSource()->RemoveFromWorld();
+ iter->getSource()->CleanupsBeforeDelete();
}
template void ObjectGridUnloader::Visit(CreatureMapType &);
template void ObjectGridUnloader::Visit(GameObjectMapType &);
template void ObjectGridUnloader::Visit(DynamicObjectMapType &);
template void ObjectGridUnloader::Visit(CorpseMapType &);
+template void ObjectGridCleaner::Visit(CreatureMapType &);
template void ObjectGridCleaner::Visit<GameObject>(GameObjectMapType &);
template void ObjectGridCleaner::Visit<DynamicObject>(DynamicObjectMapType &);
template void ObjectGridCleaner::Visit<Corpse>(CorpseMapType &);
diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h
index 5fc5dc47e71..f768bd0826b 100755
--- a/src/server/game/Grids/ObjectGridLoader.h
+++ b/src/server/game/Grids/ObjectGridLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -36,7 +36,6 @@ class ObjectGridLoader
: i_cell(cell), i_grid(grid), i_map(map), i_gameObjects(0), i_creatures(0), i_corpses (0)
{}
- void Load(GridType &grid);
void Visit(GameObjectMapType &m);
void Visit(CreatureMapType &m);
void Visit(CorpseMapType &) const {}
@@ -44,7 +43,7 @@ class ObjectGridLoader
void LoadN(void);
- template<class T> static void SetObjectCell(T* obj, CellPair const& cellPair);
+ template<class T> static void SetObjectCell(T* obj, CellCoord const& cellCoord);
private:
Cell i_cell;
@@ -55,79 +54,33 @@ class ObjectGridLoader
uint32 i_corpses;
};
-class ObjectGridUnloader
+//Stop the creatures before unloading the NGrid
+class ObjectGridStoper
{
public:
- ObjectGridUnloader(NGridType &grid) : i_grid(grid) {}
-
- void MoveToRespawnN();
- void UnloadN()
- {
- for (unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x)
- {
- for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y)
- {
- GridLoader<Player, AllWorldObjectTypes, AllGridObjectTypes> loader;
- loader.Unload(i_grid(x, y), *this);
- }
- }
- }
-
- void Unload(GridType &grid);
- template<class T> void Visit(GridRefManager<T> &m);
- private:
- NGridType &i_grid;
+ void Visit(CreatureMapType &m);
+ template<class T> void Visit(GridRefManager<T> &) {}
};
-class ObjectGridStoper
+//Move the foreign creatures back to respawn positions before unloading the NGrid
+class ObjectGridEvacuator
{
public:
- ObjectGridStoper(NGridType &grid) : i_grid(grid) {}
-
- void StopN()
- {
- for (unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x)
- {
- for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y)
- {
- GridLoader<Player, AllWorldObjectTypes, AllGridObjectTypes> loader;
- loader.Stop(i_grid(x, y), *this);
- }
- }
- }
-
- void Stop(GridType &grid);
void Visit(CreatureMapType &m);
-
- template<class NONACTIVE> void Visit(GridRefManager<NONACTIVE> &) {}
- private:
- NGridType &i_grid;
+ template<class T> void Visit(GridRefManager<T> &) {}
};
+//Clean up and remove from world
class ObjectGridCleaner
{
public:
- ObjectGridCleaner(NGridType &grid) : i_grid(grid) {}
-
- void CleanN()
- {
- for (unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x)
- {
- for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y)
- {
- GridLoader<Player, AllWorldObjectTypes, AllGridObjectTypes> loader;
- loader.Stop(i_grid(x, y), *this);
- }
- }
- }
-
- void Stop(GridType &grid);
- void Visit(CreatureMapType &m);
template<class T> void Visit(GridRefManager<T> &);
- private:
- NGridType &i_grid;
};
-typedef GridLoader<Player, AllWorldObjectTypes, AllGridObjectTypes> GridLoaderType;
+//Delete objects before deleting NGrid
+class ObjectGridUnloader
+{
+ public:
+ template<class T> void Visit(GridRefManager<T> &m);
+};
#endif
-
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 44d7f62305f..49472880edd 100755
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -123,12 +123,30 @@ bool Group::Create(Player* leader)
sGroupMgr->RegisterGroupDbStoreId(m_dbStoreId, this);
- // store group in database
- CharacterDatabase.PExecute("INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty) "
- "VALUES ('%u', '%u', '%u', '%u', '%u', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '" UI64FMTD "', '%u', '%u', '%u')",
- m_dbStoreId, GUID_LOPART(m_leaderGuid), uint32(m_lootMethod),
- GUID_LOPART(m_looterGuid), uint32(m_lootThreshold), m_targetIcons[0], m_targetIcons[1], m_targetIcons[2], m_targetIcons[3], m_targetIcons[4], m_targetIcons[5], m_targetIcons[6],
- m_targetIcons[7], uint8(m_groupType), uint32(m_dungeonDifficulty), m_raidDifficulty);
+ // Store group in database
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GROUP);
+
+ uint8 index = 0;
+
+ stmt->setUInt32(index++, m_dbStoreId);
+ stmt->setUInt32(index++, GUID_LOPART(m_leaderGuid));
+ stmt->setUInt8(index++, uint8(m_lootMethod));
+ stmt->setUInt32(index++, GUID_LOPART(m_looterGuid));
+ stmt->setUInt8(index++, uint8(m_lootThreshold));
+ stmt->setUInt32(index++, uint32(m_targetIcons[0]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[1]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[2]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[3]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[4]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[5]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[6]));
+ stmt->setUInt32(index++, uint32(m_targetIcons[7]));
+ stmt->setUInt8(index++, uint8(m_groupType));
+ stmt->setUInt32(index++, uint8(m_dungeonDifficulty));
+ stmt->setUInt32(index++, uint8(m_raidDifficulty));
+
+ CharacterDatabase.Execute(stmt);
+
ASSERT(AddMember(leader)); // If the leader can't be added to a new group because it appears full, something is clearly wrong.
@@ -200,7 +218,15 @@ void Group::ConvertToLFG()
m_groupType = GroupType(m_groupType | GROUPTYPE_LFG | GROUPTYPE_UNK1);
m_lootMethod = NEED_BEFORE_GREED;
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
+
+ stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
+
SendUpdate();
}
@@ -211,7 +237,15 @@ void Group::ConvertToRaid()
_initRaidSubGroupsCounter();
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
+
+ stmt->setUInt8(0, uint8(m_groupType));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
+
SendUpdate();
// update quest related GO states (quest activity dependent from raid membership)
@@ -343,8 +377,18 @@ bool Group::AddMember(Player* player)
// insert into the table if we're not a battleground group
if (!isBGGroup())
- CharacterDatabase.PExecute("INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(%u, %u, %u, %u, %u)",
- m_dbStoreId, GUID_LOPART(member.guid), member.flags, member.group, member.roles);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GROUP_MEMBER);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, GUID_LOPART(member.guid));
+ stmt->setUInt8(2, member.flags);
+ stmt->setUInt8(3, member.group);
+ stmt->setUInt8(4, member.roles);
+
+ CharacterDatabase.Execute(stmt);
+
+ }
SendUpdate();
sScriptMgr->OnGroupAddMember(this, player->GetGUID());
@@ -435,7 +479,11 @@ bool Group::RemoveMember(uint64 guid, const RemoveMethod &method /*= GROUP_REMOV
}
// Remove player from group in DB
- CharacterDatabase.PExecute("DELETE FROM group_member WHERE memberGuid=%u", GUID_LOPART(guid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_MEMBER);
+
+ stmt->setUInt32(0, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
// Reevaluate group enchanter if the leaving player had enchanting skill or the player is offline
if ((player && player->GetSkillValue(SKILL_ENCHANTING)) || !player)
@@ -530,14 +578,24 @@ void Group::ChangeLeader(uint64 guid)
}
// Same in the database
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE guid=%u AND (permanent = 1 OR instance IN (SELECT instance FROM character_instance WHERE guid = '%u'))",
- m_dbStoreId, player->GetGUIDLow());
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_INSTANCE_PERM_BINDING);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, player->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
// Copy the permanent binds from the new leader to the group
Player::ConvertInstancesToGroup(player, this, true);
- // update the group leader
- CharacterDatabase.PExecute("UPDATE groups SET leaderGuid='%u' WHERE guid='%u'", player->GetGUIDLow(), m_dbStoreId);
+ // Update the group leader
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_LEADER);
+
+ stmt->setUInt32(0, player->GetGUIDLow());
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
}
m_leaderGuid = player->GetGUID();
@@ -1052,8 +1110,8 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers)
item->is_looted = true;
roll->getLoot()->NotifyItemRemoved(roll->itemSlot);
roll->getLoot()->unlootedCount--;
- AllowedLooterSet* looters = item->GetAllowedLooters();
- player->StoreNewItem(dest, roll->itemid, true, item->randomPropertyId, (looters->size() > 1) ? looters : NULL);
+ AllowedLooterSet looters = item->GetAllowedLooters();
+ player->StoreNewItem(dest, roll->itemid, true, item->randomPropertyId, looters);
}
else
{
@@ -1105,8 +1163,8 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers)
item->is_looted = true;
roll->getLoot()->NotifyItemRemoved(roll->itemSlot);
roll->getLoot()->unlootedCount--;
- AllowedLooterSet* looters = item->GetAllowedLooters();
- player->StoreNewItem(dest, roll->itemid, true, item->randomPropertyId, (looters->size() > 1) ? looters : NULL);
+ AllowedLooterSet looters = item->GetAllowedLooters();
+ player->StoreNewItem(dest, roll->itemid, true, item->randomPropertyId, looters);
}
else
{
@@ -1121,6 +1179,7 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers)
roll->getLoot()->unlootedCount--;
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(roll->itemid);
player->AutoStoreLoot(pProto->DisenchantID, LootTemplates_Disenchant, true);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, 13262); // Disenchant
}
}
}
@@ -1261,11 +1320,12 @@ void Group::UpdatePlayerOutOfRange(Player* player)
WorldPacket data;
player->GetSession()->BuildPartyMemberStatsChangedPacket(player, &data);
+ Player* member;
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
- player = itr->getSource();
- if (player && !player->IsWithinDist(player, player->GetSightRange(), false))
- player->GetSession()->SendPacket(&data);
+ member = itr->getSource();
+ if (member && !member->IsWithinDist(player, member->GetSightRange(), false))
+ member->GetSession()->SendPacket(&data);
}
}
@@ -1273,12 +1333,12 @@ void Group::BroadcastPacket(WorldPacket* packet, bool ignorePlayersInBGRaid, int
{
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pl = itr->getSource();
- if (!pl || (ignore != 0 && pl->GetGUID() == ignore) || (ignorePlayersInBGRaid && pl->GetGroup() != this))
+ Player* player = itr->getSource();
+ if (!player || (ignore != 0 && player->GetGUID() == ignore) || (ignorePlayersInBGRaid && player->GetGroup() != this))
continue;
- if (pl->GetSession() && (group == -1 || itr->getSubGroup() == group))
- pl->GetSession()->SendPacket(packet);
+ if (player->GetSession() && (group == -1 || itr->getSubGroup() == group))
+ player->GetSession()->SendPacket(packet);
}
}
@@ -1286,10 +1346,10 @@ void Group::BroadcastReadyCheck(WorldPacket* packet)
{
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pl = itr->getSource();
- if (pl && pl->GetSession())
- if (IsLeader(pl->GetGUID()) || IsAssistant(pl->GetGUID()))
- pl->GetSession()->SendPacket(packet);
+ Player* player = itr->getSource();
+ if (player && player->GetSession())
+ if (IsLeader(player->GetGUID()) || IsAssistant(player->GetGUID()))
+ player->GetSession()->SendPacket(packet);
}
}
@@ -1297,8 +1357,8 @@ void Group::OfflineReadyCheck()
{
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
{
- Player* pl = ObjectAccessor::FindPlayer(citr->guid);
- if (!pl || !pl->GetSession())
+ Player* player = ObjectAccessor::FindPlayer(citr->guid);
+ if (!player || !player->GetSession())
{
WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 9);
data << uint64(citr->guid);
@@ -1319,7 +1379,14 @@ bool Group::_setMembersGroup(uint64 guid, uint8 group)
SubGroupCounterIncrease(group);
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_MEMBER_SUBGROUP);
+
+ stmt->setUInt8(0, group);
+ stmt->setUInt32(1, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
+ }
return true;
}
@@ -1328,6 +1395,7 @@ bool Group::SameSubGroup(Player const* member1, Player const* member2) const
{
if (!member1 || !member2)
return false;
+
if (member1->GetGroup() != this || member2->GetGroup() != this)
return false;
else
@@ -1362,12 +1430,17 @@ void Group::ChangeMembersGroup(uint64 guid, uint8 group)
// Preserve new sub group in database for non-raid groups
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_MEMBER_SUBGROUP);
+
+ stmt->setUInt8(0, group);
+ stmt->setUInt32(1, GUID_LOPART(guid));
- Player* player = ObjectAccessor::FindPlayer(guid);
+ CharacterDatabase.Execute(stmt);
+ }
// In case the moved player is online, update the player object with the new sub group references
- if (player)
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
{
if (player->GetGroup() == this)
player->GetGroupRef().setSubGroup(group);
@@ -1425,10 +1498,10 @@ void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed)
Player* pNewLooter = NULL;
for (member_citerator itr = guid_itr; itr != m_memberSlots.end(); ++itr)
{
- if (Player* pl = ObjectAccessor::FindPlayer(itr->guid))
- if (pl->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))
+ if (Player* player = ObjectAccessor::FindPlayer(itr->guid))
+ if (player->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))
{
- pNewLooter = pl;
+ pNewLooter = player;
break;
}
}
@@ -1438,10 +1511,10 @@ void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed)
// search from start
for (member_citerator itr = m_memberSlots.begin(); itr != guid_itr; ++itr)
{
- if (Player* pl = ObjectAccessor::FindPlayer(itr->guid))
- if (pl->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))
+ if (Player* player = ObjectAccessor::FindPlayer(itr->guid))
+ if (player->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))
{
- pNewLooter = pl;
+ pNewLooter = player;
break;
}
}
@@ -1552,7 +1625,14 @@ void Group::SetDungeonDifficulty(Difficulty difficulty)
{
m_dungeonDifficulty = difficulty;
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET difficulty = %u WHERE guid ='%u'", m_dungeonDifficulty, m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_DIFFICULTY);
+
+ stmt->setUInt8(0, uint8(m_dungeonDifficulty));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
@@ -1569,7 +1649,14 @@ void Group::SetRaidDifficulty(Difficulty difficulty)
{
m_raidDifficulty = difficulty;
if (!isBGGroup())
- CharacterDatabase.PExecute("UPDATE groups SET raiddifficulty = %u WHERE guid ='%u'", m_raidDifficulty, m_dbStoreId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_RAID_DIFFICULTY);
+
+ stmt->setUInt8(0, uint8(m_raidDifficulty));
+ stmt->setUInt32(1, m_dbStoreId);
+
+ CharacterDatabase.Execute(stmt);
+ }
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
@@ -1607,9 +1694,9 @@ void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
for (BoundInstancesMap::iterator itr = m_boundInstances[diff].begin(); itr != m_boundInstances[diff].end();)
{
- InstanceSave* p = itr->second.save;
+ InstanceSave* instanceSave = itr->second.save;
const MapEntry* entry = sMapStore.LookupEntry(itr->first);
- if (!entry || entry->IsRaid() != isRaid || (!p->CanReset() && method != INSTANCE_RESET_GROUP_DISBAND))
+ if (!entry || entry->IsRaid() != isRaid || (!instanceSave->CanReset() && method != INSTANCE_RESET_GROUP_DISBAND))
{
++itr;
continue;
@@ -1627,10 +1714,10 @@ void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
bool isEmpty = true;
// if the map is loaded, reset it
- Map* map = sMapMgr->FindMap(p->GetMapId(), p->GetInstanceId());
- if (map && map->IsDungeon() && !(method == INSTANCE_RESET_GROUP_DISBAND && !p->CanReset()))
+ Map* map = sMapMgr->FindMap(instanceSave->GetMapId(), instanceSave->GetInstanceId());
+ if (map && map->IsDungeon() && !(method == INSTANCE_RESET_GROUP_DISBAND && !instanceSave->CanReset()))
{
- if (p->CanReset())
+ if (instanceSave->CanReset())
isEmpty = ((InstanceMap*)map)->Reset(method);
else
isEmpty = !map->HavePlayers();
@@ -1639,25 +1726,32 @@ void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
if (SendMsgTo)
{
if (isEmpty)
- SendMsgTo->SendResetInstanceSuccess(p->GetMapId());
+ SendMsgTo->SendResetInstanceSuccess(instanceSave->GetMapId());
else
- SendMsgTo->SendResetInstanceFailed(0, p->GetMapId());
+ SendMsgTo->SendResetInstanceFailed(0, instanceSave->GetMapId());
}
if (isEmpty || method == INSTANCE_RESET_GROUP_DISBAND || method == INSTANCE_RESET_CHANGE_DIFFICULTY)
{
// do not reset the instance, just unbind if others are permanently bound to it
- if (p->CanReset())
- p->DeleteFromDB();
+ if (instanceSave->CanReset())
+ instanceSave->DeleteFromDB();
else
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE instance = '%u'", p->GetInstanceId());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE);
+
+ stmt->setUInt32(0, instanceSave->GetInstanceId());
+
+ CharacterDatabase.Execute(stmt);
+ }
+
// i don't know for sure if hash_map iterators
m_boundInstances[diff].erase(itr);
itr = m_boundInstances[diff].begin();
// this unloads the instance save unless online players are bound to it
// (eg. permanent binds or GM solo binds)
- p->RemoveGroup(this);
+ instanceSave->RemoveGroup(this);
}
else
++itr;
@@ -1710,7 +1804,15 @@ InstanceGroupBind* Group::BindToInstance(InstanceSave* save, bool permanent, boo
InstanceGroupBind& bind = m_boundInstances[save->GetDifficulty()][save->GetMapId()];
if (!load && (!bind.save || permanent != bind.perm || save != bind.save))
- CharacterDatabase.PExecute("REPLACE INTO group_instance (guid, instance, permanent) VALUES (%u, %u, %u)", m_dbStoreId, save->GetInstanceId(), permanent);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GROUP_INSTANCE);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, save->GetInstanceId());
+ stmt->setBool(2, permanent);
+
+ CharacterDatabase.Execute(stmt);
+ }
if (bind.save != save)
{
@@ -1734,7 +1836,15 @@ void Group::UnbindInstance(uint32 mapid, uint8 difficulty, bool unload)
if (itr != m_boundInstances[difficulty].end())
{
if (!unload)
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE guid=%u AND instance=%u", m_dbStoreId, itr->second.save->GetInstanceId());
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_INSTANCE_BY_GUID);
+
+ stmt->setUInt32(0, m_dbStoreId);
+ stmt->setUInt32(1, itr->second.save->GetInstanceId());
+
+ CharacterDatabase.Execute(stmt);
+ }
+
itr->second.save->RemoveGroup(this); // save can become invalid
m_boundInstances[difficulty].erase(itr);
}
@@ -1963,7 +2073,12 @@ void Group::SetGroupMemberFlag(uint64 guid, bool apply, GroupMemberFlags flag)
ToggleGroupMemberFlag(slot, flag, apply);
// Preserve the new setting in the db
- CharacterDatabase.PExecute("UPDATE group_member SET memberFlags='%u' WHERE memberGuid='%u'", slot->flags, GUID_LOPART(guid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_MEMBER_FLAG);
+
+ stmt->setUInt8(0, slot->flags);
+ stmt->setUInt32(0, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
// Broadcast the changes to the group
SendUpdate();
@@ -2065,4 +2180,5 @@ void Group::ToggleGroupMemberFlag(member_witerator slot, uint8 flag, bool apply)
slot->flags |= flag;
else
slot->flags &= ~flag;
-} \ No newline at end of file
+}
+
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index ed1fc80fd20..bed112d5511 100755
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -57,14 +57,14 @@ enum RollVote
enum GroupMemberOnlineStatus
{
MEMBER_STATUS_OFFLINE = 0x0000,
- MEMBER_STATUS_ONLINE = 0x0001,
- MEMBER_STATUS_PVP = 0x0002,
- MEMBER_STATUS_UNK0 = 0x0004, // dead? (health=0)
- MEMBER_STATUS_UNK1 = 0x0008, // ghost? (health=1)
- MEMBER_STATUS_UNK2 = 0x0010, // never seen
- MEMBER_STATUS_UNK3 = 0x0020, // never seen
- MEMBER_STATUS_UNK4 = 0x0040, // appears with dead and ghost flags
- MEMBER_STATUS_UNK5 = 0x0080, // never seen
+ MEMBER_STATUS_ONLINE = 0x0001, // Lua_UnitIsConnected
+ MEMBER_STATUS_PVP = 0x0002, // Lua_UnitIsPVP
+ MEMBER_STATUS_DEAD = 0x0004, // Lua_UnitIsDead
+ MEMBER_STATUS_GHOST = 0x0008, // Lua_UnitIsGhost
+ MEMBER_STATUS_PVP_FFA = 0x0010, // Lua_UnitIsPVPFreeForAll
+ MEMBER_STATUS_UNK3 = 0x0020, // used in calls from Lua_GetPlayerMapPosition/Lua_GetBattlefieldFlagPosition
+ MEMBER_STATUS_AFK = 0x0040, // Lua_UnitIsAFK
+ MEMBER_STATUS_DND = 0x0080, // Lua_UnitIsDND
};
enum GroupMemberFlags
diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp
index 33c0734d0b3..412814a60d2 100644
--- a/src/server/game/Groups/GroupMgr.cpp
+++ b/src/server/game/Groups/GroupMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h
index aa74112ad35..ba706687441 100644
--- a/src/server/game/Groups/GroupMgr.h
+++ b/src/server/game/Groups/GroupMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Groups/GroupRefManager.h b/src/server/game/Groups/GroupRefManager.h
index 01cc85d6d6e..9bcc05f8724 100755
--- a/src/server/game/Groups/GroupRefManager.h
+++ b/src/server/game/Groups/GroupRefManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Groups/GroupReference.cpp b/src/server/game/Groups/GroupReference.cpp
index 2c03020a4fc..4d5890aa4e6 100755
--- a/src/server/game/Groups/GroupReference.cpp
+++ b/src/server/game/Groups/GroupReference.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Groups/GroupReference.h b/src/server/game/Groups/GroupReference.h
index 2f5ad755443..2048fd9cb0d 100755
--- a/src/server/game/Groups/GroupReference.h
+++ b/src/server/game/Groups/GroupReference.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 0103b164f64..5691dcab862 100755
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -128,7 +128,7 @@ void Guild::EventLogEntry::SaveToDB(SQLTransaction& trans) const
CharacterDatabase.ExecuteOrAppend(trans, stmt);
uint8 index = 0;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_EVENTLOG);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_EVENTLOG);
stmt->setUInt32( index, m_guildId);
stmt->setUInt32(++index, m_guid);
stmt->setUInt8 (++index, uint8(m_eventType));
@@ -169,7 +169,7 @@ void Guild::BankEventLogEntry::SaveToDB(SQLTransaction& trans) const
CharacterDatabase.ExecuteOrAppend(trans, stmt);
index = 0;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_BANK_EVENTLOG);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_EVENTLOG);
stmt->setUInt32( index, m_guildId);
stmt->setUInt32(++index, m_guid);
stmt->setUInt8 (++index, m_bankTabId);
@@ -212,7 +212,7 @@ void Guild::RankInfo::LoadFromDB(Field* fields)
void Guild::RankInfo::SaveToDB(SQLTransaction& trans) const
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_RANK);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_RANK);
stmt->setUInt32(0, m_guildId);
stmt->setUInt8 (1, m_rankId);
stmt->setString(2, m_name);
@@ -238,7 +238,7 @@ void Guild::RankInfo::SetName(const std::string& name)
m_name = name;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_RANK_NAME);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_NAME);
stmt->setString(0, m_name);
stmt->setUInt8 (1, m_rankId);
stmt->setUInt32(2, m_guildId);
@@ -255,7 +255,7 @@ void Guild::RankInfo::SetRights(uint32 rights)
m_rights = rights;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_RANK_RIGHTS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_RIGHTS);
stmt->setUInt32(0, m_rights);
stmt->setUInt8 (1, m_rankId);
stmt->setUInt32(2, m_guildId);
@@ -273,13 +273,13 @@ void Guild::RankInfo::SetBankMoneyPerDay(uint32 money)
m_bankMoneyPerDay = money;
PreparedStatement* stmt = NULL;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_RANK_BANK_MONEY);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_BANK_MONEY);
stmt->setUInt32(0, money);
stmt->setUInt8 (1, m_rankId);
stmt->setUInt32(2, m_guildId);
CharacterDatabase.Execute(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_RESET_GUILD_RANK_BANK_RESET_TIME);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_BANK_RESET_TIME);
stmt->setUInt32(0, m_guildId);
stmt->setUInt8 (1, m_rankId);
CharacterDatabase.Execute(stmt);
@@ -305,7 +305,7 @@ void Guild::RankInfo::SetBankTabSlotsAndRights(uint8 tabId, GuildBankRightsAndSl
stmt->setUInt8 (2, m_rankId);
CharacterDatabase.Execute(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_BANK_RIGHT);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_RIGHT);
stmt->setUInt32(0, m_guildId);
stmt->setUInt8 (1, tabId);
stmt->setUInt8 (2, m_rankId);
@@ -313,7 +313,7 @@ void Guild::RankInfo::SetBankTabSlotsAndRights(uint8 tabId, GuildBankRightsAndSl
stmt->setUInt32(4, m_bankTabRightsAndSlots[tabId].slots);
CharacterDatabase.Execute(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_RESET_GUILD_RANK_BANK_TIME0 + tabId);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_BANK_TIME0 + tabId);
stmt->setUInt32(0, m_guildId);
stmt->setUInt8 (1, m_rankId);
CharacterDatabase.Execute(stmt);
@@ -432,7 +432,7 @@ void Guild::BankTab::SetInfo(const std::string& name, const std::string& icon)
m_name = name;
m_icon = icon;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_BANK_TAB_INFO);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_BANK_TAB_INFO);
stmt->setString(0, m_name);
stmt->setString(1, m_icon);
stmt->setUInt32(2, m_guildId);
@@ -448,7 +448,7 @@ void Guild::BankTab::SetText(const std::string& text)
m_text = text;
utf8truncate(m_text, MAX_GUILD_BANK_TAB_TEXT_LEN); // DB and client size limitation
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_BANK_TAB_TEXT);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_BANK_TAB_TEXT);
stmt->setString(0, m_text);
stmt->setUInt32(1, m_guildId);
stmt->setUInt8 (2, m_tabId);
@@ -474,7 +474,7 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* pItem)
if (pItem)
{
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_BANK_ITEM);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_ITEM);
stmt->setUInt32(0, m_guildId);
stmt->setUInt8 (1, m_tabId);
stmt->setUInt8 (2, slotId);
@@ -528,7 +528,7 @@ void Guild::Member::SetPublicNote(const std::string& publicNote)
m_publicNote = publicNote;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_MEMBER_PNOTE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_MEMBER_PNOTE);
stmt->setString(0, publicNote);
stmt->setUInt32(1, GUID_LOPART(m_guid));
CharacterDatabase.Execute(stmt);
@@ -541,7 +541,7 @@ void Guild::Member::SetOfficerNote(const std::string& officerNote)
m_officerNote = officerNote;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_MEMBER_OFFNOTE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_MEMBER_OFFNOTE);
stmt->setString(0, officerNote);
stmt->setUInt32(1, GUID_LOPART(m_guid));
CharacterDatabase.Execute(stmt);
@@ -555,7 +555,7 @@ void Guild::Member::ChangeRank(uint8 newRank)
if (Player* player = FindPlayer())
player->SetRank(newRank);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_MEMBER_RANK);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_MEMBER_RANK);
stmt->setUInt8 (0, newRank);
stmt->setUInt32(1, GUID_LOPART(m_guid));
CharacterDatabase.Execute(stmt);
@@ -563,7 +563,7 @@ void Guild::Member::ChangeRank(uint8 newRank)
void Guild::Member::SaveToDB(SQLTransaction& trans) const
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_MEMBER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_MEMBER);
stmt->setUInt32(0, m_guildId);
stmt->setUInt32(1, GUID_LOPART(m_guid));
stmt->setUInt8 (2, m_rankId);
@@ -659,8 +659,8 @@ void Guild::Member::DecreaseBankRemainingValue(SQLTransaction& trans, uint8 tabI
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(
tabId == GUILD_BANK_MAX_TABS ?
- CHAR_SET_GUILD_MEMBER_BANK_REM_MONEY :
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS0 + tabId);
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_MONEY :
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS0 + tabId);
stmt->setUInt32(0, m_bankRemaining[tabId].value);
stmt->setUInt32(1, m_guildId);
stmt->setUInt32(2, GUID_LOPART(m_guid));
@@ -693,8 +693,8 @@ uint32 Guild::Member::GetBankRemainingValue(uint8 tabId, const Guild* guild) con
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(
tabId == GUILD_BANK_MAX_TABS ?
- CHAR_SET_GUILD_MEMBER_BANK_TIME_MONEY :
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS0 + tabId);
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_MONEY :
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS0 + tabId);
stmt->setUInt32(0, m_bankRemaining[tabId].resetTime);
stmt->setUInt32(1, m_bankRemaining[tabId].value);
stmt->setUInt32(2, m_guildId);
@@ -737,7 +737,7 @@ void EmblemInfo::WritePacket(WorldPacket& data) const
void EmblemInfo::SaveToDB(uint32 guildId) const
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_EMBLEM_INFO);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_EMBLEM_INFO);
stmt->setUInt32(0, m_style);
stmt->setUInt32(1, m_color);
stmt->setUInt32(2, m_borderStyle);
@@ -762,7 +762,7 @@ bool Guild::MoveItemData::CheckItem(uint32& splitedAmount)
bool Guild::MoveItemData::CanStore(Item* pItem, bool swap, bool sendError)
{
m_vec.clear();
- InventoryResult msg = _CanStore(pItem, swap);
+ InventoryResult msg = CanStore(pItem, swap);
if (sendError && msg != EQUIP_ERR_OK)
m_pPlayer->SendEquipError(msg, pItem);
return (msg == EQUIP_ERR_OK);
@@ -850,7 +850,7 @@ void Guild::PlayerMoveItemData::LogBankEvent(SQLTransaction& trans, MoveItemData
pFrom->GetItem()->GetEntry(), count);
}
-inline InventoryResult Guild::PlayerMoveItemData::_CanStore(Item* pItem, bool swap)
+inline InventoryResult Guild::PlayerMoveItemData::CanStore(Item* pItem, bool swap)
{
return m_pPlayer->CanStoreItem(m_container, m_slotId, m_vec, pItem, swap);
}
@@ -1002,11 +1002,11 @@ bool Guild::BankMoveItemData::_ReserveSpace(uint8 slotId, Item* pItem, Item* pIt
return true;
}
-void Guild::BankMoveItemData::_CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count)
+void Guild::BankMoveItemData::CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count)
{
for (uint8 slotId = 0; (slotId < GUILD_BANK_MAX_SLOTS) && (count > 0); ++slotId)
{
- // Skip slot already processed in _CanStore (when destination slot was specified)
+ // Skip slot already processed in CanStore (when destination slot was specified)
if (slotId == skipSlotId)
continue;
@@ -1022,7 +1022,7 @@ void Guild::BankMoveItemData::_CanStoreItemInTab(Item* pItem, uint8 skipSlotId,
}
}
-InventoryResult Guild::BankMoveItemData::_CanStore(Item* pItem, bool swap)
+InventoryResult Guild::BankMoveItemData::CanStore(Item* pItem, bool swap)
{
sLog->outDebug(LOG_FILTER_GUILD, "GUILD STORAGE: CanStore() tab = %u, slot = %u, item = %u, count = %u",
m_container, m_slotId, pItem->GetEntry(), pItem->GetCount());
@@ -1055,13 +1055,13 @@ InventoryResult Guild::BankMoveItemData::_CanStore(Item* pItem, bool swap)
// Search for stacks to merge with
if (pItem->GetMaxStackCount() > 1)
{
- _CanStoreItemInTab(pItem, m_slotId, true, count);
+ CanStoreItemInTab(pItem, m_slotId, true, count);
if (count == 0)
return EQUIP_ERR_OK;
}
// Search free slot for item
- _CanStoreItemInTab(pItem, m_slotId, false, count);
+ CanStoreItemInTab(pItem, m_slotId, false, count);
if (count == 0)
return EQUIP_ERR_OK;
@@ -1121,7 +1121,7 @@ bool Guild::Create(Player* pLeader, const std::string& name)
trans->Append(stmt);
uint8 index = 0;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD);
stmt->setUInt32( index, m_id);
stmt->setString(++index, name);
stmt->setUInt32(++index, GUID_LOPART(m_leaderGuid));
@@ -1259,7 +1259,7 @@ void Guild::HandleSetMOTD(WorldSession* session, const std::string& motd)
sScriptMgr->OnGuildMOTDChanged(this, motd);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_MOTD);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_MOTD);
stmt->setString(0, motd);
stmt->setUInt32(1, m_id);
CharacterDatabase.Execute(stmt);
@@ -1282,7 +1282,7 @@ void Guild::HandleSetInfo(WorldSession* session, const std::string& info)
sScriptMgr->OnGuildInfoChanged(this, info);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_INFO);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_INFO);
stmt->setString(0, info);
stmt->setUInt32(1, m_id);
CharacterDatabase.Execute(stmt);
@@ -1993,6 +1993,7 @@ bool Guild::Validate()
}
}
}
+
if (broken_ranks)
{
m_ranks.clear();
@@ -2093,7 +2094,7 @@ bool Guild::AddMember(uint64 guid, uint8 rankId)
{
bool ok = false;
// Player must exist
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_CHAR_DATA_FOR_GUILD);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_DATA_FOR_GUILD);
stmt->setUInt32(0, lowguid);
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
{
@@ -2265,7 +2266,7 @@ bool Guild::_CreateNewBankTab()
stmt->setUInt8 (1, tabId);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_BANK_TAB);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_TAB);
stmt->setUInt32(0, m_id);
stmt->setUInt8 (1, tabId);
trans->Append(stmt);
@@ -2308,7 +2309,7 @@ void Guild::_CreateRank(const std::string& name, uint32 rights)
for (uint8 i = 0; i < _GetPurchasedTabsSize(); ++i)
{
// Create bank rights with default values
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GUILD_BANK_RIGHT_DEFAULT);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GUILD_BANK_RIGHT_DEFAULT);
stmt->setUInt32(0, m_id);
stmt->setUInt8 (1, i);
stmt->setUInt8 (2, newRankId);
@@ -2365,7 +2366,7 @@ bool Guild::_ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add)
m_bankMoney -= amount;
}
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_BANK_MONEY);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_BANK_MONEY);
stmt->setUInt64(0, m_bankMoney);
stmt->setUInt32(1, m_id);
trans->Append(stmt);
@@ -2380,7 +2381,7 @@ void Guild::_SetLeaderGUID(Member* pLeader)
m_leaderGuid = pLeader->GetGUID();
pLeader->ChangeRank(GR_GUILDMASTER);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_LEADER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_LEADER);
stmt->setUInt32(0, GUID_LOPART(m_leaderGuid));
stmt->setUInt32(1, m_id);
CharacterDatabase.Execute(stmt);
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 2ea345f2ca1..e18e62e51b7 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -524,7 +524,7 @@ private:
uint8 GetContainer() const { return m_container; }
uint8 GetSlotId() const { return m_slotId; }
protected:
- virtual InventoryResult _CanStore(Item* pItem, bool swap) = 0;
+ virtual InventoryResult CanStore(Item* pItem, bool swap) = 0;
Guild* m_pGuild;
Player* m_pPlayer;
@@ -547,7 +547,7 @@ private:
Item* StoreItem(SQLTransaction& trans, Item* pItem);
void LogBankEvent(SQLTransaction& trans, MoveItemData* pFrom, uint32 count) const;
protected:
- InventoryResult _CanStore(Item* pItem, bool swap);
+ InventoryResult CanStore(Item* pItem, bool swap);
};
class BankMoveItemData : public MoveItemData
@@ -566,12 +566,12 @@ private:
void LogAction(MoveItemData* pFrom) const;
protected:
- InventoryResult _CanStore(Item* pItem, bool swap);
+ InventoryResult CanStore(Item* pItem, bool swap);
private:
Item* _StoreItem(SQLTransaction& trans, BankTab* pTab, Item* pItem, ItemPosCount& pos, bool clone) const;
bool _ReserveSpace(uint8 slotId, Item* pItem, Item* pItemDest, uint32& count);
- void _CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
+ void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
};
typedef UNORDERED_MAP<uint32, Member*> Members;
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index 8eac07918de..67260daf638 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index e53c46cb6be..9654fced227 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
index bc2648ed02b..9fb2fdf1c25 100755
--- a/src/server/game/Instances/InstanceSaveMgr.cpp
+++ b/src/server/game/Instances/InstanceSaveMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -138,7 +138,14 @@ void InstanceSaveManager::RemoveInstanceSave(uint32 InstanceId)
{
// save the resettime for normal instances only when they get unloaded
if (time_t resettime = itr->second->GetResetTimeForDB())
- CharacterDatabase.PExecute("UPDATE instance SET resettime = '"UI64FMTD"' WHERE id = '%u'", (uint64)resettime, InstanceId);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_INSTANCE_RESETTIME);
+
+ stmt->setUInt32(0, uint32(resettime));
+ stmt->setUInt32(1, InstanceId);
+
+ CharacterDatabase.Execute(stmt);
+ }
delete itr->second;
m_instanceSaveById.erase(itr);
@@ -177,7 +184,7 @@ void InstanceSave::SaveToDB()
}
}
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_INSTANCE_SAVE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_INSTANCE_SAVE);
stmt->setUInt32(0, m_instanceid);
stmt->setUInt16(1, GetMapId());
stmt->setUInt32(2, uint32(GetResetTimeForDB()));
@@ -249,7 +256,7 @@ void InstanceSaveManager::LoadInstances()
CharacterDatabase.DirectExecute("DELETE tmp.* FROM group_instance AS tmp LEFT JOIN instance ON tmp.instance = instance.id WHERE tmp.instance > 0 AND instance.id IS NULL");
// Clean invalid references to instance
- CharacterDatabase.DirectExecute(CharacterDatabase.GetPreparedStatement(CHAR_RESET_NONEXISTENT_INSTANCE_FOR_CORPSES));
+ CharacterDatabase.DirectExecute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_NONEXISTENT_INSTANCE_FOR_CORPSES));
CharacterDatabase.DirectExecute("UPDATE characters AS tmp LEFT JOIN instance ON tmp.instance_id = instance.id SET tmp.instance_id = 0 WHERE tmp.instance_id > 0 AND instance.id IS NULL");
// Initialize instance id storage (Needs to be done after the trash has been clean out)
@@ -309,11 +316,11 @@ void InstanceSaveManager::LoadResetTimes()
while (result->NextRow());
// update reset time for normal instances with the max creature respawn time + X hours
- if (PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_GET_MAX_CREATURE_RESPAWNS)))
+ if (PreparedQueryResult result2 = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAX_CREATURE_RESPAWNS)))
{
do
{
- Field* fields = result->Fetch();
+ Field* fields = result2->Fetch();
uint32 instance = fields[1].GetUInt32();
time_t resettime = time_t(fields[0].GetUInt32() + 2 * HOUR);
InstResetTimeMapDiffType::iterator itr = instResetTime.find(instance);
@@ -511,7 +518,7 @@ void InstanceSaveManager::_ResetSave(InstanceSaveHashMap::iterator &itr)
void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId)
{
sLog->outDebug(LOG_FILTER_MAPS, "InstanceSaveMgr::_ResetInstance %u, %u", mapid, instanceId);
- Map* map = (MapInstanced*)sMapMgr->CreateBaseMap(mapid);
+ Map const* map = sMapMgr->CreateBaseMap(mapid);
if (!map->Instanceable())
return;
@@ -521,7 +528,7 @@ void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId)
DeleteInstanceFromDB(instanceId); // even if save not loaded
- Map* iMap = ((MapInstanced*)map)->FindMap(instanceId);
+ Map* iMap = ((MapInstanced*)map)->FindInstanceMap(instanceId);
if (iMap && iMap->IsDungeon())
((InstanceMap*)iMap)->Reset(INSTANCE_RESET_RESPAWN_DELAY);
@@ -573,13 +580,19 @@ void InstanceSaveManager::_ResetOrWarnAll(uint32 mapid, Difficulty difficulty, b
if (period < DAY)
period = DAY;
- uint64 next_reset = ((resetTime + MINUTE) / DAY * DAY) + period + diff;
+ uint32 next_reset = ((resetTime + MINUTE) / DAY * DAY) + period + diff;
SetResetTimeFor(mapid, difficulty, next_reset);
ScheduleReset(true, time_t(next_reset-3600), InstResetEvent(1, mapid, difficulty, 0));
- // update it in the DB
- CharacterDatabase.PExecute("UPDATE instance_reset SET resettime = '%u' WHERE mapid = '%d' AND difficulty = '%d'", uint32(next_reset), mapid, difficulty);
+ // Update it in the DB
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GLOBAL_INSTANCE_RESETTIME);
+
+ stmt->setUInt32(0, next_reset);
+ stmt->setUInt16(1, uint16(mapid));
+ stmt->setUInt8(2, uint8(difficulty));
+
+ CharacterDatabase.Execute(stmt);
}
// note: this isn't fast but it's meant to be executed very rarely
diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h
index 63d54e4ec94..83c2170255d 100755
--- a/src/server/game/Instances/InstanceSaveMgr.h
+++ b/src/server/game/Instances/InstanceSaveMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -80,8 +80,8 @@ class InstanceSave
/* online players bound to the instance (perm/solo)
does not include the members of the group unless they have permanent saves */
- void AddPlayer(Player* player) { m_playerList.push_back(player); }
- bool RemovePlayer(Player* player) { m_playerList.remove(player); return UnloadIfEmpty(); }
+ void AddPlayer(Player* player) { TRINITY_GUARD(ACE_Thread_Mutex, _lock); m_playerList.push_back(player); }
+ bool RemovePlayer(Player* player) { TRINITY_GUARD(ACE_Thread_Mutex, _lock); m_playerList.remove(player); return UnloadIfEmpty(); }
/* all groups bound to the instance */
void AddGroup(Group* group) { m_groupList.push_back(group); }
bool RemoveGroup(Group* group) { m_groupList.remove(group); return UnloadIfEmpty(); }
@@ -110,6 +110,8 @@ class InstanceSave
uint32 m_mapid;
Difficulty m_difficulty;
bool m_canReset;
+
+ ACE_Thread_Mutex _lock;
};
typedef UNORDERED_MAP<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap;
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index b9b9ed281fa..fa8c0fb39e4 100755
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@ void InstanceScript::SaveToDB()
if (data.empty())
return;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_INSTANCE_DATA);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_INSTANCE_DATA);
stmt->setUInt32(0, GetCompletedEncounterMask());
stmt->setString(1, data);
stmt->setUInt32(2, instance->GetInstanceId());
@@ -141,34 +141,36 @@ void InstanceScript::AddDoor(GameObject* door, bool add)
for (DoorInfoMap::iterator itr = lower; itr != upper; ++itr)
{
+ DoorInfo const& data = itr->second;
+
if (add)
{
- itr->second.bossInfo->door[itr->second.type].insert(door);
- switch (itr->second.boundary)
+ data.bossInfo->door[data.type].insert(door);
+ switch (data.boundary)
{
default:
case BOUNDARY_NONE:
break;
case BOUNDARY_N:
case BOUNDARY_S:
- itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionX();
+ data.bossInfo->boundary[data.boundary] = door->GetPositionX();
break;
case BOUNDARY_E:
case BOUNDARY_W:
- itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionY();
+ data.bossInfo->boundary[data.boundary] = door->GetPositionY();
break;
case BOUNDARY_NW:
case BOUNDARY_SE:
- itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionX() + door->GetPositionY();
+ data.bossInfo->boundary[data.boundary] = door->GetPositionX() + door->GetPositionY();
break;
case BOUNDARY_NE:
case BOUNDARY_SW:
- itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionX() - door->GetPositionY();
+ data.bossInfo->boundary[data.boundary] = door->GetPositionX() - door->GetPositionY();
break;
}
}
else
- itr->second.bossInfo->door[itr->second.type].erase(door);
+ data.bossInfo->door[data.type].erase(door);
}
if (add)
@@ -303,7 +305,6 @@ void InstanceScript::DoUpdateWorldState(uint32 uiStateId, uint32 uiStateData)
void InstanceScript::DoSendNotifyToInstance(const char *format, ...)
{
InstanceMap::PlayerList const &PlayerList = instance->GetPlayers();
- InstanceMap::PlayerList::const_iterator i;
if (!PlayerList.isEmpty())
{
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 1751b7b3106..69f11c203c1 100755
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index eff811b14eb..c9e8f68af52 100755
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -436,8 +436,8 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo
roundRobinPlayer = lootOwner->GetGUID();
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
- if (Player* pl = itr->getSource()) // should actually be looted object instead of lootOwner but looter has to be really close so doesnt really matter
- FillNotNormalLootFor(pl, pl->IsAtGroupRewardDistance(lootOwner));
+ if (Player* player = itr->getSource()) // should actually be looted object instead of lootOwner but looter has to be really close so doesnt really matter
+ FillNotNormalLootFor(player, player->IsAtGroupRewardDistance(lootOwner));
for (uint8 i = 0; i < items.size(); ++i)
{
@@ -453,28 +453,28 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo
return true;
}
-void Loot::FillNotNormalLootFor(Player* pl, bool presentAtLooting)
+void Loot::FillNotNormalLootFor(Player* player, bool presentAtLooting)
{
- uint32 plguid = pl->GetGUIDLow();
+ uint32 plguid = player->GetGUIDLow();
QuestItemMap::const_iterator qmapitr = PlayerQuestItems.find(plguid);
if (qmapitr == PlayerQuestItems.end())
- FillQuestLoot(pl);
+ FillQuestLoot(player);
qmapitr = PlayerFFAItems.find(plguid);
if (qmapitr == PlayerFFAItems.end())
- FillFFALoot(pl);
+ FillFFALoot(player);
qmapitr = PlayerNonQuestNonFFAConditionalItems.find(plguid);
if (qmapitr == PlayerNonQuestNonFFAConditionalItems.end())
- FillNonQuestNonFFAConditionalLoot(pl, presentAtLooting);
+ FillNonQuestNonFFAConditionalLoot(player, presentAtLooting);
// if not auto-processed player will have to come and pick it up manually
if (!presentAtLooting)
return;
// Process currency items
- uint32 max_slot = GetMaxSlotInLootFor(pl);
+ uint32 max_slot = GetMaxSlotInLootFor(player);
LootItem const* item = NULL;
uint32 itemsSize = uint32(items.size());
for (uint32 i = 0; i < max_slot; ++i)
@@ -484,10 +484,10 @@ void Loot::FillNotNormalLootFor(Player* pl, bool presentAtLooting)
else
item = &quest_items[i-itemsSize];
- if (!item->is_looted && item->freeforall && item->AllowedForPlayer(pl))
+ if (!item->is_looted && item->freeforall && item->AllowedForPlayer(player))
if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item->itemid))
if (proto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)
- pl->StoreLootItem(i, this);
+ player->StoreLootItem(i, this);
}
}
@@ -592,8 +592,8 @@ void Loot::NotifyItemRemoved(uint8 lootIndex)
{
i_next = i;
++i_next;
- if (Player* pl = ObjectAccessor::FindPlayer(*i))
- pl->SendNotifyLootItemRemoved(lootIndex);
+ if (Player* player = ObjectAccessor::FindPlayer(*i))
+ player->SendNotifyLootItemRemoved(lootIndex);
else
PlayersLooting.erase(i);
}
@@ -607,8 +607,8 @@ void Loot::NotifyMoneyRemoved()
{
i_next = i;
++i_next;
- if (Player* pl = ObjectAccessor::FindPlayer(*i))
- pl->SendNotifyLootMoneyRemoved();
+ if (Player* player = ObjectAccessor::FindPlayer(*i))
+ player->SendNotifyLootMoneyRemoved();
else
PlayersLooting.erase(i);
}
@@ -626,9 +626,9 @@ void Loot::NotifyQuestItemRemoved(uint8 questIndex)
{
i_next = i;
++i_next;
- if (Player* pl = ObjectAccessor::FindPlayer(*i))
+ if (Player* player = ObjectAccessor::FindPlayer(*i))
{
- QuestItemMap::const_iterator pq = PlayerQuestItems.find(pl->GetGUIDLow());
+ QuestItemMap::const_iterator pq = PlayerQuestItems.find(player->GetGUIDLow());
if (pq != PlayerQuestItems.end() && pq->second)
{
// find where/if the player has the given item in it's vector
@@ -640,7 +640,7 @@ void Loot::NotifyQuestItemRemoved(uint8 questIndex)
break;
if (j < pql.size())
- pl->SendNotifyLootItemRemoved(items.size()+j);
+ player->SendNotifyLootItemRemoved(items.size()+j);
}
}
else
diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h
index b0adeb03784..4a6becc7eff 100755
--- a/src/server/game/Loot/LootMgr.h
+++ b/src/server/game/Loot/LootMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -149,7 +149,7 @@ struct LootItem
bool AllowedForPlayer(Player const* player) const;
void AddAllowedLooter(Player const* player);
- AllowedLooterSet* GetAllowedLooters() { return &allowedGUIDs; }
+ const AllowedLooterSet & GetAllowedLooters() const { return allowedGUIDs; }
};
struct QuestItem
diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp
index 6d54aacb311..3c3888eb9f8 100755
--- a/src/server/game/Mails/Mail.cpp
+++ b/src/server/game/Mails/Mail.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -154,7 +154,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32
Item* item = mailItemIter->second;
item->SaveToDB(trans); // item not in inventory and can be save standalone
// owner in data will set at mail receive and item extracting
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_ITEM_OWNER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
stmt->setUInt32(0, receiver_guid);
stmt->setUInt32(1, item->GetGUIDLow());
trans->Append(stmt);
@@ -171,6 +171,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32
void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked, uint32 deliver_delay)
{
Player* pReceiver = receiver.GetPlayer(); // can be NULL
+ Player* pSender = sObjectMgr->GetPlayerByLowGUID(sender.GetSenderId());
if (pReceiver)
prepareItems(pReceiver, trans); // generate mail template items
@@ -188,15 +189,18 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver,
// mail from battlemaster (rewardmarks) should last only one day
else if (sender.GetMailMessageType() == MAIL_CREATURE && sBattlegroundMgr->GetBattleMasterBG(sender.GetSenderId()) != BATTLEGROUND_TYPE_NONE)
expire_delay = DAY;
- // default case: expire time if COD 3 days, if no COD 30 days
+ // default case: expire time if COD 3 days, if no COD 30 days (or 90 days if sender is a game master)
else
- expire_delay = (m_COD > 0) ? 3 * DAY : 30 * DAY;
+ if (m_COD)
+ expire_delay = 3 * DAY;
+ else
+ expire_delay = pSender && pSender->isGameMaster() ? 90 * DAY : 30 * DAY;
time_t expire_time = deliver_time + expire_delay;
// Add to DB
uint8 index = 0;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_MAIL);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_MAIL);
stmt->setUInt32( index, mailId);
stmt->setUInt8 (++index, uint8(sender.GetMailMessageType()));
stmt->setInt8 (++index, int8(sender.GetStationery()));
@@ -216,7 +220,7 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver,
for (MailItemMap::const_iterator mailItemIter = m_items.begin(); mailItemIter != m_items.end(); ++mailItemIter)
{
Item* pItem = mailItemIter->second;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_MAIL_ITEM);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_MAIL_ITEM);
stmt->setUInt32(0, mailId);
stmt->setUInt32(1, pItem->GetGUIDLow());
stmt->setUInt32(2, receiver.GetPlayerGUIDLow());
diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h
index f37a7f1beb7..6615d59160a 100755
--- a/src/server/game/Mails/Mail.h
+++ b/src/server/game/Mails/Mail.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 89049f39127..b2f8e5608a7 100755
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
#include "MapManager.h"
#include "ObjectMgr.h"
#include "Group.h"
+#include "LFGMgr.h"
union u_map_magic
{
@@ -58,7 +59,7 @@ Map::~Map()
while (!i_worldObjects.empty())
{
WorldObject* obj = *i_worldObjects.begin();
- ASSERT(obj->m_isWorldObject);
+ ASSERT(obj->IsWorldObject());
//ASSERT(obj->GetTypeId() == TYPEID_CORPSE);
obj->RemoveFromWorld();
obj->ResetMap();
@@ -141,9 +142,9 @@ void Map::LoadMap(int gx, int gy, bool reload)
// load grid map for base map
if (!m_parentMap->GridMaps[gx][gy])
- m_parentMap->EnsureGridCreated(GridPair(63-gx, 63-gy));
+ m_parentMap->EnsureGridCreated(GridCoord(63-gx, 63-gy));
- ((MapInstanced*)(m_parentMap))->AddGridMapReference(GridPair(gx, gy));
+ ((MapInstanced*)(m_parentMap))->AddGridMapReference(GridCoord(gx, gy));
GridMaps[gx][gy] = m_parentMap->GridMaps[gx][gy];
return;
}
@@ -202,11 +203,11 @@ void Map::DeleteStateMachine()
}
Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _parent):
-i_mapEntry (sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId),
+_creatureToMoveLock(false), i_mapEntry (sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId),
m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE),
m_VisibilityNotifyPeriod(DEFAULT_VISIBILITY_NOTIFY_PERIOD),
m_activeNonPlayersIter(m_activeNonPlayers.end()), i_gridExpiry(expiry),
-i_scriptLock(false), _creatureToMoveLock(false)
+i_scriptLock(false)
{
m_parentMap = (_parent ? _parent : this);
for (unsigned int idx=0; idx < MAX_NUMBER_OF_GRIDS; ++idx)
@@ -234,80 +235,61 @@ void Map::InitVisibilityDistance()
// Template specialization of utility methods
template<class T>
-void Map::AddToGrid(T* obj, NGridType *grid, Cell const& cell)
+void Map::AddToGrid(T* obj, Cell const& cell)
{
- if (obj->m_isWorldObject)
- (*grid)(cell.CellX(), cell.CellY()).template AddWorldObject<T>(obj);
+ NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
+ if (obj->IsWorldObject())
+ grid->GetGridType(cell.CellX(), cell.CellY()).template AddWorldObject<T>(obj);
else
- (*grid)(cell.CellX(), cell.CellY()).template AddGridObject<T>(obj);
+ grid->GetGridType(cell.CellX(), cell.CellY()).template AddGridObject<T>(obj);
}
template<>
-void Map::AddToGrid(Creature* obj, NGridType *grid, Cell const& cell)
+void Map::AddToGrid(Creature* obj, Cell const& cell)
{
- if (obj->m_isWorldObject)
- (*grid)(cell.CellX(), cell.CellY()).AddWorldObject(obj);
+ NGridType* grid = getNGrid(cell.GridX(), cell.GridY());
+ if (obj->IsWorldObject())
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj);
else
- (*grid)(cell.CellX(), cell.CellY()).AddGridObject(obj);
+ grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj);
obj->SetCurrentCell(cell);
}
-template<class T>
-void Map::RemoveFromGrid(T* obj, NGridType *grid, Cell const& cell)
-{
- if (obj->m_isWorldObject)
- (*grid)(cell.CellX(), cell.CellY()).template RemoveWorldObject<T>(obj);
- else
- (*grid)(cell.CellX(), cell.CellY()).template RemoveGridObject<T>(obj);
-}
-
-template<class T>
-void Map::SwitchGridContainers(T* obj, bool on)
+void Map::SwitchGridContainers(Creature* obj, bool on)
{
- CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
- if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ ASSERT(!obj->IsPermanentWorldObject());
+ CellCoord p = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
+ if (!p.IsCoordValid())
{
sLog->outError("Map::SwitchGridContainers: Object " UI64FMTD " has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
return;
}
Cell cell(p);
- if (!loaded(GridPair(cell.data.Part.grid_x, cell.data.Part.grid_y)))
+ if (!IsGridLoaded(GridCoord(cell.data.Part.grid_x, cell.data.Part.grid_y)))
return;
sLog->outStaticDebug("Switch object " UI64FMTD " from grid[%u, %u] %u", obj->GetGUID(), cell.data.Part.grid_x, cell.data.Part.grid_y, on);
NGridType *ngrid = getNGrid(cell.GridX(), cell.GridY());
ASSERT(ngrid != NULL);
- GridType &grid = (*ngrid)(cell.CellX(), cell.CellY());
+ GridType &grid = ngrid->GetGridType(cell.CellX(), cell.CellY());
+ obj->RemoveFromGrid(); //This step is not really necessary but we want to do ASSERT in remove/add
if (on)
{
- grid.RemoveGridObject<T>(obj);
- grid.AddWorldObject<T>(obj);
- /*if (!grid.RemoveGridObject<T>(obj, obj->GetGUID())
- || !grid.AddWorldObject<T>(obj, obj->GetGUID()))
- {
- ASSERT(false);
- }*/
+ grid.AddWorldObject(obj);
+ AddWorldObject(obj);
}
else
{
- grid.RemoveWorldObject<T>(obj);
- grid.AddGridObject<T>(obj);
- /*if (!grid.RemoveWorldObject<T>(obj, obj->GetGUID())
- || !grid.AddGridObject<T>(obj, obj->GetGUID()))
- {
- ASSERT(false);
- }*/
+ grid.AddGridObject(obj);
+ RemoveWorldObject(obj);
}
- obj->m_isWorldObject = on;
+ obj->m_isTempWorldObject = on;
}
-template void Map::SwitchGridContainers(Creature*, bool);
-//template void Map::SwitchGridContainers(DynamicObject*, bool);
-
template<class T>
void Map::DeleteFromWorld(T* obj)
{
@@ -316,18 +298,20 @@ void Map::DeleteFromWorld(T* obj)
}
template<>
-void Map::DeleteFromWorld(Player* pl)
+void Map::DeleteFromWorld(Player* player)
{
- sObjectAccessor->RemoveObject(pl);
- delete pl;
+ sObjectAccessor->RemoveObject(player);
+ sObjectAccessor->RemoveUpdateObject(player); //TODO: I do not know why we need this, it should be removed in ~Object anyway
+ delete player;
}
-void
-Map::EnsureGridCreated(const GridPair &p)
+//Create NGrid so the object can be added to it
+//But object data is not loaded here
+void Map::EnsureGridCreated(const GridCoord &p)
{
if (!getNGrid(p.x_coord, p.y_coord))
{
- ACE_GUARD(ACE_Thread_Mutex, Guard, Lock);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
if (!getNGrid(p.x_coord, p.y_coord))
{
sLog->outDebug(LOG_FILTER_MAPS, "Creating grid[%u, %u] for map %u instance %u", p.x_coord, p.y_coord, GetId(), i_InstanceId);
@@ -350,8 +334,8 @@ Map::EnsureGridCreated(const GridPair &p)
}
}
-void
-Map::EnsureGridLoadedAtEnter(const Cell &cell, Player* player)
+//Load NGrid and make it active
+void Map::EnsureGridLoadedForActiveObject(const Cell &cell, WorldObject* object)
{
EnsureGridLoaded(cell);
NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
@@ -360,23 +344,16 @@ Map::EnsureGridLoadedAtEnter(const Cell &cell, Player* player)
// refresh grid state & timer
if (grid->GetGridState() != GRID_STATE_ACTIVE)
{
- if (player)
- {
- sLog->outStaticDebug("Player %s enter cell[%u, %u] triggers loading of grid[%u, %u] on map %u", player->GetName(), cell.CellX(), cell.CellY(), cell.GridX(), cell.GridY(), GetId());
- }
- else
- {
- sLog->outStaticDebug("Active object nearby triggers loading of grid [%u, %u] on map %u", cell.GridX(), cell.GridY(), GetId());
- }
-
+ sLog->outStaticDebug("Active object "UI64FMTD" triggers loading of grid [%u, %u] on map %u", object->GetGUID(), cell.GridX(), cell.GridY(), GetId());
ResetGridExpiry(*grid, 0.1f);
grid->SetGridState(GRID_STATE_ACTIVE);
}
}
+//Create NGrid and load the object data in it
bool Map::EnsureGridLoaded(const Cell &cell)
{
- EnsureGridCreated(GridPair(cell.GridX(), cell.GridY()));
+ EnsureGridCreated(GridCoord(cell.GridX(), cell.GridY()));
NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
ASSERT(grid != NULL);
@@ -390,7 +367,7 @@ bool Map::EnsureGridLoaded(const Cell &cell)
loader.LoadN();
// Add resurrectable corpses to world object list in grid
- sObjectAccessor->AddCorpsesToGrid(GridPair(cell.GridX(), cell.GridY()), (*grid)(cell.CellX(), cell.CellY()), this);
+ sObjectAccessor->AddCorpsesToGrid(GridCoord(cell.GridX(), cell.GridY()), grid->GetGridType(cell.CellX(), cell.CellY()), this);
return true;
}
@@ -399,30 +376,25 @@ bool Map::EnsureGridLoaded(const Cell &cell)
void Map::LoadGrid(float x, float y)
{
- CellPair pair = Trinity::ComputeCellPair(x, y);
- Cell cell(pair);
- EnsureGridLoaded(cell);
+ EnsureGridLoaded(Cell(x, y));
}
-bool Map::AddToMap(Player* player)
+bool Map::AddPlayerToMap(Player* player)
{
- // Check if we are adding to correct map
- ASSERT (player->GetMap() == this);
- CellPair p = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY());
- if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ CellCoord cellCoord = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
+ if (!cellCoord.IsCoordValid())
{
- sLog->outError("Map::Add: Player (GUID: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", player->GetGUIDLow(), player->GetPositionX(), player->GetPositionY(), p.x_coord, p.y_coord);
+ sLog->outError("Map::Add: Player (GUID: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", player->GetGUIDLow(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
return false;
}
- player->SetMap(this);
-
- Cell cell(p);
- EnsureGridLoadedAtEnter(cell, player);
- NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
- ASSERT(grid != NULL);
- AddToGrid(player, grid, cell);
+ Cell cell(cellCoord);
+ EnsureGridLoadedForActiveObject(cell, player);
+ AddToGrid(player, cell);
+ // Check if we are adding to correct map
+ ASSERT (player->GetMap() == this);
+ player->SetMap(this);
player->AddToWorld();
SendInitSelf(player);
@@ -436,7 +408,7 @@ bool Map::AddToMap(Player* player)
}
template<class T>
-void Map::InitializeObject(T* obj)
+void Map::InitializeObject(T* /*obj*/)
{
}
@@ -447,69 +419,67 @@ void Map::InitializeObject(Creature* obj)
}
template<class T>
-void
-Map::AddToMap(T *obj)
+bool Map::AddToMap(T *obj)
{
- CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
- if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ //TODO: Needs clean up. An object should not be added to map twice.
+ if (obj->IsInWorld())
{
- sLog->outError("Map::Add: Object " UI64FMTD " has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
- return;
+ ASSERT(obj->IsInGrid());
+ obj->UpdateObjectVisibility(true);
+ return true;
}
- Cell cell(p);
- if (obj->IsInWorld()) // need some clean up later
+ CellCoord cellCoord = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
+ //It will create many problems (including crashes) if an object is not added to grid after creation
+ //The correct way to fix it is to make AddToMap return false and delete the object if it is not added to grid
+ //But now AddToMap is used in too many places, I will just see how many ASSERT failures it will cause
+ ASSERT(cellCoord.IsCoordValid());
+ if (!cellCoord.IsCoordValid())
{
- obj->UpdateObjectVisibility(true);
- return;
+ sLog->outError("Map::Add: Object " UI64FMTD " has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord);
+ return false; //Should delete object
}
+ Cell cell(cellCoord);
if (obj->isActiveObject())
- EnsureGridLoadedAtEnter(cell);
+ EnsureGridLoadedForActiveObject(cell, obj);
else
- EnsureGridCreated(GridPair(cell.GridX(), cell.GridY()));
-
- NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
- ASSERT(grid != NULL);
+ EnsureGridCreated(GridCoord(cell.GridX(), cell.GridY()));
+ AddToGrid(obj, cell);
+ sLog->outStaticDebug("Object %u enters grid[%u, %u]", GUID_LOPART(obj->GetGUID()), cell.GridX(), cell.GridY());
- AddToGrid(obj, grid, cell);
+ //Must already be set before AddToMap. Usually during obj->Create.
//obj->SetMap(this);
obj->AddToWorld();
+
InitializeObject(obj);
if (obj->isActiveObject())
AddToActive(obj);
- sLog->outStaticDebug("Object %u enters grid[%u, %u]", GUID_LOPART(obj->GetGUID()), cell.GridX(), cell.GridY());
-
//something, such as vehicle, needs to be update immediately
//also, trigger needs to cast spell, if not update, cannot see visual
obj->UpdateObjectVisibility(true);
+ return true;
}
-bool Map::loaded(const GridPair &p) const
+bool Map::IsGridLoaded(const GridCoord &p) const
{
return (getNGrid(p.x_coord, p.y_coord) && isGridObjectDataLoaded(p.x_coord, p.y_coord));
}
void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor, TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor)
{
- CellPair standing_cell(Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()));
-
- // Check for correctness of standing_cell, it also avoids problems with update_cell
- if (standing_cell.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || standing_cell.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+ // Check for valid position
+ if (!obj->IsPositionValid())
return;
- // the overloaded operators handle range checking
- // so there's no need for range checking inside the loop
- CellPair begin_cell(standing_cell), end_cell(standing_cell);
- //lets update mobs/objects in ALL visible cells around object!
- CellArea area = Cell::CalculateCellArea(*obj, obj->GetGridActivationRange());
- area.ResizeBorders(begin_cell, end_cell);
+ // Update mobs/objects in ALL visible cells around object!
+ CellArea area = Cell::CalculateCellArea(obj->GetPositionX(), obj->GetPositionY(), obj->GetGridActivationRange());
- for (uint32 x = begin_cell.x_coord; x <= end_cell.x_coord; ++x)
+ for (uint32 x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x)
{
- for (uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; ++y)
+ for (uint32 y = area.low_bound.y_coord; y <= area.high_bound.y_coord; ++y)
{
// marked cells are those that have been visited
// don't visit the same cell twice
@@ -518,11 +488,10 @@ void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::Obj
continue;
markCell(cell_id);
- CellPair pair(x, y);
+ CellCoord pair(x, y);
Cell cell(pair);
- cell.data.Part.reserved = CENTER_DISTRICT;
- cell.Visit(pair, gridVisitor, *this);
- cell.Visit(pair, worldVisitor, *this);
+ Visit(cell, gridVisitor);
+ Visit(cell, worldVisitor);
}
}
}
@@ -532,11 +501,11 @@ void Map::Update(const uint32 t_diff)
/// update worldsessions for existing players
for (m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
{
- Player* plr = m_mapRefIter->getSource();
- if (plr && plr->IsInWorld())
+ Player* player = m_mapRefIter->getSource();
+ if (player && player->IsInWorld())
{
- //plr->Update(t_diff);
- WorldSession* pSession = plr->GetSession();
+ //player->Update(t_diff);
+ WorldSession* pSession = player->GetSession();
MapSessionFilter updater(pSession);
pSession->Update(t_diff, updater);
}
@@ -554,15 +523,15 @@ void Map::Update(const uint32 t_diff)
// to make sure calls to Map::Remove don't invalidate it
for (m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
{
- Player* plr = m_mapRefIter->getSource();
+ Player* player = m_mapRefIter->getSource();
- if (!plr || !plr->IsInWorld())
+ if (!player || !player->IsInWorld())
continue;
// update players at tick
- plr->Update(t_diff);
+ player->Update(t_diff);
- VisitNearbyCellsOf(plr, grid_object_update, world_object_update);
+ VisitNearbyCellsOf(player, grid_object_update, world_object_update);
}
// non-player active objects, increasing iterator in the loop in case of object removal
@@ -620,8 +589,8 @@ void Map::ProcessRelocationNotifies(const uint32 diff)
uint32 gx = grid->getX(), gy = grid->getY();
- CellPair cell_min(gx*MAX_NUMBER_OF_CELLS, gy*MAX_NUMBER_OF_CELLS);
- CellPair cell_max(cell_min.x_coord + MAX_NUMBER_OF_CELLS, cell_min.y_coord+MAX_NUMBER_OF_CELLS);
+ CellCoord cell_min(gx*MAX_NUMBER_OF_CELLS, gy*MAX_NUMBER_OF_CELLS);
+ CellCoord cell_max(cell_min.x_coord + MAX_NUMBER_OF_CELLS, cell_min.y_coord+MAX_NUMBER_OF_CELLS);
for (uint32 x = cell_min.x_coord; x < cell_max.x_coord; ++x)
{
@@ -631,7 +600,7 @@ void Map::ProcessRelocationNotifies(const uint32 diff)
if (!isCellMarked(cell_id))
continue;
- CellPair pair(x, y);
+ CellCoord pair(x, y);
Cell cell(pair);
cell.SetNoCreate();
@@ -661,8 +630,8 @@ void Map::ProcessRelocationNotifies(const uint32 diff)
uint32 gx = grid->getX(), gy = grid->getY();
- CellPair cell_min(gx*MAX_NUMBER_OF_CELLS, gy*MAX_NUMBER_OF_CELLS);
- CellPair cell_max(cell_min.x_coord + MAX_NUMBER_OF_CELLS, cell_min.y_coord+MAX_NUMBER_OF_CELLS);
+ CellCoord cell_min(gx*MAX_NUMBER_OF_CELLS, gy*MAX_NUMBER_OF_CELLS);
+ CellCoord cell_max(cell_min.x_coord + MAX_NUMBER_OF_CELLS, cell_min.y_coord+MAX_NUMBER_OF_CELLS);
for (uint32 x = cell_min.x_coord; x < cell_max.x_coord; ++x)
{
@@ -672,7 +641,7 @@ void Map::ProcessRelocationNotifies(const uint32 diff)
if (!isCellMarked(cell_id))
continue;
- CellPair pair(x, y);
+ CellCoord pair(x, y);
Cell cell(pair);
cell.SetNoCreate();
Visit(cell, grid_notifier);
@@ -682,29 +651,16 @@ void Map::ProcessRelocationNotifies(const uint32 diff)
}
}
-void Map::RemoveFromMap(Player* player, bool remove)
+void Map::RemovePlayerFromMap(Player* player, bool remove)
{
player->RemoveFromWorld();
SendRemoveTransports(player);
- CellPair p = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY());
- if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
- sLog->outCrash("Map::Remove: Player is in invalid cell!");
+ player->UpdateObjectVisibility(true);
+ if (player->IsInGrid())
+ player->RemoveFromGrid();
else
- {
- Cell cell(p);
- if (!getNGrid(cell.data.Part.grid_x, cell.data.Part.grid_y))
- sLog->outError("Map::Remove() i_grids was NULL x:%d, y:%d", cell.data.Part.grid_x, cell.data.Part.grid_y);
- else
- {
- sLog->outStaticDebug("Remove player %s from grid[%u, %u]", player->GetName(), cell.GridX(), cell.GridY());
- NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
- ASSERT(grid != NULL);
-
- player->UpdateObjectVisibility(true);
- RemoveFromGrid(player, grid, cell);
- }
- }
+ ASSERT(remove); //maybe deleted in logoutplayer when player is not in a map
if (remove)
DeleteFromWorld(player);
@@ -713,29 +669,14 @@ void Map::RemoveFromMap(Player* player, bool remove)
}
template<class T>
-void
-Map::RemoveFromMap(T *obj, bool remove)
+void Map::RemoveFromMap(T *obj, bool remove)
{
obj->RemoveFromWorld();
if (obj->isActiveObject())
RemoveFromActive(obj);
- CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
- if (p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
- sLog->outError("Map::Remove: Object " UI64FMTD " has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
- else
- {
- Cell cell(p);
- if (loaded(GridPair(cell.data.Part.grid_x, cell.data.Part.grid_y)))
- {
- sLog->outStaticDebug("Remove object " UI64FMTD " from grid[%u, %u]", obj->GetGUID(), cell.data.Part.grid_x, cell.data.Part.grid_y);
- NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
- ASSERT(grid != NULL);
-
- obj->UpdateObjectVisibility(true);
- RemoveFromGrid(obj, grid, cell);
- }
- }
+ obj->UpdateObjectVisibility(true);
+ obj->RemoveFromGrid();
obj->ResetMap();
@@ -748,16 +689,12 @@ Map::RemoveFromMap(T *obj, bool remove)
}
}
-void
-Map::PlayerRelocation(Player* player, float x, float y, float z, float orientation)
+void Map::PlayerRelocation(Player* player, float x, float y, float z, float orientation)
{
ASSERT(player);
- CellPair old_val = Trinity::ComputeCellPair(player->GetPositionX(), player->GetPositionY());
- CellPair new_val = Trinity::ComputeCellPair(x, y);
-
- Cell old_cell(old_val);
- Cell new_cell(new_val);
+ Cell old_cell(player->GetPositionX(), player->GetPositionY());
+ Cell new_cell(x, y);
player->Relocate(x, y, z, orientation);
@@ -765,28 +702,23 @@ Map::PlayerRelocation(Player* player, float x, float y, float z, float orientati
{
sLog->outStaticDebug("Player %s relocation grid[%u, %u]cell[%u, %u]->grid[%u, %u]cell[%u, %u]", player->GetName(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
- NGridType* oldGrid = getNGrid(old_cell.GridX(), old_cell.GridY());
- RemoveFromGrid(player, oldGrid, old_cell);
+ player->RemoveFromGrid();
if (old_cell.DiffGrid(new_cell))
- EnsureGridLoadedAtEnter(new_cell, player);
+ EnsureGridLoadedForActiveObject(new_cell, player);
- NGridType* newGrid = getNGrid(new_cell.GridX(), new_cell.GridY());
- AddToGrid(player, newGrid, new_cell);
+ AddToGrid(player, new_cell);
}
player->UpdateObjectVisibility(false);
}
-void
-Map::CreatureRelocation(Creature* creature, float x, float y, float z, float ang, bool respawnRelocationOnFail)
+void Map::CreatureRelocation(Creature* creature, float x, float y, float z, float ang, bool respawnRelocationOnFail)
{
ASSERT(CheckGridIntegrity(creature, false));
Cell old_cell = creature->GetCurrentCell();
-
- CellPair new_val = Trinity::ComputeCellPair(x, y);
- Cell new_cell(new_val);
+ Cell new_cell(x, y);
if (!respawnRelocationOnFail && !getNGrid(new_cell.GridX(), new_cell.GridY()))
return;
@@ -815,7 +747,7 @@ void Map::AddCreatureToMoveList(Creature* c, float x, float y, float z, float an
if (_creatureToMoveLock) //can this happen?
return;
- if(c->_moveState == CREATURE_CELL_MOVE_NONE)
+ if (c->_moveState == CREATURE_CELL_MOVE_NONE)
_creaturesToMove.push_back(c);
c->SetNewCellPosition(x, y, z, ang);
}
@@ -825,7 +757,7 @@ void Map::RemoveCreatureFromMoveList(Creature* c)
if (_creatureToMoveLock) //can this happen?
return;
- if(c->_moveState == CREATURE_CELL_MOVE_ACTIVE)
+ if (c->_moveState == CREATURE_CELL_MOVE_ACTIVE)
c->_moveState = CREATURE_CELL_MOVE_INACTIVE;
}
@@ -849,11 +781,11 @@ void Map::MoveAllCreaturesInMoveList()
continue;
// do move or do move to respawn or remove creature if previous all fail
- if (CreatureCellRelocation(c, Cell(Trinity::ComputeCellPair(c->_newPosition.m_positionX, c->_newPosition.m_positionY))))
+ if (CreatureCellRelocation(c, Cell(c->_newPosition.m_positionX, c->_newPosition.m_positionY)))
{
// update pos
c->Relocate(c->_newPosition);
- //CreatureRelocationNotify(c, new_cell, new_cell.cellPair());
+ //CreatureRelocationNotify(c, new_cell, new_cell.cellCoord());
c->UpdateObjectVisibility(false);
}
else
@@ -895,8 +827,8 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
sLog->outDebug(LOG_FILTER_MAPS, "Creature (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY());
#endif
- RemoveFromGrid(c, getNGrid(old_cell.GridX(), old_cell.GridY()), old_cell);
- AddToGrid(c, getNGrid(new_cell.GridX(), new_cell.GridY()), new_cell);
+ c->RemoveFromGrid();
+ AddToGrid(c, new_cell);
}
else
{
@@ -911,28 +843,28 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
// in diff. grids but active creature
if (c->isActiveObject())
{
- EnsureGridLoadedAtEnter(new_cell);
+ EnsureGridLoadedForActiveObject(new_cell, c);
#ifdef TRINITY_DEBUG
sLog->outDebug(LOG_FILTER_MAPS, "Active creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
- RemoveFromGrid(c, getNGrid(old_cell.GridX(), old_cell.GridY()), old_cell);
- AddToGrid(c, getNGrid(new_cell.GridX(), new_cell.GridY()), new_cell);
+ c->RemoveFromGrid();
+ AddToGrid(c, new_cell);
return true;
}
// in diff. loaded grid normal creature
- if (loaded(GridPair(new_cell.GridX(), new_cell.GridY())))
+ if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY())))
{
#ifdef TRINITY_DEBUG
sLog->outDebug(LOG_FILTER_MAPS, "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
- RemoveFromGrid(c, getNGrid(old_cell.GridX(), old_cell.GridY()), old_cell);
- EnsureGridCreated(GridPair(new_cell.GridX(), new_cell.GridY()));
- AddToGrid(c, getNGrid(new_cell.GridX(), new_cell.GridY()), new_cell);
+ c->RemoveFromGrid();
+ EnsureGridCreated(GridCoord(new_cell.GridX(), new_cell.GridY()));
+ AddToGrid(c, new_cell);
return true;
}
@@ -947,12 +879,11 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell)
bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly)
{
float resp_x, resp_y, resp_z, resp_o;
- c->GetRespawnCoord(resp_x, resp_y, resp_z, &resp_o);
- CellPair resp_val = Trinity::ComputeCellPair(resp_x, resp_y);
- Cell resp_cell(resp_val);
+ c->GetRespawnPosition(resp_x, resp_y, resp_z, &resp_o);
+ Cell resp_cell(resp_x, resp_y);
//creature will be unloaded with grid
- if(diffGridOnly && !c->GetCurrentCell().DiffGrid(resp_cell))
+ if (diffGridOnly && !c->GetCurrentCell().DiffGrid(resp_cell))
return true;
c->CombatStop();
@@ -967,7 +898,7 @@ bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly)
{
c->Relocate(resp_x, resp_y, resp_z, resp_o);
c->GetMotionMaster()->Initialize(); // prevent possible problems with default move generators
- //CreatureRelocationNotify(c, resp_cell, resp_cell.cellPair());
+ //CreatureRelocationNotify(c, resp_cell, resp_cell.GetCellCoord());
c->UpdateObjectVisibility(false);
return true;
}
@@ -975,18 +906,23 @@ bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly)
return false;
}
-bool Map::UnloadGrid(const uint32 x, const uint32 y, bool unloadAll)
+bool Map::UnloadGrid(NGridType& ngrid, bool unloadAll)
{
- NGridType *grid = getNGrid(x, y);
- ASSERT(grid != NULL);
+ const uint32 x = ngrid.getX();
+ const uint32 y = ngrid.getY();
{
- if (!unloadAll && ActiveObjectsNearGrid(x, y))
- return false;
+ if (!unloadAll)
+ {
+ //pets, possessed creatures (must be active), transport passengers
+ if (ngrid.GetWorldObjectCountInNGrid<Creature>())
+ return false;
- sLog->outDebug(LOG_FILTER_MAPS, "Unloading grid[%u, %u] for map %u", x, y, GetId());
+ if (ActiveObjectsNearGrid(ngrid))
+ return false;
+ }
- ObjectGridUnloader unloader(*grid);
+ sLog->outDebug(LOG_FILTER_MAPS, "Unloading grid[%u, %u] for map %u", x, y, GetId());
if (!unloadAll)
{
@@ -995,22 +931,31 @@ bool Map::UnloadGrid(const uint32 x, const uint32 y, bool unloadAll)
MoveAllCreaturesInMoveList();
// move creatures to respawn grids if this is diff.grid or to remove list
- unloader.MoveToRespawnN();
+ ObjectGridEvacuator worker;
+ TypeContainerVisitor<ObjectGridEvacuator, GridTypeMapContainer> visitor(worker);
+ ngrid.VisitAllGrids(visitor);
// Finish creature moves, remove and delete all creatures with delayed remove before unload
MoveAllCreaturesInMoveList();
}
- ObjectGridCleaner cleaner(*grid);
- cleaner.CleanN();
+ {
+ ObjectGridCleaner worker;
+ TypeContainerVisitor<ObjectGridCleaner, GridTypeMapContainer> visitor(worker);
+ ngrid.VisitAllGrids(visitor);
+ }
RemoveAllObjectsInRemoveList();
- unloader.UnloadN();
+ {
+ ObjectGridUnloader worker;
+ TypeContainerVisitor<ObjectGridUnloader, GridTypeMapContainer> visitor(worker);
+ ngrid.VisitAllGrids(visitor);
+ }
ASSERT(i_objectsToRemove.empty());
- delete grid;
+ delete &ngrid;
setNGrid(NULL, x, y);
}
int gx = (MAX_NUMBER_OF_GRIDS - 1) - x;
@@ -1030,7 +975,7 @@ bool Map::UnloadGrid(const uint32 x, const uint32 y, bool unloadAll)
VMAP::VMapFactory::createOrGetVMapManager()->unloadMap(GetId(), gx, gy);
}
else
- ((MapInstanced*)m_parentMap)->RemoveGridMapReference(GridPair(gx, gy));
+ ((MapInstanced*)m_parentMap)->RemoveGridMapReference(GridCoord(gx, gy));
GridMaps[gx][gy] = NULL;
}
@@ -1044,12 +989,12 @@ void Map::RemoveAllPlayers()
{
for (MapRefManager::iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr)
{
- Player* plr = itr->getSource();
- if (!plr->IsBeingTeleportedFar())
+ Player* player = itr->getSource();
+ if (!player->IsBeingTeleportedFar())
{
// this is happening for bg
- sLog->outError("Map::UnloadAll: player %s is still in map %u during unload, this should not happen!", plr->GetName(), GetId());
- plr->TeleportTo(plr->m_homebindMapId, plr->m_homebindX, plr->m_homebindY, plr->m_homebindZ, plr->GetOrientation());
+ sLog->outError("Map::UnloadAll: player %s is still in map %u during unload, this should not happen!", player->GetName(), GetId());
+ player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
}
}
}
@@ -1064,7 +1009,7 @@ void Map::UnloadAll()
{
NGridType &grid(*i->getSource());
++i;
- UnloadGrid(grid.getX(), grid.getY(), true); // deletes the grid and removes it from the GridRefManager
+ UnloadGrid(grid, true); // deletes the grid and removes it from the GridRefManager
}
}
@@ -1225,7 +1170,7 @@ bool GridMap::loadHeihgtData(FILE* in, uint32 offset, uint32 /*size*/)
return true;
}
-bool GridMap::loadLiquidData(FILE* in, uint32 offset, uint32 /*size*/)
+bool GridMap::loadLiquidData(FILE* in, uint32 offset, uint32 /*size*/)
{
map_liquidHeader header;
fseek(in, offset, SEEK_SET);
@@ -1267,12 +1212,12 @@ uint16 GridMap::getArea(float x, float y)
return m_area_map[lx*16 + ly];
}
-float GridMap::getHeightFromFlat(float /*x*/, float /*y*/) const
+float GridMap::getHeightFromFlat(float /*x*/, float /*y*/) const
{
return m_gridHeight;
}
-float GridMap::getHeightFromFloat(float x, float y) const
+float GridMap::getHeightFromFloat(float x, float y) const
{
if (!m_V8 || !m_V9)
return m_gridHeight;
@@ -1354,7 +1299,7 @@ float GridMap::getHeightFromFloat(float x, float y) const
return a * x + b * y + c;
}
-float GridMap::getHeightFromUint8(float x, float y) const
+float GridMap::getHeightFromUint8(float x, float y) const
{
if (!m_uint8_V8 || !m_uint8_V9)
return m_gridHeight;
@@ -1421,7 +1366,7 @@ float GridMap::getHeightFromUint8(float x, float y) const
return (float)((a * x) + (b * y) + c)*m_gridIntHeightMultiplier + m_gridHeight;
}
-float GridMap::getHeightFromUint16(float x, float y) const
+float GridMap::getHeightFromUint16(float x, float y) const
{
if (!m_uint16_V8 || !m_uint16_V9)
return m_gridHeight;
@@ -1488,7 +1433,7 @@ float GridMap::getHeightFromUint16(float x, float y) const
return (float)((a * x) + (b * y) + c)*m_gridIntHeightMultiplier + m_gridHeight;
}
-float GridMap::getLiquidLevel(float x, float y)
+float GridMap::getLiquidLevel(float x, float y)
{
if (!m_liquid_map)
return m_liquidLevel;
@@ -1507,7 +1452,7 @@ float GridMap::getLiquidLevel(float x, float y)
return m_liquid_map[cx_int*m_liquid_width + cy_int];
}
-uint8 GridMap::getTerrainType(float x, float y)
+uint8 GridMap::getTerrainType(float x, float y)
{
if (!m_liquid_type)
return 0;
@@ -1589,46 +1534,33 @@ inline GridMap* Map::GetGrid(float x, float y)
int gy=(int)(32-y/SIZE_OF_GRIDS); //grid y
// ensure GridMap is loaded
- EnsureGridCreated(GridPair(63-gx, 63-gy));
+ EnsureGridCreated(GridCoord(63-gx, 63-gy));
return GridMaps[gx][gy];
}
-float Map::GetHeight(float x, float y, float z, bool pUseVmaps, float maxSearchDist) const
+float Map::GetHeight(float x, float y, float z, bool checkVMap /*= true*/, float maxSearchDist /*= DEFAULT_HEIGHT_SEARCH*/) const
{
// find raw .map surface under Z coordinates
- float mapHeight;
+ float mapHeight = VMAP_INVALID_HEIGHT_VALUE;
if (GridMap* gmap = const_cast<Map*>(this)->GetGrid(x, y))
{
- float _mapheight = gmap->getHeight(x, y);
-
+ float gridHeight = gmap->getHeight(x, y);
// look from a bit higher pos to find the floor, ignore under surface case
- if (z + 2.0f > _mapheight)
- mapHeight = _mapheight;
- else
- mapHeight = VMAP_INVALID_HEIGHT_VALUE;
+ if (z + 2.0f > gridHeight)
+ mapHeight = gridHeight;
}
- else
- mapHeight = VMAP_INVALID_HEIGHT_VALUE;
- float vmapHeight;
- if (pUseVmaps)
+ float vmapHeight = VMAP_INVALID_HEIGHT_VALUE;
+ if (checkVMap)
{
VMAP::IVMapManager* vmgr = VMAP::VMapFactory::createOrGetVMapManager();
if (vmgr->isHeightCalcEnabled())
- {
- // look from a bit higher pos to find the floor
- vmapHeight = vmgr->getHeight(GetId(), x, y, z + 2.0f, maxSearchDist);
- }
- else
- vmapHeight = VMAP_INVALID_HEIGHT_VALUE;
+ vmapHeight = vmgr->getHeight(GetId(), x, y, z + 2.0f, maxSearchDist); // look from a bit higher pos to find the floor
}
- else
- vmapHeight = VMAP_INVALID_HEIGHT_VALUE;
// mapHeight set for any above raw ground Z or <= INVALID_HEIGHT
// vmapheight set for any under Z value or <= INVALID_HEIGHT
-
if (vmapHeight > INVALID_HEIGHT)
{
if (mapHeight > INVALID_HEIGHT)
@@ -1645,15 +1577,8 @@ float Map::GetHeight(float x, float y, float z, bool pUseVmaps, float maxSearchD
else
return vmapHeight; // we have only vmapHeight (if have)
}
- else
- {
- if (!pUseVmaps)
- return mapHeight; // explicitly use map data (if have)
- else if (mapHeight > INVALID_HEIGHT && (z < mapHeight + 2 || z == MAX_HEIGHT))
- return mapHeight; // explicitly use map data if original z < mapHeight but map found (z+2 > mapHeight)
- else
- return VMAP_INVALID_HEIGHT_VALUE; // we not have any height
- }
+
+ return mapHeight; // explicitly use map data
}
inline bool IsOutdoorWMO(uint32 mogpFlags, int32 /*adtId*/, int32 /*rootId*/, int32 /*groupId*/, WMOAreaTableEntry const* wmoEntry, AreaTableEntry const* atEntry)
@@ -1858,7 +1783,7 @@ bool Map::IsInWater(float x, float y, float pZ, LiquidData* data) const
LiquidData liquid_status;
LiquidData* liquid_ptr = data ? data : &liquid_status;
if (getLiquidStatus(x, y, pZ, MAP_ALL_LIQUIDS, liquid_ptr))
- return true;
+ return true;
}
return false;
}
@@ -1876,9 +1801,7 @@ bool Map::IsUnderWater(float x, float y, float z) const
bool Map::CheckGridIntegrity(Creature* c, bool moved) const
{
Cell const& cur_cell = c->GetCurrentCell();
-
- CellPair xy_val = Trinity::ComputeCellPair(c->GetPositionX(), c->GetPositionY());
- Cell xy_cell(xy_val);
+ Cell xy_cell(c->GetPositionX(), c->GetPositionY());
if (xy_cell != cur_cell)
{
sLog->outDebug(LOG_FILTER_MAPS, "Creature (GUID: %u) X: %f Y: %f (%s) is in grid[%u, %u]cell[%u, %u] instead of grid[%u, %u]cell[%u, %u]",
@@ -1892,25 +1815,23 @@ bool Map::CheckGridIntegrity(Creature* c, bool moved) const
return true;
}
-const char* Map::GetMapName() const
+char const* Map::GetMapName() const
{
return i_mapEntry ? i_mapEntry->name[sWorld->GetDefaultDbcLocale()] : "UNNAMEDMAP\x0";
}
-void Map::UpdateObjectVisibility(WorldObject* obj, Cell cell, CellPair cellpair)
+void Map::UpdateObjectVisibility(WorldObject* obj, Cell cell, CellCoord cellpair)
{
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::VisibleChangesNotifier notifier(*obj);
TypeContainerVisitor<Trinity::VisibleChangesNotifier, WorldTypeMapContainer > player_notifier(notifier);
cell.Visit(cellpair, player_notifier, *this, *obj, obj->GetVisibilityRange());
}
-void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellPair cellpair)
+void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpair)
{
Trinity::VisibleNotifier notifier(*player);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
TypeContainerVisitor<Trinity::VisibleNotifier, WorldTypeMapContainer > world_notifier(notifier);
TypeContainerVisitor<Trinity::VisibleNotifier, GridTypeMapContainer > grid_notifier(notifier);
@@ -2027,7 +1948,7 @@ void Map::DelayedUpdate(const uint32 t_diff)
GridInfo* info = i->getSource()->getGridInfoRef();
++i; // The update might delete the map and we need the next map before the iterator gets invalid
ASSERT(grid->GetGridState() >= 0 && grid->GetGridState() < MAX_GRID_STATE);
- si_GridStates[grid->GetGridState()]->Update(*this, *grid, *info, grid->getX(), grid->getY(), t_diff);
+ si_GridStates[grid->GetGridState()]->Update(*this, *grid, *info, t_diff);
}
}
}
@@ -2064,15 +1985,8 @@ void Map::RemoveAllObjectsInRemoveList()
bool on = itr->second;
i_objectsToSwitch.erase(itr);
- switch (obj->GetTypeId())
- {
- case TYPEID_UNIT:
- if (!obj->ToCreature()->isPet())
- SwitchGridContainers(obj->ToCreature(), on);
- break;
- default:
- break;
- }
+ if (obj->GetTypeId() == TYPEID_UNIT && !obj->IsPermanentWorldObject())
+ SwitchGridContainers(obj->ToCreature(), on);
}
//sLog->outDebug(LOG_FILTER_MAPS, "Object remover 1 check.");
@@ -2130,28 +2044,25 @@ void Map::SendToPlayers(WorldPacket const* data) const
itr->getSource()->GetSession()->SendPacket(data);
}
-bool Map::ActiveObjectsNearGrid(uint32 x, uint32 y) const
+bool Map::ActiveObjectsNearGrid(NGridType const& ngrid) const
{
- ASSERT(x < MAX_NUMBER_OF_GRIDS);
- ASSERT(y < MAX_NUMBER_OF_GRIDS);
-
- CellPair cell_min(x*MAX_NUMBER_OF_CELLS, y*MAX_NUMBER_OF_CELLS);
- CellPair cell_max(cell_min.x_coord + MAX_NUMBER_OF_CELLS, cell_min.y_coord+MAX_NUMBER_OF_CELLS);
+ CellCoord cell_min(ngrid.getX() * MAX_NUMBER_OF_CELLS, ngrid.getY() * MAX_NUMBER_OF_CELLS);
+ CellCoord cell_max(cell_min.x_coord + MAX_NUMBER_OF_CELLS, cell_min.y_coord+MAX_NUMBER_OF_CELLS);
//we must find visible range in cells so we unload only non-visible cells...
float viewDist = GetVisibilityRange();
int cell_range = (int)ceilf(viewDist / SIZE_OF_GRID_CELL) + 1;
- cell_min << cell_range;
- cell_min -= cell_range;
- cell_max >> cell_range;
- cell_max += cell_range;
+ cell_min.dec_x(cell_range);
+ cell_min.dec_y(cell_range);
+ cell_max.inc_x(cell_range);
+ cell_max.inc_y(cell_range);
for (MapRefManager::const_iterator iter = m_mapRefManager.begin(); iter != m_mapRefManager.end(); ++iter)
{
- Player* plr = iter->getSource();
+ Player* player = iter->getSource();
- CellPair p = Trinity::ComputeCellPair(plr->GetPositionX(), plr->GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY());
if ((cell_min.x_coord <= p.x_coord && p.x_coord <= cell_max.x_coord) &&
(cell_min.y_coord <= p.y_coord && p.y_coord <= cell_max.y_coord))
return true;
@@ -2161,7 +2072,7 @@ bool Map::ActiveObjectsNearGrid(uint32 x, uint32 y) const
{
WorldObject* obj = *iter;
- CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
if ((cell_min.x_coord <= p.x_coord && p.x_coord <= cell_max.x_coord) &&
(cell_min.y_coord <= p.y_coord && p.y_coord <= cell_max.y_coord))
return true;
@@ -2178,13 +2089,13 @@ void Map::AddToActive(Creature* c)
if (!c->isPet() && c->GetDBTableGUIDLow())
{
float x, y, z;
- c->GetRespawnCoord(x, y, z);
- GridPair p = Trinity::ComputeGridPair(x, y);
+ c->GetRespawnPosition(x, y, z);
+ GridCoord p = Trinity::ComputeGridCoord(x, y);
if (getNGrid(p.x_coord, p.y_coord))
getNGrid(p.x_coord, p.y_coord)->incUnloadActiveLock();
else
{
- GridPair p2 = Trinity::ComputeGridPair(c->GetPositionX(), c->GetPositionY());
+ GridCoord p2 = Trinity::ComputeGridCoord(c->GetPositionX(), c->GetPositionY());
sLog->outError("Active creature (GUID: %u Entry: %u) added to grid[%u, %u] but spawn grid[%u, %u] was not loaded.",
c->GetGUIDLow(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord);
}
@@ -2199,23 +2110,23 @@ void Map::RemoveFromActive(Creature* c)
if (!c->isPet() && c->GetDBTableGUIDLow())
{
float x, y, z;
- c->GetRespawnCoord(x, y, z);
- GridPair p = Trinity::ComputeGridPair(x, y);
+ c->GetRespawnPosition(x, y, z);
+ GridCoord p = Trinity::ComputeGridCoord(x, y);
if (getNGrid(p.x_coord, p.y_coord))
getNGrid(p.x_coord, p.y_coord)->decUnloadActiveLock();
else
{
- GridPair p2 = Trinity::ComputeGridPair(c->GetPositionX(), c->GetPositionY());
+ GridCoord p2 = Trinity::ComputeGridCoord(c->GetPositionX(), c->GetPositionY());
sLog->outError("Active creature (GUID: %u Entry: %u) removed from grid[%u, %u] but spawn grid[%u, %u] was not loaded.",
c->GetGUIDLow(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord);
}
}
}
-template void Map::AddToMap(Corpse*);
-template void Map::AddToMap(Creature*);
-template void Map::AddToMap(GameObject*);
-template void Map::AddToMap(DynamicObject*);
+template bool Map::AddToMap(Corpse*);
+template bool Map::AddToMap(Creature*);
+template bool Map::AddToMap(GameObject*);
+template bool Map::AddToMap(DynamicObject*);
template void Map::RemoveFromMap(Corpse*, bool);
template void Map::RemoveFromMap(Creature*, bool);
@@ -2315,14 +2226,14 @@ bool InstanceMap::CanEnter(Player* player)
/*
Do map specific checks and add the player to the map if successful.
*/
-bool InstanceMap::AddToMap(Player* player)
+bool InstanceMap::AddPlayerToMap(Player* player)
{
// TODO: Not sure about checking player level: already done in HandleAreaTriggerOpcode
// GMs still can teleport player in instance.
// Is it needed?
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, Lock, false);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
// Check moved to void WorldSession::HandleMoveWorldportAckOpcode()
//if (!CanEnter(player))
//return false;
@@ -2411,6 +2322,13 @@ bool InstanceMap::AddToMap(Player* player)
ASSERT(playerBind->save == mapSave);
}
}
+
+ if (group && group->isLFGGroup())
+ if (uint32 dungeonId = sLFGMgr->GetDungeon(group->GetGUID(), true))
+ if (LFGDungeonEntry const* dungeon = sLFGDungeonStore.LookupEntry(dungeonId))
+ if (LFGDungeonEntry const* randomDungeon = sLFGDungeonStore.LookupEntry(*(sLFGMgr->GetSelectedDungeons(player->GetGUID()).begin())))
+ if (dungeon->map == GetId() && dungeon->difficulty == GetDifficulty() && randomDungeon->type == LFG_TYPE_RANDOM)
+ player->CastSpell(player, LFG_SPELL_LUCK_OF_THE_DRAW, true);
}
// for normal instances cancel the reset schedule when the
@@ -2425,7 +2343,7 @@ bool InstanceMap::AddToMap(Player* player)
}
// this will acquire the same mutex so it cannot be in the previous block
- Map::AddToMap(player);
+ Map::AddPlayerToMap(player);
if (i_data)
i_data->OnPlayerEnter(player);
@@ -2441,13 +2359,13 @@ void InstanceMap::Update(const uint32 t_diff)
i_data->Update(t_diff);
}
-void InstanceMap::RemoveFromMap(Player* player, bool remove)
+void InstanceMap::RemovePlayerFromMap(Player* player, bool remove)
{
sLog->outDetail("MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to another map", player->GetName(), GetInstanceId(), GetMapName());
//if last player set unload timer
if (!m_unloadTimer && m_mapRefManager.getSize() == 1)
m_unloadTimer = m_unloadWhenEmpty ? MIN_UNLOAD_DELAY : std::max(sWorld->getIntConfig(CONFIG_INSTANCE_UNLOAD_DELAY), (uint32)MIN_UNLOAD_DELAY);
- Map::RemoveFromMap(player, remove);
+ Map::RemovePlayerFromMap(player, remove);
// for normal instances schedule the reset after all players have left
SetResetSchedule(true);
}
@@ -2526,7 +2444,7 @@ bool InstanceMap::Reset(uint8 method)
return m_mapRefManager.isEmpty();
}
-void InstanceMap::PermBindAllPlayers(Player* player)
+void InstanceMap::PermBindAllPlayers(Player* source)
{
if (!IsDungeon())
return;
@@ -2534,28 +2452,28 @@ void InstanceMap::PermBindAllPlayers(Player* player)
InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(GetInstanceId());
if (!save)
{
- sLog->outError("Cannot bind player (GUID: %u, Name: %s), because no instance save is available for instance map (Name: %s, Entry: %u, InstanceId: %u)!", player->GetGUIDLow(), player->GetName(), player->GetMap()->GetMapName(), player->GetMapId(), GetInstanceId());
+ sLog->outError("Cannot bind player (GUID: %u, Name: %s), because no instance save is available for instance map (Name: %s, Entry: %u, InstanceId: %u)!", source->GetGUIDLow(), source->GetName(), source->GetMap()->GetMapName(), source->GetMapId(), GetInstanceId());
return;
}
- Group* group = player->GetGroup();
+ Group* group = source->GetGroup();
// group members outside the instance group don't get bound
for (MapRefManager::iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr)
{
- Player* plr = itr->getSource();
+ Player* player = itr->getSource();
// players inside an instance cannot be bound to other instances
// some players may already be permanently bound, in this case nothing happens
- InstancePlayerBind* bind = plr->GetBoundInstance(save->GetMapId(), save->GetDifficulty());
+ InstancePlayerBind* bind = player->GetBoundInstance(save->GetMapId(), save->GetDifficulty());
if (!bind || !bind->perm)
{
- plr->BindToInstance(save, true);
+ player->BindToInstance(save, true);
WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4);
data << uint32(0);
- plr->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(&data);
}
// if the leader is not in the instance the group will not get a perm bind
- if (group && group->GetLeaderGUID() == plr->GetGUID())
+ if (group && group->GetLeaderGUID() == player->GetGUID())
group->BindToInstance(save, true);
}
}
@@ -2661,23 +2579,23 @@ bool BattlegroundMap::CanEnter(Player* player)
return Map::CanEnter(player);
}
-bool BattlegroundMap::AddToMap(Player* player)
+bool BattlegroundMap::AddPlayerToMap(Player* player)
{
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, Lock, false);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
//Check moved to void WorldSession::HandleMoveWorldportAckOpcode()
//if (!CanEnter(player))
//return false;
// reset instance validity, battleground maps do not homebind
player->m_InstanceValid = true;
}
- return Map::AddToMap(player);
+ return Map::AddPlayerToMap(player);
}
-void BattlegroundMap::RemoveFromMap(Player* player, bool remove)
+void BattlegroundMap::RemovePlayerFromMap(Player* player, bool remove)
{
sLog->outDetail("MAP: Removing player '%s' from bg '%u' of map '%s' before relocating to another map", player->GetName(), GetInstanceId(), GetMapName());
- Map::RemoveFromMap(player, remove);
+ Map::RemovePlayerFromMap(player, remove);
}
void BattlegroundMap::SetUnload()
@@ -2689,25 +2607,22 @@ void BattlegroundMap::RemoveAllPlayers()
{
if (HavePlayers())
for (MapRefManager::iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr)
- if (Player* plr = itr->getSource())
- if (!plr->IsBeingTeleportedFar())
- plr->TeleportTo(plr->GetBattlegroundEntryPoint());
+ if (Player* player = itr->getSource())
+ if (!player->IsBeingTeleportedFar())
+ player->TeleportTo(player->GetBattlegroundEntryPoint());
}
-Creature*
-Map::GetCreature(uint64 guid)
+Creature* Map::GetCreature(uint64 guid)
{
return ObjectAccessor::GetObjectInMap(guid, this, (Creature*)NULL);
}
-GameObject*
-Map::GetGameObject(uint64 guid)
+GameObject* Map::GetGameObject(uint64 guid)
{
return ObjectAccessor::GetObjectInMap(guid, this, (GameObject*)NULL);
}
-DynamicObject*
-Map::GetDynamicObject(uint64 guid)
+DynamicObject* Map::GetDynamicObject(uint64 guid)
{
return ObjectAccessor::GetObjectInMap(guid, this, (DynamicObject*)NULL);
}
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index fd58fd0cc72..9f6b936541e 100755
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -244,9 +244,9 @@ class Map : public GridRefManager<NGridType>
return false;
}
- virtual bool AddToMap(Player*);
- virtual void RemoveFromMap(Player*, bool);
- template<class T> void AddToMap(T *);
+ virtual bool AddPlayerToMap(Player*);
+ virtual void RemovePlayerFromMap(Player*, bool);
+ template<class T> bool AddToMap(T *);
template<class T> void RemoveFromMap(T *, bool);
void VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor, TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor);
@@ -263,20 +263,19 @@ class Map : public GridRefManager<NGridType>
bool IsRemovalGrid(float x, float y) const
{
- GridPair p = Trinity::ComputeGridPair(x, y);
+ GridCoord p = Trinity::ComputeGridCoord(x, y);
return !getNGrid(p.x_coord, p.y_coord) || getNGrid(p.x_coord, p.y_coord)->GetGridState() == GRID_STATE_REMOVAL;
}
- bool IsLoaded(float x, float y) const
+ bool IsGridLoaded(float x, float y) const
{
- GridPair p = Trinity::ComputeGridPair(x, y);
- return loaded(p);
+ return IsGridLoaded(Trinity::ComputeGridCoord(x, y));
}
- bool GetUnloadLock(const GridPair &p) const { return getNGrid(p.x_coord, p.y_coord)->getUnloadLock(); }
- void SetUnloadLock(const GridPair &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadExplicitLock(on); }
+ bool GetUnloadLock(const GridCoord &p) const { return getNGrid(p.x_coord, p.y_coord)->getUnloadLock(); }
+ void SetUnloadLock(const GridCoord &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadExplicitLock(on); }
void LoadGrid(float x, float y);
- bool UnloadGrid(const uint32 x, const uint32 y, bool pForce);
+ bool UnloadGrid(NGridType& ngrid, bool pForce);
virtual void UnloadAll();
void ResetGridExpiry(NGridType &grid, float factor = 1) const
@@ -297,7 +296,7 @@ class Map : public GridRefManager<NGridType>
// some calls like isInWater should not use vmaps due to processor power
// can return INVALID_HEIGHT if under z+2 z coord not found height
- float GetHeight(float x, float y, float z, bool pCheckVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const;
+ float GetHeight(float x, float y, float z, bool checkVMap = true, float maxSearchDist = DEFAULT_HEIGHT_SEARCH) const;
ZLiquidStatus getLiquidStatus(float x, float y, float z, uint8 ReqLiquidType, LiquidData* data = 0) const;
@@ -371,8 +370,8 @@ class Map : public GridRefManager<NGridType>
void AddObjectToSwitchList(WorldObject* obj, bool on);
virtual void DelayedUpdate(const uint32 diff);
- void UpdateObjectVisibility(WorldObject* obj, Cell cell, CellPair cellpair);
- void UpdateObjectsVisibilityFor(Player* player, Cell cell, CellPair cellpair);
+ void UpdateObjectVisibility(WorldObject* obj, Cell cell, CellCoord cellpair);
+ void UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpair);
void resetMarkedCells() { marked_cells.reset(); }
bool isCellMarked(uint32 pCellId) { return marked_cells.test(pCellId); }
@@ -380,7 +379,7 @@ class Map : public GridRefManager<NGridType>
bool HavePlayers() const { return !m_mapRefManager.isEmpty(); }
uint32 GetPlayersCountExceptGMs() const;
- bool ActiveObjectsNearGrid(uint32 x, uint32 y) const;
+ bool ActiveObjectsNearGrid(NGridType const& ngrid) const;
void AddWorldObject(WorldObject* obj) { i_worldObjects.insert(obj); }
void RemoveWorldObject(WorldObject* obj) { i_worldObjects.erase(obj); }
@@ -406,7 +405,7 @@ class Map : public GridRefManager<NGridType>
void RemoveFromActive(Creature* obj);
- template<class T> void SwitchGridContainers(T* obj, bool active);
+ void SwitchGridContainers(Creature* creature, bool toWorldContainer);
template<class NOTIFIER> void VisitAll(const float &x, const float &y, float radius, NOTIFIER &notifier);
template<class NOTIFIER> void VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER &notifier);
template<class NOTIFIER> void VisitWorld(const float &x, const float &y, float radius, NOTIFIER &notifier);
@@ -420,8 +419,8 @@ class Map : public GridRefManager<NGridType>
GameObject* GetGameObject(uint64 guid);
DynamicObject* GetDynamicObject(uint64 guid);
- MapInstanced* ToMainstanced(){ if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); else return NULL; }
- const MapInstanced* ToMainstanced() const { if (Instanceable()) return (const MapInstanced*)((MapInstanced*)this); else return NULL; }
+ MapInstanced* ToMapInstanced(){ if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); else return NULL; }
+ const MapInstanced* ToMapInstanced() const { if (Instanceable()) return (const MapInstanced*)((MapInstanced*)this); else return NULL; }
InstanceMap* ToInstanceMap(){ if (IsDungeon()) return reinterpret_cast<InstanceMap*>(this); else return NULL; }
const InstanceMap* ToInstanceMap() const { if (IsDungeon()) return (const InstanceMap*)((InstanceMap*)this); else return NULL; }
@@ -443,13 +442,14 @@ class Map : public GridRefManager<NGridType>
template<class T> void InitializeObject(T* obj);
void AddCreatureToMoveList(Creature* c, float x, float y, float z, float ang);
void RemoveCreatureFromMoveList(Creature* c);
+
bool _creatureToMoveLock;
std::vector<Creature*> _creaturesToMove;
- bool loaded(const GridPair &) const;
- void EnsureGridCreated(const GridPair &);
+ bool IsGridLoaded(const GridCoord &) const;
+ void EnsureGridCreated(const GridCoord &);
bool EnsureGridLoaded(Cell const&);
- void EnsureGridLoadedAtEnter(Cell const&, Player* player = NULL);
+ void EnsureGridLoadedForActiveObject(Cell const&, WorldObject* object);
void buildNGridLinkage(NGridType* pNGridType) { pNGridType->link(this); }
@@ -458,8 +458,7 @@ class Map : public GridRefManager<NGridType>
NGridType* getNGrid(uint32 x, uint32 y) const
{
- ASSERT(x < MAX_NUMBER_OF_GRIDS);
- ASSERT(y < MAX_NUMBER_OF_GRIDS);
+ ASSERT(x < MAX_NUMBER_OF_GRIDS && y < MAX_NUMBER_OF_GRIDS);
return i_grids[x][y];
}
@@ -471,7 +470,7 @@ class Map : public GridRefManager<NGridType>
void UpdateActiveCells(const float &x, const float &y, const uint32 t_diff);
protected:
- void SetUnloadReferenceLock(const GridPair &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadReferenceLock(on); }
+ void SetUnloadReferenceLock(const GridCoord &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadReferenceLock(on); }
ACE_Thread_Mutex Lock;
@@ -524,10 +523,7 @@ class Map : public GridRefManager<NGridType>
// Type specific code for add/remove to/from grid
template<class T>
- void AddToGrid(T*, NGridType *, Cell const&);
-
- template<class T>
- void RemoveFromGrid(T*, NGridType *, Cell const&);
+ void AddToGrid(T* object, Cell const& cell);
template<class T>
void DeleteFromWorld(T*);
@@ -571,14 +567,14 @@ class InstanceMap : public Map
public:
InstanceMap(uint32 id, time_t, uint32 InstanceId, uint8 SpawnMode, Map* _parent);
~InstanceMap();
- bool AddToMap(Player*);
- void RemoveFromMap(Player*, bool);
+ bool AddPlayerToMap(Player*);
+ void RemovePlayerFromMap(Player*, bool);
void Update(const uint32);
void CreateInstanceData(bool load);
bool Reset(uint8 method);
uint32 GetScriptId() { return i_script_id; }
InstanceScript* GetInstanceScript() { return i_data; }
- void PermBindAllPlayers(Player* player);
+ void PermBindAllPlayers(Player* source);
void UnloadAll();
bool CanEnter(Player* player);
void SendResetWarnings(uint32 timeLeft) const;
@@ -601,8 +597,8 @@ class BattlegroundMap : public Map
BattlegroundMap(uint32 id, time_t, uint32 InstanceId, Map* _parent, uint8 spawnMode);
~BattlegroundMap();
- bool AddToMap(Player*);
- void RemoveFromMap(Player*, bool);
+ bool AddPlayerToMap(Player*);
+ void RemovePlayerFromMap(Player*, bool);
bool CanEnter(Player* player);
void SetUnload();
//void UnloadAll(bool pForce);
@@ -616,28 +612,25 @@ class BattlegroundMap : public Map
};
template<class T, class CONTAINER>
-inline void
-Map::Visit(const Cell& cell, TypeContainerVisitor<T, CONTAINER> &visitor)
+inline void Map::Visit(Cell const& cell, TypeContainerVisitor<T, CONTAINER>& visitor)
{
const uint32 x = cell.GridX();
const uint32 y = cell.GridY();
const uint32 cell_x = cell.CellX();
const uint32 cell_y = cell.CellY();
- if (!cell.NoCreate() || loaded(GridPair(x, y)))
+ if (!cell.NoCreate() || IsGridLoaded(GridCoord(x, y)))
{
EnsureGridLoaded(cell);
- getNGrid(x, y)->Visit(cell_x, cell_y, visitor);
+ getNGrid(x, y)->VisitGrid(cell_x, cell_y, visitor);
}
}
template<class NOTIFIER>
-inline void
-Map::VisitAll(const float &x, const float &y, float radius, NOTIFIER &notifier)
+inline void Map::VisitAll(float const& x, float const& y, float radius, NOTIFIER& notifier)
{
- CellPair p(Trinity::ComputeCellPair(x, y));
+ CellCoord p(Trinity::ComputeCellCoord(x, y));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
TypeContainerVisitor<NOTIFIER, WorldTypeMapContainer> world_object_notifier(notifier);
@@ -648,12 +641,10 @@ Map::VisitAll(const float &x, const float &y, float radius, NOTIFIER &notifier)
// should be used with Searcher notifiers, tries to search world if nothing found in grid
template<class NOTIFIER>
-inline void
-Map::VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER &notifier)
+inline void Map::VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER &notifier)
{
- CellPair p(Trinity::ComputeCellPair(x, y));
+ CellCoord p(Trinity::ComputeCellCoord(x, y));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
TypeContainerVisitor<NOTIFIER, WorldTypeMapContainer> world_object_notifier(notifier);
@@ -666,12 +657,10 @@ Map::VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER &not
}
template<class NOTIFIER>
-inline void
-Map::VisitWorld(const float &x, const float &y, float radius, NOTIFIER &notifier)
+inline void Map::VisitWorld(const float &x, const float &y, float radius, NOTIFIER &notifier)
{
- CellPair p(Trinity::ComputeCellPair(x, y));
+ CellCoord p(Trinity::ComputeCellCoord(x, y));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
TypeContainerVisitor<NOTIFIER, WorldTypeMapContainer> world_object_notifier(notifier);
@@ -679,12 +668,10 @@ Map::VisitWorld(const float &x, const float &y, float radius, NOTIFIER &notifier
}
template<class NOTIFIER>
-inline void
-Map::VisitGrid(const float &x, const float &y, float radius, NOTIFIER &notifier)
+inline void Map::VisitGrid(const float &x, const float &y, float radius, NOTIFIER &notifier)
{
- CellPair p(Trinity::ComputeCellPair(x, y));
+ CellCoord p(Trinity::ComputeCellCoord(x, y));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
TypeContainerVisitor<NOTIFIER, GridTypeMapContainer > grid_object_notifier(notifier);
diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp
index 418218a52b3..fbe609bee23 100755
--- a/src/server/game/Maps/MapInstanced.cpp
+++ b/src/server/game/Maps/MapInstanced.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -110,7 +110,7 @@ void MapInstanced::UnloadAll()
- create the instance if it's not created already
- the player is not actually added to the instance (only in InstanceMap::Add)
*/
-Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
+Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player)
{
if (GetId() != mapId || !player)
return NULL;
@@ -124,9 +124,17 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
// the instance id is set in battlegroundid
NewInstanceId = player->GetBattlegroundId();
if (!NewInstanceId) return NULL;
- map = _FindMap(NewInstanceId);
+ map = sMapMgr->FindMap(mapId, NewInstanceId);
if (!map)
- map = CreateBattleground(NewInstanceId, player->GetBattleground());
+ {
+ if (Battleground* bg = player->GetBattleground())
+ map = CreateBattleground(NewInstanceId, bg);
+ else
+ {
+ player->TeleportToBGEntryPoint();
+ return NULL;
+ }
+ }
}
else
{
@@ -151,7 +159,7 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
{
// solo/perm/group
NewInstanceId = pSave->GetInstanceId();
- map = _FindMap(NewInstanceId);
+ map = FindInstanceMap(NewInstanceId);
// it is possible that the save exists but the map doesn't
if (!map)
map = CreateInstance(NewInstanceId, pSave, pSave->GetDifficulty());
@@ -163,7 +171,11 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
NewInstanceId = sMapMgr->GenerateInstanceId();
Difficulty diff = player->GetGroup() ? player->GetGroup()->GetDifficulty(IsRaid()) : player->GetDifficulty(IsRaid());
- map = CreateInstance(NewInstanceId, NULL, diff);
+ //Seems it is now possible, but I do not know if it should be allowed
+ //ASSERT(!FindInstanceMap(NewInstanceId));
+ map = FindInstanceMap(NewInstanceId);
+ if (!map)
+ map = CreateInstance(NewInstanceId, NULL, diff);
}
}
@@ -173,7 +185,7 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty)
{
// load/create a map
- ACE_GUARD_RETURN(ACE_Thread_Mutex, Guard, Lock, NULL);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
// make sure we have a valid map id
const MapEntry* entry = sMapStore.LookupEntry(GetId());
@@ -207,7 +219,7 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save,
BattlegroundMap* MapInstanced::CreateBattleground(uint32 InstanceId, Battleground* bg)
{
// load/create a map
- ACE_GUARD_RETURN(ACE_Thread_Mutex, Guard, Lock, NULL);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
sLog->outDebug(LOG_FILTER_MAPS, "MapInstanced::CreateBattleground: map bg %d for %d created.", InstanceId, GetId());
diff --git a/src/server/game/Maps/MapInstanced.h b/src/server/game/Maps/MapInstanced.h
index 1913f0add51..0b1a404630b 100755
--- a/src/server/game/Maps/MapInstanced.h
+++ b/src/server/game/Maps/MapInstanced.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -39,39 +39,36 @@ class MapInstanced : public Map
void UnloadAll();
bool CanEnter(Player* player);
- Map* CreateInstance(const uint32 mapId, Player* player);
- Map* FindMap(uint32 InstanceId) const { return _FindMap(InstanceId); }
+ Map* CreateInstanceForPlayer(const uint32 mapId, Player* player);
+ Map* FindInstanceMap(uint32 instanceId) const
+ {
+ InstancedMaps::const_iterator i = m_InstancedMaps.find(instanceId);
+ return(i == m_InstancedMaps.end() ? NULL : i->second);
+ }
bool DestroyInstance(InstancedMaps::iterator &itr);
- void AddGridMapReference(const GridPair &p)
+ void AddGridMapReference(const GridCoord &p)
{
++GridMapReference[p.x_coord][p.y_coord];
- SetUnloadReferenceLock(GridPair(63-p.x_coord, 63-p.y_coord), true);
+ SetUnloadReferenceLock(GridCoord(63-p.x_coord, 63-p.y_coord), true);
}
- void RemoveGridMapReference(GridPair const& p)
+ void RemoveGridMapReference(GridCoord const& p)
{
--GridMapReference[p.x_coord][p.y_coord];
if (!GridMapReference[p.x_coord][p.y_coord])
- SetUnloadReferenceLock(GridPair(63-p.x_coord, 63-p.y_coord), false);
+ SetUnloadReferenceLock(GridCoord(63-p.x_coord, 63-p.y_coord), false);
}
InstancedMaps &GetInstancedMaps() { return m_InstancedMaps; }
virtual void InitVisibilityDistance();
private:
-
InstanceMap* CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty);
BattlegroundMap* CreateBattleground(uint32 InstanceId, Battleground* bg);
InstancedMaps m_InstancedMaps;
- Map* _FindMap(uint32 InstanceId) const
- {
- InstancedMaps::const_iterator i = m_InstancedMaps.find(InstanceId);
- return(i == m_InstancedMaps.end() ? NULL : i->second);
- }
-
uint16 GridMapReference[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS];
};
#endif
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index 0b7abacad28..afb5aa5660f 100755
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -95,13 +95,13 @@ void MapManager::checkAndCorrectGridStatesArray()
++i_GridStateErrorCount;
}
-Map* MapManager::_createBaseMap(uint32 id)
+Map* MapManager::CreateBaseMap(uint32 id)
{
- Map* m = _findMap(id);
+ Map* m = FindBaseMap(id);
if (m == NULL)
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, Guard, Lock, NULL);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
const MapEntry* entry = sMapStore.LookupEntry(id);
if (entry && entry->Instanceable())
@@ -119,27 +119,34 @@ Map* MapManager::_createBaseMap(uint32 id)
return m;
}
-Map* MapManager::CreateMap(uint32 id, const WorldObject* obj, uint32 /*instanceId*/)
+Map* MapManager::FindBaseNonInstanceMap(uint32 mapId) const
{
- ASSERT(obj);
- //if (!obj->IsInWorld()) sLog->outError("GetMap: called for map %d with object (typeid %d, guid %d, mapid %d, instanceid %d) who is not in world!", id, obj->GetTypeId(), obj->GetGUIDLow(), obj->GetMapId(), obj->GetInstanceId());
- Map* m = _createBaseMap(id);
+ Map* map = FindBaseMap(mapId);
+ if(map && map->Instanceable())
+ return NULL;
+ return map;
+}
+
+Map* MapManager::CreateMap(uint32 id, Player* player)
+{
+ Map* m = CreateBaseMap(id);
- if (m && (obj->GetTypeId() == TYPEID_PLAYER) && m->Instanceable()) m = ((MapInstanced*)m)->CreateInstance(id, (Player*)obj);
+ if (m && m->Instanceable())
+ m = ((MapInstanced*)m)->CreateInstanceForPlayer(id, player);
return m;
}
Map* MapManager::FindMap(uint32 mapid, uint32 instanceId) const
{
- Map* map = _findMap(mapid);
+ Map* map = FindBaseMap(mapid);
if (!map)
return NULL;
if (!map->Instanceable())
return instanceId == 0 ? map : NULL;
- return ((MapInstanced*)map)->FindMap(instanceId);
+ return ((MapInstanced*)map)->FindInstanceMap(instanceId);
}
bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
@@ -201,8 +208,8 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
if (corpseMap == mapid)
break;
- InstanceTemplate const* instance = sObjectMgr->GetInstanceTemplate(corpseMap);
- corpseMap = instance ? instance->Parent : 0;
+ InstanceTemplate const* corpseInstance = sObjectMgr->GetInstanceTemplate(corpseMap);
+ corpseMap = corpseInstance ? corpseInstance->Parent : 0;
} while (corpseMap);
if (!corpseMap)
@@ -248,7 +255,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
instaceIdToCheck = save->GetInstanceId();
// instanceId can never be 0 - will not be found
- if (!player->CheckInstanceCount(instaceIdToCheck))
+ if (!player->CheckInstanceCount(instaceIdToCheck) && !player->isDead())
{
player->SendTransferAborted(mapid, TRANSFER_ABORT_TOO_MANY_INSTANCES);
return false;
@@ -280,8 +287,8 @@ void MapManager::Update(uint32 diff)
iter->second->DelayedUpdate(uint32(i_timer.GetCurrent()));
sObjectAccessor->Update(uint32(i_timer.GetCurrent()));
- for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter)
- (*iter)->Update(uint32(i_timer.GetCurrent()));
+ for (TransportSet::iterator itr = m_Transports.begin(); itr != m_Transports.end(); ++itr)
+ (*itr)->Update(uint32(i_timer.GetCurrent()));
i_timer.SetCurrent(0);
}
@@ -292,7 +299,7 @@ void MapManager::DoDelayedMovesAndRemoves()
bool MapManager::ExistMapAndVMap(uint32 mapid, float x, float y)
{
- GridPair p = Trinity::ComputeGridPair(x, y);
+ GridCoord p = Trinity::ComputeGridCoord(x, y);
int gx=63-p.x_coord;
int gy=63-p.y_coord;
@@ -335,7 +342,7 @@ void MapManager::UnloadAll()
uint32 MapManager::GetNumInstances()
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, Guard, Lock, 0);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
uint32 ret = 0;
for (MapMapType::iterator itr = i_maps.begin(); itr != i_maps.end(); ++itr)
@@ -352,7 +359,7 @@ uint32 MapManager::GetNumInstances()
uint32 MapManager::GetNumPlayersInInstances()
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, Guard, Lock, 0);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
uint32 ret = 0;
for (MapMapType::iterator itr = i_maps.begin(); itr != i_maps.end(); ++itr)
diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h
index 926ff2c8051..1049325237a 100755
--- a/src/server/game/Maps/MapManager.h
+++ b/src/server/game/Maps/MapManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -35,14 +35,14 @@ class MapManager
friend class ACE_Singleton<MapManager, ACE_Thread_Mutex>;
public:
-
- Map* CreateMap(uint32, const WorldObject* obj, uint32 instanceId);
- Map const* CreateBaseMap(uint32 id) const { return const_cast<MapManager*>(this)->_createBaseMap(id); }
- Map* FindMap(uint32 mapid, uint32 instanceId = 0) const;
+ Map* CreateBaseMap(uint32 mapId);
+ Map* FindBaseNonInstanceMap(uint32 mapId) const;
+ Map* CreateMap(uint32 mapId, Player* player);
+ Map* FindMap(uint32 mapId, uint32 instanceId) const;
uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const
{
- Map const* m = CreateBaseMap(mapid);
+ Map const* m = const_cast<MapManager*>(this)->CreateBaseMap(mapid);
return m->GetAreaFlag(x, y, z);
}
uint32 GetAreaId(uint32 mapid, float x, float y, float z) const
@@ -160,16 +160,15 @@ class MapManager
MapManager();
~MapManager();
- MapManager(const MapManager &);
- MapManager& operator=(const MapManager &);
-
- Map* _createBaseMap(uint32 id);
- Map* _findMap(uint32 id) const
+ Map* FindBaseMap(uint32 mapId) const
{
- MapMapType::const_iterator iter = i_maps.find(id);
+ MapMapType::const_iterator iter = i_maps.find(mapId);
return (iter == i_maps.end() ? NULL : iter->second);
}
+ MapManager(const MapManager &);
+ MapManager& operator=(const MapManager &);
+
ACE_Thread_Mutex Lock;
uint32 i_gridCleanUpDelay;
MapMapType i_maps;
diff --git a/src/server/game/Maps/MapRefManager.h b/src/server/game/Maps/MapRefManager.h
index 48d960988f6..3976139a18d 100755
--- a/src/server/game/Maps/MapRefManager.h
+++ b/src/server/game/Maps/MapRefManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Maps/MapReference.h b/src/server/game/Maps/MapReference.h
index 1b939c329aa..86709fb28ab 100755
--- a/src/server/game/Maps/MapReference.h
+++ b/src/server/game/Maps/MapReference.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp
index 7e6b2f03bd0..80025680753 100644
--- a/src/server/game/Maps/MapUpdater.cpp
+++ b/src/server/game/Maps/MapUpdater.cpp
@@ -81,7 +81,7 @@ int MapUpdater::deactivate()
int MapUpdater::wait()
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, m_mutex, -1);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_mutex);
while (pending_requests > 0)
m_condition.wait();
@@ -91,7 +91,7 @@ int MapUpdater::wait()
int MapUpdater::schedule_update(Map& map, ACE_UINT32 diff)
{
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, m_mutex, -1);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_mutex);
++pending_requests;
@@ -113,7 +113,7 @@ bool MapUpdater::activated()
void MapUpdater::update_finished()
{
- ACE_GUARD(ACE_Thread_Mutex, guard, m_mutex);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_mutex);
if (pending_requests == 0)
{
diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h
index 58ba9ae2c43..df6349a7664 100755
--- a/src/server/game/Maps/ZoneScript.h
+++ b/src/server/game/Maps/ZoneScript.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -37,7 +37,7 @@ class ZoneScript
virtual void OnGameObjectCreate(GameObject* /*go*/) {}
virtual void OnGameObjectRemove(GameObject* /*go*/) {}
- virtual void OnCreatureDeath(Creature* /*creature*/) {}
+ virtual void OnUnitDeath(Unit* /*unit*/) {}
//All-purpose data storage 64 bit
virtual uint64 GetData64(uint32 /*DataId*/) { return 0; }
diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h
index f562010549b..4faacc1f7b7 100755
--- a/src/server/game/Miscellaneous/Formulas.h
+++ b/src/server/game/Miscellaneous/Formulas.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -156,7 +156,7 @@ namespace Trinity
return baseGain;
}
- inline uint32 Gain(Player* pl, Unit* u)
+ inline uint32 Gain(Player* player, Unit* u)
{
uint32 gain;
@@ -167,7 +167,7 @@ namespace Trinity
gain = 0;
else
{
- gain = BaseGain(pl->getLevel(), u->getLevel(), GetContentLevelsForMapAndZone(u->GetMapId(), u->GetZoneId()));
+ gain = BaseGain(player->getLevel(), u->getLevel(), GetContentLevelsForMapAndZone(u->GetMapId(), u->GetZoneId()));
if (gain != 0 && u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->isElite())
{
@@ -181,7 +181,7 @@ namespace Trinity
gain = uint32(gain * sWorld->getRate(RATE_XP_KILL));
}
- sScriptMgr->OnGainCalculation(gain, pl, u);
+ sScriptMgr->OnGainCalculation(gain, player, u);
return gain;
}
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index ffdf0131143..66610adc1f0 100755
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -42,8 +42,8 @@ enum TrinityStrings
LANG_GMS_ON_SRV = 16,
LANG_GMS_NOT_LOGGED = 17,
LANG_YOU_IN_FLIGHT = 18,
- //LANG_YOU_IN_BATTLEGROUND = 19, not used
- //LANG_TARGET_IN_FLIGHT = 20, not used
+ LANG_UPDATE_DIFF = 19,
+ LANG_SHUTDOWN_TIMELEFT = 20,
LANG_CHAR_IN_FLIGHT = 21,
LANG_CHAR_NON_MOUNTED = 22,
LANG_YOU_IN_COMBAT = 23,
@@ -946,8 +946,9 @@ enum TrinityStrings
LANG_GOINFO_NAME = 5027,
LANG_GOINFO_LOOTID = 5028,
LANG_COMMAND_LOOKUP_MAX_RESULTS = 5029,
- // Room for more Trinity strings 5030-9999
LANG_FLEE = 5030,
+ LANG_NPCINFO_AIINFO = 5031,
+ // Room for more Trinity strings 5032-9999
// Level requirement notifications
LANG_SAY_REQ = 6604,
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 380af30c175..53f70096cbd 100755
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -312,13 +312,13 @@ enum SpellAttr1
SPELL_ATTR1_MELEE_COMBAT_START = 0x00000200, // 9 player starts melee combat after this spell is cast
SPELL_ATTR1_NO_THREAT = 0x00000400, // 10 no generates threat on cast 100% (old NO_INITIAL_AGGRO)
SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura
- SPELL_ATTR1_UNK12 = 0x00001000, // 12
+ SPELL_ATTR1_UNK12 = 0x00001000, // 12 pickpoket
SPELL_ATTR1_FARSIGHT = 0x00002000, // 13 Client removes farsight on aura loss
SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // 14 Client automatically forces player to face target when channeling
SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity
SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy
SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17
- SPELL_ATTR1_UNK18 = 0x00040000, // 18
+ SPELL_ATTR1_UNK18 = 0x00040000, // 18 stun, polymorph, daze, hex
SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // 19
SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // 20 Req combo points on target
SPELL_ATTR1_UNK21 = 0x00200000, // 21
@@ -327,17 +327,17 @@ enum SpellAttr1
SPELL_ATTR1_UNK24 = 0x01000000, // 24 only fishing spells
SPELL_ATTR1_UNK25 = 0x02000000, // 25
SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros?
- SPELL_ATTR1_UNK27 = 0x08000000, // 27
+ SPELL_ATTR1_UNK27 = 0x08000000, // 27 melee spell?
SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar
SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text
- SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite
+ SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower
SPELL_ATTR1_UNK31 = 0x80000000 // 31
};
enum SpellAttr2
{
SPELL_ATTR2_CAN_TARGET_DEAD = 0x00000001, // 0 can target dead unit or corpse
- SPELL_ATTR2_UNK1 = 0x00000002, // 1 ? many triggered spells have this flag
+ SPELL_ATTR2_UNK1 = 0x00000002, // 1 vanish, shadowform, Ghost Wolf and other
SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS = 0x00000004, // 2 26368 4.0.1 dbc change
SPELL_ATTR2_UNK3 = 0x00000008, // 3
SPELL_ATTR2_DISPLAY_IN_STANCE_BAR = 0x00000010, // 4 client displays icon in stance bar when learned, even if not shapeshift
@@ -346,9 +346,9 @@ enum SpellAttr2
SPELL_ATTR2_UNK7 = 0x00000080, // 7
SPELL_ATTR2_UNK8 = 0x00000100, // 8 not set in 3.0.3
SPELL_ATTR2_UNK9 = 0x00000200, // 9
- SPELL_ATTR2_UNK10 = 0x00000400, // 10
+ SPELL_ATTR2_UNK10 = 0x00000400, // 10 related to tame
SPELL_ATTR2_HEALTH_FUNNEL = 0x00000800, // 11
- SPELL_ATTR2_UNK12 = 0x00001000, // 12
+ SPELL_ATTR2_UNK12 = 0x00001000, // 12 Cleave, Heart Strike, Maul, Sunder Armor, Swipe
SPELL_ATTR2_UNK13 = 0x00002000, // 13 Items enchanted by spells with this flag preserve the enchant to arenas
SPELL_ATTR2_UNK14 = 0x00004000, // 14
SPELL_ATTR2_UNK15 = 0x00008000, // 15 not set in 3.0.3
@@ -358,13 +358,13 @@ enum SpellAttr2
SPELL_ATTR2_NOT_NEED_SHAPESHIFT = 0x00080000, // 19 does not necessarly need shapeshift
SPELL_ATTR2_UNK20 = 0x00100000, // 20
SPELL_ATTR2_DAMAGE_REDUCED_SHIELD = 0x00200000, // 21 for ice blocks, pala immunity buffs, priest absorb shields, but used also for other spells -> not sure!
- SPELL_ATTR2_UNK22 = 0x00400000, // 22
+ SPELL_ATTR2_UNK22 = 0x00400000, // 22 Ambush, Backstab, Cheap Shot, Death Grip, Garrote, Judgements, Mutilate, Pounce, Ravage, Shiv, Shred
SPELL_ATTR2_UNK23 = 0x00800000, // 23 Only mage Arcane Concentration have this flag
SPELL_ATTR2_UNK24 = 0x01000000, // 24
SPELL_ATTR2_UNK25 = 0x02000000, // 25
SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity
SPELL_ATTR2_UNK27 = 0x08000000, // 27
- SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails??
+ SPELL_ATTR2_UNK28 = 0x10000000, // 28
SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit
SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered
SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed)
@@ -393,7 +393,7 @@ enum SpellAttr3
SPELL_ATTR3_IGNORE_HIT_RESULT = 0x00040000, // 18 Spell should always hit its target
SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375)
SPELL_ATTR3_DEATH_PERSISTENT = 0x00100000, // 20 Death persistent spells
- SPELL_ATTR3_UNK21 = 0x00200000, // 21
+ SPELL_ATTR3_UNK21 = 0x00200000, // 21 unused
SPELL_ATTR3_REQ_WAND = 0x00400000, // 22 Req wand
SPELL_ATTR3_UNK23 = 0x00800000, // 23
SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // 24 Req offhand weapon
@@ -409,7 +409,7 @@ enum SpellAttr3
enum SpellAttr4
{
SPELL_ATTR4_UNK0 = 0x00000001, // 0
- SPELL_ATTR4_UNK1 = 0x00000002, // 1 proc on finishing move?
+ SPELL_ATTR4_PROC_ONLY_ON_DUMMY = 0x00000002, // 1 proc only on SPELL_EFFECT_DUMMY?
SPELL_ATTR4_UNK2 = 0x00000004, // 2
SPELL_ATTR4_UNK3 = 0x00000008, // 3
SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use??
@@ -417,7 +417,7 @@ enum SpellAttr4
SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen
SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered
SPELL_ATTR4_UNK8 = 0x00000100, // 8 ignores taken percent damage mods?
- SPELL_ATTR4_UNK9 = 0x00000200, // 9
+ SPELL_ATTR4_TRIGGER_ACTIVATE = 0x00000200, // 9 initially disabled / trigger activate from event (Execute, Riposte, Deep Freeze end other)
SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag
SPELL_ATTR4_UNK11 = 0x00000800, // 11
SPELL_ATTR4_UNK12 = 0x00001000, // 12
@@ -427,16 +427,16 @@ enum SpellAttr4
SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16
SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17
SPELL_ATTR4_AREA_TARGET_CHAIN = 0x00040000, // 18 (NYI)hits area targets one after another instead of all at once
- SPELL_ATTR4_UNK19 = 0x00080000, // 19
+ SPELL_ATTR4_UNK19 = 0x00080000, // 19 proc dalayed, after damage or don't proc on absorb?
SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts.
- SPELL_ATTR4_UNK21 = 0x00200000, // 21
+ SPELL_ATTR4_UNK21 = 0x00200000, // 21 Pally aura, dk presence, dudu form, warrior stance, shadowform, hunter track
SPELL_ATTR4_UNK22 = 0x00400000, // 22
SPELL_ATTR4_UNK23 = 0x00800000, // 23
- SPELL_ATTR4_UNK24 = 0x01000000, // 24
+ SPELL_ATTR4_UNK24 = 0x01000000, // 24 some shoot spell
SPELL_ATTR4_UNK25 = 0x02000000, // 25 pet scaling auras
SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland.
SPELL_ATTR4_UNK27 = 0x08000000, // 27
- SPELL_ATTR4_UNK28 = 0x10000000, // 28
+ SPELL_ATTR4_UNK28 = 0x10000000, // 28 Aimed Shot
SPELL_ATTR4_UNK29 = 0x20000000, // 29
SPELL_ATTR4_UNK30 = 0x40000000, // 30
SPELL_ATTR4_UNK31 = 0x80000000 // 31
@@ -456,7 +456,7 @@ enum SpellAttr5
SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply
SPELL_ATTR5_HIDE_DURATION = 0x00000400, // 10 do not send duration to client
SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET = 0x00000800, // 11 (NYI) uses target's target as target if original target not valid (intervene for example)
- SPELL_ATTR5_UNK12 = 0x00001000, // 12
+ SPELL_ATTR5_UNK12 = 0x00001000, // 12 Cleave related?
SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // 13 haste effects decrease duration of this
SPELL_ATTR5_UNK14 = 0x00004000, // 14
SPELL_ATTR5_UNK15 = 0x00008000, // 15
@@ -470,7 +470,7 @@ enum SpellAttr5
SPELL_ATTR5_UNK23 = 0x00800000, // 23
SPELL_ATTR5_UNK24 = 0x01000000, // 24
SPELL_ATTR5_UNK25 = 0x02000000, // 25
- SPELL_ATTR5_UNK26 = 0x04000000, // 26
+ SPELL_ATTR5_UNK26 = 0x04000000, // 26 aoe related - Boulder, Cannon, Corpse Explosion, Fire Nova, Flames, Frost Bomb, Living Bomb, Seed of Corruption, Starfall, Thunder Clap, Volley
SPELL_ATTR5_UNK27 = 0x08000000, // 27
SPELL_ATTR5_UNK28 = 0x10000000, // 28
SPELL_ATTR5_UNK29 = 0x20000000, // 29
@@ -495,23 +495,23 @@ enum SpellAttr6
SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE = 0x00001000, // 12 castable while caster is on vehicle
SPELL_ATTR6_CAN_TARGET_INVISIBLE = 0x00002000, // 13 ignore visibility requirement for spell target (phases, invisibility, etc.)
SPELL_ATTR6_UNK14 = 0x00004000, // 14
- SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3
+ SPELL_ATTR6_UNK15 = 0x00008000, // 15 only 54368, 67892
SPELL_ATTR6_UNK16 = 0x00010000, // 16
- SPELL_ATTR6_UNK17 = 0x00020000, // 17
+ SPELL_ATTR6_UNK17 = 0x00020000, // 17 Mount spell
SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster
- SPELL_ATTR6_UNK19 = 0x00080000, // 19
- SPELL_ATTR6_UNK20 = 0x00100000, // 20
+ SPELL_ATTR6_UNK19 = 0x00080000, // 19 only 47488, 50782
+ SPELL_ATTR6_UNK20 = 0x00100000, // 20 only 58371, 62218
SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute
- SPELL_ATTR6_UNK22 = 0x00400000, // 22
+ SPELL_ATTR6_UNK22 = 0x00400000, // 22 only 72054
SPELL_ATTR6_UNK23 = 0x00800000, // 23
SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // 24
- SPELL_ATTR6_UNK25 = 0x02000000, // 25
- SPELL_ATTR6_UNK26 = 0x04000000, // 26
+ SPELL_ATTR6_UNK25 = 0x02000000, // 25 Exorcism, Flash of Light
+ SPELL_ATTR6_UNK26 = 0x04000000, // 26 related to player castable positive buff
SPELL_ATTR6_UNK27 = 0x08000000, // 27
- SPELL_ATTR6_UNK28 = 0x10000000, // 28
+ SPELL_ATTR6_UNK28 = 0x10000000, // 28 Death Grip
SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS = 0x20000000, // 29 ignores done percent damage mods?
SPELL_ATTR6_UNK30 = 0x40000000, // 30
- SPELL_ATTR6_UNK31 = 0x80000000 // 31 some special cooldown calc?
+ SPELL_ATTR6_UNK31 = 0x80000000 // 31 some special cooldown calc? only 2894
};
enum SpellAttr7
@@ -520,7 +520,7 @@ enum SpellAttr7
SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a.
SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only.
SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS
- SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 66109 test spell.
+ SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell.
SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems.
SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells).
SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell.
@@ -536,18 +536,18 @@ enum SpellAttr7
SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell.
SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects.
SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones.
- SPELL_ATTR7_UNK20 = 0x00100000, // 20
- SPELL_ATTR7_UNK21 = 0x00200000, // 21
+ SPELL_ATTR7_UNK20 = 0x00100000, // 20 Blink, Divine Shield, Ice Block
+ SPELL_ATTR7_UNK21 = 0x00200000, // 21 Not set
SPELL_ATTR7_UNK22 = 0x00400000, // 22
- SPELL_ATTR7_UNK23 = 0x00800000, // 23
- SPELL_ATTR7_UNK24 = 0x01000000, // 24
+ SPELL_ATTR7_UNK23 = 0x00800000, // 23 Motivate, Mutilate, Shattering Throw
+ SPELL_ATTR7_UNK24 = 0x01000000, // 24 Motivate, Mutilate, Perform Speech, Shattering Throw
SPELL_ATTR7_UNK25 = 0x02000000, // 25
SPELL_ATTR7_UNK26 = 0x04000000, // 26
- SPELL_ATTR7_UNK27 = 0x08000000, // 27
- SPELL_ATTR7_UNK28 = 0x10000000, // 28
- SPELL_ATTR7_UNK29 = 0x20000000, // 29
- SPELL_ATTR7_UNK30 = 0x40000000, // 30
- SPELL_ATTR7_UNK31 = 0x80000000 // 31
+ SPELL_ATTR7_UNK27 = 0x08000000, // 27 Not set
+ SPELL_ATTR7_UNK28 = 0x10000000, // 28 related to player positive buff
+ SPELL_ATTR7_UNK29 = 0x20000000, // 29 only 69028, 71237
+ SPELL_ATTR7_UNK30 = 0x40000000, // 30 Burning Determination, Divine Sacrifice, Earth Shield, Prayer of Mending
+ SPELL_ATTR7_UNK31 = 0x80000000 // 31 only 70769
};
#define MIN_TALENT_SPEC 0
@@ -2378,7 +2378,7 @@ enum QuestSort
QUEST_SORT_ROGUE = 162,
QUEST_SORT_ALCHEMY = 181,
QUEST_SORT_LEATHERWORKING = 182,
- QUEST_SORT_ENGINERING = 201,
+ QUEST_SORT_ENGINEERING = 201,
QUEST_SORT_TREASURE_MAP = 221,
QUEST_SORT_SUNKEN_TEMPLE_OLD = 241,
QUEST_SORT_HUNTER = 261,
@@ -2480,7 +2480,7 @@ enum SkillType
SKILL_PET_IMP = 188,
SKILL_PET_FELHUNTER = 189,
SKILL_TAILORING = 197,
- SKILL_ENGINERING = 202,
+ SKILL_ENGINEERING = 202,
SKILL_PET_SPIDER = 203,
SKILL_PET_VOIDWALKER = 204,
SKILL_PET_SUCCUBUS = 205,
@@ -2600,7 +2600,7 @@ inline uint32 SkillByQuestSort(int32 QuestSort)
case QUEST_SORT_BLACKSMITHING: return SKILL_BLACKSMITHING;
case QUEST_SORT_ALCHEMY: return SKILL_ALCHEMY;
case QUEST_SORT_LEATHERWORKING: return SKILL_LEATHERWORKING;
- case QUEST_SORT_ENGINERING: return SKILL_ENGINERING;
+ case QUEST_SORT_ENGINEERING: return SKILL_ENGINEERING;
case QUEST_SORT_TAILORING: return SKILL_TAILORING;
case QUEST_SORT_COOKING: return SKILL_COOKING;
case QUEST_SORT_FIRST_AID: return SKILL_FIRST_AID;
@@ -2816,7 +2816,8 @@ enum DiminishingGroup
DIMINISHING_SILENCE = 16,
DIMINISHING_SLEEP = 17,
DIMINISHING_TAUNT = 18,
- DIMINISHING_LIMITONLY = 19
+ DIMINISHING_LIMITONLY = 19,
+ DIMINISHING_DRAGONS_BREATH = 20,
};
enum SummonCategory
diff --git a/src/server/game/Movement/DestinationHolder.cpp b/src/server/game/Movement/DestinationHolder.cpp
index 6247111e1b6..4b763112968 100755
--- a/src/server/game/Movement/DestinationHolder.cpp
+++ b/src/server/game/Movement/DestinationHolder.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/DestinationHolder.h b/src/server/game/Movement/DestinationHolder.h
index 2b36fe471b8..5ae4ee88ce3 100755
--- a/src/server/game/Movement/DestinationHolder.h
+++ b/src/server/game/Movement/DestinationHolder.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/DestinationHolderImp.h b/src/server/game/Movement/DestinationHolderImp.h
index 84e7fbf4f08..4d6e6f0c741 100755
--- a/src/server/game/Movement/DestinationHolderImp.h
+++ b/src/server/game/Movement/DestinationHolderImp.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/FollowerRefManager.h b/src/server/game/Movement/FollowerRefManager.h
index db2a0d1c5a8..5066804d60f 100755
--- a/src/server/game/Movement/FollowerRefManager.h
+++ b/src/server/game/Movement/FollowerRefManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/FollowerReference.cpp b/src/server/game/Movement/FollowerReference.cpp
index 9ef1734c78c..997d066a9f2 100755
--- a/src/server/game/Movement/FollowerReference.cpp
+++ b/src/server/game/Movement/FollowerReference.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/FollowerReference.h b/src/server/game/Movement/FollowerReference.h
index e5b6075ec38..6a1a3719cb8 100755
--- a/src/server/game/Movement/FollowerReference.h
+++ b/src/server/game/Movement/FollowerReference.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index ec928e74a34..51725c118ce 100755
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index b6fd3a848ac..64026ea7b80 100755
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerator.cpp b/src/server/game/Movement/MovementGenerator.cpp
index eee874f05ac..103b8876959 100755
--- a/src/server/game/Movement/MovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h
index 32f5da1db0c..06450d938ae 100755
--- a/src/server/game/Movement/MovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGeneratorImpl.h b/src/server/game/Movement/MovementGeneratorImpl.h
index 6e6bf4b6e62..725b309e3f1 100755
--- a/src/server/game/Movement/MovementGeneratorImpl.h
+++ b/src/server/game/Movement/MovementGeneratorImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
index 991b03c44e4..bf5c8bafc49 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -29,10 +29,9 @@
#endif
template<class T>
-void
-ConfusedMovementGenerator<T>::Initialize(T &unit)
+void ConfusedMovementGenerator<T>::Initialize(T &unit)
{
- const float wander_distance = 11;
+ float const wanderDistance = 4;
float x, y, z;
x = unit.GetPositionX();
y = unit.GetPositionY();
@@ -47,8 +46,8 @@ ConfusedMovementGenerator<T>::Initialize(T &unit)
for (uint8 idx = 0; idx <= MAX_CONF_WAYPOINTS; ++idx)
{
- float wanderX = x + wander_distance*(float)rand_norm() - wander_distance/2;
- float wanderY = y + wander_distance*(float)rand_norm() - wander_distance/2;
+ float wanderX = x + wanderDistance * (float)rand_norm() - wanderDistance/2;
+ float wanderY = y + wanderDistance * (float)rand_norm() - wanderDistance/2;
Trinity::NormalizeMapCoord(wanderX);
Trinity::NormalizeMapCoord(wanderY);
@@ -68,7 +67,7 @@ ConfusedMovementGenerator<T>::Initialize(T &unit)
}
// Taken from FleeingMovementGenerator
- if (!(new_z - z) || wander_distance / fabs(new_z - z) > 1.0f)
+ if (!(new_z - z) || wanderDistance / fabs(new_z - z) > 1.0f)
{
i_waypoints[idx][0] = wanderX;
i_waypoints[idx][1] = wanderY;
@@ -89,29 +88,26 @@ ConfusedMovementGenerator<T>::Initialize(T &unit)
unit.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
unit.CastStop();
unit.StopMoving();
- unit.RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
+ unit.AddUnitMovementFlag(MOVEMENTFLAG_WALKING); // Should actually be splineflag
unit.AddUnitState(UNIT_STAT_CONFUSED);
}
template<>
-void
-ConfusedMovementGenerator<Creature>::_InitSpecific(Creature &creature, bool &is_water_ok, bool &is_land_ok)
+void ConfusedMovementGenerator<Creature>::_InitSpecific(Creature &creature, bool &is_water_ok, bool &is_land_ok)
{
is_water_ok = creature.canSwim();
is_land_ok = creature.canWalk();
}
template<>
-void
-ConfusedMovementGenerator<Player>::_InitSpecific(Player &, bool &is_water_ok, bool &is_land_ok)
+void ConfusedMovementGenerator<Player>::_InitSpecific(Player &, bool &is_water_ok, bool &is_land_ok)
{
is_water_ok = true;
is_land_ok = true;
}
template<class T>
-void
-ConfusedMovementGenerator<T>::Reset(T &unit)
+void ConfusedMovementGenerator<T>::Reset(T &unit)
{
i_nextMove = 1;
i_nextMoveTime.Reset(0);
@@ -120,8 +116,7 @@ ConfusedMovementGenerator<T>::Reset(T &unit)
}
template<class T>
-bool
-ConfusedMovementGenerator<T>::Update(T &unit, const uint32 diff)
+bool ConfusedMovementGenerator<T>::Update(T &unit, const uint32 diff)
{
if (!&unit)
return true;
@@ -141,7 +136,7 @@ ConfusedMovementGenerator<T>::Update(T &unit, const uint32 diff)
unit.ClearUnitState(UNIT_STAT_MOVE);
i_nextMove = urand(1, MAX_CONF_WAYPOINTS);
- i_nextMoveTime.Reset(urand(0, 1500-1)); // TODO: check the minimum reset time, should be probably higher
+ i_nextMoveTime.Reset(urand(100, 1000));
}
}
}
@@ -164,11 +159,11 @@ ConfusedMovementGenerator<T>::Update(T &unit, const uint32 diff)
}
template<class T>
-void
-ConfusedMovementGenerator<T>::Finalize(T &unit)
+void ConfusedMovementGenerator<T>::Finalize(T &unit)
{
unit.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED);
unit.ClearUnitState(UNIT_STAT_CONFUSED);
+
if (unit.GetTypeId() == TYPEID_UNIT && unit.getVictim())
unit.SetTarget(unit.getVictim()->GetGUID());
}
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h
index 51faab16c27..d3981ee2dcf 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index 5f84d6bc7b0..d2b3fcee384 100755
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
index 8ef1478cff2..4d4631fe932 100755
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
index 9f9172e393d..16153dd6ccb 100755
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
index 43f52639c4b..ba34899dee5 100755
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
index 91ac4627679..43d3cccfe48 100755
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
index 9d8cafd2c4e..8180a86c49b 100755
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
index 3d7a65a4ccc..af2207ae141 100755
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -58,6 +58,10 @@ bool PointMovementGenerator<T>::Update(T &unit, const uint32 diff)
arrived = true;
return false;
}
+ else if (!unit.HasUnitState(UNIT_STAT_MOVE) && !unit.HasUnitState(UNIT_STAT_JUMPING))
+ {
+ i_destinationHolder.StartTravel(traveller);
+ }
return true;
}
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
index 3d936de1ae7..2504f1a38e3 100755
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index 5bd0a23207e..981ec031cf9 100755
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -47,11 +47,10 @@ template<>
void
RandomMovementGenerator<Creature>::_setRandomLocation(Creature &creature)
{
- float X, Y, Z, z, nx, ny, nz, ori, dist;
+ float X, Y, Z, nx, ny, nz, ori, dist;
creature.GetHomePosition(X, Y, Z, ori);
- z = creature.GetPositionZ();
Map const* map = creature.GetBaseMap();
// For 2D/3D system selection
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h
index cca986ffea7..816e325f3b1 100755
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
index af316c82856..e0ca5231000 100755
--- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h
index 0c9623192f0..edb4fca8fce 100755
--- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 99deef200a6..f88ed249aca 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -206,7 +206,13 @@ WaypointMovementGenerator<Creature>::Update(Creature &unit, const uint32 diff)
MovementInform(unit);
unit.UpdateWaypointID(i_currentNode);
unit.ClearUnitState(UNIT_STAT_ROAMING);
- unit.Relocate(node->x, node->y, node->z);
+ if (node->orientation)
+ {
+ unit.Relocate(node->x, node->y, node->z, node->orientation);
+ unit.SetFacing(node->orientation, NULL);
+ }
+ else
+ unit.Relocate(node->x, node->y, node->z);
}
}
else
@@ -345,7 +351,7 @@ void FlightPathMovementGenerator::InitEndGridInfo()
void FlightPathMovementGenerator::PreloadEndGrid()
{
// used to preload the final grid where the flightmaster is
- Map* endMap = sMapMgr->FindMap(m_endMapId);
+ Map* endMap = sMapMgr->FindBaseNonInstanceMap(m_endMapId);
// Load the grid
if (endMap)
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index ea277eaafc6..230630936ff 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/Traveller.h b/src/server/game/Movement/Traveller.h
index 9cd6a6cda17..641278ee37a 100755
--- a/src/server/game/Movement/Traveller.h
+++ b/src/server/game/Movement/Traveller.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h
index f9a55513d10..b6ddaa9d726 100755
--- a/src/server/game/Movement/Waypoints/Path.h
+++ b/src/server/game/Movement/Waypoints/Path.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.cpp b/src/server/game/Movement/Waypoints/WaypointManager.cpp
index 0ce2a097422..b957674151b 100755
--- a/src/server/game/Movement/Waypoints/WaypointManager.cpp
+++ b/src/server/game/Movement/Waypoints/WaypointManager.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@ void WaypointMgr::Load()
{
uint32 oldMSTime = getMSTime();
- QueryResult result = WorldDatabase.Query("SELECT id, point, position_x, position_y, position_z, move_flag, delay, action, action_chance FROM waypoint_data ORDER BY id, point");
+ QueryResult result = WorldDatabase.Query("SELECT id, point, position_x, position_y, position_z, orientation, move_flag, delay, action, action_chance FROM waypoint_data ORDER BY id, point");
if (!result)
{
@@ -65,6 +65,7 @@ void WaypointMgr::Load()
float x = fields[2].GetFloat();
float y = fields[3].GetFloat();
float z = fields[4].GetFloat();
+ float o = fields[5].GetFloat();
Trinity::NormalizeMapCoord(x);
Trinity::NormalizeMapCoord(y);
@@ -73,10 +74,11 @@ void WaypointMgr::Load()
wp->x = x;
wp->y = y;
wp->z = z;
- wp->run = fields[5].GetBool();
- wp->delay = fields[6].GetUInt32();
- wp->event_id = fields[7].GetUInt32();
- wp->event_chance = fields[8].GetUInt8();
+ wp->orientation = o;
+ wp->run = fields[6].GetBool();
+ wp->delay = fields[7].GetUInt32();
+ wp->event_id = fields[8].GetUInt32();
+ wp->event_chance = fields[9].GetUInt8();
path.push_back(wp);
++count;
@@ -98,7 +100,7 @@ void WaypointMgr::ReloadPath(uint32 id)
_waypointStore.erase(itr);
}
- QueryResult result = WorldDatabase.PQuery("SELECT point, position_x, position_y, position_z, move_flag, delay, action, action_chance FROM waypoint_data WHERE id = %u ORDER BY point", id);
+ QueryResult result = WorldDatabase.PQuery("SELECT point, position_x, position_y, position_z, orientation, move_flag, delay, action, action_chance FROM waypoint_data WHERE id = %u ORDER BY point", id);
if (!result)
return;
@@ -112,6 +114,7 @@ void WaypointMgr::ReloadPath(uint32 id)
float x = fields[1].GetFloat();
float y = fields[2].GetFloat();
float z = fields[3].GetFloat();
+ float o = fields[4].GetFloat();
Trinity::NormalizeMapCoord(x);
Trinity::NormalizeMapCoord(y);
@@ -120,10 +123,11 @@ void WaypointMgr::ReloadPath(uint32 id)
wp->x = x;
wp->y = y;
wp->z = z;
- wp->run = fields[4].GetBool();
- wp->delay = fields[5].GetUInt32();
- wp->event_id = fields[6].GetUInt32();
- wp->event_chance = fields[7].GetUInt8();
+ wp->orientation = o;
+ wp->run = fields[5].GetBool();
+ wp->delay = fields[6].GetUInt32();
+ wp->event_id = fields[7].GetUInt32();
+ wp->event_chance = fields[8].GetUInt8();
path.push_back(wp);
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h
index 4b374984232..73d611e0419 100755
--- a/src/server/game/Movement/Waypoints/WaypointManager.h
+++ b/src/server/game/Movement/Waypoints/WaypointManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
struct WaypointData
{
uint32 id;
- float x, y, z;
+ float x, y, z, orientation;
bool run;
uint32 delay;
uint32 event_id;
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index b925150ef71..9f6ec547342 100755
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -36,22 +36,22 @@ m_State(OBJECTIVESTATE_NEUTRAL), m_neutralValuePct(0), m_PvP(pvp)
{
}
-bool OPvPCapturePoint::HandlePlayerEnter(Player* plr)
+bool OPvPCapturePoint::HandlePlayerEnter(Player* player)
{
if (m_capturePoint)
{
- plr->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldState1, 1);
- plr->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate2, (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f));
- plr->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct);
+ player->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldState1, 1);
+ player->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate2, (uint32)ceil((m_value + m_maxValue) / (2 * m_maxValue) * 100.0f));
+ player->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct);
}
- return m_activePlayers[plr->GetTeamId()].insert(plr).second;
+ return m_activePlayers[player->GetTeamId()].insert(player).second;
}
-void OPvPCapturePoint::HandlePlayerLeave(Player* plr)
+void OPvPCapturePoint::HandlePlayerLeave(Player* player)
{
if (m_capturePoint)
- plr->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldState1, 0);
- m_activePlayers[plr->GetTeamId()].erase(plr);
+ player->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldState1, 0);
+ m_activePlayers[player->GetTeamId()].erase(player);
}
void OPvPCapturePoint::SendChangePhase()
@@ -239,24 +239,24 @@ OutdoorPvP::~OutdoorPvP()
DeleteSpawns();
}
-void OutdoorPvP::HandlePlayerEnterZone(Player* plr, uint32 /*zone*/)
+void OutdoorPvP::HandlePlayerEnterZone(Player* player, uint32 /*zone*/)
{
- m_players[plr->GetTeamId()].insert(plr);
+ m_players[player->GetTeamId()].insert(player);
}
-void OutdoorPvP::HandlePlayerLeaveZone(Player* plr, uint32 /*zone*/)
+void OutdoorPvP::HandlePlayerLeaveZone(Player* player, uint32 /*zone*/)
{
// inform the objectives of the leaving
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- itr->second->HandlePlayerLeave(plr);
+ itr->second->HandlePlayerLeave(player);
// remove the world state information from the player (we can't keep everyone up to date, so leave out those who are not in the concerning zones)
- if (!plr->GetSession()->PlayerLogout())
- SendRemoveWorldStates(plr);
- m_players[plr->GetTeamId()].erase(plr);
- sLog->outDebug(LOG_FILTER_OUTDOORPVP, "Player %s left an outdoorpvp zone", plr->GetName());
+ if (!player->GetSession()->PlayerLogout())
+ SendRemoveWorldStates(player);
+ m_players[player->GetTeamId()].erase(player);
+ sLog->outDebug(LOG_FILTER_OUTDOORPVP, "Player %s left an outdoorpvp zone", player->GetName());
}
-void OutdoorPvP::HandlePlayerResurrects(Player* /*plr*/, uint32 /*zone*/)
+void OutdoorPvP::HandlePlayerResurrects(Player* /*player*/, uint32 /*zone*/)
{
}
@@ -463,88 +463,88 @@ void OutdoorPvP::HandleKill(Player* killer, Unit* killed)
}
}
-bool OutdoorPvP::IsInsideObjective(Player* plr) const
+bool OutdoorPvP::IsInsideObjective(Player* player) const
{
for (OPvPCapturePointMap::const_iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->IsInsideObjective(plr))
+ if (itr->second->IsInsideObjective(player))
return true;
return false;
}
-bool OPvPCapturePoint::IsInsideObjective(Player* plr) const
+bool OPvPCapturePoint::IsInsideObjective(Player* player) const
{
- return m_activePlayers[plr->GetTeamId()].find(plr) != m_activePlayers[plr->GetTeamId()].end();
+ return m_activePlayers[player->GetTeamId()].find(player) != m_activePlayers[player->GetTeamId()].end();
}
-bool OutdoorPvP::HandleCustomSpell(Player* plr, uint32 spellId, GameObject* go)
+bool OutdoorPvP::HandleCustomSpell(Player* player, uint32 spellId, GameObject* go)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->HandleCustomSpell(plr, spellId, go))
+ if (itr->second->HandleCustomSpell(player, spellId, go))
return true;
return false;
}
-bool OPvPCapturePoint::HandleCustomSpell(Player* plr, uint32 /*spellId*/, GameObject* /*go*/)
+bool OPvPCapturePoint::HandleCustomSpell(Player* player, uint32 /*spellId*/, GameObject* /*go*/)
{
- if (!plr->IsOutdoorPvPActive())
+ if (!player->IsOutdoorPvPActive())
return false;
return false;
}
-bool OutdoorPvP::HandleOpenGo(Player* plr, uint64 guid)
+bool OutdoorPvP::HandleOpenGo(Player* player, uint64 guid)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->HandleOpenGo(plr, guid) >= 0)
+ if (itr->second->HandleOpenGo(player, guid) >= 0)
return true;
return false;
}
-bool OutdoorPvP::HandleGossipOption(Player* plr, uint64 guid, uint32 id)
+bool OutdoorPvP::HandleGossipOption(Player* player, uint64 guid, uint32 id)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->HandleGossipOption(plr, guid, id))
+ if (itr->second->HandleGossipOption(player, guid, id))
return true;
return false;
}
-bool OutdoorPvP::CanTalkTo(Player* plr, Creature* c, GossipMenuItems const& gso)
+bool OutdoorPvP::CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->CanTalkTo(plr, c, gso))
+ if (itr->second->CanTalkTo(player, c, gso))
return true;
return false;
}
-bool OutdoorPvP::HandleDropFlag(Player* plr, uint32 id)
+bool OutdoorPvP::HandleDropFlag(Player* player, uint32 id)
{
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
- if (itr->second->HandleDropFlag(plr, id))
+ if (itr->second->HandleDropFlag(player, id))
return true;
return false;
}
-bool OPvPCapturePoint::HandleGossipOption(Player* /*plr*/, uint64 /*guid*/, uint32 /*id*/)
+bool OPvPCapturePoint::HandleGossipOption(Player* /*player*/, uint64 /*guid*/, uint32 /*id*/)
{
return false;
}
-bool OPvPCapturePoint::CanTalkTo(Player* /*plr*/, Creature* /*c*/, GossipMenuItems const& /*gso*/)
+bool OPvPCapturePoint::CanTalkTo(Player* /*player*/, Creature* /*c*/, GossipMenuItems const& /*gso*/)
{
return false;
}
-bool OPvPCapturePoint::HandleDropFlag(Player* /*plr*/, uint32 /*id*/)
+bool OPvPCapturePoint::HandleDropFlag(Player* /*player*/, uint32 /*id*/)
{
return false;
}
-int32 OPvPCapturePoint::HandleOpenGo(Player* /*plr*/, uint64 guid)
+int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, uint64 guid)
{
std::map<uint64, uint32>::iterator itr = m_ObjectTypes.find(guid);
if (itr != m_ObjectTypes.end())
@@ -554,7 +554,7 @@ int32 OPvPCapturePoint::HandleOpenGo(Player* /*plr*/, uint64 guid)
return -1;
}
-bool OutdoorPvP::HandleAreaTrigger(Player* /*plr*/, uint32 /*trigger*/)
+bool OutdoorPvP::HandleAreaTrigger(Player* /*player*/, uint32 /*trigger*/)
{
return false;
}
@@ -572,9 +572,9 @@ void OutdoorPvP::RegisterZone(uint32 zoneId)
sOutdoorPvPMgr->AddZone(zoneId, this);
}
-bool OutdoorPvP::HasPlayer(Player* plr) const
+bool OutdoorPvP::HasPlayer(Player* player) const
{
- return m_players[plr->GetTeamId()].find(plr) != m_players[plr->GetTeamId()].end();
+ return m_players[player->GetTeamId()].find(player) != m_players[player->GetTeamId()].end();
}
void OutdoorPvP::TeamCastSpell(TeamId team, int32 spellId)
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h
index 1969d1f98e1..6ea13d353c5 100755
--- a/src/server/game/OutdoorPvP/OutdoorPvP.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -104,15 +104,15 @@ class OPvPCapturePoint
void SendObjectiveComplete(uint32 id, uint64 guid);
// used when player is activated/inactivated in the area
- virtual bool HandlePlayerEnter(Player* plr);
- virtual void HandlePlayerLeave(Player* plr);
+ virtual bool HandlePlayerEnter(Player* player);
+ virtual void HandlePlayerLeave(Player* player);
// checks if player is in range of a capture credit marker
- bool IsInsideObjective(Player* plr) const;
+ bool IsInsideObjective(Player* player) const;
- virtual bool HandleCustomSpell(Player* plr, uint32 spellId, GameObject* go);
+ virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
- virtual int32 HandleOpenGo(Player* plr, uint64 guid);
+ virtual int32 HandleOpenGo(Player* player, uint64 guid);
// returns true if the state of the objective has changed, in this case, the OutdoorPvP must send a world state ui update.
virtual bool Update(uint32 diff);
@@ -123,11 +123,11 @@ class OPvPCapturePoint
virtual void SendChangePhase();
- virtual bool HandleGossipOption(Player* plr, uint64 guid, uint32 gossipid);
+ virtual bool HandleGossipOption(Player* player, uint64 guid, uint32 gossipid);
- virtual bool CanTalkTo(Player* plr, Creature* c, GossipMenuItems const& gso);
+ virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso);
- virtual bool HandleDropFlag(Player* plr, uint32 spellId);
+ virtual bool HandleDropFlag(Player* player, uint32 spellId);
virtual void DeleteSpawns();
@@ -208,13 +208,13 @@ class OutdoorPvP : public ZoneScript
virtual void FillInitialWorldStates(WorldPacket & /*data*/) {}
// called when a player triggers an areatrigger
- virtual bool HandleAreaTrigger(Player* plr, uint32 trigger);
+ virtual bool HandleAreaTrigger(Player* player, uint32 trigger);
// called on custom spell
- virtual bool HandleCustomSpell(Player* plr, uint32 spellId, GameObject* go);
+ virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
// called on go use
- virtual bool HandleOpenGo(Player* plr, uint64 guid);
+ virtual bool HandleOpenGo(Player* player, uint64 guid);
// setup stuff
virtual bool SetupOutdoorPvP() {return true;}
@@ -234,18 +234,18 @@ class OutdoorPvP : public ZoneScript
virtual void HandleKillImpl(Player* /*killer*/, Unit* /*killed*/) {}
// checks if player is in range of a capture credit marker
- bool IsInsideObjective(Player* plr) const;
+ bool IsInsideObjective(Player* player) const;
// awards rewards for player kill
- virtual void AwardKillBonus(Player* /*plr*/) {}
+ virtual void AwardKillBonus(Player* /*player*/) {}
uint32 GetTypeId() {return m_TypeId;}
- virtual bool HandleDropFlag(Player* plr, uint32 spellId);
+ virtual bool HandleDropFlag(Player* player, uint32 spellId);
- virtual bool HandleGossipOption(Player* plr, uint64 guid, uint32 gossipid);
+ virtual bool HandleGossipOption(Player* player, uint64 guid, uint32 gossipid);
- virtual bool CanTalkTo(Player* plr, Creature* c, GossipMenuItems const& gso);
+ virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso);
void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0);
@@ -261,14 +261,14 @@ class OutdoorPvP : public ZoneScript
bool m_sendUpdate;
// world state stuff
- virtual void SendRemoveWorldStates(Player* /*plr*/) {}
+ virtual void SendRemoveWorldStates(Player* /*player*/) {}
void BroadcastPacket(WorldPacket & data) const;
- virtual void HandlePlayerEnterZone(Player* plr, uint32 zone);
- virtual void HandlePlayerLeaveZone(Player* plr, uint32 zone);
+ virtual void HandlePlayerEnterZone(Player* player, uint32 zone);
+ virtual void HandlePlayerLeaveZone(Player* player, uint32 zone);
- virtual void HandlePlayerResurrects(Player* plr, uint32 zone);
+ virtual void HandlePlayerResurrects(Player* player, uint32 zone);
void AddCapturePoint(OPvPCapturePoint* cp)
{
@@ -285,7 +285,7 @@ class OutdoorPvP : public ZoneScript
void RegisterZone(uint32 zoneid);
- bool HasPlayer(Player* plr) const;
+ bool HasPlayer(Player* player) const;
void TeamCastSpell(TeamId team, int32 spellId);
};
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
index dda0e7bcb61..88e6db971f0 100755
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -115,31 +115,31 @@ void OutdoorPvPMgr::AddZone(uint32 zoneid, OutdoorPvP* handle)
m_OutdoorPvPMap[zoneid] = handle;
}
-void OutdoorPvPMgr::HandlePlayerEnterZone(Player* plr, uint32 zoneid)
+void OutdoorPvPMgr::HandlePlayerEnterZone(Player* player, uint32 zoneid)
{
OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
if (itr == m_OutdoorPvPMap.end())
return;
- if (itr->second->HasPlayer(plr))
+ if (itr->second->HasPlayer(player))
return;
- itr->second->HandlePlayerEnterZone(plr, zoneid);
- sLog->outDebug(LOG_FILTER_OUTDOORPVP, "Player %u entered outdoorpvp id %u", plr->GetGUIDLow(), itr->second->GetTypeId());
+ itr->second->HandlePlayerEnterZone(player, zoneid);
+ sLog->outDebug(LOG_FILTER_OUTDOORPVP, "Player %u entered outdoorpvp id %u", player->GetGUIDLow(), itr->second->GetTypeId());
}
-void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* plr, uint32 zoneid)
+void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneid)
{
OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
if (itr == m_OutdoorPvPMap.end())
return;
// teleport: remove once in removefromworld, once in updatezone
- if (!itr->second->HasPlayer(plr))
+ if (!itr->second->HasPlayer(player))
return;
- itr->second->HandlePlayerLeaveZone(plr, zoneid);
- sLog->outDebug(LOG_FILTER_OUTDOORPVP, "Player %u left outdoorpvp id %u", plr->GetGUIDLow(), itr->second->GetTypeId());
+ itr->second->HandlePlayerLeaveZone(player, zoneid);
+ sLog->outDebug(LOG_FILTER_OUTDOORPVP, "Player %u left outdoorpvp id %u", player->GetGUIDLow(), itr->second->GetTypeId());
}
OutdoorPvP* OutdoorPvPMgr::GetOutdoorPvPToZoneId(uint32 zoneid)
@@ -164,11 +164,11 @@ void OutdoorPvPMgr::Update(uint32 diff)
}
}
-bool OutdoorPvPMgr::HandleCustomSpell(Player* plr, uint32 spellId, GameObject* go)
+bool OutdoorPvPMgr::HandleCustomSpell(Player* player, uint32 spellId, GameObject* go)
{
for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
{
- if ((*itr)->HandleCustomSpell(plr, spellId, go))
+ if ((*itr)->HandleCustomSpell(player, spellId, go))
return true;
}
return false;
@@ -183,21 +183,21 @@ ZoneScript* OutdoorPvPMgr::GetZoneScript(uint32 zoneId)
return NULL;
}
-bool OutdoorPvPMgr::HandleOpenGo(Player* plr, uint64 guid)
+bool OutdoorPvPMgr::HandleOpenGo(Player* player, uint64 guid)
{
for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
{
- if ((*itr)->HandleOpenGo(plr, guid))
+ if ((*itr)->HandleOpenGo(player, guid))
return true;
}
return false;
}
-void OutdoorPvPMgr::HandleGossipOption(Player* plr, uint64 guid, uint32 gossipid)
+void OutdoorPvPMgr::HandleGossipOption(Player* player, uint64 guid, uint32 gossipid)
{
for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
{
- if ((*itr)->HandleGossipOption(plr, guid, gossipid))
+ if ((*itr)->HandleGossipOption(player, guid, gossipid))
return;
}
}
@@ -212,21 +212,21 @@ bool OutdoorPvPMgr::CanTalkTo(Player* player, Creature* creature, GossipMenuItem
return false;
}
-void OutdoorPvPMgr::HandleDropFlag(Player* plr, uint32 spellId)
+void OutdoorPvPMgr::HandleDropFlag(Player* player, uint32 spellId)
{
for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
{
- if ((*itr)->HandleDropFlag(plr, spellId))
+ if ((*itr)->HandleDropFlag(player, spellId))
return;
}
}
-void OutdoorPvPMgr::HandlePlayerResurrects(Player* plr, uint32 zoneid)
+void OutdoorPvPMgr::HandlePlayerResurrects(Player* player, uint32 zoneid)
{
OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
if (itr == m_OutdoorPvPMap.end())
return;
- if (itr->second->HasPlayer(plr))
- itr->second->HandlePlayerResurrects(plr, zoneid);
+ if (itr->second->HasPlayer(player))
+ itr->second->HandlePlayerResurrects(player, zoneid);
}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
index 6f0e0ba91b9..3a66a87ecba 100755
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -49,22 +49,22 @@ class OutdoorPvPMgr
void InitOutdoorPvP();
// called when a player enters an outdoor pvp area
- void HandlePlayerEnterZone(Player* plr, uint32 areaflag);
+ void HandlePlayerEnterZone(Player* player, uint32 areaflag);
// called when player leaves an outdoor pvp area
- void HandlePlayerLeaveZone(Player* plr, uint32 areaflag);
+ void HandlePlayerLeaveZone(Player* player, uint32 areaflag);
// called when player resurrects
- void HandlePlayerResurrects(Player* plr, uint32 areaflag);
+ void HandlePlayerResurrects(Player* player, uint32 areaflag);
// return assigned outdoor pvp
OutdoorPvP* GetOutdoorPvPToZoneId(uint32 zoneid);
// handle custom (non-exist in dbc) spell if registered
- bool HandleCustomSpell(Player* plr, uint32 spellId, GameObject* go);
+ bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
// handle custom go if registered
- bool HandleOpenGo(Player* plr, uint64 guid);
+ bool HandleOpenGo(Player* player, uint64 guid);
ZoneScript* GetZoneScript(uint32 zoneId);
@@ -76,7 +76,7 @@ class OutdoorPvPMgr
bool CanTalkTo(Player* player, Creature* creature, GossipMenuItems const& gso);
- void HandleDropFlag(Player* plr, uint32 spellId);
+ void HandleDropFlag(Player* player, uint32 spellId);
private:
typedef std::vector<OutdoorPvP*> OutdoorPvPSet;
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp
index 35c19a6a62f..05ce7a0a50d 100755
--- a/src/server/game/Pools/PoolMgr.cpp
+++ b/src/server/game/Pools/PoolMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -260,7 +260,7 @@ void PoolGroup<Quest>::Despawn1Object(uint32 quest_id)
QuestRelations::iterator lastElement = questMap->upper_bound(itr->second);
for (; qitr != lastElement; ++qitr)
{
- if (qitr->first == itr->second)
+ if (qitr->first == itr->second && qitr->second == itr->first)
{
questMap->erase(qitr); // iterator is now no more valid
break; // but we can exit loop since the element is found
@@ -279,7 +279,7 @@ void PoolGroup<Quest>::Despawn1Object(uint32 quest_id)
QuestRelations::iterator lastElement = questMap->upper_bound(itr->second);
for (; qitr != lastElement; ++qitr)
{
- if (qitr->first == itr->second)
+ if (qitr->first == itr->second && qitr->second == itr->first)
{
questMap->erase(qitr); // iterator is now no more valid
break; // but we can exit loop since the element is found
@@ -359,19 +359,17 @@ void PoolGroup<Creature>::Spawn1Object(PoolObject* obj)
sObjectMgr->AddCreatureToGrid(obj->guid, data);
// Spawn if necessary (loaded grids only)
- Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
+ Map* map = sMapMgr->CreateBaseMap(data->mapid);
// We use spawn coords to spawn
- if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY))
+ if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
{
Creature* creature = new Creature;
//sLog->outDebug(LOG_FILTER_POOLSYS, "Spawning creature %u", guid);
- if (!creature->LoadFromDB(obj->guid, map))
+ if (!creature->LoadCreatureFromDB(obj->guid, map))
{
delete creature;
return;
}
- else
- map->AddToMap(creature);
}
}
}
@@ -385,13 +383,13 @@ void PoolGroup<GameObject>::Spawn1Object(PoolObject* obj)
sObjectMgr->AddGameobjectToGrid(obj->guid, data);
// Spawn if necessary (loaded grids only)
// this base map checked as non-instanced and then only existed
- Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
+ Map* map = sMapMgr->CreateBaseMap(data->mapid);
// We use current coords to unspawn, not spawn coords since creature can have changed grid
- if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY))
+ if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
{
GameObject* pGameobject = new GameObject;
//sLog->outDebug(LOG_FILTER_POOLSYS, "Spawning gameobject %u", guid);
- if (!pGameobject->LoadFromDB(obj->guid, map))
+ if (!pGameobject->LoadGameObjectFromDB(obj->guid, map, false))
{
delete pGameobject;
return;
@@ -809,7 +807,7 @@ void PoolMgr::LoadFromDB()
{
uint32 oldMSTime = getMSTime();
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_LOAD_QUEST_POOLS);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_QUEST_POOLS);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -966,7 +964,7 @@ void PoolMgr::SaveQuestsToDB()
{
if (IsSpawnedObject<Quest>(itr->first))
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_QUEST_POOL_SAVE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_QUEST_POOL_SAVE);
stmt->setUInt32(0, itr->second);
stmt->setUInt32(1, itr->first);
trans->Append(stmt);
diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h
index 055763480e3..be839bf1566 100755
--- a/src/server/game/Pools/PoolMgr.h
+++ b/src/server/game/Pools/PoolMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://www.mangosproject.org/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index a1a1f5d5cac..674f54d07a8 100755
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -22,127 +22,133 @@
Quest::Quest(Field* questRecord)
{
- QuestId = questRecord[0].GetUInt32();
- QuestMethod = questRecord[1].GetUInt32();
- ZoneOrSort = questRecord[2].GetInt32();
- SkillOrClassMask = questRecord[3].GetInt32();
- MinLevel = questRecord[4].GetUInt32();
- MaxLevel = questRecord[5].GetUInt32();
- QuestLevel = questRecord[6].GetInt32();
- Type = questRecord[7].GetUInt32();
- RequiredRaces = questRecord[8].GetUInt32();
- RequiredSkillValue = questRecord[9].GetUInt32();
- RepObjectiveFaction = questRecord[10].GetUInt32();
- RepObjectiveValue = questRecord[11].GetInt32();
- RepObjectiveFaction2 = questRecord[12].GetUInt32();
- RepObjectiveValue2 = questRecord[13].GetInt32();
- RequiredMinRepFaction = questRecord[14].GetUInt32();
- RequiredMinRepValue = questRecord[15].GetInt32();
- RequiredMaxRepFaction = questRecord[16].GetUInt32();
- RequiredMaxRepValue = questRecord[17].GetInt32();
- SuggestedPlayers = questRecord[18].GetUInt32();
- LimitTime = questRecord[19].GetUInt32();
- QuestFlags = questRecord[20].GetUInt32();
- uint32 SpecialFlags = questRecord[21].GetUInt16();
- CharTitleId = questRecord[22].GetUInt32();
- PlayersSlain = questRecord[23].GetUInt32();
- BonusTalents = questRecord[24].GetUInt32();
- RewArenaPoints = questRecord[25].GetInt32();
- PrevQuestId = questRecord[26].GetInt32();
- NextQuestId = questRecord[27].GetInt32();
- ExclusiveGroup = questRecord[28].GetInt32();
- NextQuestInChain = questRecord[29].GetUInt32();
- XPId = questRecord[30].GetUInt32();
- SrcItemId = questRecord[31].GetUInt32();
- SrcItemCount = questRecord[32].GetUInt32();
- SrcSpell = questRecord[33].GetUInt32();
- Title = questRecord[34].GetString();
- Details = questRecord[35].GetString();
- Objectives = questRecord[36].GetString();
- OfferRewardText = questRecord[37].GetString();
- RequestItemsText = questRecord[38].GetString();
- EndText = questRecord[39].GetString();
- CompletedText = questRecord[40].GetString();
+ Id = questRecord[0].GetUInt32();
+ Method = questRecord[1].GetUInt32();
+ Level = questRecord[2].GetInt32();
+ MinLevel = questRecord[3].GetUInt32();
+ MaxLevel = questRecord[4].GetUInt32();
+ ZoneOrSort = questRecord[5].GetInt32();
+ Type = questRecord[6].GetUInt32();
+ SuggestedPlayers = questRecord[7].GetUInt32();
+ LimitTime = questRecord[8].GetUInt32();
+ RequiredClasses = questRecord[9].GetUInt32();
+ RequiredRaces = questRecord[10].GetUInt32();
+ RequiredSkillId = questRecord[11].GetUInt32();
+ RequiredSkillPoints = questRecord[12].GetUInt32();
+ RequiredFactionId1 = questRecord[13].GetUInt32();
+ RequiredFactionId2 = questRecord[14].GetUInt32();
+ RequiredFactionValue1 = questRecord[15].GetInt32();
+ RequiredFactionValue2 = questRecord[16].GetInt32();
+ RequiredMinRepFaction = questRecord[17].GetUInt32();
+ RequiredMaxRepFaction = questRecord[18].GetUInt32();
+ RequiredMinRepValue = questRecord[19].GetInt32();
+ RequiredMaxRepValue = questRecord[20].GetInt32();
+ PrevQuestId = questRecord[21].GetInt32();
+ NextQuestId = questRecord[22].GetInt32();
+ ExclusiveGroup = questRecord[23].GetInt32();
+ NextQuestIdChain = questRecord[24].GetUInt32();
+ RewardXPId = questRecord[25].GetUInt32();
+ RewardOrRequiredMoney = questRecord[26].GetInt32();
+ RewardMoneyMaxLevel = questRecord[27].GetUInt32();
+ RewardSpell = questRecord[28].GetUInt32();
+ RewardSpellCast = questRecord[29].GetInt32();
+ RewardHonor = questRecord[30].GetUInt32();
+ RewardHonorMultiplier = questRecord[31].GetFloat();
+ RewardMailTemplateId = questRecord[32].GetUInt32();
+ RewardMailDelay = questRecord[33].GetUInt32();
+ SourceItemId = questRecord[34].GetUInt32();
+ SourceItemIdCount = questRecord[35].GetUInt32();
+ SourceSpellid = questRecord[36].GetUInt32();
+ Flags = questRecord[37].GetUInt32();
+ uint32 SpecialFlags = questRecord[38].GetUInt16();
+ RewardTitleId = questRecord[39].GetUInt32();
+ RequiredPlayerKills = questRecord[40].GetUInt32();
+ RewardTalents = questRecord[41].GetUInt32();
+ RewardArenaPoints = questRecord[42].GetInt32();
+ SeasonalQuestEvent = 0;
- for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ObjectiveText[i] = questRecord[41+i].GetString();
+ for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
+ RewardItemId[i] = questRecord[43+i].GetUInt32();
- for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- ReqItemId[i] = questRecord[45+i].GetUInt32();
+ for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
+ RewardItemIdCount[i] = questRecord[47+i].GetUInt32();
- for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- ReqItemCount[i] = questRecord[51+i].GetUInt32();
+ for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
+ RewardChoiceItemId[i] = questRecord[51+i].GetUInt32();
- for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- ReqSourceId[i] = questRecord[57+i].GetUInt32();
+ for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
+ RewardChoiceItemCount[i] = questRecord[57+i].GetUInt32();
+
+ for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
+ RewardFactionId[i] = questRecord[63+i].GetUInt32();
- for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- ReqSourceCount[i] = questRecord[61+i].GetUInt32();
+ for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
+ RewardFactionValueId[i] = questRecord[68+i].GetInt32();
- for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ReqCreatureOrGOId[i] = questRecord[65+i].GetInt32();
+ for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
+ RewardFactionValueIdOverride[i] = questRecord[73+i].GetInt32();
+
+ PointMapId = questRecord[78].GetUInt32();
+ PointX = questRecord[79].GetFloat();
+ PointY = questRecord[80].GetFloat();
+ PointOption = questRecord[81].GetUInt32();
+ Title = questRecord[82].GetString();
+ Objectives = questRecord[83].GetString();
+ Details = questRecord[84].GetString();
+ EndText = questRecord[85].GetString();
+ OfferRewardText = questRecord[86].GetString();
+ RequestItemsText = questRecord[87].GetString();
+ CompletedText = questRecord[88].GetString();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ReqCreatureOrGOCount[i] = questRecord[69+i].GetUInt32();
+ RequiredNpcOrGo[i] = questRecord[89+i].GetInt32();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ReqSpell[i] = questRecord[73+i].GetUInt32();
+ RequiredNpcOrGoCount[i] = questRecord[93+i].GetUInt32();
- for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- RewChoiceItemId[i] = questRecord[77+i].GetUInt32();
+ for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
+ RequiredSourceItemId[i] = questRecord[97+i].GetUInt32();
- for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- RewChoiceItemCount[i] = questRecord[83+i].GetUInt32();
+ for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
+ RequiredSourceItemCount[i] = questRecord[101+i].GetUInt32();
- for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
- RewItemId[i] = questRecord[89+i].GetUInt32();
+ for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
+ RequiredItemId[i] = questRecord[105+i].GetUInt32();
- for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
- RewItemCount[i] = questRecord[93+i].GetUInt32();
+ for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
+ RequiredItemCount[i] = questRecord[111+i].GetUInt32();
- for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- RewRepFaction[i] = questRecord[97+i].GetUInt32();
+ for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
+ RequiredSpellCast[i] = questRecord[117+i].GetUInt32();
- for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- RewRepValueId[i] = questRecord[102+i].GetInt32();
+ // int8 Unknown0 = questRecord[121].GetUInt32();
- for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
- RewRepValue[i] = questRecord[107+i].GetInt32();
-
- RewHonorAddition = questRecord[112].GetUInt32();
- RewHonorMultiplier = questRecord[113].GetFloat();
- RewOrReqMoney = questRecord[114].GetInt32();
- RewMoneyMaxLevel = questRecord[115].GetUInt32();
- RewSpell = questRecord[116].GetUInt32();
- RewSpellCast = questRecord[117].GetInt32();
- RewMailTemplateId = questRecord[118].GetUInt32();
- RewMailDelaySecs = questRecord[119].GetUInt32();
- PointMapId = questRecord[120].GetUInt32();
- PointX = questRecord[121].GetFloat();
- PointY = questRecord[122].GetFloat();
- PointOpt = questRecord[123].GetUInt32();
+ for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
+ ObjectiveText[i] = questRecord[122+i].GetString();
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- DetailsEmote[i] = questRecord[124+i].GetUInt32();
+ DetailsEmote[i] = questRecord[126+i].GetUInt32();
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- DetailsEmoteDelay[i] = questRecord[128+i].GetUInt32();
+ DetailsEmoteDelay[i] = questRecord[130+i].GetUInt32();
- IncompleteEmote = questRecord[132].GetUInt32();
- CompleteEmote = questRecord[133].GetUInt32();
+ EmoteOnIncomplete = questRecord[134].GetUInt32();
+ EmoteOnComplete = questRecord[135].GetUInt32();
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- OfferRewardEmote[i] = questRecord[134+i].GetInt32();
+ OfferRewardEmote[i] = questRecord[136+i].GetInt32();
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
- OfferRewardEmoteDelay[i] = questRecord[138+i].GetInt32();
+ OfferRewardEmoteDelay[i] = questRecord[140+i].GetInt32();
+
+ StartScript = questRecord[144].GetUInt32();
+ CompleteScript = questRecord[145].GetUInt32();
- QuestStartScript = questRecord[142].GetUInt32();
- QuestCompleteScript = questRecord[143].GetUInt32();
+ // int32 WDBVerified = questRecord[146].GetInt32();
- QuestFlags |= SpecialFlags << 20;
- if (QuestFlags & QUEST_TRINITY_FLAGS_AUTO_ACCEPT)
- QuestFlags |= QUEST_FLAGS_AUTO_ACCEPT;
+ Flags |= SpecialFlags << 20;
+ if (Flags & QUEST_TRINITY_FLAGS_AUTO_ACCEPT)
+ Flags |= QUEST_FLAGS_AUTO_ACCEPT;
m_reqitemscount = 0;
m_reqCreatureOrGOcount = 0;
@@ -150,19 +156,19 @@ Quest::Quest(Field* questRecord)
m_rewchoiceitemscount = 0;
for (int i=0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
- if (ReqItemId[i])
+ if (RequiredItemId[i])
++m_reqitemscount;
for (int i=0; i < QUEST_OBJECTIVES_COUNT; ++i)
- if (ReqCreatureOrGOId[i])
+ if (RequiredNpcOrGo[i])
++m_reqCreatureOrGOcount;
for (int i=0; i < QUEST_REWARDS_COUNT; ++i)
- if (RewItemId[i])
+ if (RewardItemId[i])
++m_rewitemscount;
for (int i=0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- if (RewChoiceItemId[i])
+ if (RewardChoiceItemId[i])
++m_rewchoiceitemscount;
}
@@ -170,7 +176,7 @@ uint32 Quest::XPValue(Player* player) const
{
if (player)
{
- int32 quest_level = (QuestLevel == -1 ? player->getLevel() : QuestLevel);
+ int32 quest_level = (Level == -1 ? player->getLevel() : Level);
const QuestXPEntry* xpentry = sQuestXPStore.LookupEntry(quest_level);
if (!xpentry)
return 0;
@@ -181,7 +187,7 @@ uint32 Quest::XPValue(Player* player) const
else if (diffFactor > 10)
diffFactor = 10;
- uint32 xp = diffFactor * xpentry->Exp[XPId] / 10;
+ uint32 xp = diffFactor * xpentry->Exp[RewardXPId] / 10;
if (xp <= 100)
xp = 5 * ((xp + 2) / 5);
else if (xp <= 500)
@@ -199,10 +205,15 @@ uint32 Quest::XPValue(Player* player) const
int32 Quest::GetRewOrReqMoney() const
{
- if (RewOrReqMoney <= 0)
- return RewOrReqMoney;
+ if (RewardOrRequiredMoney <= 0)
+ return RewardOrRequiredMoney;
- return int32(RewOrReqMoney * sWorld->getRate(RATE_DROP_MONEY));
+ return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_DROP_MONEY));
+}
+
+bool Quest::IsAutoComplete() const
+{
+ return Method == 0 || HasFlag(QUEST_FLAGS_AUTOCOMPLETE);
}
bool Quest::IsAllowedInRaid() const
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 61d492ce88c..4fbfcd176f4 100755
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -141,7 +141,7 @@ enum __QuestFlags
QUEST_FLAGS_UNAVAILABLE = 0x00004000, // Used on quests that are not generically available
QUEST_FLAGS_WEEKLY = 0x00008000,
QUEST_FLAGS_AUTOCOMPLETE = 0x00010000, // auto complete
- QUEST_FLAGS_SPECIAL_ITEM = 0x00020000, // has something to do with ReqItemId and SrcItemId
+ QUEST_FLAGS_SPECIAL_ITEM = 0x00020000, // has something to do with RequiredItemId and SourceItemId
QUEST_FLAGS_OBJ_TEXT = 0x00040000, // use Objective text as Complete text
QUEST_FLAGS_AUTO_ACCEPT = 0x00080000, // The client recognizes this flag as auto-accept. However, NONE of the current quests (3.3.5a) have this flag. Maybe blizz used to use it, or will use it in the future.
@@ -185,24 +185,26 @@ class Quest
Quest(Field* questRecord);
uint32 XPValue(Player* player) const;
- bool HasFlag(uint32 flag) const { return (QuestFlags & flag) != 0; }
- void SetFlag(uint32 flag) { QuestFlags |= flag; }
+ bool HasFlag(uint32 flag) const { return (Flags & flag) != 0; }
+ void SetFlag(uint32 flag) { Flags |= flag; }
+ void SetSeasonalQuestEvent(uint16 event_id) { SeasonalQuestEvent = event_id; }
// table data accessors:
- uint32 GetQuestId() const { return QuestId; }
- uint32 GetQuestMethod() const { return QuestMethod; }
+ uint32 GetQuestId() const { return Id; }
+ uint32 GetQuestMethod() const { return Method; }
int32 GetZoneOrSort() const { return ZoneOrSort; }
- int32 GetSkillOrClassMask() const { return SkillOrClassMask; }
uint32 GetMinLevel() const { return MinLevel; }
uint32 GetMaxLevel() const { return MaxLevel; }
- uint32 GetQuestLevel() const { return QuestLevel; }
+ uint32 GetQuestLevel() const { return Level; }
uint32 GetType() const { return Type; }
+ uint32 GetRequiredClasses() const { return RequiredClasses; }
uint32 GetRequiredRaces() const { return RequiredRaces; }
- uint32 GetRequiredSkillValue() const { return RequiredSkillValue; }
- uint32 GetRepObjectiveFaction() const { return RepObjectiveFaction; }
- int32 GetRepObjectiveValue() const { return RepObjectiveValue; }
- uint32 GetRepObjectiveFaction2() const { return RepObjectiveFaction2; }
- int32 GetRepObjectiveValue2() const { return RepObjectiveValue2; }
+ uint32 GetRequiredSkill() const { return RequiredSkillId; }
+ uint32 GetRequiredSkillValue() const { return RequiredSkillPoints; }
+ uint32 GetRepObjectiveFaction() const { return RequiredFactionId1; }
+ int32 GetRepObjectiveValue() const { return RequiredFactionValue1; }
+ uint32 GetRepObjectiveFaction2() const { return RequiredFactionId2; }
+ int32 GetRepObjectiveValue2() const { return RequiredFactionValue2; }
uint32 GetRequiredMinRepFaction() const { return RequiredMinRepFaction; }
int32 GetRequiredMinRepValue() const { return RequiredMinRepValue; }
uint32 GetRequiredMaxRepFaction() const { return RequiredMaxRepFaction; }
@@ -212,15 +214,15 @@ class Quest
int32 GetPrevQuestId() const { return PrevQuestId; }
int32 GetNextQuestId() const { return NextQuestId; }
int32 GetExclusiveGroup() const { return ExclusiveGroup; }
- uint32 GetNextQuestInChain() const { return NextQuestInChain; }
- uint32 GetCharTitleId() const { return CharTitleId; }
- uint32 GetPlayersSlain() const { return PlayersSlain; }
- uint32 GetBonusTalents() const { return BonusTalents; }
- int32 GetRewArenaPoints() const {return RewArenaPoints; }
- uint32 GetXPId() const { return XPId; }
- uint32 GetSrcItemId() const { return SrcItemId; }
- uint32 GetSrcItemCount() const { return SrcItemCount; }
- uint32 GetSrcSpell() const { return SrcSpell; }
+ uint32 GetNextQuestInChain() const { return NextQuestIdChain; }
+ uint32 GetCharTitleId() const { return RewardTitleId; }
+ uint32 GetPlayersSlain() const { return RequiredPlayerKills; }
+ uint32 GetBonusTalents() const { return RewardTalents; }
+ int32 GetRewArenaPoints() const {return RewardArenaPoints; }
+ uint32 GetXPId() const { return RewardXPId; }
+ uint32 GetSrcItemId() const { return SourceItemId; }
+ uint32 GetSrcItemCount() const { return SourceItemIdCount; }
+ uint32 GetSrcSpell() const { return SourceSpellid; }
std::string GetTitle() const { return Title; }
std::string GetDetails() const { return Details; }
std::string GetObjectives() const { return Objectives; }
@@ -229,50 +231,52 @@ class Quest
std::string GetEndText() const { return EndText; }
std::string GetCompletedText() const { return CompletedText; }
int32 GetRewOrReqMoney() const;
- uint32 GetRewHonorAddition() const { return RewHonorAddition; }
- float GetRewHonorMultiplier() const { return RewHonorMultiplier; }
- uint32 GetRewMoneyMaxLevel() const { return RewMoneyMaxLevel; }
+ uint32 GetRewHonorAddition() const { return RewardHonor; }
+ float GetRewHonorMultiplier() const { return RewardHonorMultiplier; }
+ uint32 GetRewMoneyMaxLevel() const { return RewardMoneyMaxLevel; }
// use in XP calculation at client
- uint32 GetRewSpell() const { return RewSpell; }
- int32 GetRewSpellCast() const { return RewSpellCast; }
- uint32 GetRewMailTemplateId() const { return RewMailTemplateId; }
- uint32 GetRewMailDelaySecs() const { return RewMailDelaySecs; }
+ uint32 GetRewSpell() const { return RewardSpell; }
+ int32 GetRewSpellCast() const { return RewardSpellCast; }
+ uint32 GetRewMailTemplateId() const { return RewardMailTemplateId; }
+ uint32 GetRewMailDelaySecs() const { return RewardMailDelay; }
uint32 GetPointMapId() const { return PointMapId; }
float GetPointX() const { return PointX; }
float GetPointY() const { return PointY; }
- uint32 GetPointOpt() const { return PointOpt; }
- uint32 GetIncompleteEmote() const { return IncompleteEmote; }
- uint32 GetCompleteEmote() const { return CompleteEmote; }
- uint32 GetQuestStartScript() const { return QuestStartScript; }
- uint32 GetQuestCompleteScript() const { return QuestCompleteScript; }
- bool IsRepeatable() const { return QuestFlags & QUEST_TRINITY_FLAGS_REPEATABLE; }
- bool IsAutoComplete() const { return QuestMethod ? false : true; }
- uint32 GetFlags() const { return QuestFlags; }
- bool IsDaily() const { return QuestFlags & QUEST_FLAGS_DAILY; }
- bool IsWeekly() const { return QuestFlags & QUEST_FLAGS_WEEKLY; }
- bool IsDailyOrWeekly() const { return QuestFlags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); }
- bool IsAutoAccept() const { return QuestFlags & QUEST_FLAGS_AUTO_ACCEPT; }
+ uint32 GetPointOpt() const { return PointOption; }
+ uint32 GetIncompleteEmote() const { return EmoteOnIncomplete; }
+ uint32 GetCompleteEmote() const { return EmoteOnComplete; }
+ uint32 GetQuestStartScript() const { return StartScript; }
+ uint32 GetQuestCompleteScript() const { return CompleteScript; }
+ uint16 GetSeasonalQuestEvent() const {return SeasonalQuestEvent; }
+ bool IsRepeatable() const { return Flags & QUEST_TRINITY_FLAGS_REPEATABLE; }
+ bool IsAutoComplete() const;
+ uint32 GetFlags() const { return Flags; }
+ bool IsDaily() const { return Flags & QUEST_FLAGS_DAILY; }
+ bool IsWeekly() const { return Flags & QUEST_FLAGS_WEEKLY; }
+ bool IsSeasonal() const { return ZoneOrSort == -22; }
+ bool IsDailyOrWeekly() const { return Flags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); }
+ bool IsAutoAccept() const { return Flags & QUEST_FLAGS_AUTO_ACCEPT; }
bool IsRaidQuest() const { return Type == QUEST_TYPE_RAID || Type == QUEST_TYPE_RAID_10 || Type == QUEST_TYPE_RAID_25; }
bool IsAllowedInRaid() const;
- bool IsDFQuest() const { return QuestFlags & QUEST_TRINITY_FLAGS_DF_QUEST; }
+ bool IsDFQuest() const { return Flags & QUEST_TRINITY_FLAGS_DF_QUEST; }
uint32 CalculateHonorGain(uint8 level) const;
// multiple values
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];
- uint32 ReqItemId[QUEST_ITEM_OBJECTIVES_COUNT];
- uint32 ReqItemCount[QUEST_ITEM_OBJECTIVES_COUNT];
- uint32 ReqSourceId[QUEST_SOURCE_ITEM_IDS_COUNT];
- uint32 ReqSourceCount[QUEST_SOURCE_ITEM_IDS_COUNT];
- int32 ReqCreatureOrGOId[QUEST_OBJECTIVES_COUNT]; // >0 Creature <0 Gameobject
- uint32 ReqCreatureOrGOCount[QUEST_OBJECTIVES_COUNT];
- uint32 ReqSpell[QUEST_OBJECTIVES_COUNT];
- uint32 RewChoiceItemId[QUEST_REWARD_CHOICES_COUNT];
- uint32 RewChoiceItemCount[QUEST_REWARD_CHOICES_COUNT];
- uint32 RewItemId[QUEST_REWARDS_COUNT];
- uint32 RewItemCount[QUEST_REWARDS_COUNT];
- uint32 RewRepFaction[QUEST_REPUTATIONS_COUNT];
- int32 RewRepValueId[QUEST_REPUTATIONS_COUNT];
- int32 RewRepValue[QUEST_REPUTATIONS_COUNT];
+ uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT];
+ uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT];
+ uint32 RequiredSourceItemId[QUEST_SOURCE_ITEM_IDS_COUNT];
+ uint32 RequiredSourceItemCount[QUEST_SOURCE_ITEM_IDS_COUNT];
+ int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]; // >0 Creature <0 Gameobject
+ uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT];
+ uint32 RequiredSpellCast[QUEST_OBJECTIVES_COUNT];
+ uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT];
+ uint32 RewardChoiceItemCount[QUEST_REWARD_CHOICES_COUNT];
+ uint32 RewardItemId[QUEST_REWARDS_COUNT];
+ uint32 RewardItemIdCount[QUEST_REWARDS_COUNT];
+ uint32 RewardFactionId[QUEST_REPUTATIONS_COUNT];
+ int32 RewardFactionValueId[QUEST_REPUTATIONS_COUNT];
+ int32 RewardFactionValueIdOverride[QUEST_REPUTATIONS_COUNT];
uint32 DetailsEmote[QUEST_EMOTE_COUNT];
uint32 DetailsEmoteDelay[QUEST_EMOTE_COUNT];
uint32 OfferRewardEmote[QUEST_EMOTE_COUNT];
@@ -294,42 +298,45 @@ class Quest
uint32 m_reqCreatureOrGOcount;
uint32 m_rewchoiceitemscount;
uint32 m_rewitemscount;
+ //additional data needed for seasonal quest events
+ uint16 SeasonalQuestEvent;
// table data
protected:
- uint32 QuestId;
- uint32 QuestMethod;
+ uint32 Id;
+ uint32 Method;
int32 ZoneOrSort;
- int32 SkillOrClassMask;
uint32 MinLevel;
uint32 MaxLevel;
- int32 QuestLevel;
+ int32 Level;
uint32 Type;
+ uint32 RequiredClasses;
uint32 RequiredRaces;
- uint32 RequiredSkillValue;
- uint32 RepObjectiveFaction;
- int32 RepObjectiveValue;
- uint32 RepObjectiveFaction2;
- int32 RepObjectiveValue2;
+ uint32 RequiredSkillId;
+ uint32 RequiredSkillPoints;
+ uint32 RequiredFactionId1;
+ int32 RequiredFactionValue1;
+ uint32 RequiredFactionId2;
+ int32 RequiredFactionValue2;
uint32 RequiredMinRepFaction;
int32 RequiredMinRepValue;
uint32 RequiredMaxRepFaction;
int32 RequiredMaxRepValue;
uint32 SuggestedPlayers;
uint32 LimitTime;
- uint32 QuestFlags;
- uint32 CharTitleId;
- uint32 PlayersSlain;
- uint32 BonusTalents;
- int32 RewArenaPoints;
+ uint32 Flags;
+ uint32 RewardTitleId;
+ uint32 RequiredPlayerKills;
+ uint32 RewardTalents;
+ int32 RewardArenaPoints;
int32 PrevQuestId;
int32 NextQuestId;
int32 ExclusiveGroup;
- uint32 NextQuestInChain;
- uint32 XPId;
- uint32 SrcItemId;
- uint32 SrcItemCount;
- uint32 SrcSpell;
+ uint32 NextQuestIdChain;
+ uint32 RewardXPId;
+ uint32 SourceItemId;
+ uint32 SourceItemIdCount;
+ uint32 SourceSpellid;
std::string Title;
std::string Details;
std::string Objectives;
@@ -337,22 +344,22 @@ class Quest
std::string RequestItemsText;
std::string EndText;
std::string CompletedText;
- uint32 RewHonorAddition;
- float RewHonorMultiplier;
- int32 RewOrReqMoney;
- uint32 RewMoneyMaxLevel;
- uint32 RewSpell;
- int32 RewSpellCast;
- uint32 RewMailTemplateId;
- uint32 RewMailDelaySecs;
+ uint32 RewardHonor;
+ float RewardHonorMultiplier;
+ int32 RewardOrRequiredMoney;
+ uint32 RewardMoneyMaxLevel;
+ uint32 RewardSpell;
+ int32 RewardSpellCast;
+ uint32 RewardMailTemplateId;
+ uint32 RewardMailDelay;
uint32 PointMapId;
float PointX;
float PointY;
- uint32 PointOpt;
- uint32 IncompleteEmote;
- uint32 CompleteEmote;
- uint32 QuestStartScript;
- uint32 QuestCompleteScript;
+ uint32 PointOption;
+ uint32 EmoteOnIncomplete;
+ uint32 EmoteOnComplete;
+ uint32 StartScript;
+ uint32 CompleteScript;
};
struct QuestStatusData
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index 2f849116f81..d988959f890 100755
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -358,7 +358,7 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in
if (incremental)
{
// int32 *= float cause one point loss?
- standing = int32(floor((float)standing * sWorld->getRate(RATE_REPUTATION_GAIN) + 0.5));
+ standing = int32(floor((float)standing * sWorld->getRate(RATE_REPUTATION_GAIN) + 0.5f));
standing += itr->second.Standing + BaseRep;
}
diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h
index 59ec826f0c5..b73574d288f 100755
--- a/src/server/game/Reputation/ReputationMgr.h
+++ b/src/server/game/Reputation/ReputationMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp
index 90c1b432416..71195538256 100755
--- a/src/server/game/Scripting/MapScripts.cpp
+++ b/src/server/game/Scripting/MapScripts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -266,21 +266,20 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script
}
}
-inline GameObject* Map::_FindGameObject(WorldObject* pSearchObject, uint32 guid) const
+inline GameObject* Map::_FindGameObject(WorldObject* searchObject, uint32 guid) const
{
- GameObject* pGameObject = NULL;
+ GameObject* gameobject = NULL;
- CellPair p(Trinity::ComputeCellPair(pSearchObject->GetPositionX(), pSearchObject->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
- Trinity::GameObjectWithDbGUIDCheck goCheck(*pSearchObject, guid);
- Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(pSearchObject, pGameObject, goCheck);
+ Trinity::GameObjectWithDbGUIDCheck goCheck(*searchObject, guid);
+ Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck> checker(searchObject, gameobject, goCheck);
TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::GameObjectWithDbGUIDCheck>, GridTypeMapContainer > objectChecker(checker);
- cell.Visit(p, objectChecker, *pSearchObject->GetMap());
+ cell.Visit(p, objectChecker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange());
- return pGameObject;
+ return gameobject;
}
/// Process queued scripts
@@ -322,11 +321,11 @@ void Map::ScriptsProcess()
source = HashMapHolder<Corpse>::Find(step.sourceGUID);
break;
case HIGHGUID_MO_TRANSPORT:
- for (MapManager::TransportSet::iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter)
+ for (MapManager::TransportSet::iterator itr2 = sMapMgr->m_Transports.begin(); itr2 != sMapMgr->m_Transports.end(); ++itr2)
{
- if ((*iter)->GetGUID() == step.sourceGUID)
+ if ((*itr2)->GetGUID() == step.sourceGUID)
{
- source = *iter;
+ source = *itr2;
break;
}
}
@@ -539,8 +538,8 @@ void Map::ScriptsProcess()
// when script called for item spell casting then target == (unit or GO) and source is player
WorldObject* worldObject;
- Player* pTarget = target->ToPlayer();
- if (pTarget)
+ Player* plrTarget = target->ToPlayer();
+ if (plrTarget)
{
if (source->GetTypeId() != TYPEID_UNIT && source->GetTypeId() != TYPEID_GAMEOBJECT && source->GetTypeId() != TYPEID_PLAYER)
{
@@ -552,8 +551,8 @@ void Map::ScriptsProcess()
}
else
{
- pTarget = source->ToPlayer();
- if (target)
+ plrTarget = source->ToPlayer();
+ if (plrTarget)
{
if (target->GetTypeId() != TYPEID_UNIT && target->GetTypeId() != TYPEID_GAMEOBJECT && target->GetTypeId() != TYPEID_PLAYER)
{
@@ -566,19 +565,18 @@ void Map::ScriptsProcess()
else
{
sLog->outError("%s neither source nor target is player (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.",
- step.script->GetDebugInfo().c_str(),
- source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUIDLow() : 0,
- target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUIDLow() : 0);
+ step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow(),
+ target->GetTypeId(), target->GetEntry(), target->GetGUIDLow());
break;
}
}
// quest id and flags checked at script loading
if ((worldObject->GetTypeId() != TYPEID_UNIT || ((Unit*)worldObject)->isAlive()) &&
- (step.script->QuestExplored.Distance == 0 || worldObject->IsWithinDistInMap(pTarget, float(step.script->QuestExplored.Distance))))
- pTarget->AreaExploredOrEventHappens(step.script->QuestExplored.QuestID);
+ (step.script->QuestExplored.Distance == 0 || worldObject->IsWithinDistInMap(plrTarget, float(step.script->QuestExplored.Distance))))
+ plrTarget->AreaExploredOrEventHappens(step.script->QuestExplored.QuestID);
else
- pTarget->FailQuest(step.script->QuestExplored.QuestID);
+ plrTarget->FailQuest(step.script->QuestExplored.QuestID);
break;
}
@@ -819,15 +817,14 @@ void Map::ScriptsProcess()
{
WorldObject* wSource = dynamic_cast <WorldObject*> (source);
- CellPair p(Trinity::ComputeCellPair(wSource->GetPositionX(), wSource->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(wSource->GetPositionX(), wSource->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::CreatureWithDbGUIDCheck target_check(wSource, step.script->CallScript.CreatureEntry);
Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(wSource, cTarget, target_check);
TypeContainerVisitor<Trinity::CreatureSearcher <Trinity::CreatureWithDbGUIDCheck>, GridTypeMapContainer > unit_checker(checker);
- cell.Visit(p, unit_checker, *wSource->GetMap());
+ cell.Visit(p, unit_checker, *wSource->GetMap(), *wSource, wSource->GetGridActivationRange());
}
else //check hashmap holders
{
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 26d703458ac..6322151e792 100755
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 120227c172d..d5e8f71e1fd 100755
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -295,7 +295,6 @@ void ScriptMgr::Unload()
void ScriptMgr::LoadDatabase()
{
- sScriptSystemMgr->LoadVersion();
sScriptSystemMgr->LoadScriptTexts();
sScriptSystemMgr->LoadScriptTextsCustom();
sScriptSystemMgr->LoadScriptWaypoints();
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index b3ba7f0a89c..60052bea0ea 100755
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Scripting/ScriptSystem.cpp b/src/server/game/Scripting/ScriptSystem.cpp
index 8c6f5626101..56d3109a6a0 100755
--- a/src/server/game/Scripting/ScriptSystem.cpp
+++ b/src/server/game/Scripting/ScriptSystem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -23,25 +23,6 @@
ScriptPointVector const SystemMgr::_empty;
-void SystemMgr::LoadVersion()
-{
- // Get Version information
- QueryResult result = WorldDatabase.Query("SELECT script_version FROM version LIMIT 1");
-
- if (result)
- {
- Field* fields = result->Fetch();
-
- sLog->outString("TSCR: Database version is: %s", fields[0].GetCString());
- sLog->outString();
- }
- else
- {
- sLog->outError("TSCR: Missing `version`.`script_version` information.");
- sLog->outString();
- }
-}
-
void SystemMgr::LoadScriptTexts()
{
sLog->outString("TSCR: Loading Script Texts...");
diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h
index a17033dc920..daa7fe0d596 100644
--- a/src/server/game/Scripting/ScriptSystem.h
+++ b/src/server/game/Scripting/ScriptSystem.h
@@ -64,7 +64,6 @@ class SystemMgr
typedef UNORDERED_MAP<uint32, ScriptPointVector> PointMoveMap;
//Database
- void LoadVersion();
void LoadScriptTexts();
void LoadScriptTextsCustom();
void LoadScriptWaypoints();
diff --git a/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp b/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp
index 9bbf98ce3fc..ef537cb6198 100755
--- a/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -107,9 +107,9 @@ bool AddonHandler::BuildAddonPacket(WorldPacket* Source, WorldPacket* Target)
*Target << uint8(unk1);
if (unk1)
{
- uint8 unk2 = (crc != 0x4c1c776d); // If addon is Standard addon CRC
- *Target << uint8(unk2);
- if (unk2)
+ uint8 unk = (crc != 0x4c1c776d); // If addon is Standard addon CRC
+ *Target << uint8(unk);
+ if (unk)
Target->append(tdata, sizeof(tdata));
*Target << uint32(0);
diff --git a/src/server/game/Server/Protocol/Handlers/AddonHandler.h b/src/server/game/Server/Protocol/Handlers/AddonHandler.h
index fe8fc6d631c..36cb19e5698 100755
--- a/src/server/game/Server/Protocol/Handlers/AddonHandler.h
+++ b/src/server/game/Server/Protocol/Handlers/AddonHandler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/ArenaTeamHandler.cpp b/src/server/game/Server/Protocol/Handlers/ArenaTeamHandler.cpp
index 095f8396dd7..8fb820713ce 100755
--- a/src/server/game/Server/Protocol/Handlers/ArenaTeamHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ArenaTeamHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp b/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp
index a67006382ff..aaafb09115d 100755
--- a/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -115,6 +115,8 @@ void WorldSession::SendAuctionOwnerNotification(AuctionEntry* auction)
//this void creates new auction and adds auction to some auctionhouse
void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_SELL_ITEM");
+
uint64 auctioneer, item;
uint32 etime, bid, buyout, count;
recv_data >> auctioneer;
@@ -125,7 +127,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
recv_data >> buyout;
recv_data >> etime;
- Player* pl = GetPlayer();
+ Player* player = GetPlayer();
if (!item || !bid || !etime)
return; //check for cheaters
@@ -162,11 +164,11 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
if (GetPlayer()->HasUnitState(UNIT_STAT_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- Item* it = pl->GetItemByGuid(item);
+ Item* it = player->GetItemByGuid(item);
//do not allow to sell already auctioned items
if (sAuctionMgr->GetAItem(GUID_LOPART(item)))
{
- sLog->outError("AuctionError, player %s is sending item id: %u, but item is already in another auction", pl->GetName(), GUID_LOPART(item));
+ sLog->outError("AuctionError, player %s is sending item id: %u, but item is already in another auction", player->GetName(), GUID_LOPART(item));
SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_INTERNAL_ERROR);
return;
}
@@ -199,7 +201,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
//we have to take deposit :
uint32 deposit = sAuctionMgr->GetAuctionDeposit(auctionHouseEntry, etime, it, count);
- if (!pl->HasEnoughMoney(deposit))
+ if (!player->HasEnoughMoney(deposit))
{
SendAuctionCommandResult(0, AUCTION_SELL_ITEM, AUCTION_NOT_ENOUGHT_MONEY);
return;
@@ -211,7 +213,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
GetPlayerName(), GetAccountId(), it->GetTemplate()->Name1.c_str(), it->GetEntry(), count);
}
- pl->ModifyMoney(-int32(deposit));
+ player->ModifyMoney(-int32(deposit));
uint32 auction_time = uint32(etime * sWorld->getRate(RATE_AUCTION_TIME));
@@ -223,7 +225,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
AH->auctioneer = GUID_LOPART(auctioneer);
AH->item_guidlow = GUID_LOPART(item);
AH->item_template = it->GetEntry();
- AH->owner = pl->GetGUIDLow();
+ AH->owner = player->GetGUIDLow();
AH->startbid = bid;
AH->bidder = 0;
AH->bid = 0;
@@ -236,13 +238,13 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
sAuctionMgr->AddAItem(it);
auctionHouse->AddAuction(AH);
- pl->MoveItemFromInventory(it->GetBagSlot(), it->GetSlot(), true);
+ player->MoveItemFromInventory(it->GetBagSlot(), it->GetSlot(), true);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
it->DeleteFromInventoryDB(trans);
it->SaveToDB(trans); // recursive and not have transaction guard into self, not in inventiory and can be save standalone
AH->SaveToDB(trans);
- pl->SaveInventoryAndGoldToDB(trans);
+ player->SaveInventoryAndGoldToDB(trans);
CharacterDatabase.CommitTransaction(trans);
SendAuctionCommandResult(AH->Id, AUCTION_SELL_ITEM, AUCTION_OK);
@@ -253,6 +255,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket & recv_data)
//this function is called when client bids or buys out auction
void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_PLACE_BID");
+
uint64 auctioneer;
uint32 auctionId;
uint32 price;
@@ -276,9 +280,9 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());
AuctionEntry* auction = auctionHouse->GetAuction(auctionId);
- Player* pl = GetPlayer();
+ Player* player = GetPlayer();
- if (!auction || auction->owner == pl->GetGUIDLow())
+ if (!auction || auction->owner == player->GetGUIDLow())
{
//you cannot bid your own auction:
SendAuctionCommandResult(0, AUCTION_PLACE_BID, CANNOT_BID_YOUR_AUCTION_ERROR);
@@ -287,7 +291,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
// impossible have online own another character (use this for speedup check in case online owner)
Player* auction_owner = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(auction->owner, 0, HIGHGUID_PLAYER));
- if (!auction_owner && sObjectMgr->GetPlayerAccountIdByGUID(MAKE_NEW_GUID(auction->owner, 0, HIGHGUID_PLAYER)) == pl->GetSession()->GetAccountId())
+ if (!auction_owner && sObjectMgr->GetPlayerAccountIdByGUID(MAKE_NEW_GUID(auction->owner, 0, HIGHGUID_PLAYER)) == player->GetSession()->GetAccountId())
{
//you cannot bid your another character auction:
SendAuctionCommandResult(0, AUCTION_PLACE_BID, CANNOT_BID_YOUR_AUCTION_ERROR);
@@ -306,7 +310,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
return;
}
- if (!pl->HasEnoughMoney(price))
+ if (!player->HasEnoughMoney(price))
{
//you don't have enought money!, client tests!
//SendAuctionCommandResult(auction->auctionId, AUCTION_PLACE_BID, ???);
@@ -319,19 +323,19 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
{
if (auction->bidder > 0)
{
- if (auction->bidder == pl->GetGUIDLow())
- pl->ModifyMoney(-int32(price - auction->bid));
+ if (auction->bidder == player->GetGUIDLow())
+ player->ModifyMoney(-int32(price - auction->bid));
else
{
// mail to last bidder and return money
sAuctionMgr->SendAuctionOutbiddedMail(auction, price, GetPlayer(), trans);
- pl->ModifyMoney(-int32(price));
+ player->ModifyMoney(-int32(price));
}
}
else
- pl->ModifyMoney(-int32(price));
+ player->ModifyMoney(-int32(price));
- auction->bidder = pl->GetGUIDLow();
+ auction->bidder = player->GetGUIDLow();
auction->bid = price;
GetPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID, price);
@@ -342,15 +346,15 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
else
{
//buyout:
- if (pl->GetGUIDLow() == auction->bidder)
- pl->ModifyMoney(-int32(auction->buyout - auction->bid));
+ if (player->GetGUIDLow() == auction->bidder)
+ player->ModifyMoney(-int32(auction->buyout - auction->bid));
else
{
- pl->ModifyMoney(-int32(auction->buyout));
+ player->ModifyMoney(-int32(auction->buyout));
if (auction->bidder) //buyout for bidded auction ..
sAuctionMgr->SendAuctionOutbiddedMail(auction, auction->buyout, GetPlayer(), trans);
}
- auction->bidder = pl->GetGUIDLow();
+ auction->bidder = player->GetGUIDLow();
auction->bid = auction->buyout;
GetPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID, auction->buyout);
@@ -367,13 +371,15 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
sAuctionMgr->RemoveAItem(auction->item_guidlow);
auctionHouse->RemoveAuction(auction, item_template);
}
- pl->SaveInventoryAndGoldToDB(trans);
+ player->SaveInventoryAndGoldToDB(trans);
CharacterDatabase.CommitTransaction(trans);
}
//this void is called when auction_owner cancels his auction
void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_REMOVE_ITEM");
+
uint64 auctioneer;
uint32 auctionId;
recv_data >> auctioneer;
@@ -394,10 +400,10 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());
AuctionEntry* auction = auctionHouse->GetAuction(auctionId);
- Player* pl = GetPlayer();
+ Player* player = GetPlayer();
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- if (auction && auction->owner == pl->GetGUIDLow())
+ if (auction && auction->owner == player->GetGUIDLow())
{
Item* pItem = sAuctionMgr->GetAItem(auction->item_guidlow);
if (pItem)
@@ -405,11 +411,11 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
if (auction->bidder > 0) // If we have a bidder, we have to send him the money he paid
{
uint32 auctionCut = auction->GetAuctionCut();
- if (!pl->HasEnoughMoney(auctionCut)) //player doesn't have enough money, maybe message needed
+ if (!player->HasEnoughMoney(auctionCut)) //player doesn't have enough money, maybe message needed
return;
//some auctionBidderNotification would be needed, but don't know that parts..
sAuctionMgr->SendAuctionCancelledToBidderMail(auction, trans);
- pl->ModifyMoney(-int32(auctionCut));
+ player->ModifyMoney(-int32(auctionCut));
}
// Return the item by mail
std::ostringstream msgAuctionCanceledOwner;
@@ -418,7 +424,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
// item will deleted or added to received mail list
MailDraft(msgAuctionCanceledOwner.str(), "") // TODO: fix body
.AddItem(pItem)
- .SendMailTo(trans, pl, auction, MAIL_CHECK_MASK_COPIED);
+ .SendMailTo(trans, player, auction, MAIL_CHECK_MASK_COPIED);
}
else
{
@@ -431,7 +437,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
{
SendAuctionCommandResult(0, AUCTION_CANCEL, AUCTION_INTERNAL_ERROR);
//this code isn't possible ... maybe there should be assert
- sLog->outError("CHEATER : %u, he tried to cancel auction (id: %u) of another player, or auction is NULL", pl->GetGUIDLow(), auctionId);
+ sLog->outError("CHEATER : %u, he tried to cancel auction (id: %u) of another player, or auction is NULL", player->GetGUIDLow(), auctionId);
return;
}
@@ -440,7 +446,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
// Now remove the auction
- pl->SaveInventoryAndGoldToDB(trans);
+ player->SaveInventoryAndGoldToDB(trans);
auction->DeleteFromDB(trans);
CharacterDatabase.CommitTransaction(trans);
@@ -452,6 +458,8 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket & recv_data)
//called when player lists his bids
void WorldSession::HandleAuctionListBidderItems(WorldPacket & recv_data)
{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_LIST_BIDDER_ITEMS");
+
uint64 guid; //NPC guid
uint32 listfrom; //page of auctions
uint32 outbiddedCount; //count of outbidded auctions
@@ -469,6 +477,7 @@ void WorldSession::HandleAuctionListBidderItems(WorldPacket & recv_data)
if (!creature)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleAuctionListBidderItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)));
+ recv_data.rfinish();
return;
}
@@ -479,7 +488,7 @@ void WorldSession::HandleAuctionListBidderItems(WorldPacket & recv_data)
AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(creature->getFaction());
WorldPacket data(SMSG_AUCTION_BIDDER_LIST_RESULT, (4+4+4));
- Player* pl = GetPlayer();
+ Player* player = GetPlayer();
data << (uint32) 0; //add 0 as count
uint32 count = 0;
uint32 totalcount = 0;
@@ -496,7 +505,7 @@ void WorldSession::HandleAuctionListBidderItems(WorldPacket & recv_data)
}
}
- auctionHouse->BuildListBidderItems(data, pl, count, totalcount);
+ auctionHouse->BuildListBidderItems(data, player, count, totalcount);
data.put<uint32>(0, count); // add count to placeholder
data << totalcount;
data << (uint32)300; //unk 2.3.0
@@ -506,6 +515,8 @@ void WorldSession::HandleAuctionListBidderItems(WorldPacket & recv_data)
//this void sends player info about his auctions
void WorldSession::HandleAuctionListOwnerItems(WorldPacket & recv_data)
{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_LIST_OWNER_ITEMS");
+
uint32 listfrom;
uint64 guid;
@@ -541,6 +552,8 @@ void WorldSession::HandleAuctionListOwnerItems(WorldPacket & recv_data)
//this void is called when player clicks on search button
void WorldSession::HandleAuctionListItems(WorldPacket & recv_data)
{
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_LIST_ITEMS");
+
std::string searchedname;
uint8 levelmin, levelmax, usable;
uint32 listfrom, auctionSlotID, auctionMainCategory, auctionSubCategory, quality;
@@ -606,7 +619,7 @@ void WorldSession::HandleAuctionListItems(WorldPacket & recv_data)
void WorldSession::HandleAuctionListPendingSales(WorldPacket & recv_data)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_AUCTION_LIST_PENDING_SALES");
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_AUCTION_LIST_PENDING_SALES");
recv_data.read_skip<uint64>();
diff --git a/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp b/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp
index d85f3e24aff..9a3e756dda3 100755
--- a/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp b/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp
index 95327a71374..d1aa0021a75 100755
--- a/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/CalendarHandler.cpp b/src/server/game/Server/Protocol/Handlers/CalendarHandler.cpp
index 8f32ac84cb8..be547c84b19 100755
--- a/src/server/game/Server/Protocol/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/CalendarHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -25,12 +25,14 @@
#include "Opcodes.h"
#include "Player.h"
-void WorldSession::HandleCalendarGetCalendar(WorldPacket & /*recv_data*/)
+void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recv_data*/)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_GET_CALENDAR"); // empty
+ uint64 guid = _player->GetGUID();
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_CALENDAR_GET_CALENDAR [" UI64FMTD "]", guid);
- time_t cur_time = time(NULL);
+ time_t cur_time = time_t(time(NULL));
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "SMSG_CALENDAR_SEND_CALENDAR [" UI64FMTD "]", guid);
WorldPacket data(SMSG_CALENDAR_SEND_CALENDAR, 4+4*0+4+4*0+4+4);
data << uint32(0); // invite count
@@ -58,48 +60,52 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket & /*recv_data*/)
}
*/
- data << uint32(0); // unk
- data << uint32(secsToTimeBitFields(cur_time)); // current time
+ data << uint32(cur_time); // server time
+ data << uint32(secsToTimeBitFields(cur_time)); // server time
uint32 counter = 0;
size_t p_counter = data.wpos();
- data << uint32(counter); // instance save count
+ data << uint32(counter); // instance save count
- for (int i = 0; i < MAX_DIFFICULTY; ++i)
- {
+ for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
for (Player::BoundInstancesMap::const_iterator itr = _player->m_boundInstances[i].begin(); itr != _player->m_boundInstances[i].end(); ++itr)
- {
if (itr->second.perm)
{
- InstanceSave* save = itr->second.save;
+ InstanceSave const* save = itr->second.save;
data << uint32(save->GetMapId());
data << uint32(save->GetDifficulty());
data << uint32(save->GetResetTime() - cur_time);
- data << uint64(save->GetInstanceId()); // instance save id as unique instance copy id
+ data << uint64(save->GetInstanceId()); // instance save id as unique instance copy id
++counter;
}
- }
- }
data.put<uint32>(p_counter, counter);
- data << uint32(1135753200); // unk (28.12.2005 12:00)
+ data << uint32(1135753200); // unk (28.12.2005 07:00)
counter = 0;
p_counter = data.wpos();
- data << uint32(counter); // raid reset count
+ data << uint32(counter); // raid reset count
+ std::set<uint32> sentMaps;
+
ResetTimeByMapDifficultyMap const& resets = sInstanceSaveMgr->GetResetTimeMap();
for (ResetTimeByMapDifficultyMap::const_iterator itr = resets.begin(); itr != resets.end(); ++itr)
{
- uint32 mapid = PAIR32_LOPART(itr->first);
- MapEntry const* mapEnt = sMapStore.LookupEntry(mapid);
- if (!mapEnt || !mapEnt->IsRaid())
+ uint32 mapId = PAIR32_LOPART(itr->first);
+
+ if (sentMaps.find(mapId) != sentMaps.end())
+ continue;
+
+ MapEntry const* mapEntry = sMapStore.LookupEntry(mapId);
+ if (!mapEntry || !mapEntry->IsRaid())
continue;
- data << uint32(mapid);
+ sentMaps.insert(mapId);
+
+ data << uint32(mapId);
data << uint32(itr->second - cur_time);
- data << uint32(mapEnt->unk_time);
+ data << uint32(mapEntry->unk_time);
++counter;
}
@@ -126,17 +132,16 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket & /*recv_data*/)
}
*/
- sLog->outDebug(LOG_FILTER_NETWORKIO, "Sending calendar");
SendPacket(&data);
}
-void WorldSession::HandleCalendarGetEvent(WorldPacket &recv_data)
+void WorldSession::HandleCalendarGetEvent(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_GET_EVENT");
recv_data.read_skip<uint64>(); // unk
}
-void WorldSession::HandleCalendarGuildFilter(WorldPacket &recv_data)
+void WorldSession::HandleCalendarGuildFilter(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_GUILD_FILTER");
recv_data.read_skip<uint32>(); // unk1
@@ -144,13 +149,13 @@ void WorldSession::HandleCalendarGuildFilter(WorldPacket &recv_data)
recv_data.read_skip<uint32>(); // unk3
}
-void WorldSession::HandleCalendarArenaTeam(WorldPacket &recv_data)
+void WorldSession::HandleCalendarArenaTeam(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_ARENA_TEAM");
recv_data.read_skip<uint32>(); // unk
}
-void WorldSession::HandleCalendarAddEvent(WorldPacket &recv_data)
+void WorldSession::HandleCalendarAddEvent(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_ADD_EVENT");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -185,7 +190,7 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket &recv_data)
//}
}
-void WorldSession::HandleCalendarUpdateEvent(WorldPacket &recv_data)
+void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_UPDATE_EVENT");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -203,7 +208,7 @@ void WorldSession::HandleCalendarUpdateEvent(WorldPacket &recv_data)
//recv_data >> uint32
}
-void WorldSession::HandleCalendarRemoveEvent(WorldPacket &recv_data)
+void WorldSession::HandleCalendarRemoveEvent(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_REMOVE_EVENT");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -214,7 +219,7 @@ void WorldSession::HandleCalendarRemoveEvent(WorldPacket &recv_data)
}
-void WorldSession::HandleCalendarCopyEvent(WorldPacket &recv_data)
+void WorldSession::HandleCalendarCopyEvent(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_COPY_EVENT");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -225,7 +230,7 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket &recv_data)
}
-void WorldSession::HandleCalendarEventInvite(WorldPacket &recv_data)
+void WorldSession::HandleCalendarEventInvite(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_EVENT_INVITE");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -238,7 +243,7 @@ void WorldSession::HandleCalendarEventInvite(WorldPacket &recv_data)
}
-void WorldSession::HandleCalendarEventRsvp(WorldPacket &recv_data)
+void WorldSession::HandleCalendarEventRsvp(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_EVENT_RSVP");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -249,7 +254,7 @@ void WorldSession::HandleCalendarEventRsvp(WorldPacket &recv_data)
}
-void WorldSession::HandleCalendarEventRemoveInvite(WorldPacket &recv_data)
+void WorldSession::HandleCalendarEventRemoveInvite(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_EVENT_REMOVE_INVITE");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -260,7 +265,7 @@ void WorldSession::HandleCalendarEventRemoveInvite(WorldPacket &recv_data)
//recv_data >> uint64
}
-void WorldSession::HandleCalendarEventStatus(WorldPacket &recv_data)
+void WorldSession::HandleCalendarEventStatus(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_EVENT_STATUS");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -272,7 +277,7 @@ void WorldSession::HandleCalendarEventStatus(WorldPacket &recv_data)
//recv_data >> uint32
}
-void WorldSession::HandleCalendarEventModeratorStatus(WorldPacket &recv_data)
+void WorldSession::HandleCalendarEventModeratorStatus(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_EVENT_MODERATOR_STATUS");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -284,7 +289,7 @@ void WorldSession::HandleCalendarEventModeratorStatus(WorldPacket &recv_data)
//recv_data >> uint32
}
-void WorldSession::HandleCalendarComplain(WorldPacket &recv_data)
+void WorldSession::HandleCalendarComplain(WorldPacket& recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_COMPLAIN");
recv_data.rfinish(); // set to end to avoid warnings spam
@@ -294,7 +299,7 @@ void WorldSession::HandleCalendarComplain(WorldPacket &recv_data)
//recv_data >> uint64
}
-void WorldSession::HandleCalendarGetNumPending(WorldPacket & /*recv_data*/)
+void WorldSession::HandleCalendarGetNumPending(WorldPacket& /*recv_data*/)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_CALENDAR_GET_NUM_PENDING"); // empty
diff --git a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp
index d08e7d9f930..9b749fa8005 100755
--- a/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ChannelHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp
index a468d05bcdf..47af8c9bc1e 100755..100644
--- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -65,138 +65,142 @@ bool LoginQueryHolder::Initialize()
uint32 lowGuid = GUID_LOPART(m_guid);
PreparedStatement* stmt = NULL;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADFROM, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_GROUP);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADGROUP, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_BOUNDINSTANCES);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_INSTANCE);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADBOUNDINSTANCES, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_AURAS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_AURAS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADAURAS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_SPELLS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SPELL);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADSPELLS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_QUESTSTATUS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_QUESTSTATUS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_DAILYQUESTSTATUS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_DAILYQUESTSTATUS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADDAILYQUESTSTATUS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_WEKLYQUESTSTATUS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS);
stmt->setUInt32(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADWEKLYQUESTSTATUS, stmt);
+ res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADWEEKLYQUESTSTATUS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_REPUTATION);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS);
+ stmt->setUInt32(0, lowGuid);
+ res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADSEASONALQUESTSTATUS, stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_REPUTATION);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADREPUTATION, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_INVENTORY);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_INVENTORY);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADINVENTORY, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ACTIONS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_ACTIONS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADACTIONS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_MAILCOUNT);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_MAILCOUNT);
stmt->setUInt32(0, lowGuid);
stmt->setUInt64(1, uint64(time(NULL)));
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADMAILCOUNT, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_MAILDATE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_MAILDATE);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADMAILDATE, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_SOCIALLIST);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SOCIALLIST);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADSOCIALLIST, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_HOMEBIND);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_HOMEBIND);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADHOMEBIND, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_SPELLCOOLDOWNS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADSPELLCOOLDOWNS, stmt);
if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED))
{
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_DECLINEDNAMES);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADDECLINEDNAMES, stmt);
}
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_GUILD);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADGUILD, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ARENAINFO);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_ARENAINFO);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADARENAINFO, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ACHIEVEMENTS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_ACHIEVEMENTS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADACHIEVEMENTS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_CRITERIAPROGRESS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_CRITERIAPROGRESS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_EQUIPMENTSETS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_EQUIPMENTSETS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_BGDATA);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_BGDATA);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADBGDATA, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_GLYPHS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GLYPHS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADGLYPHS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_TALENTS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_TALENTS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADTALENTS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_ACCOUNT_DATA);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PLAYER_ACCOUNT_DATA);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADACCOUNTDATA, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_SKILLS);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SKILLS);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADSKILLS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_RANDOMBG);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_RANDOMBG);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADRANDOMBG, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_BANNED);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_BANNED);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADBANNED, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PLAYER_QUESTSTATUSREW);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_QUESTSTATUSREW);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADQUESTSTATUSREW, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_ACCOUNT_INSTANCELOCKTIMES);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES);
stmt->setUInt32(0, m_accountId);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOADINSTANCELOCKTIMES, stmt);
return res;
}
-void WorldSession::HandleCharEnum(QueryResult result)
+void WorldSession::HandleCharEnum(PreparedQueryResult result)
{
WorldPacket data(SMSG_CHAR_ENUM, 100); // we guess size
@@ -232,35 +236,16 @@ void WorldSession::HandleCharEnumOpcode(WorldPacket & /*recv_data*/)
CharacterDatabase.Execute(stmt);
/// get all the data necessary for loading all characters (along with their pets) on the account
- _charEnumCallback =
- CharacterDatabase.AsyncPQuery(
- !sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) ?
- // ------- Query Without Declined Names --------
- // 0 1 2 3 4 5 6 7
- "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, "
- // 8 9 10 11 12 13 14
- "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, guild_member.guildid, characters.playerFlags, "
- // 15 16 17 18 19 20
- "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, character_banned.guid "
- "FROM characters LEFT JOIN character_pet ON characters.guid=character_pet.owner AND character_pet.slot='%u' "
- "LEFT JOIN guild_member ON characters.guid = guild_member.guid "
- "LEFT JOIN character_banned ON characters.guid = character_banned.guid AND character_banned.active = 1 "
- "WHERE characters.account = '%u' ORDER BY characters.guid"
- :
- // --------- Query With Declined Names ---------
- // 0 1 2 3 4 5 6 7
- "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.playerBytes, characters.playerBytes2, characters.level, "
- // 8 9 10 11 12 13 14
- "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, guild_member.guildid, characters.playerFlags, "
- // 15 16 17 18 19 20 21
- "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, character_banned.guid, character_declinedname.genitive "
- "FROM characters LEFT JOIN character_pet ON characters.guid = character_pet.owner AND character_pet.slot='%u' "
- "LEFT JOIN character_declinedname ON characters.guid = character_declinedname.guid "
- "LEFT JOIN guild_member ON characters.guid = guild_member.guid "
- "LEFT JOIN character_banned ON characters.guid = character_banned.guid AND character_banned.active = 1 "
- "WHERE characters.account = '%u' ORDER BY characters.guid",
- PET_SAVE_AS_CURRENT, GetAccountId()
- );
+
+ if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED))
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ENUM_DECLINED_NAME);
+ else
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ENUM);
+
+ stmt->setUInt8(0, PET_SAVE_AS_CURRENT);
+ stmt->setUInt32(1, GetAccountId());
+
+ _charEnumCallback = CharacterDatabase.AsyncQuery(stmt);
}
void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data)
@@ -402,7 +387,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data)
delete _charCreateCallback.GetParam(); // Delete existing if any, to make the callback chain reset to stage 0
_charCreateCallback.SetParam(new CharacterCreateInfo(name, race_, class_, gender, skin, face, hairStyle, hairColor, facialHair, outfitId, recv_data));
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_CHECK_NAME);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME);
stmt->setString(0, name);
_charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
@@ -413,7 +398,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
This is much more efficient than synchronous requests on packet handler, and much less DoS prone.
It also prevents data syncrhonisation errors.
*/
- switch (createInfo->Stage)
+ switch (_charCreateCallback.GetStage())
{
case 0:
{
@@ -423,20 +408,18 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_NAME_IN_USE);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
ASSERT(_charCreateCallback.GetParam() == createInfo);
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_SUM_REALMCHARS);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_SUM_REALM_CHARACTERS);
stmt->setUInt32(0, GetAccountId());
_charCreateCallback.FreeResult();
_charCreateCallback.SetFutureResult(LoginDatabase.AsyncQuery(stmt));
-
- createInfo->Stage++;
+ _charCreateCallback.NextStage();
}
break;
case 1:
@@ -457,21 +440,19 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_ACCOUNT_LIMIT);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
ASSERT(_charCreateCallback.GetParam() == createInfo);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_SUM_CHARS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_SUM_CHARS);
stmt->setUInt32(0, GetAccountId());
_charCreateCallback.FreeResult();
_charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
-
- createInfo->Stage++;
+ _charCreateCallback.NextStage();
}
break;
case 2:
@@ -487,8 +468,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_SERVER_LIMIT);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
}
@@ -500,15 +480,15 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
if (!allowTwoSideAccounts || skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_CHAR_CREATE_INFO);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_CREATE_INFO);
stmt->setUInt32(0, GetAccountId());
stmt->setUInt32(1, (skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT) ? 10 : 1);
_charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
- createInfo->Stage++;
+ _charCreateCallback.NextStage();
return;
}
- createInfo->Stage++;
+ _charCreateCallback.NextStage();
HandleCharCreateCallback(PreparedQueryResult(NULL), createInfo); // Will jump to case 3
}
break;
@@ -542,8 +522,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
}
@@ -570,8 +549,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_PVP_TEAMS_VIOLATION);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
}
@@ -603,8 +581,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
}
@@ -625,8 +602,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_LEVEL_REQUIREMENT);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
@@ -647,8 +623,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
data << uint8(CHAR_CREATE_ERROR);
SendPacket(&data);
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
return;
}
@@ -658,17 +633,17 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
newChar.SetAtLoginFlag(AT_LOGIN_FIRST); // First login
// Player created, save it now
- newChar.SaveToDB();
+ newChar.SaveToDB(true);
createInfo->CharCount += 1;
SQLTransaction trans = LoginDatabase.BeginTransaction();
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALMCHARACTERS);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS);
stmt->setUInt32(0, GetAccountId());
stmt->setUInt32(1, realmID);
trans->Append(stmt);
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_ADD_REALMCHARACTERS);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS);
stmt->setUInt32(0, createInfo->CharCount);
stmt->setUInt32(1, GetAccountId());
stmt->setUInt32(2, realmID);
@@ -689,8 +664,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
sWorld->AddCharacterNameData(newChar.GetGUIDLow(), std::string(newChar.GetName()), newChar.getGender(), newChar.getRace(), newChar.getClass());
delete createInfo;
- _charCreateCallback.SetParam(NULL);
- _charCreateCallback.FreeResult();
+ _charCreateCallback.Reset();
}
break;
}
@@ -791,7 +765,7 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recv_data)
_charLoginCallback = CharacterDatabase.DelayQueryHolder((SQLQueryHolder*)holder);
}
-void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
+void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
{
uint64 playerGuid = holder->GetGuid();
@@ -920,7 +894,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
}
}
- if (!pCurrChar->GetMap()->AddToMap(pCurrChar) || !pCurrChar->CheckInstanceLoginValid())
+ if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar) || !pCurrChar->CheckInstanceLoginValid())
{
AreaTrigger const* at = sObjectMgr->GetGoBackTrigger(pCurrChar->GetMapId());
if (at)
@@ -934,8 +908,18 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
pCurrChar->SendInitialPacketsAfterAddToMap();
- CharacterDatabase.PExecute("UPDATE characters SET online = 1 WHERE guid = '%u'", pCurrChar->GetGUIDLow());
- LoginDatabase.PExecute("UPDATE account SET online = 1 WHERE id = '%u'", GetAccountId());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ONLINE);
+
+ stmt->setUInt32(0, pCurrChar->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
+
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_ONLINE);
+
+ stmt->setUInt32(0, GetAccountId());
+
+ LoginDatabase.Execute(stmt);
+
pCurrChar->SetInGameTime(getMSTime());
// announce group about member online (must be after add to player list to receive announce to self)
@@ -997,7 +981,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST);
// show time before shutdown if shutdown planned.
- if (sWorld->IsShutdowning())
+ if (sWorld->IsShuttingDown())
sWorld->ShutdownMsg(true, pCurrChar);
if (sWorld->getBoolConfig(CONFIG_ALL_TAXI_PATHS))
@@ -1085,28 +1069,30 @@ void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket & recv_data)
_player->GetReputationMgr().SetInactive(replistid, inactive);
}
-void WorldSession::HandleShowingHelmOpcode(WorldPacket & /*recv_data*/)
+void WorldSession::HandleShowingHelmOpcode(WorldPacket& recv_data)
{
sLog->outStaticDebug("CMSG_SHOWING_HELM for %s", _player->GetName());
+ recv_data.read_skip<uint8>(); // unknown, bool?
_player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM);
}
-void WorldSession::HandleShowingCloakOpcode(WorldPacket & /*recv_data*/)
+void WorldSession::HandleShowingCloakOpcode(WorldPacket& recv_data)
{
sLog->outStaticDebug("CMSG_SHOWING_CLOAK for %s", _player->GetName());
+ recv_data.read_skip<uint8>(); // unknown, bool?
_player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK);
}
void WorldSession::HandleCharRenameOpcode(WorldPacket& recv_data)
{
uint64 guid;
- std::string newname;
+ std::string newName;
recv_data >> guid;
- recv_data >> newname;
+ recv_data >> newName;
// prevent character rename to invalid name
- if (!normalizePlayerName(newname))
+ if (!normalizePlayerName(newName))
{
WorldPacket data(SMSG_CHAR_RENAME, 1);
data << uint8(CHAR_NAME_NO_NAME);
@@ -1114,7 +1100,7 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recv_data)
return;
}
- uint8 res = ObjectMgr::CheckPlayerName(newname, true);
+ uint8 res = ObjectMgr::CheckPlayerName(newName, true);
if (res != CHAR_NAME_SUCCESS)
{
WorldPacket data(SMSG_CHAR_RENAME, 1);
@@ -1124,7 +1110,7 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recv_data)
}
// check name limitations
- if (AccountMgr::IsPlayerAccount(GetSecurity()) && sObjectMgr->IsReservedName(newname))
+ if (AccountMgr::IsPlayerAccount(GetSecurity()) && sObjectMgr->IsReservedName(newName))
{
WorldPacket data(SMSG_CHAR_RENAME, 1);
data << uint8(CHAR_NAME_RESERVED);
@@ -1132,21 +1118,22 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recv_data)
return;
}
- std::string escaped_newname = newname;
- CharacterDatabase.EscapeString(escaped_newname);
-
- // make sure that the character belongs to the current account, that rename at login is enabled
+ // Ensure that the character belongs to the current account, that rename at login is enabled
// and that there is no character with the desired new name
- _charRenameCallback.SetParam(newname);
- _charRenameCallback.SetFutureResult(
- CharacterDatabase.AsyncPQuery(
- "SELECT guid, name FROM characters WHERE guid = %d AND account = %d AND (at_login & %d) = %d AND NOT EXISTS (SELECT NULL FROM characters WHERE name = '%s')",
- GUID_LOPART(guid), GetAccountId(), AT_LOGIN_RENAME, AT_LOGIN_RENAME, escaped_newname.c_str()
- )
- );
+ _charRenameCallback.SetParam(newName);
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_FREE_NAME);
+
+ stmt->setUInt32(0, GUID_LOPART(guid));
+ stmt->setUInt32(1, GetAccountId());
+ stmt->setUInt16(2, AT_LOGIN_RENAME);
+ stmt->setUInt16(3, AT_LOGIN_RENAME);
+ stmt->setString(4, newName);
+
+ _charRenameCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
-void WorldSession::HandleChangePlayerNameOpcodeCallBack(QueryResult result, std::string newname)
+void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult result, std::string newName)
{
if (!result)
{
@@ -1156,20 +1143,38 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(QueryResult result, std:
return;
}
- uint32 guidLow = result->Fetch()[0].GetUInt32();
+ Field* fields = result->Fetch();
+
+ uint32 guidLow = fields[0].GetUInt32();
+ std::string oldName = fields[1].GetString();
+
uint64 guid = MAKE_NEW_GUID(guidLow, 0, HIGHGUID_PLAYER);
- std::string oldname = result->Fetch()[1].GetString();
- CharacterDatabase.PExecute("UPDATE characters set name = '%s', at_login = at_login & ~ %u WHERE guid ='%u'", newname.c_str(), uint32(AT_LOGIN_RENAME), guidLow);
- CharacterDatabase.PExecute("DELETE FROM character_declinedname WHERE guid ='%u'", guidLow);
+ // Update name and at_login flag in the db
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_NAME);
+
+ stmt->setString(0, newName);
+ stmt->setUInt16(1, AT_LOGIN_RENAME);
+ stmt->setUInt32(2, guidLow);
+
+ CharacterDatabase.Execute(stmt);
+
+ // Removed declined name from db
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_DECLINED_NAME);
+
+ stmt->setUInt32(0, guidLow);
+
+ CharacterDatabase.Execute(stmt);
- sLog->outChar("Account: %d (IP: %s) Character:[%s] (guid:%u) Changed name to: %s", GetAccountId(), GetRemoteAddress().c_str(), oldname.c_str(), guidLow, newname.c_str());
+ sLog->outChar("Account: %d (IP: %s) Character:[%s] (guid:%u) Changed name to: %s", GetAccountId(), GetRemoteAddress().c_str(), oldName.c_str(), guidLow, newName.c_str());
- WorldPacket data(SMSG_CHAR_RENAME, 1+8+(newname.size()+1));
+ WorldPacket data(SMSG_CHAR_RENAME, 1+8+(newName.size()+1));
data << uint8(RESPONSE_SUCCESS);
data << uint64(guid);
- data << newname;
+ data << newName;
SendPacket(&data);
+
+ sWorld->UpdateCharacterNameData(guidLow, newName);
}
void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recv_data)
@@ -1339,10 +1344,10 @@ void WorldSession::HandleRemoveGlyph(WorldPacket & recv_data)
void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
{
uint64 guid;
- std::string newname;
+ std::string newName;
recv_data >> guid;
- recv_data >> newname;
+ recv_data >> newName;
uint8 gender, skin, face, hairStyle, hairColor, facialHair;
recv_data >> gender >> skin >> hairColor >> hairStyle >> facialHair >> face;
@@ -1368,7 +1373,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
}
// prevent character rename to invalid name
- if (!normalizePlayerName(newname))
+ if (!normalizePlayerName(newName))
{
WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);
data << uint8(CHAR_NAME_NO_NAME);
@@ -1376,7 +1381,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
return;
}
- uint8 res = ObjectMgr::CheckPlayerName(newname, true);
+ uint8 res = ObjectMgr::CheckPlayerName(newName, true);
if (res != CHAR_NAME_SUCCESS)
{
WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);
@@ -1386,7 +1391,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
}
// check name limitations
- if (AccountMgr::IsPlayerAccount(GetSecurity()) && sObjectMgr->IsReservedName(newname))
+ if (AccountMgr::IsPlayerAccount(GetSecurity()) && sObjectMgr->IsReservedName(newName))
{
WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1);
data << uint8(CHAR_NAME_RESERVED);
@@ -1395,7 +1400,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
}
// character with this name already exist
- if (uint64 newguid = sObjectMgr->GetPlayerGUIDByName(newname))
+ if (uint64 newguid = sObjectMgr->GetPlayerGUIDByName(newName))
{
if (newguid != guid)
{
@@ -1406,22 +1411,34 @@ void WorldSession::HandleCharCustomize(WorldPacket& recv_data)
}
}
- CharacterDatabase.EscapeString(newname);
- if (QueryResult result = CharacterDatabase.PQuery("SELECT name FROM characters WHERE guid ='%u'", GUID_LOPART(guid)))
+ if (QueryResult oldNameResult = CharacterDatabase.PQuery("SELECT name FROM characters WHERE guid ='%u'", GUID_LOPART(guid)))
{
- std::string oldname = result->Fetch()[0].GetString();
+ std::string oldname = oldNameResult->Fetch()[0].GetString();
std::string IP_str = GetRemoteAddress();
- sLog->outChar("Account: %d (IP: %s), Character[%s] (guid:%u) Customized to: %s", GetAccountId(), IP_str.c_str(), oldname.c_str(), GUID_LOPART(guid), newname.c_str());
+ sLog->outChar("Account: %d (IP: %s), Character[%s] (guid:%u) Customized to: %s", GetAccountId(), IP_str.c_str(), oldname.c_str(), GUID_LOPART(guid), newName.c_str());
}
Player::Customize(guid, gender, skin, face, hairStyle, hairColor, facialHair);
- CharacterDatabase.PExecute("UPDATE characters set name = '%s', at_login = at_login & ~ %u WHERE guid ='%u'", newname.c_str(), uint32(AT_LOGIN_CUSTOMIZE), GUID_LOPART(guid));
- CharacterDatabase.PExecute("DELETE FROM character_declinedname WHERE guid ='%u'", GUID_LOPART(guid));
- sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newname, gender);
- WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1+8+(newname.size()+1)+6);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_NAME_AT_LOGIN);
+
+ stmt->setString(0, newName);
+ stmt->setUInt16(1, uint16(AT_LOGIN_CUSTOMIZE));
+ stmt->setUInt32(2, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_DECLINED_NAME);
+
+ stmt->setUInt32(0, GUID_LOPART(guid));
+
+ CharacterDatabase.Execute(stmt);
+
+ sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newName, gender);
+
+ WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1+8+(newName.size()+1)+6);
data << uint8(RESPONSE_SUCCESS);
data << uint64(guid);
- data << newname;
+ data << newName;
data << uint8(gender);
data << uint8(skin);
data << uint8(face);
@@ -1634,7 +1651,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recv_data)
SQLTransaction trans = CharacterDatabase.BeginTransaction();
trans->PAppend("UPDATE `characters` SET name='%s', race='%u', at_login=at_login & ~ %u WHERE guid='%u'", newname.c_str(), race, used_loginFlag, lowGuid);
trans->PAppend("DELETE FROM character_declinedname WHERE guid ='%u'", lowGuid);
- sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newname, gender, race);
+ sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newname, gender, race);
BattlegroundTeamId team = BG_TEAM_ALLIANCE;
@@ -1801,7 +1818,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recv_data)
stmt->setUInt32(0, lowGuid);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_PLAYER_HOMEBIND);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND);
stmt->setUInt32(0, lowGuid);
if (team == BG_TEAM_ALLIANCE)
{
diff --git a/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp b/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp
index 83d92df4f7a..3d689196256 100755
--- a/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -495,8 +495,8 @@ namespace Trinity
class EmoteChatBuilder
{
public:
- EmoteChatBuilder(Player const& pl, uint32 text_emote, uint32 emote_num, Unit const* target)
- : i_player(pl), i_text_emote(text_emote), i_emote_num(emote_num), i_target(target) {}
+ EmoteChatBuilder(Player const& player, uint32 text_emote, uint32 emote_num, Unit const* target)
+ : i_player(player), i_text_emote(text_emote), i_emote_num(emote_num), i_target(target) {}
void operator()(WorldPacket& data, LocaleConstant loc_idx)
{
@@ -566,10 +566,9 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket & recv_data)
Unit* unit = ObjectAccessor::GetUnit(*_player, guid);
- CellPair p = Trinity::ComputeCellPair(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY());
+ CellCoord p = Trinity::ComputeCellCoord(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY());
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::EmoteChatBuilder emote_builder(*GetPlayer(), text_emote, emoteNum, unit);
diff --git a/src/server/game/Server/Protocol/Handlers/CombatHandler.cpp b/src/server/game/Server/Protocol/Handlers/CombatHandler.cpp
index 31a09e830ff..6693cdfca27 100755
--- a/src/server/game/Server/Protocol/Handlers/CombatHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/CombatHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -23,13 +23,15 @@
#include "ObjectAccessor.h"
#include "CreatureAI.h"
#include "ObjectDefines.h"
+#include "Vehicle.h"
+#include "VehicleDefines.h"
-void WorldSession::HandleAttackSwingOpcode(WorldPacket & recv_data)
+void WorldSession::HandleAttackSwingOpcode(WorldPacket& recv_data)
{
uint64 guid;
recv_data >> guid;
- sLog->outStaticDebug("WORLD: Recvd CMSG_ATTACKSWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid));
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_ATTACKSWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid));
Unit* pEnemy = ObjectAccessor::GetUnit(*_player, guid);
@@ -47,6 +49,20 @@ void WorldSession::HandleAttackSwingOpcode(WorldPacket & recv_data)
return;
}
+ //! Client explicitly checks the following before sending CMSG_ATTACKSWING packet,
+ //! so we'll place the same check here. Note that it might be possible to reuse this snippet
+ //! in other places as well.
+ if (Vehicle* vehicle = _player->GetVehicle())
+ {
+ VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(_player);
+ ASSERT(seat);
+ if (!(seat->m_flags & VEHICLE_SEAT_FLAG_CAN_ATTACK))
+ {
+ SendAttackStop(pEnemy);
+ return;
+ }
+ }
+
_player->Attack(pEnemy, true);
}
@@ -55,7 +71,7 @@ void WorldSession::HandleAttackStopOpcode(WorldPacket & /*recv_data*/)
GetPlayer()->AttackStop();
}
-void WorldSession::HandleSetSheathedOpcode(WorldPacket & recv_data)
+void WorldSession::HandleSetSheathedOpcode(WorldPacket& recv_data)
{
uint32 sheathed;
recv_data >> sheathed;
@@ -79,4 +95,3 @@ void WorldSession::SendAttackStop(Unit const* enemy)
data << uint32(0); // unk, can be 1 also
SendPacket(&data);
}
-
diff --git a/src/server/game/Server/Protocol/Handlers/DuelHandler.cpp b/src/server/game/Server/Protocol/Handlers/DuelHandler.cpp
index 48bc305ce30..8afd9f3b978 100755
--- a/src/server/game/Server/Protocol/Handlers/DuelHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/DuelHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
{
uint64 guid;
- Player* pl;
+ Player* player;
Player* plTarget;
recvPacket >> guid;
@@ -35,21 +35,21 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket)
if (!GetPlayer()->duel) // ignore accept from duel-sender
return;
- pl = GetPlayer();
- plTarget = pl->duel->opponent;
+ player = GetPlayer();
+ plTarget = player->duel->opponent;
- if (pl == pl->duel->initiator || !plTarget || pl == plTarget || pl->duel->startTime != 0 || plTarget->duel->startTime != 0)
+ if (player == player->duel->initiator || !plTarget || player == plTarget || player->duel->startTime != 0 || plTarget->duel->startTime != 0)
return;
//sLog->outDebug(LOG_FILTER_PACKETIO, "WORLD: Received CMSG_DUEL_ACCEPTED");
- sLog->outStaticDebug("Player 1 is: %u (%s)", pl->GetGUIDLow(), pl->GetName());
+ sLog->outStaticDebug("Player 1 is: %u (%s)", player->GetGUIDLow(), player->GetName());
sLog->outStaticDebug("Player 2 is: %u (%s)", plTarget->GetGUIDLow(), plTarget->GetName());
time_t now = time(NULL);
- pl->duel->startTimer = now;
+ player->duel->startTimer = now;
plTarget->duel->startTimer = now;
- pl->SendDuelCountdown(3000);
+ player->SendDuelCountdown(3000);
plTarget->SendDuelCountdown(3000);
}
diff --git a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp
index 57a54bd440f..9343a5356b6 100755
--- a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -306,9 +306,9 @@ void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket & recv_data)
return;
}
- if (Player* plr = grp->GetInvited(guid))
+ if (Player* player = grp->GetInvited(guid))
{
- plr->UninviteFromGroup();
+ player->UninviteFromGroup();
return;
}
@@ -350,9 +350,9 @@ void WorldSession::HandleGroupUninviteOpcode(WorldPacket & recv_data)
return;
}
- if (Player* plr = grp->GetInvited(membername))
+ if (Player* player = grp->GetInvited(membername))
{
- plr->UninviteFromGroup();
+ player->UninviteFromGroup();
return;
}
@@ -850,10 +850,8 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke
if (mask & GROUP_UPDATE_FLAG_VEHICLE_SEAT)
{
- if (player->GetVehicle()){
- Vehicle* vv=player->GetVehicle();
- *data << (uint32) vv->GetVehicleInfo()->m_seatID[player->m_movementInfo.t_seat];
- }
+ if (Vehicle* veh = player->GetVehicle())
+ *data << (uint32) veh->GetVehicleInfo()->m_seatID[player->m_movementInfo.t_seat];
}
if (mask & GROUP_UPDATE_FLAG_PET_AURAS)
diff --git a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp
index 7e964b4faf6..d2a5f8014b8 100755
--- a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp b/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp
index eca466436be..47700fd088a 100755
--- a/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -938,6 +938,7 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPacket& recvPacket)
}
_player->RemoveItem(srcbag, srcslot, true);
+ _player->ItemRemovedQuestCheck(pItem->GetEntry(), pItem->GetCount());
_player->BankItem(dest, pItem, true);
}
@@ -965,6 +966,7 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket)
_player->RemoveItem(srcbag, srcslot, true);
_player->StoreItem(dest, pItem, true);
+ _player->ItemAddedQuestCheck(pItem->GetEntry(), pItem->GetCount());
}
else // moving from inventory to bank
{
@@ -1341,7 +1343,7 @@ void WorldSession::HandleSocketOpcode(WorldPacket& recv_data)
_player->ToggleMetaGemsActive(slot, true); //turn on all metagems (except for target item)
- itemTarget->SetSoulboundTradeable(NULL, _player, false); // clear tradeable flag
+ itemTarget->ClearSoulboundTradeable(_player); // clear tradeable flag
}
void WorldSession::HandleCancelTempEnchantmentOpcode(WorldPacket& recv_data)
diff --git a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp
index fab7bf841c2..52b4d4abbed 100755
--- a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -205,14 +205,14 @@ void WorldSession::HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& /*recv_data
ItemTemplate const* iProto = NULL;
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
{
- if (!qRew->RewItemId[i])
+ if (!qRew->RewardItemId[i])
continue;
- iProto = sObjectMgr->GetItemTemplate(qRew->RewItemId[i]);
+ iProto = sObjectMgr->GetItemTemplate(qRew->RewardItemId[i]);
- data << uint32(qRew->RewItemId[i]);
+ data << uint32(qRew->RewardItemId[i]);
data << uint32(iProto ? iProto->DisplayInfoID : 0);
- data << uint32(qRew->RewItemCount[i]);
+ data << uint32(qRew->RewardItemIdCount[i]);
}
}
}
@@ -419,8 +419,8 @@ void WorldSession::SendLfgRoleCheckUpdate(const LfgRoleCheck* pRoleCheck)
data << uint64(guid); // Guid
data << uint8(roles > 0); // Ready
data << uint32(roles); // Roles
- Player* plr = ObjectAccessor::FindPlayer(guid);
- data << uint8(plr ? plr->getLevel() : 0); // Level
+ Player* player = ObjectAccessor::FindPlayer(guid);
+ data << uint8(player ? player->getLevel() : 0); // Level
for (LfgRolesMap::const_iterator it = pRoleCheck->roles.begin(); it != pRoleCheck->roles.end(); ++it)
{
@@ -432,8 +432,8 @@ void WorldSession::SendLfgRoleCheckUpdate(const LfgRoleCheck* pRoleCheck)
data << uint64(guid); // Guid
data << uint8(roles > 0); // Ready
data << uint32(roles); // Roles
- plr = ObjectAccessor::FindPlayer(guid);
- data << uint8(plr ? plr->getLevel() : 0); // Level
+ player = ObjectAccessor::FindPlayer(guid);
+ data << uint8(player ? player->getLevel() : 0); // Level
}
}
SendPacket(&data);
@@ -495,14 +495,14 @@ void WorldSession::SendLfgPlayerReward(uint32 rdungeonEntry, uint32 sdungeonEntr
ItemTemplate const* iProto = NULL;
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
{
- if (!qRew->RewItemId[i])
+ if (!qRew->RewardItemId[i])
continue;
- iProto = sObjectMgr->GetItemTemplate(qRew->RewItemId[i]);
+ iProto = sObjectMgr->GetItemTemplate(qRew->RewardItemId[i]);
- data << uint32(qRew->RewItemId[i]);
+ data << uint32(qRew->RewardItemId[i]);
data << uint32(iProto ? iProto->DisplayInfoID : 0);
- data << uint32(qRew->RewItemCount[i]);
+ data << uint32(qRew->RewardItemIdCount[i]);
}
}
SendPacket(&data);
diff --git a/src/server/game/Server/Protocol/Handlers/LootHandler.cpp b/src/server/game/Server/Protocol/Handlers/LootHandler.cpp
index 83d3fad3b21..b17817e196f 100755
--- a/src/server/game/Server/Protocol/Handlers/LootHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/LootHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -489,10 +489,10 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket & recv_data)
}
// list of players allowed to receive this item in trade
- AllowedLooterSet* looters = item.GetAllowedLooters();
+ AllowedLooterSet looters = item.GetAllowedLooters();
// not move item from loot to target inventory
- Item* newitem = target->StoreNewItem(dest, item.itemid, true, item.randomPropertyId, (looters->size() > 1) ? looters : NULL);
+ Item* newitem = target->StoreNewItem(dest, item.itemid, true, item.randomPropertyId, looters);
target->SendNewItem(newitem, uint32(item.count), false, false, true);
target->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM, item.itemid, item.count);
target->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE, pLoot->loot_type, item.count);
diff --git a/src/server/game/Server/Protocol/Handlers/MailHandler.cpp b/src/server/game/Server/Protocol/Handlers/MailHandler.cpp
index 432a8bf3f6a..a8522bb2582 100755
--- a/src/server/game/Server/Protocol/Handlers/MailHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MailHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -75,9 +75,9 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
if (receiver.empty())
return;
- Player* pl = _player;
+ Player* player = _player;
- if (pl->getLevel() < sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ))
+ if (player->getLevel() < sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ))
{
SendNotification(GetTrinityString(LANG_MAIL_SENDER_REQ), sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ));
return;
@@ -90,16 +90,16 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
if (!rc)
{
sLog->outDetail("Player %u is sending mail to %s (GUID: not existed!) with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u",
- pl->GetGUIDLow(), receiver.c_str(), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);
+ player->GetGUIDLow(), receiver.c_str(), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND);
return;
}
- sLog->outDetail("Player %u is sending mail to %s (GUID: %u) with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u", pl->GetGUIDLow(), receiver.c_str(), GUID_LOPART(rc), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);
+ sLog->outDetail("Player %u is sending mail to %s (GUID: %u) with subject %s and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u", player->GetGUIDLow(), receiver.c_str(), GUID_LOPART(rc), subject.c_str(), body.c_str(), items_count, money, COD, unk1, unk2);
- if (pl->GetGUID() == rc)
+ if (player->GetGUID() == rc)
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANNOT_SEND_TO_SELF);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANNOT_SEND_TO_SELF);
return;
}
@@ -107,9 +107,9 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
uint32 reqmoney = cost + money;
- if (!pl->HasEnoughMoney(reqmoney))
+ if (!player->HasEnoughMoney(reqmoney))
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY);
return;
}
@@ -142,14 +142,14 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
//do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255..
if (mails_count > 100)
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_CAP_REACHED);
return;
}
// test the receiver's Faction... or all items are account bound
bool accountBound = items_count ? true : false;
for (uint8 i = 0; i < items_count; ++i)
{
- Item* item = pl->GetItemByGuid(itemGUIDs[i]);
+ Item* item = player->GetItemByGuid(itemGUIDs[i]);
if (item)
{
ItemTemplate const* itemProto = item->GetTemplate();
@@ -161,9 +161,9 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
}
}
- if (!accountBound && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL) && pl->GetTeam() != rc_team && AccountMgr::IsPlayerAccount(GetSecurity()))
+ if (!accountBound && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL) && player->GetTeam() != rc_team && AccountMgr::IsPlayerAccount(GetSecurity()))
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_YOUR_TEAM);
return;
}
@@ -183,56 +183,56 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
{
if (!itemGUIDs[i])
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);
return;
}
- Item* item = pl->GetItemByGuid(itemGUIDs[i]);
+ Item* item = player->GetItemByGuid(itemGUIDs[i]);
// prevent sending bag with items (cheat: can be placed in bag after adding equipped empty bag to mail)
if (!item)
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_MAIL_ATTACHMENT_INVALID);
return;
}
if (!item->CanBeTraded(true))
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);
return;
}
- if (item->IsBoundAccountWide() && item->IsSoulBound() && pl->GetSession()->GetAccountId() != rc_account)
+ if (item->IsBoundAccountWide() && item->IsSoulBound() && player->GetSession()->GetAccountId() != rc_account)
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS);
return;
}
if (item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION))
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM);
return;
}
if (COD && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD);
return;
}
if (item->IsNotEmptyBag())
{
- pl->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS);
+ player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS);
return;
}
items[i] = item;
}
- pl->SendMailResult(0, MAIL_SEND, MAIL_OK);
+ player->SendMailResult(0, MAIL_SEND, MAIL_OK);
- pl->ModifyMoney(-int32(reqmoney));
- pl->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);
+ player->ModifyMoney(-int32(reqmoney));
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL, cost);
bool needItemDelay = false;
@@ -254,7 +254,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
}
item->SetNotRefundable(GetPlayer()); // makes the item no longer refundable
- pl->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);
+ player->MoveItemFromInventory(items[i]->GetBagSlot(), item->GetSlot(), true);
item->DeleteFromInventoryDB(trans); // deletes item from character's inventory
item->SetOwnerGUID(rc);
@@ -264,7 +264,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
}
// if item send to character at another account, then apply item delivery delay
- needItemDelay = pl->GetSession()->GetAccountId() != rc_account;
+ needItemDelay = player->GetSession()->GetAccountId() != rc_account;
}
if (money > 0 && !AccountMgr::IsPlayerAccount(GetSecurity()) && sWorld->getBoolConfig(CONFIG_GM_LOG_TRADE))
@@ -281,9 +281,9 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data)
draft
.AddMoney(money)
.AddCOD(COD)
- .SendMailTo(trans, MailReceiver(receive, GUID_LOPART(rc)), MailSender(pl), body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);
+ .SendMailTo(trans, MailReceiver(receive, GUID_LOPART(rc)), MailSender(player), body.empty() ? MAIL_CHECK_MASK_COPIED : MAIL_CHECK_MASK_HAS_BODY, deliver_delay);
- pl->SaveInventoryAndGoldToDB(trans);
+ player->SaveInventoryAndGoldToDB(trans);
CharacterDatabase.CommitTransaction(trans);
}
@@ -298,14 +298,14 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket & recv_data)
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
- Player* pl = _player;
- Mail* m = pl->GetMail(mailId);
+ Player* player = _player;
+ Mail* m = player->GetMail(mailId);
if (m)
{
- if (pl->unReadMails)
- --pl->unReadMails;
+ if (player->unReadMails)
+ --player->unReadMails;
m->checked = m->checked | MAIL_CHECK_MASK_READ;
- pl->m_mailsUpdated = true;
+ player->m_mailsUpdated = true;
m->state = MAIL_STATE_CHANGED;
}
}
@@ -323,20 +323,20 @@ void WorldSession::HandleMailDelete(WorldPacket & recv_data)
return;
Mail* m = _player->GetMail(mailId);
- Player* pl = _player;
- pl->m_mailsUpdated = true;
+ Player* player = _player;
+ player->m_mailsUpdated = true;
if (m)
{
// delete shouldn't show up for COD mails
if (m->COD)
{
- pl->SendMailResult(mailId, MAIL_DELETED, MAIL_ERR_INTERNAL_ERROR);
+ player->SendMailResult(mailId, MAIL_DELETED, MAIL_ERR_INTERNAL_ERROR);
return;
}
m->state = MAIL_STATE_DELETED;
}
- pl->SendMailResult(mailId, MAIL_DELETED, MAIL_OK);
+ player->SendMailResult(mailId, MAIL_DELETED, MAIL_OK);
}
void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data)
@@ -350,11 +350,11 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data)
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
- Player* pl = _player;
- Mail* m = pl->GetMail(mailId);
+ Player* player = _player;
+ Mail* m = player->GetMail(mailId);
if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
{
- pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_ERR_INTERNAL_ERROR);
+ player->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_ERR_INTERNAL_ERROR);
return;
}
//we can return mail now
@@ -362,7 +362,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data)
SQLTransaction trans = CharacterDatabase.BeginTransaction();
trans->PAppend("DELETE FROM mail WHERE id = '%u'", mailId); // needed?
trans->PAppend("DELETE FROM mail_items WHERE mail_id = '%u'", mailId);
- pl->RemoveMail(mailId);
+ player->RemoveMail(mailId);
// only return mail if the player exists (and delete if not existing)
if (m->messageType == MAIL_NORMAL && m->sender)
@@ -375,7 +375,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data)
{
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
{
- Item* item = pl->GetMItem(itr2->item_guid);
+ Item* item = player->GetMItem(itr2->item_guid);
if (item)
draft.AddItem(item);
else
@@ -383,7 +383,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data)
//WTF?
}
- pl->RemoveMItem(itr2->item_guid);
+ player->RemoveMItem(itr2->item_guid);
}
}
draft.AddMoney(m->money).SendReturnToSender(GetAccountId(), m->receiver, m->sender, trans);
@@ -392,7 +392,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data)
CharacterDatabase.CommitTransaction(trans);
delete m; //we can deallocate old mail
- pl->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK);
+ player->SendMailResult(mailId, MAIL_RETURNED_TO_SENDER, MAIL_OK);
}
//called when player takes item attached in mail
@@ -408,23 +408,23 @@ void WorldSession::HandleMailTakeItem(WorldPacket & recv_data)
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
- Player* pl = _player;
+ Player* player = _player;
- Mail* m = pl->GetMail(mailId);
+ Mail* m = player->GetMail(mailId);
if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
{
- pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);
+ player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR);
return;
}
// prevent cheating with skip client money check
- if (!pl->HasEnoughMoney(m->COD))
+ if (!player->HasEnoughMoney(m->COD))
{
- pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);
+ player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_NOT_ENOUGH_MONEY);
return;
}
- Item* it = pl->GetMItem(itemId);
+ Item* it = player->GetMItem(itemId);
ItemPosCountVec dest;
uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, it, false);
@@ -471,24 +471,24 @@ void WorldSession::HandleMailTakeItem(WorldPacket & recv_data)
.SendMailTo(trans, MailReceiver(receive, m->sender), MailSender(MAIL_NORMAL, m->receiver), MAIL_CHECK_MASK_COD_PAYMENT);
}
- pl->ModifyMoney(-int32(m->COD));
+ player->ModifyMoney(-int32(m->COD));
}
m->COD = 0;
m->state = MAIL_STATE_CHANGED;
- pl->m_mailsUpdated = true;
- pl->RemoveMItem(it->GetGUIDLow());
+ player->m_mailsUpdated = true;
+ player->RemoveMItem(it->GetGUIDLow());
uint32 count = it->GetCount(); // save counts before store and possible merge with deleting
- pl->MoveItemToInventory(dest, it, true);
+ player->MoveItemToInventory(dest, it, true);
- pl->SaveInventoryAndGoldToDB(trans);
- pl->_SaveMail(trans);
+ player->SaveInventoryAndGoldToDB(trans);
+ player->_SaveMail(trans);
CharacterDatabase.CommitTransaction(trans);
- pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_OK, 0, itemId, count);
+ player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_OK, 0, itemId, count);
}
else
- pl->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_EQUIP_ERROR, msg);
+ player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_EQUIP_ERROR, msg);
}
void WorldSession::HandleMailTakeMoney(WorldPacket & recv_data)
@@ -501,26 +501,26 @@ void WorldSession::HandleMailTakeMoney(WorldPacket & recv_data)
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
- Player* pl = _player;
+ Player* player = _player;
- Mail* m = pl->GetMail(mailId);
+ Mail* m = player->GetMail(mailId);
if (!m || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
{
- pl->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_ERR_INTERNAL_ERROR);
+ player->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_ERR_INTERNAL_ERROR);
return;
}
- pl->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_OK);
+ player->SendMailResult(mailId, MAIL_MONEY_TAKEN, MAIL_OK);
- pl->ModifyMoney(m->money);
+ player->ModifyMoney(m->money);
m->money = 0;
m->state = MAIL_STATE_CHANGED;
- pl->m_mailsUpdated = true;
+ player->m_mailsUpdated = true;
// save money and mail to prevent cheating
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- pl->SaveGoldToDB(trans);
- pl->_SaveMail(trans);
+ player->SaveGoldToDB(trans);
+ player->_SaveMail(trans);
CharacterDatabase.CommitTransaction(trans);
}
@@ -533,11 +533,11 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
- Player* pl = _player;
+ Player* player = _player;
//load players mails, and mailed items
- if (!pl->m_mailsLoaded)
- pl ->_LoadMail();
+ if (!player->m_mailsLoaded)
+ player ->_LoadMail();
// client can't work with packets > max int16 value
const uint32 maxPacketSize = 32767;
@@ -550,7 +550,7 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
data << uint8(0); // mail's count
time_t cur_time = time(NULL);
- for (PlayerMails::iterator itr = pl->GetMailBegin(); itr != pl->GetMailEnd(); ++itr)
+ for (PlayerMails::iterator itr = player->GetMailBegin(); itr != player->GetMailEnd(); ++itr)
{
// packet send mail count as uint8, prevent overflow
if (mailsCount >= 254)
@@ -596,16 +596,16 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
data << uint32(0); // probably changed in 3.3.3
data << uint32((*itr)->stationery); // stationery (Stationery.dbc)
data << uint32((*itr)->money); // Gold
- data << uint32((*itr)->checked); // flags
+ data << uint32((*itr)->checked); // flags
data << float(((*itr)->expire_time-time(NULL))/DAY); // Time
data << uint32((*itr)->mailTemplateId); // mail template (MailTemplate.dbc)
- data << (*itr)->subject; // Subject string - once 00, when mail type = 3, max 256
- data << (*itr)->body; // message? max 8000
+ data << (*itr)->subject; // Subject string - once 00, when mail type = 3, max 256
+ data << (*itr)->body; // message? max 8000
data << uint8(item_count); // client limit is 0x10
for (uint8 i = 0; i < item_count; ++i)
{
- Item* item = pl->GetMItem((*itr)->items[i].item_guid);
+ Item* item = player->GetMItem((*itr)->items[i].item_guid);
// item index (0-6?)
data << uint8(i);
// item guid low?
@@ -658,17 +658,17 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data)
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX))
return;
- Player* pl = _player;
+ Player* player = _player;
- Mail* m = pl->GetMail(mailId);
+ Mail* m = player->GetMail(mailId);
if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL))
{
- pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
+ player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
return;
}
Item* bodyItem = new Item; // This is not bag and then can be used new Item.
- if (!bodyItem->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, pl))
+ if (!bodyItem->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, player))
{
delete bodyItem;
return;
@@ -680,7 +680,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data)
MailTemplateEntry const* mailTemplateEntry = sMailTemplateStore.LookupEntry(m->mailTemplateId);
if (!mailTemplateEntry)
{
- pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
+ player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR);
return;
}
@@ -700,14 +700,14 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data)
{
m->checked = m->checked | MAIL_CHECK_MASK_COPIED;
m->state = MAIL_STATE_CHANGED;
- pl->m_mailsUpdated = true;
+ player->m_mailsUpdated = true;
- pl->StoreItem(dest, bodyItem, true);
- pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_OK);
+ player->StoreItem(dest, bodyItem, true);
+ player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_OK);
}
else
{
- pl->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_EQUIP_ERROR, msg);
+ player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_EQUIP_ERROR, msg);
delete bodyItem;
}
}
diff --git a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
index 1b0cef69c04..d828a866c49 100755
--- a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -239,8 +239,8 @@ void WorldSession::HandleWhoOpcode(WorldPacket & recv_data)
data << uint32(matchcount); // placeholder, count of players matching criteria
data << uint32(displaycount); // placeholder, count of players displayed
- ACE_GUARD(ACE_Thread_Mutex, g, *HashMapHolder<Player>::GetLock());
- HashMapHolder<Player>::MapType& m = sObjectAccessor->GetPlayers();
+ TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ HashMapHolder<Player>::MapType const& m = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
{
if (AccountMgr::IsPlayerAccount(security))
@@ -339,12 +339,6 @@ void WorldSession::HandleWhoOpcode(WorldPacket & recv_data)
if ((matchcount++) >= sWorld->getIntConfig(CONFIG_MAX_WHO))
continue;
- if (itr->second->isGameMaster())
- {
- pname = "<GM>";
- pname.append(itr->second->GetName());
- }
-
data << pname; // player name
data << gname; // guild name
data << uint32(lvl); // player level
@@ -537,24 +531,23 @@ void WorldSession::HandleAddFriendOpcode(WorldPacket & recv_data)
if (!normalizePlayerName(friendName))
return;
- CharacterDatabase.EscapeString(friendName); // prevent SQL injection - normal name must not be changed by this call
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: %s asked to add friend : '%s'", GetPlayer()->GetName(), friendName.c_str());
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: %s asked to add friend : '%s'",
- GetPlayer()->GetName(), friendName.c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_RACE_ACC_BY_NAME);
+
+ stmt->setString(0, friendName);
_addFriendCallback.SetParam(friendNote);
- _addFriendCallback.SetFutureResult(
- CharacterDatabase.AsyncPQuery("SELECT guid, race, account FROM characters WHERE name = '%s'", friendName.c_str())
- );
+ _addFriendCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
-void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult result, std::string friendNote)
+void WorldSession::HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std::string friendNote)
{
if (!GetPlayer())
return;
uint64 friendGuid;
- uint32 friendAcctid;
+ uint32 friendAccountId;
uint32 team;
FriendsResult friendResult;
@@ -563,11 +556,13 @@ void WorldSession::HandleAddFriendOpcodeCallBack(QueryResult result, std::string
if (result)
{
- friendGuid = MAKE_NEW_GUID((*result)[0].GetUInt32(), 0, HIGHGUID_PLAYER);
- team = Player::TeamForRace((*result)[1].GetUInt8());
- friendAcctid = (*result)[2].GetUInt32();
+ Field* fields = result->Fetch();
+
+ friendGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
+ team = Player::TeamForRace(fields[1].GetUInt8());
+ friendAccountId = fields[2].GetUInt32();
- if (!AccountMgr::IsPlayerAccount(GetSecurity()) || sWorld->getBoolConfig(CONFIG_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAcctid, realmID)))
+ if (!AccountMgr::IsPlayerAccount(GetSecurity()) || sWorld->getBoolConfig(CONFIG_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAccountId, realmID)))
{
if (friendGuid)
{
@@ -619,22 +614,24 @@ void WorldSession::HandleAddIgnoreOpcode(WorldPacket & recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ADD_IGNORE");
- std::string IgnoreName = GetTrinityString(LANG_FRIEND_IGNORE_UNKNOWN);
+ std::string ignoreName = GetTrinityString(LANG_FRIEND_IGNORE_UNKNOWN);
- recv_data >> IgnoreName;
+ recv_data >> ignoreName;
- if (!normalizePlayerName(IgnoreName))
+ if (!normalizePlayerName(ignoreName))
return;
- CharacterDatabase.EscapeString(IgnoreName); // prevent SQL injection - normal name must not be changed by this call
-
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: %s asked to Ignore: '%s'",
- GetPlayer()->GetName(), IgnoreName.c_str());
+ GetPlayer()->GetName(), ignoreName.c_str());
- _addIgnoreCallback = CharacterDatabase.AsyncPQuery("SELECT guid FROM characters WHERE name = '%s'", IgnoreName.c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME);
+
+ stmt->setString(0, ignoreName);
+
+ _addIgnoreCallback = CharacterDatabase.AsyncQuery(stmt);
}
-void WorldSession::HandleAddIgnoreOpcodeCallBack(QueryResult result)
+void WorldSession::HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result)
{
if (!GetPlayer())
return;
@@ -712,9 +709,12 @@ void WorldSession::HandleBugOpcode(WorldPacket & recv_data)
sLog->outDebug(LOG_FILTER_NETWORKIO, "%s", type.c_str());
sLog->outDebug(LOG_FILTER_NETWORKIO, "%s", content.c_str());
- CharacterDatabase.EscapeString(type);
- CharacterDatabase.EscapeString(content);
- CharacterDatabase.PExecute ("INSERT INTO bugreport (type, content) VALUES('%s', '%s')", type.c_str(), content.c_str());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_BUG_REPORT);
+
+ stmt->setString(0, type);
+ stmt->setString(1, content);
+
+ CharacterDatabase.Execute(stmt);
}
void WorldSession::HandleReclaimCorpseOpcode(WorldPacket &recv_data)
@@ -1196,18 +1196,18 @@ void WorldSession::HandleInspectOpcode(WorldPacket& recv_data)
_player->SetSelection(guid);
- Player* plr = ObjectAccessor::FindPlayer(guid);
- if (!plr) // wrong player
+ Player* player = ObjectAccessor::FindPlayer(guid);
+ if (!player) // wrong player
return;
uint32 talent_points = 0x47;
- uint32 guid_size = plr->GetPackGUID().wpos();
+ uint32 guid_size = player->GetPackGUID().wpos();
WorldPacket data(SMSG_INSPECT_TALENT, guid_size+4+talent_points);
- data.append(plr->GetPackGUID());
+ data.append(player->GetPackGUID());
if (sWorld->getBoolConfig(CONFIG_TALENTS_INSPECTING) || _player->isGameMaster())
{
- plr->BuildPlayerTalentsInfoData(&data);
+ player->BuildPlayerTalentsInfoData(&data);
}
else
{
@@ -1216,7 +1216,7 @@ void WorldSession::HandleInspectOpcode(WorldPacket& recv_data)
data << uint8(0); // talentGroupIndex
}
- plr->BuildEnchantmentsInfoData(&data);
+ player->BuildEnchantmentsInfoData(&data);
SendPacket(&data);
}
@@ -1297,15 +1297,15 @@ void WorldSession::HandleWhoisOpcode(WorldPacket& recv_data)
return;
}
- Player* plr = sObjectAccessor->FindPlayerByName(charname.c_str());
+ Player* player = sObjectAccessor->FindPlayerByName(charname.c_str());
- if (!plr)
+ if (!player)
{
SendNotification(LANG_PLAYER_NOT_EXIST_OR_OFFLINE, charname.c_str());
return;
}
- uint32 accid = plr->GetSession()->GetAccountId();
+ uint32 accid = player->GetSession()->GetAccountId();
QueryResult result = LoginDatabase.PQuery("SELECT username, email, last_ip FROM account WHERE id=%u", accid);
if (!result)
@@ -1613,7 +1613,7 @@ void WorldSession::HandleCancelMountAuraOpcode(WorldPacket & /*recv_data*/)
return;
}
- _player->Unmount();
+ _player->Dismount();
_player->RemoveAurasByType(SPELL_AURA_MOUNTED);
}
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index d343e1b2dae..75bd2e2f66d 100755
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -68,11 +68,11 @@ void WorldSession::HandleMoveWorldportAckOpcode()
if (GetPlayer()->IsInWorld())
{
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->RemoveFromMap(GetPlayer(), false);
+ oldMap->RemovePlayerFromMap(GetPlayer(), false);
}
// relocate the player to the teleport destination
- Map* newMap = sMapMgr->CreateMap(loc.GetMapId(), GetPlayer(), 0);
+ Map* newMap = sMapMgr->CreateMap(loc.GetMapId(), GetPlayer());
// the CanEnter checks are done in TeleporTo but conditions may change
// while the player is in transit, for example the map may get full
if (!newMap || !newMap->CanEnter(GetPlayer()))
@@ -88,7 +88,7 @@ void WorldSession::HandleMoveWorldportAckOpcode()
GetPlayer()->SetMap(newMap);
GetPlayer()->SendInitialPacketsBeforeAddToMap();
- if (!GetPlayer()->GetMap()->AddToMap(GetPlayer()))
+ if (!GetPlayer()->GetMap()->AddPlayerToMap(GetPlayer()))
{
sLog->outError("WORLD: failed to teleport player %s (%d) to map %d because of unknown reason!", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), loc.GetMapId());
GetPlayer()->ResetMap();
@@ -299,7 +299,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket & recv_data)
// if we boarded a transport, add us to it
if (plMover && !plMover->GetTransport())
{
- // elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
+ // elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just dismount if the guid can be found in the transport list
for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter)
{
if ((*iter)->GetGUID() == movementInfo.t_guid)
@@ -373,7 +373,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket & recv_data)
if (plMover->isAlive())
{
plMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
- // pl can be alive if GM/etc
+ // player can be alive if GM/etc
// change the death state to CORPSE to prevent the death timer from
// starting in the next player update
if (!plMover->isAlive())
diff --git a/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp b/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp
index a675214930a..ef49b337b44 100755
--- a/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/NPCHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -470,7 +470,7 @@ void WorldSession::SendBindPoint(Creature* npc)
uint32 bindspell = 3286;
// update sql homebind
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_PLAYER_HOMEBIND);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYER_HOMEBIND);
stmt->setUInt16(0, _player->GetMapId());
stmt->setUInt16(1, _player->GetAreaId());
stmt->setFloat (2, _player->GetPositionX());
@@ -519,14 +519,17 @@ void WorldSession::HandleListStabledPetsOpcode(WorldPacket & recv_data)
void WorldSession::SendStablePet(uint64 guid)
{
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOTS_DETAIL);
+
+ stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT);
+ stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT);
+
_sendStabledPetCallback.SetParam(guid);
- _sendStabledPetCallback.SetFutureResult(
- CharacterDatabase.AsyncPQuery("SELECT owner, id, entry, level, name FROM character_pet WHERE owner = '%u' AND slot >= '%u' AND slot <= '%u' ORDER BY slot",
- _player->GetGUIDLow(), PET_SAVE_FIRST_STABLE_SLOT, PET_SAVE_LAST_STABLE_SLOT)
- );
+ _sendStabledPetCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
-void WorldSession::SendStablePetCallback(QueryResult result, uint64 guid)
+void WorldSession::SendStablePetCallback(PreparedQueryResult result, uint64 guid)
{
if (!GetPlayer())
return;
@@ -618,39 +621,43 @@ void WorldSession::HandleStablePet(WorldPacket & recv_data)
return;
}
- _stablePetCallback = CharacterDatabase.AsyncPQuery("SELECT owner, slot, id FROM character_pet WHERE owner = '%u' AND slot >= '%u' AND slot <= '%u' ORDER BY slot ",
- _player->GetGUIDLow(), PET_SAVE_FIRST_STABLE_SLOT, PET_SAVE_LAST_STABLE_SLOT);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOTS);
+
+ stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT);
+ stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT);
+ _stablePetCallback = CharacterDatabase.AsyncQuery(stmt);
}
-void WorldSession::HandleStablePetCallback(QueryResult result)
+void WorldSession::HandleStablePetCallback(PreparedQueryResult result)
{
if (!GetPlayer())
return;
- uint32 free_slot = 1;
+ uint8 freeSlot = 1;
if (result)
{
do
{
Field* fields = result->Fetch();
- uint32 slot = fields[1].GetUInt32();
+ uint8 slot = fields[1].GetUInt8();
// slots ordered in query, and if not equal then free
- if (slot != free_slot)
+ if (slot != freeSlot)
break;
// this slot not free, skip
- ++free_slot;
+ ++freeSlot;
}
while (result->NextRow());
}
WorldPacket data(SMSG_STABLE_RESULT, 1);
- if (free_slot > 0 && free_slot <= GetPlayer()->m_stableSlots)
+ if (freeSlot > 0 && freeSlot <= GetPlayer()->m_stableSlots)
{
- _player->RemovePet(_player->GetPet(), PetSaveMode(free_slot));
+ _player->RemovePet(_player->GetPet(), PetSaveMode(freeSlot));
SendStableResult(STABLE_SUCCESS_STABLE);
}
else
@@ -675,32 +682,36 @@ void WorldSession::HandleUnstablePet(WorldPacket & recv_data)
if (GetPlayer()->HasUnitState(UNIT_STAT_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_ENTRY);
+
+ stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(1, petnumber);
+ stmt->setUInt8(2, PET_SAVE_FIRST_STABLE_SLOT);
+ stmt->setUInt8(3, PET_SAVE_LAST_STABLE_SLOT);
+
_unstablePetCallback.SetParam(petnumber);
- _unstablePetCallback.SetFutureResult(
- CharacterDatabase.AsyncPQuery("SELECT entry FROM character_pet WHERE owner = '%u' AND id = '%u' AND slot >='%u' AND slot <= '%u'",
- _player->GetGUIDLow(), petnumber, PET_SAVE_FIRST_STABLE_SLOT, PET_SAVE_LAST_STABLE_SLOT)
- );
+ _unstablePetCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
-void WorldSession::HandleUnstablePetCallback(QueryResult result, uint32 petnumber)
+void WorldSession::HandleUnstablePetCallback(PreparedQueryResult result, uint32 petId)
{
if (!GetPlayer())
return;
- uint32 creature_id = 0;
+ uint32 petEntry = 0;
if (result)
{
Field* fields = result->Fetch();
- creature_id = fields[0].GetUInt32();
+ petEntry = fields[0].GetUInt32();
}
- if (!creature_id)
+ if (!petEntry)
{
SendStableResult(STABLE_ERR_STABLE);
return;
}
- CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(creature_id);
+ CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(petEntry);
if (!creatureInfo || !creatureInfo->isTameable(_player->CanTameExoticPets()))
{
// if problem in exotic pet
@@ -722,11 +733,11 @@ void WorldSession::HandleUnstablePetCallback(QueryResult result, uint32 petnumbe
if (pet)
_player->RemovePet(pet, PET_SAVE_AS_DELETED);
- Pet* newpet = new Pet(_player, HUNTER_PET);
- if (!newpet->LoadPetFromDB(_player, creature_id, petnumber))
+ Pet* newPet = new Pet(_player, HUNTER_PET);
+ if (!newPet->LoadPetFromDB(_player, petEntry, petId))
{
- delete newpet;
- newpet = NULL;
+ delete newPet;
+ newPet = NULL;
SendStableResult(STABLE_ERR_STABLE);
return;
}
@@ -776,9 +787,9 @@ void WorldSession::HandleStableSwapPet(WorldPacket & recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recv CMSG_STABLE_SWAP_PET.");
uint64 npcGUID;
- uint32 pet_number;
+ uint32 petId;
- recv_data >> npcGUID >> pet_number;
+ recv_data >> npcGUID >> petId;
if (!CheckStableMaster(npcGUID))
{
@@ -798,15 +809,18 @@ void WorldSession::HandleStableSwapPet(WorldPacket & recv_data)
return;
}
- // find swapped pet slot in stable
- _stableSwapCallback.SetParam(pet_number);
- _stableSwapCallback.SetFutureResult(
- CharacterDatabase.PQuery("SELECT slot, entry FROM character_pet WHERE owner = '%u' AND id = '%u'",
- _player->GetGUIDLow(), pet_number)
- );
+ // Find swapped pet slot in stable
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOT_BY_ID);
+
+ stmt->setUInt32(0, _player->GetGUIDLow());
+ stmt->setUInt32(1, petId);
+
+ _stableSwapCallback.SetParam(petId);
+ _stableSwapCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt));
}
-void WorldSession::HandleStableSwapPetCallback(QueryResult result, uint32 petnumber)
+void WorldSession::HandleStableSwapPetCallback(PreparedQueryResult result, uint32 petId)
{
if (!GetPlayer())
return;
@@ -819,16 +833,16 @@ void WorldSession::HandleStableSwapPetCallback(QueryResult result, uint32 petnum
Field* fields = result->Fetch();
- uint32 slot = fields[0].GetUInt8();
- uint32 creature_id = fields[1].GetUInt32();
+ uint32 slot = fields[0].GetUInt8();
+ uint32 petEntry = fields[1].GetUInt32();
- if (!creature_id)
+ if (!petEntry)
{
SendStableResult(STABLE_ERR_STABLE);
return;
}
- CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(creature_id);
+ CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(petEntry);
if (!creatureInfo || !creatureInfo->isTameable(_player->CanTameExoticPets()))
{
// if problem in exotic pet
@@ -846,7 +860,7 @@ void WorldSession::HandleStableSwapPetCallback(QueryResult result, uint32 petnum
// summon unstabled pet
Pet* newpet = new Pet(_player);
- if (!newpet->LoadPetFromDB(_player, creature_id, petnumber))
+ if (!newpet->LoadPetFromDB(_player, petEntry, petId))
{
delete newpet;
SendStableResult(STABLE_ERR_STABLE);
@@ -878,19 +892,18 @@ void WorldSession::HandleRepairItemOpcode(WorldPacket & recv_data)
// reputation discount
float discountMod = _player->GetReputationPriceDiscount(unit);
- uint32 TotalCost = 0;
if (itemGUID)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "ITEM: Repair item, itemGUID = %u, npcGUID = %u", GUID_LOPART(itemGUID), GUID_LOPART(npcGUID));
Item* item = _player->GetItemByGuid(itemGUID);
if (item)
- TotalCost = _player->DurabilityRepair(item->GetPos(), true, discountMod, guildBank);
+ _player->DurabilityRepair(item->GetPos(), true, discountMod, guildBank);
}
else
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "ITEM: Repair all items, npcGUID = %u", GUID_LOPART(npcGUID));
- TotalCost = _player->DurabilityRepairAll(true, discountMod, guildBank);
+ _player->DurabilityRepairAll(true, discountMod, guildBank);
}
}
diff --git a/src/server/game/Server/Protocol/Handlers/NPCHandler.h b/src/server/game/Server/Protocol/Handlers/NPCHandler.h
index 2b14e0edc21..af84b71a74f 100755
--- a/src/server/game/Server/Protocol/Handlers/NPCHandler.h
+++ b/src/server/game/Server/Protocol/Handlers/NPCHandler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
index 5a8781d3925..fc13ef802fd 100755
--- a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
index a931d8a5b3d..26185d3376d 100755
--- a/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/PetitionsHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -311,21 +311,17 @@ void WorldSession::SendPetitionQueryOpcode(uint64 petitionguid)
uint64 ownerguid = 0;
uint32 type;
std::string name = "NO_NAME_FOR_GUID";
- uint8 signs = 0;
- QueryResult result = CharacterDatabase.PQuery(
- "SELECT ownerguid, name, "
- " (SELECT COUNT(playerguid) FROM petition_sign WHERE petition_sign.petitionguid = '%u') AS signs, "
- " type "
- "FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid), GUID_LOPART(petitionguid));
+ // TODO: Use CHAR_LOAD_PETITION PS
+ QueryResult result = CharacterDatabase.PQuery("SELECT ownerguid, name, type "
+ "FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
if (result)
{
Field* fields = result->Fetch();
ownerguid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
name = fields[1].GetString();
- signs = fields[2].GetUInt8();
- type = fields[3].GetUInt32();
+ type = fields[2].GetUInt32();
}
else
{
@@ -376,18 +372,18 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode MSG_PETITION_RENAME"); // ok
- uint64 petitionguid;
+ uint64 petitionGuid;
uint32 type;
- std::string newname;
+ std::string newName;
- recv_data >> petitionguid; // guid
- recv_data >> newname; // new name
+ recv_data >> petitionGuid; // guid
+ recv_data >> newName; // new name
- Item* item = _player->GetItemByGuid(petitionguid);
+ Item* item = _player->GetItemByGuid(petitionGuid);
if (!item)
return;
- QueryResult result = CharacterDatabase.PQuery("SELECT type FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid));
+ QueryResult result = CharacterDatabase.PQuery("SELECT type FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionGuid));
if (result)
{
@@ -396,46 +392,48 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
}
else
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_PETITION_QUERY failed for petition (GUID: %u)", GUID_LOPART(petitionguid));
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_PETITION_QUERY failed for petition (GUID: %u)", GUID_LOPART(petitionGuid));
return;
}
if (type == GUILD_CHARTER_TYPE)
{
- if (sGuildMgr->GetGuildByName(newname))
+ if (sGuildMgr->GetGuildByName(newName))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, newname);
+ Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_EXISTS_S, newName);
return;
}
- if (sObjectMgr->IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname))
+ if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
{
- Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_INVALID, newname);
+ Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_NAME_INVALID, newName);
return;
}
}
else
{
- if (sArenaTeamMgr->GetArenaTeamByName(newname))
+ if (sArenaTeamMgr->GetArenaTeamByName(newName))
{
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newname, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
+ SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
return;
}
- if (sObjectMgr->IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname))
+ if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
{
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newname, "", ERR_ARENA_TEAM_NAME_INVALID);
+ SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_INVALID);
return;
}
}
- std::string db_newname = newname;
- CharacterDatabase.EscapeString(db_newname);
- CharacterDatabase.PExecute("UPDATE petition SET name = '%s' WHERE petitionguid = '%u'",
- db_newname.c_str(), GUID_LOPART(petitionguid));
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME);
- sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionguid), newname.c_str());
- WorldPacket data(MSG_PETITION_RENAME, (8+newname.size()+1));
- data << uint64(petitionguid);
- data << newname;
+ stmt->setString(0, newName);
+ stmt->setUInt32(1, GUID_LOPART(petitionGuid));
+
+ CharacterDatabase.Execute(stmt);
+
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionGuid), newName.c_str());
+ WorldPacket data(MSG_PETITION_RENAME, (8+newName.size()+1));
+ data << uint64(petitionGuid);
+ data << newName;
SendPacket(&data);
}
@@ -444,34 +442,34 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_PETITION_SIGN"); // ok
Field* fields;
- uint64 petitionguid;
+ uint64 petitionGuid;
uint8 unk;
- recv_data >> petitionguid; // petition guid
+ recv_data >> petitionGuid; // petition guid
recv_data >> unk;
QueryResult result = CharacterDatabase.PQuery(
"SELECT ownerguid, "
" (SELECT COUNT(playerguid) FROM petition_sign WHERE petition_sign.petitionguid = '%u') AS signs, "
" type "
- "FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionguid), GUID_LOPART(petitionguid));
+ "FROM petition WHERE petitionguid = '%u'", GUID_LOPART(petitionGuid), GUID_LOPART(petitionGuid));
if (!result)
{
- sLog->outError("Petition %u is not found for player %u %s", GUID_LOPART(petitionguid), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName());
+ sLog->outError("Petition %u is not found for player %u %s", GUID_LOPART(petitionGuid), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName());
return;
}
fields = result->Fetch();
- uint64 ownerguid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
+ uint64 ownerGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER);
uint8 signs = fields[1].GetUInt8();
uint32 type = fields[2].GetUInt32();
- uint32 plguidlo = _player->GetGUIDLow();
- if (GUID_LOPART(ownerguid) == plguidlo)
+ uint32 playerGuid = _player->GetGUIDLow();
+ if (GUID_LOPART(ownerGuid) == playerGuid)
return;
// not let enemies sign guild charter
- if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(ownerguid))
+ if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(ownerGuid))
{
if (type != GUILD_CHARTER_TYPE)
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
@@ -523,12 +521,12 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
//client doesn't allow to sign petition two times by one character, but not check sign by another character from same account
//not allow sign another player from already sign player account
- result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE player_account = '%u' AND petitionguid = '%u'", GetAccountId(), GUID_LOPART(petitionguid));
+ result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE player_account = '%u' AND petitionguid = '%u'", GetAccountId(), GUID_LOPART(petitionGuid));
if (result)
{
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
- data << uint64(petitionguid);
+ data << uint64(petitionGuid);
data << uint64(_player->GetGUID());
data << (uint32)PETITION_SIGN_ALREADY_SIGNED;
@@ -536,17 +534,24 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
SendPacket(&data);
// update for owner if online
- if (Player* owner = ObjectAccessor::FindPlayer(ownerguid))
+ if (Player* owner = ObjectAccessor::FindPlayer(ownerGuid))
owner->GetSession()->SendPacket(&data);
return;
}
- CharacterDatabase.PExecute("INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES ('%u', '%u', '%u', '%u')", GUID_LOPART(ownerguid), GUID_LOPART(petitionguid), plguidlo, GetAccountId());
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION_SIGNATURE);
+
+ stmt->setUInt32(0, GUID_LOPART(ownerGuid));
+ stmt->setUInt32(1, GUID_LOPART(petitionGuid));
+ stmt->setUInt32(2, playerGuid);
+ stmt->setUInt32(3, GetAccountId());
+
+ CharacterDatabase.Execute(stmt);
- sLog->outDebug(LOG_FILTER_NETWORKIO, "PETITION SIGN: GUID %u by player: %s (GUID: %u Account: %u)", GUID_LOPART(petitionguid), _player->GetName(), plguidlo, GetAccountId());
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "PETITION SIGN: GUID %u by player: %s (GUID: %u Account: %u)", GUID_LOPART(petitionGuid), _player->GetName(), playerGuid, GetAccountId());
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
- data << uint64(petitionguid);
+ data << uint64(petitionGuid);
data << uint64(_player->GetGUID());
data << uint32(PETITION_SIGN_OK);
@@ -559,7 +564,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
// item->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1+1, signs);
// update for owner if online
- if (Player* owner = ObjectAccessor::FindPlayer(ownerguid))
+ if (Player* owner = ObjectAccessor::FindPlayer(ownerGuid))
owner->GetSession()->SendPacket(&data);
}
@@ -710,7 +715,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
uint32 type;
std::string name;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PETITION);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION);
stmt->setUInt32(0, GUID_LOPART(petitionGuid));
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -775,7 +780,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
// Get petition signatures from db
uint8 signatures;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_PETITION_SIGNATURE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
stmt->setUInt32(0, GUID_LOPART(petitionGuid));
result = CharacterDatabase.Query(stmt);
diff --git a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
index 9277464ca21..5702eefffec 100755
--- a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -379,8 +379,8 @@ void WorldSession::HandlePageTextQueryOpcode(WorldPacket & recv_data)
int loc_idx = GetSessionDbLocaleIndex();
if (loc_idx >= 0)
- if (PageTextLocale const* pl = sObjectMgr->GetPageTextLocale(pageID))
- ObjectMgr::GetLocaleString(pl->Text, loc_idx, Text);
+ if (PageTextLocale const* player = sObjectMgr->GetPageTextLocale(pageID))
+ ObjectMgr::GetLocaleString(player->Text, loc_idx, Text);
data << Text;
data << uint32(pageText->NextPage);
@@ -413,7 +413,10 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recv_data)
recv_data >> count; // quest count, max=25
if (count >= MAX_QUEST_LOG_SIZE)
+ {
+ recv_data.rfinish();
return;
+ }
WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count);
data << uint32(count); // count
diff --git a/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp b/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp
index fbd6c23d20f..7e80c780369 100755
--- a/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -200,7 +200,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket & recv_data)
bool destroyItem = true;
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
{
- if ((qInfo->ReqItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetTemplate()->MaxCount > 0))
+ if ((qInfo->RequiredItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetTemplate()->MaxCount > 0))
{
destroyItem = false;
break;
diff --git a/src/server/game/Server/Protocol/Handlers/SkillHandler.cpp b/src/server/game/Server/Protocol/Handlers/SkillHandler.cpp
index 7e1ed01f9d3..520cd89e7d5 100755
--- a/src/server/game/Server/Protocol/Handlers/SkillHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/SkillHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
index 269576a5696..b8908d0f9f9 100755
--- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -213,26 +213,26 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
sLog->outDetail("bagIndex: %u, slot: %u", bagIndex, slot);
- Item* pItem = pUser->GetItemByPos(bagIndex, slot);
- if (!pItem)
+ Item* item = pUser->GetItemByPos(bagIndex, slot);
+ if (!item)
{
pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL);
return;
}
- ItemTemplate const* proto = pItem->GetTemplate();
+ ItemTemplate const* proto = item->GetTemplate();
if (!proto)
{
- pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, pItem, NULL);
+ pUser->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, item, NULL);
return;
}
// Verify that the bag is an actual bag or wrapped item that can be used "normally"
- if (!(proto->Flags & ITEM_PROTO_FLAG_OPENABLE) && !pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
+ if (!(proto->Flags & ITEM_PROTO_FLAG_OPENABLE) && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))
{
- pUser->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, pItem, NULL);
+ pUser->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, item, NULL);
sLog->outError("Possible hacking attempt: Player %s [guid: %u] tried to open item [guid: %u, entry: %u] which is not openable!",
- pUser->GetName(), pUser->GetGUIDLow(), pItem->GetGUIDLow(), proto->ItemId);
+ pUser->GetName(), pUser->GetGUIDLow(), item->GetGUIDLow(), proto->ItemId);
return;
}
@@ -244,43 +244,48 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket)
if (!lockInfo)
{
- pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, pItem, NULL);
- sLog->outError("WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", pItem->GetGUIDLow(), lockId);
+ pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, item, NULL);
+ sLog->outError("WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->GetGUIDLow(), lockId);
return;
}
// was not unlocked yet
- if (pItem->IsLocked())
+ if (item->IsLocked())
{
- pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, pItem, NULL);
+ pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, item, NULL);
return;
}
}
- if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))// wrapped?
+ if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED))// wrapped?
{
- QueryResult result = CharacterDatabase.PQuery("SELECT entry, flags FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());
+ QueryResult result = CharacterDatabase.PQuery("SELECT entry, flags FROM character_gifts WHERE item_guid = '%u'", item->GetGUIDLow());
if (result)
{
Field* fields = result->Fetch();
uint32 entry = fields[0].GetUInt32();
uint32 flags = fields[1].GetUInt32();
- pItem->SetUInt64Value(ITEM_FIELD_GIFTCREATOR, 0);
- pItem->SetEntry(entry);
- pItem->SetUInt32Value(ITEM_FIELD_FLAGS, flags);
- pItem->SetState(ITEM_CHANGED, pUser);
+ item->SetUInt64Value(ITEM_FIELD_GIFTCREATOR, 0);
+ item->SetEntry(entry);
+ item->SetUInt32Value(ITEM_FIELD_FLAGS, flags);
+ item->SetState(ITEM_CHANGED, pUser);
}
else
{
- sLog->outError("Wrapped item %u don't have record in character_gifts table and will deleted", pItem->GetGUIDLow());
- pUser->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true);
+ sLog->outError("Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUIDLow());
+ pUser->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
return;
}
- CharacterDatabase.PExecute("DELETE FROM character_gifts WHERE item_guid = '%u'", pItem->GetGUIDLow());
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT);
+
+ stmt->setUInt32(0, item->GetGUIDLow());
+
+ CharacterDatabase.Execute(stmt);
}
else
- pUser->SendLoot(pItem->GetGUID(), LOOT_CORPSE);
+ pUser->SendLoot(item->GetGUID(), LOOT_CORPSE);
}
void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data)
diff --git a/src/server/game/Server/Protocol/Handlers/TaxiHandler.cpp b/src/server/game/Server/Protocol/Handlers/TaxiHandler.cpp
index fe6d3f02ffa..81481bdef31 100755
--- a/src/server/game/Server/Protocol/Handlers/TaxiHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/TaxiHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp b/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp
index ad883394270..a270d42b000 100755
--- a/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/TicketHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -137,7 +137,7 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recv_data)
std::string comment; // comment ("Usage: GMSurveyAnswerSubmit(question, rank, comment)")
recv_data >> comment;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GM_SUBSURVEY);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_SUBSURVEY);
stmt->setUInt32(0, nextSurveyID);
stmt->setUInt32(1, subSurveyId);
stmt->setUInt32(2, rank);
@@ -148,7 +148,7 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recv_data)
std::string comment; // just a guess
recv_data >> comment;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GM_SURVEY);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_SURVEY);
stmt->setUInt32(0, GUID_LOPART(GetPlayer()->GetGUID()));
stmt->setUInt32(1, nextSurveyID);
stmt->setUInt32(2, mainSurvey);
@@ -169,7 +169,7 @@ void WorldSession::HandleReportLag(WorldPacket& recv_data)
recv_data >> y;
recv_data >> z;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_LAG_REPORT);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_LAG_REPORT);
stmt->setUInt32(0, GUID_LOPART(GetPlayer()->GetGUID()));
stmt->setUInt8 (1, lagType);
stmt->setUInt16(2, mapId);
diff --git a/src/server/game/Server/Protocol/Handlers/TradeHandler.cpp b/src/server/game/Server/Protocol/Handlers/TradeHandler.cpp
index 865158e7860..ebe54eb17eb 100755
--- a/src/server/game/Server/Protocol/Handlers/TradeHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/TradeHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Handlers/VehicleHandler.cpp b/src/server/game/Server/Protocol/Handlers/VehicleHandler.cpp
index 7187241cc3a..ce4f6ccb8fe 100644
--- a/src/server/game/Server/Protocol/Handlers/VehicleHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/VehicleHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -129,16 +129,16 @@ void WorldSession::HandleEnterPlayerVehicle(WorldPacket &data)
uint64 guid;
data >> guid;
- if (Player* pl = ObjectAccessor::FindPlayer(guid))
+ if (Player* player = ObjectAccessor::FindPlayer(guid))
{
- if (!pl->GetVehicleKit())
+ if (!player->GetVehicleKit())
return;
- if (!pl->IsInRaidWith(_player))
+ if (!player->IsInRaidWith(_player))
return;
- if (!pl->IsWithinDistInMap(_player, INTERACTION_DISTANCE))
+ if (!player->IsWithinDistInMap(_player, INTERACTION_DISTANCE))
return;
- _player->EnterVehicle(pl);
+ _player->EnterVehicle(player);
}
}
@@ -157,23 +157,23 @@ void WorldSession::HandleEjectPassenger(WorldPacket &data)
if (IS_PLAYER_GUID(guid))
{
- Player* plr = ObjectAccessor::FindPlayer(guid);
- if (!plr)
+ Player* player = ObjectAccessor::FindPlayer(guid);
+ if (!player)
{
sLog->outError("Player %u tried to eject player %u from vehicle, but the latter was not found in world!", GetPlayer()->GetGUIDLow(), GUID_LOPART(guid));
return;
}
- if (!plr->IsOnVehicle(vehicle->GetBase()))
+ if (!player->IsOnVehicle(vehicle->GetBase()))
{
sLog->outError("Player %u tried to eject player %u, but they are not in the same vehicle", GetPlayer()->GetGUIDLow(), GUID_LOPART(guid));
return;
}
- VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(plr);
+ VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(player);
ASSERT(seat);
if (seat->IsEjectable())
- plr->ExitVehicle();
+ player->ExitVehicle();
else
sLog->outError("Player %u attempted to eject player %u from non-ejectable seat.", GetPlayer()->GetGUIDLow(), GUID_LOPART(guid));
}
diff --git a/src/server/game/Server/Protocol/Handlers/VoiceChatHandler.cpp b/src/server/game/Server/Protocol/Handlers/VoiceChatHandler.cpp
index be8307b29b1..34ad5ac3eae 100755
--- a/src/server/game/Server/Protocol/Handlers/VoiceChatHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/VoiceChatHandler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index df7816f7cb9..3ea2d6b690d 100755
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -1329,7 +1329,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*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 },
+ /*0x517*/ { "CMSG_MOVE_SET_COLLISION_HGT_ACK", STATUS_UNHANDLED, 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 },
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index ef51d1be918..81a37ece4f9 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/Protocol/WorldLog.cpp b/src/server/game/Server/Protocol/WorldLog.cpp
index 579e4363253..5b1a3af996f 100755
--- a/src/server/game/Server/Protocol/WorldLog.cpp
+++ b/src/server/game/Server/Protocol/WorldLog.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -61,7 +61,7 @@ void WorldLog::outTimestampLog(char const* fmt, ...)
{
if (LogWorld())
{
- ACE_GUARD(ACE_Thread_Mutex, Guard, Lock);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
ASSERT(i_file);
Log::outTimestamp(i_file);
@@ -89,7 +89,7 @@ void WorldLog::outLog(char const* fmt, ...)
{
if (LogWorld())
{
- ACE_GUARD(ACE_Thread_Mutex, Guard, Lock);
+ TRINITY_GUARD(ACE_Thread_Mutex, Lock);
ASSERT(i_file);
va_list args;
diff --git a/src/server/game/Server/Protocol/WorldLog.h b/src/server/game/Server/Protocol/WorldLog.h
index a951cba4ab5..fb344f195de 100755
--- a/src/server/game/Server/Protocol/WorldLog.h
+++ b/src/server/game/Server/Protocol/WorldLog.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 9cb2b1cbe3f..11085c98d2c 100755
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -55,12 +55,12 @@ bool MapSessionFilter::Process(WorldPacket* packet)
if (opHandle.packetProcessing == PROCESS_THREADUNSAFE)
return false;
- Player* plr = m_pSession->GetPlayer();
- if (!plr)
+ Player* player = m_pSession->GetPlayer();
+ if (!player)
return false;
//in Map::Update() we do not process packets where player is not in world!
- return plr->IsInWorld();
+ return player->IsInWorld();
}
//we should process ALL packets when player is not in world/logged in
@@ -77,12 +77,12 @@ bool WorldSessionFilter::Process(WorldPacket* packet)
return true;
//no player attached? -> our client! ^^
- Player* plr = m_pSession->GetPlayer();
- if (!plr)
+ Player* player = m_pSession->GetPlayer();
+ if (!player)
return true;
//lets process all packets for non-in-the-world player
- return (plr->IsInWorld() == false);
+ return (player->IsInWorld() == false);
}
/// WorldSession constructor
@@ -101,7 +101,7 @@ isRecruiter(isARecruiter)
m_Address = sock->GetRemoteAddress();
sock->AddReference();
ResetTimeOutTime();
- LoginDatabase.PExecute("UPDATE account SET online = 1 WHERE id = %u;", GetAccountId());
+ LoginDatabase.PExecute("UPDATE account SET online = 1 WHERE id = %u;", GetAccountId()); // One-time query
}
InitializeQueryCallbackParameters();
@@ -127,7 +127,7 @@ WorldSession::~WorldSession()
while (_recvQueue.next(packet))
delete packet;
- LoginDatabase.PExecute("UPDATE account SET online = 0 WHERE id = %u;", GetAccountId());
+ LoginDatabase.PExecute("UPDATE account SET online = 0 WHERE id = %u;", GetAccountId()); // One-time query
}
void WorldSession::SizeError(WorldPacket const &packet, uint32 size) const
@@ -222,7 +222,18 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
///- Retrieve packets from the receive queue and call the appropriate handlers
/// not process packets if socket already closed
WorldPacket* packet = NULL;
- while (m_Socket && !m_Socket->IsClosed() && _recvQueue.next(packet, updater))
+ //! Delete packet after processing by default
+ bool deletePacket = true;
+ //! To prevent infinite loop
+ WorldPacket* firstDelayedPacket = NULL;
+ //! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all
+ //! *properly timed* packets, and we're now at the part of the queue where we find
+ //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite
+ //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
+ //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
+ while (m_Socket && !m_Socket->IsClosed() &&
+ !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&
+ _recvQueue.next(packet, updater))
{
if (packet->GetOpcode() >= NUM_MSG_TYPES)
{
@@ -240,8 +251,21 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
if (!_player)
{
// skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets
+ //! If player didn't log out a while ago, it means packets are being sent while the server does not recognize
+ //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.
if (!m_playerRecentlyLogout)
- LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN", "the player has not logged in yet");
+ {
+ //! Prevent infinite loop
+ if (!firstDelayedPacket)
+ firstDelayedPacket = packet;
+ //! Because checking a bool is faster than reallocating memory
+ deletePacket = false;
+ QueuePacket(packet);
+ //! Log
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s (0x%.4X) with with status STATUS_LOGGEDIN. "
+ "Player is currently not in world yet.", opHandle.name, packet->GetOpcode());
+ }
+
}
else if (_player->IsInWorld())
{
@@ -258,7 +282,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
"the player has not logged in yet and not recently logout");
else
{
- // not expected _player or must checked in packet hanlder
+ // not expected _player or must checked in packet handler
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
(this->*opHandle.handler)(*packet);
if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())
@@ -308,7 +332,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
break;
}
}
- catch(ByteBufferException &)
+ catch (ByteBufferException &)
{
sLog->outError("WorldSession::Update ByteBufferException occured while parsing a packet (opcode: %u) from client %s, accountid=%i. Skipped packet.",
packet->GetOpcode(), GetRemoteAddress().c_str(), GetAccountId());
@@ -320,7 +344,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
}
}
- delete packet;
+ if (deletePacket)
+ delete packet;
}
ProcessQueryCallbacks();
@@ -344,6 +369,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
if (!m_Socket)
return false; //Will remove this session from the world session map
}
+
return true;
}
@@ -494,7 +520,7 @@ void WorldSession::LogoutPlayer(bool Save)
_player->CleanupsBeforeDelete();
sLog->outChar("Account: %d (IP: %s) Logout Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), _player->GetName(), _player->GetGUIDLow());
Map* _map = _player->GetMap();
- _map->RemoveFromMap(_player, true);
+ _map->RemovePlayerFromMap(_player, true);
SetPlayer(NULL); // deleted in Remove call
///- Send the 'logout complete' packet to the client
@@ -503,7 +529,13 @@ void WorldSession::LogoutPlayer(bool Save)
///- Since each account can only have one online character at any given time, ensure all characters for active account are marked as offline
//No SQL injection as AccountId is uint32
- CharacterDatabase.PExecute("UPDATE characters SET online = 0 WHERE account = '%u'", GetAccountId());
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ACCOUNT_ONLINE);
+
+ stmt->setUInt32(0, GetAccountId());
+
+ CharacterDatabase.Execute(stmt);
+
sLog->outDebug(LOG_FILTER_NETWORKIO, "SESSION: Sent SMSG_LOGOUT_COMPLETE Message");
}
@@ -600,7 +632,7 @@ void WorldSession::SendAuthWaitQue(uint32 position)
void WorldSession::LoadGlobalAccountData()
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_ACCOUNT_DATA);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA);
stmt->setUInt32(0, GetAccountId());
LoadAccountData(CharacterDatabase.Query(stmt), GLOBAL_CACHE_MASK);
}
@@ -643,7 +675,7 @@ void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string d
if ((1 << type) & GLOBAL_CACHE_MASK)
{
id = GetAccountId();
- index = CHAR_SET_ACCOUNT_DATA;
+ index = CHAR_REP_ACCOUNT_DATA;
}
else
{
@@ -652,7 +684,7 @@ void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string d
return;
id = m_GUIDLow;
- index = CHAR_SET_PLAYER_ACCOUNT_DATA;
+ index = CHAR_REP_PLAYER_ACCOUNT_DATA;
}
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(index);
@@ -682,7 +714,7 @@ void WorldSession::LoadTutorialsData()
{
memset(m_Tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES);
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_TUTORIALS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS);
stmt->setUInt32(0, GetAccountId());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
@@ -704,11 +736,11 @@ void WorldSession::SaveTutorialsData(SQLTransaction &trans)
if (!m_TutorialsChanged)
return;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_HAS_TUTORIALS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_HAS_TUTORIALS);
stmt->setUInt32(0, GetAccountId());
bool hasTutorials = !CharacterDatabase.Query(stmt).null();
// Modify data in DB
- stmt = CharacterDatabase.GetPreparedStatement(hasTutorials ? CHAR_SET_TUTORIALS : CHAR_ADD_TUTORIALS);
+ stmt = CharacterDatabase.GetPreparedStatement(hasTutorials ? CHAR_UPD_TUTORIALS : CHAR_INS_TUTORIALS);
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
stmt->setUInt32(i, m_Tutorials[i]);
stmt->setUInt32(MAX_ACCOUNT_TUTORIAL_VALUES, GetAccountId());
@@ -964,9 +996,9 @@ void WorldSession::SendAddonsInfo()
SendPacket(&data);
}
-void WorldSession::SetPlayer(Player* plr)
+void WorldSession::SetPlayer(Player* player)
{
- _player = plr;
+ _player = player;
// set m_GUID that can be used while player loggined and later until m_playerRecentlyLogout not reset
if (_player)
@@ -982,7 +1014,7 @@ void WorldSession::InitializeQueryCallbackParameters()
void WorldSession::ProcessQueryCallbacks()
{
- QueryResult result;
+ PreparedQueryResult result;
//! HandleCharEnumOpcode
if (_charEnumCallback.ready())
@@ -994,11 +1026,11 @@ void WorldSession::ProcessQueryCallbacks()
if (_charCreateCallback.IsReady())
{
- PreparedQueryResult pResult;
- _charCreateCallback.GetResult(pResult);
- HandleCharCreateCallback(pResult, _charCreateCallback.GetParam());
+ _charCreateCallback.GetResult(result);
+ HandleCharCreateCallback(result, _charCreateCallback.GetParam());
// Don't call FreeResult() here, the callback handler will do that depending on the events in the callback chain
}
+
//! HandlePlayerLoginOpcode
if (_charLoginCallback.ready())
{
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 2337f2a34b2..fac910abc71 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -184,7 +184,7 @@ class CharacterCreateInfo
protected:
CharacterCreateInfo(std::string name, uint8 race, uint8 cclass, uint8 gender, uint8 skin, uint8 face, uint8 hairStyle, uint8 hairColor, uint8 facialHair, uint8 outfitId,
WorldPacket& data) : Name(name), Race(race), Class(cclass), Gender(gender), Skin(skin), Face(face), HairStyle(hairStyle), HairColor(hairColor), FacialHair(facialHair),
- OutfitId(outfitId), Data(data), CharCount(0), Stage(0)
+ OutfitId(outfitId), Data(data), CharCount(0)
{}
/// User specified variables
@@ -203,9 +203,6 @@ class CharacterCreateInfo
/// Server side data
uint8 CharCount;
- /// Internal
- uint8 Stage; // Stage of the callback chain
-
private:
virtual ~CharacterCreateInfo(){};
};
@@ -223,10 +220,10 @@ class WorldSession
void SizeError(WorldPacket const& packet, uint32 size) const;
- void ReadAddonsInfo(WorldPacket &data);
+ void ReadAddonsInfo(WorldPacket& data);
void SendAddonsInfo();
- void ReadMovementInfo(WorldPacket &data, MovementInfo* mi);
+ void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
void WriteMovementInfo(WorldPacket* data, MovementInfo* mi);
void SendPacket(WorldPacket const* packet);
@@ -247,7 +244,7 @@ class WorldSession
char const* GetPlayerName() const;
void SetSecurity(AccountTypes security) { _security = security; }
std::string const& GetRemoteAddress() { return m_Address; }
- void SetPlayer(Player* plr);
+ void SetPlayer(Player* player);
uint8 Expansion() const { return m_expansion; }
/// Session in auth.queue currently
@@ -282,7 +279,7 @@ class WorldSession
void SendTrainerList(uint64 guid);
void SendTrainerList(uint64 guid, const std::string& strTitle);
- void SendListInventory(uint64 vendorGuid);
+ void SendListInventory(uint64 guid);
void SendShowBank(uint64 guid);
void SendTabardVendorActivate(uint64 guid);
void SendSpiritResurrect();
@@ -304,7 +301,7 @@ class WorldSession
// Pet
void SendPetNameQuery(uint64 guid, uint32 petnumber);
void SendStablePet(uint64 guid);
- void SendStablePetCallback(QueryResult result, uint64 guid);
+ void SendStablePetCallback(PreparedQueryResult result, uint64 guid);
void SendStableResult(uint8 guid);
bool CheckStableMaster(uint64 guid);
@@ -381,9 +378,7 @@ class WorldSession
}
bool IsConnectionIdle() const
{
- if (m_timeOutTime <= 0 && !m_inQueue)
- return true;
- return false;
+ return (m_timeOutTime <= 0 && !m_inQueue);
}
// Recruit-A-Friend Handling
@@ -402,7 +397,7 @@ class WorldSession
void HandleCharCreateOpcode(WorldPacket& recvPacket);
void HandleCharCreateCallback(PreparedQueryResult result, CharacterCreateInfo* createInfo);
void HandlePlayerLoginOpcode(WorldPacket& recvPacket);
- void HandleCharEnum(QueryResult result);
+ void HandleCharEnum(PreparedQueryResult result);
void HandlePlayerLogin(LoginQueryHolder * holder);
void HandleCharFactionOrRaceChange(WorldPacket& recv_data);
@@ -421,11 +416,11 @@ class WorldSession
void HandleInspectHonorStatsOpcode(WorldPacket& recvPacket);
void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
- void HandleFeatherFallAck(WorldPacket &recv_data);
+ void HandleFeatherFallAck(WorldPacket& recv_data);
- void HandleMoveHoverAck(WorldPacket & recv_data);
+ void HandleMoveHoverAck(WorldPacket& recv_data);
- void HandleMountSpecialAnimOpcode(WorldPacket &recvdata);
+ void HandleMountSpecialAnimOpcode(WorldPacket& recvdata);
// character view
void HandleShowingHelmOpcode(WorldPacket& recv_data);
@@ -438,7 +433,7 @@ class WorldSession
void HandleMoveKnockBackAck(WorldPacket& recvPacket);
void HandleMoveTeleportAck(WorldPacket& recvPacket);
- void HandleForceSpeedChangeAck(WorldPacket & recv_data);
+ void HandleForceSpeedChangeAck(WorldPacket& recv_data);
void HandlePingOpcode(WorldPacket& recvPacket);
void HandleAuthSessionOpcode(WorldPacket& recvPacket);
@@ -471,10 +466,10 @@ class WorldSession
void HandleEmoteOpcode(WorldPacket& recvPacket);
void HandleContactListOpcode(WorldPacket& recvPacket);
void HandleAddFriendOpcode(WorldPacket& recvPacket);
- void HandleAddFriendOpcodeCallBack(QueryResult result, std::string friendNote);
+ void HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std::string friendNote);
void HandleDelFriendOpcode(WorldPacket& recvPacket);
void HandleAddIgnoreOpcode(WorldPacket& recvPacket);
- void HandleAddIgnoreOpcodeCallBack(QueryResult result);
+ void HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result);
void HandleDelIgnoreOpcode(WorldPacket& recvPacket);
void HandleSetContactNotesOpcode(WorldPacket& recvPacket);
void HandleBugOpcode(WorldPacket& recvPacket);
@@ -483,10 +478,10 @@ class WorldSession
void HandleAreaTriggerOpcode(WorldPacket& recvPacket);
- void HandleSetFactionAtWar(WorldPacket & recv_data);
- void HandleSetFactionCheat(WorldPacket & recv_data);
- void HandleSetWatchedFactionOpcode(WorldPacket & recv_data);
- void HandleSetFactionInactiveOpcode(WorldPacket & recv_data);
+ void HandleSetFactionAtWar(WorldPacket& recv_data);
+ void HandleSetFactionCheat(WorldPacket& recv_data);
+ void HandleSetWatchedFactionOpcode(WorldPacket& recv_data);
+ void HandleSetFactionInactiveOpcode(WorldPacket& recv_data);
void HandleUpdateAccountData(WorldPacket& recvPacket);
void HandleRequestAccountData(WorldPacket& recvPacket);
@@ -507,17 +502,17 @@ class WorldSession
void HandleMoveWorldportAckOpcode(); // for server-side calls
void HandleMovementOpcodes(WorldPacket& recvPacket);
- void HandleSetActiveMoverOpcode(WorldPacket &recv_data);
- void HandleMoveNotActiveMover(WorldPacket &recv_data);
- void HandleDismissControlledVehicle(WorldPacket &recv_data);
- void HandleRequestVehicleExit(WorldPacket &recv_data);
- void HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data);
- void HandleMoveTimeSkippedOpcode(WorldPacket &recv_data);
+ void HandleSetActiveMoverOpcode(WorldPacket& recv_data);
+ void HandleMoveNotActiveMover(WorldPacket& recv_data);
+ void HandleDismissControlledVehicle(WorldPacket& recv_data);
+ void HandleRequestVehicleExit(WorldPacket& recv_data);
+ void HandleChangeSeatsOnControlledVehicle(WorldPacket& recv_data);
+ void HandleMoveTimeSkippedOpcode(WorldPacket& recv_data);
- void HandleRequestRaidInfoOpcode(WorldPacket & recv_data);
+ void HandleRequestRaidInfoOpcode(WorldPacket& recv_data);
- void HandleBattlefieldStatusOpcode(WorldPacket &recv_data);
- void HandleBattleMasterHelloOpcode(WorldPacket &recv_data);
+ void HandleBattlefieldStatusOpcode(WorldPacket& recv_data);
+ void HandleBattleMasterHelloOpcode(WorldPacket& recv_data);
void HandleGroupInviteOpcode(WorldPacket& recvPacket);
//void HandleGroupCancelOpcode(WorldPacket& recvPacket);
@@ -527,17 +522,17 @@ class WorldSession
void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
- void HandleOptOutOfLootOpcode(WorldPacket &recv_data);
+ void HandleOptOutOfLootOpcode(WorldPacket& recv_data);
void HandleLootMethodOpcode(WorldPacket& recvPacket);
- void HandleLootRoll(WorldPacket &recv_data);
- void HandleRequestPartyMemberStatsOpcode(WorldPacket &recv_data);
- void HandleRaidTargetUpdateOpcode(WorldPacket & recv_data);
- void HandleRaidReadyCheckOpcode(WorldPacket & recv_data);
- void HandleRaidReadyCheckFinishedOpcode(WorldPacket & recv_data);
- void HandleGroupRaidConvertOpcode(WorldPacket & recv_data);
- void HandleGroupChangeSubGroupOpcode(WorldPacket & recv_data);
- void HandleGroupAssistantLeaderOpcode(WorldPacket & recv_data);
- void HandlePartyAssignmentOpcode(WorldPacket & recv_data);
+ void HandleLootRoll(WorldPacket& recv_data);
+ void HandleRequestPartyMemberStatsOpcode(WorldPacket& recv_data);
+ void HandleRaidTargetUpdateOpcode(WorldPacket& recv_data);
+ void HandleRaidReadyCheckOpcode(WorldPacket& recv_data);
+ void HandleRaidReadyCheckFinishedOpcode(WorldPacket& recv_data);
+ void HandleGroupRaidConvertOpcode(WorldPacket& recv_data);
+ void HandleGroupChangeSubGroupOpcode(WorldPacket& recv_data);
+ void HandleGroupAssistantLeaderOpcode(WorldPacket& recv_data);
+ void HandlePartyAssignmentOpcode(WorldPacket& recv_data);
void HandlePetitionBuyOpcode(WorldPacket& recv_data);
void HandlePetitionShowSignOpcode(WorldPacket& recv_data);
@@ -590,13 +585,13 @@ class WorldSession
void HandleBinderActivateOpcode(WorldPacket& recvPacket);
void HandleListStabledPetsOpcode(WorldPacket& recvPacket);
void HandleStablePet(WorldPacket& recvPacket);
- void HandleStablePetCallback(QueryResult result);
+ void HandleStablePetCallback(PreparedQueryResult result);
void HandleUnstablePet(WorldPacket& recvPacket);
- void HandleUnstablePetCallback(QueryResult result, uint32 petnumber);
+ void HandleUnstablePetCallback(PreparedQueryResult result, uint32 petId);
void HandleBuyStableSlot(WorldPacket& recvPacket);
void HandleStableRevivePet(WorldPacket& recvPacket);
void HandleStableSwapPet(WorldPacket& recvPacket);
- void HandleStableSwapPetCallback(QueryResult result, uint32 petnumber);
+ void HandleStableSwapPetCallback(PreparedQueryResult result, uint32 petId);
void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
@@ -613,25 +608,25 @@ class WorldSession
void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
void HandleAuctionHelloOpcode(WorldPacket& recvPacket);
- void HandleAuctionListItems(WorldPacket & recv_data);
- void HandleAuctionListBidderItems(WorldPacket & recv_data);
- void HandleAuctionSellItem(WorldPacket & recv_data);
- void HandleAuctionRemoveItem(WorldPacket & recv_data);
- void HandleAuctionListOwnerItems(WorldPacket & recv_data);
- void HandleAuctionPlaceBid(WorldPacket & recv_data);
- void HandleAuctionListPendingSales(WorldPacket & recv_data);
-
- void HandleGetMailList(WorldPacket & recv_data);
- void HandleSendMail(WorldPacket & recv_data);
- void HandleMailTakeMoney(WorldPacket & recv_data);
- void HandleMailTakeItem(WorldPacket & recv_data);
- void HandleMailMarkAsRead(WorldPacket & recv_data);
- void HandleMailReturnToSender(WorldPacket & recv_data);
- void HandleMailDelete(WorldPacket & recv_data);
- void HandleItemTextQuery(WorldPacket & recv_data);
- void HandleMailCreateTextItem(WorldPacket & recv_data);
- void HandleQueryNextMailTime(WorldPacket & recv_data);
- void HandleCancelChanneling(WorldPacket & recv_data);
+ void HandleAuctionListItems(WorldPacket& recv_data);
+ void HandleAuctionListBidderItems(WorldPacket& recv_data);
+ void HandleAuctionSellItem(WorldPacket& recv_data);
+ void HandleAuctionRemoveItem(WorldPacket& recv_data);
+ void HandleAuctionListOwnerItems(WorldPacket& recv_data);
+ void HandleAuctionPlaceBid(WorldPacket& recv_data);
+ void HandleAuctionListPendingSales(WorldPacket& recv_data);
+
+ void HandleGetMailList(WorldPacket& recv_data);
+ void HandleSendMail(WorldPacket& recv_data);
+ void HandleMailTakeMoney(WorldPacket& recv_data);
+ void HandleMailTakeItem(WorldPacket& recv_data);
+ void HandleMailMarkAsRead(WorldPacket& recv_data);
+ void HandleMailReturnToSender(WorldPacket& recv_data);
+ void HandleMailDelete(WorldPacket& recv_data);
+ void HandleItemTextQuery(WorldPacket& recv_data);
+ void HandleMailCreateTextItem(WorldPacket& recv_data);
+ void HandleQueryNextMailTime(WorldPacket& recv_data);
+ void HandleCancelChanneling(WorldPacket& recv_data);
void SendItemPageInfo(ItemTemplate* itemProto);
void HandleSplitItemOpcode(WorldPacket& recvPacket);
@@ -645,9 +640,9 @@ class WorldSession
void HandleListInventoryOpcode(WorldPacket& recvPacket);
void HandleAutoStoreBagItemOpcode(WorldPacket& recvPacket);
void HandleReadItem(WorldPacket& recvPacket);
- void HandleAutoEquipItemSlotOpcode(WorldPacket & recvPacket);
- void HandleSwapItem(WorldPacket & recvPacket);
- void HandleBuybackItem(WorldPacket & recvPacket);
+ void HandleAutoEquipItemSlotOpcode(WorldPacket& recvPacket);
+ void HandleSwapItem(WorldPacket& recvPacket);
+ void HandleBuybackItem(WorldPacket& recvPacket);
void HandleAutoBankItemOpcode(WorldPacket& recvPacket);
void HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket);
void HandleWrapItemOpcode(WorldPacket& recvPacket);
@@ -728,18 +723,18 @@ class WorldSession
void HandlePageQuerySkippedOpcode(WorldPacket& recvPacket);
void HandlePageTextQueryOpcode(WorldPacket& recvPacket);
- void HandleTutorialFlag (WorldPacket & recv_data);
- void HandleTutorialClear(WorldPacket & recv_data);
- void HandleTutorialReset(WorldPacket & recv_data);
+ void HandleTutorialFlag (WorldPacket& recv_data);
+ void HandleTutorialClear(WorldPacket& recv_data);
+ void HandleTutorialReset(WorldPacket& recv_data);
//Pet
- void HandlePetAction(WorldPacket & recv_data);
+ void HandlePetAction(WorldPacket& recv_data);
void HandlePetStopAttack(WorldPacket& recv_data);
void HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid, uint16 flag, uint64 guid2);
- void HandlePetNameQuery(WorldPacket & recv_data);
- void HandlePetSetAction(WorldPacket & recv_data);
- void HandlePetAbandon(WorldPacket & recv_data);
- void HandlePetRename(WorldPacket & recv_data);
+ void HandlePetNameQuery(WorldPacket& recv_data);
+ void HandlePetSetAction(WorldPacket& recv_data);
+ void HandlePetAbandon(WorldPacket& recv_data);
+ void HandlePetRename(WorldPacket& recv_data);
void HandlePetCancelAuraOpcode(WorldPacket& recvPacket);
void HandlePetSpellAutocastOpcode(WorldPacket& recvPacket);
void HandlePetCastSpellOpcode(WorldPacket& recvPacket);
@@ -749,22 +744,22 @@ class WorldSession
void HandleSetActionBarToggles(WorldPacket& recv_data);
void HandleCharRenameOpcode(WorldPacket& recv_data);
- void HandleChangePlayerNameOpcodeCallBack(QueryResult result, std::string newname);
+ void HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult result, std::string newName);
void HandleSetPlayerDeclinedNames(WorldPacket& recv_data);
void HandleTotemDestroyed(WorldPacket& recv_data);
void HandleDismissCritter(WorldPacket& recv_data);
//Battleground
- void HandleBattlemasterHelloOpcode(WorldPacket &recv_data);
- void HandleBattlemasterJoinOpcode(WorldPacket &recv_data);
+ void HandleBattlemasterHelloOpcode(WorldPacket& recv_data);
+ void HandleBattlemasterJoinOpcode(WorldPacket& recv_data);
void HandleBattlegroundPlayerPositionsOpcode(WorldPacket& recv_data);
- void HandlePVPLogDataOpcode(WorldPacket &recv_data);
- void HandleBattleFieldPortOpcode(WorldPacket &recv_data);
- void HandleBattlefieldListOpcode(WorldPacket &recv_data);
- void HandleLeaveBattlefieldOpcode(WorldPacket &recv_data);
- void HandleBattlemasterJoinArena(WorldPacket &recv_data);
- void HandleReportPvPAFK(WorldPacket &recv_data);
+ void HandlePVPLogDataOpcode(WorldPacket& recv_data);
+ void HandleBattleFieldPortOpcode(WorldPacket& recv_data);
+ void HandleBattlefieldListOpcode(WorldPacket& recv_data);
+ void HandleLeaveBattlefieldOpcode(WorldPacket& recv_data);
+ void HandleBattlemasterJoinArena(WorldPacket& recv_data);
+ void HandleReportPvPAFK(WorldPacket& recv_data);
void HandleWardenDataOpcode(WorldPacket& recv_data);
void HandleWorldTeleportOpcode(WorldPacket& recv_data);
@@ -783,17 +778,17 @@ class WorldSession
void HandleInstanceLockResponse(WorldPacket& recvPacket);
// Looking for Dungeon/Raid
- void HandleLfgSetCommentOpcode(WorldPacket & recv_data);
+ void HandleLfgSetCommentOpcode(WorldPacket& recv_data);
void HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& recv_data);
void HandleLfgPartyLockInfoRequestOpcode(WorldPacket& recv_data);
- void HandleLfgJoinOpcode(WorldPacket &recv_data);
- void HandleLfgLeaveOpcode(WorldPacket & /*recv_data*/);
- void HandleLfgSetRolesOpcode(WorldPacket &recv_data);
- void HandleLfgProposalResultOpcode(WorldPacket &recv_data);
- void HandleLfgSetBootVoteOpcode(WorldPacket &recv_data);
- void HandleLfgTeleportOpcode(WorldPacket &recv_data);
- void HandleLfrSearchOpcode(WorldPacket &recv_data);
- void HandleLfrLeaveOpcode(WorldPacket &recv_data);
+ void HandleLfgJoinOpcode(WorldPacket& recv_data);
+ void HandleLfgLeaveOpcode(WorldPacket& recv_data);
+ void HandleLfgSetRolesOpcode(WorldPacket& recv_data);
+ void HandleLfgProposalResultOpcode(WorldPacket& recv_data);
+ void HandleLfgSetBootVoteOpcode(WorldPacket& recv_data);
+ void HandleLfgTeleportOpcode(WorldPacket& recv_data);
+ void HandleLfrSearchOpcode(WorldPacket& recv_data);
+ void HandleLfrLeaveOpcode(WorldPacket& recv_data);
void SendLfgUpdatePlayer(const LfgUpdateData& updateData);
void SendLfgUpdateParty(const LfgUpdateData& updateData);
@@ -836,7 +831,7 @@ class WorldSession
void HandleItemRefundInfoRequest(WorldPacket& recv_data);
void HandleItemRefund(WorldPacket& recv_data);
- void HandleChannelVoiceOnOpcode(WorldPacket & recv_data);
+ void HandleChannelVoiceOnOpcode(WorldPacket& recv_data);
void HandleVoiceSessionEnableOpcode(WorldPacket& recv_data);
void HandleSetActiveVoiceChannel(WorldPacket& recv_data);
void HandleSetTaxiBenchmarkOpcode(WorldPacket& recv_data);
@@ -878,7 +873,7 @@ class WorldSession
void HandleCalendarGetNumPending(WorldPacket& recv_data);
void HandleSpellClick(WorldPacket& recv_data);
- void HandleMirrorImageDataRequest(WorldPacket & recv_data);
+ void HandleMirrorImageDataRequest(WorldPacket& recv_data);
void HandleAlterAppearance(WorldPacket& recv_data);
void HandleRemoveGlyph(WorldPacket& recv_data);
void HandleCharCustomize(WorldPacket& recv_data);
@@ -890,24 +885,23 @@ class WorldSession
void HandleReadyForAccountDataTimes(WorldPacket& recv_data);
void HandleQueryQuestsCompleted(WorldPacket& recv_data);
void HandleQuestPOIQuery(WorldPacket& recv_data);
- void HandleEjectPassenger(WorldPacket &data);
- void HandleEnterPlayerVehicle(WorldPacket &data);
+ void HandleEjectPassenger(WorldPacket& data);
+ void HandleEnterPlayerVehicle(WorldPacket& data);
void HandleUpdateProjectilePosition(WorldPacket& recvPacket);
private:
void InitializeQueryCallbackParameters();
void ProcessQueryCallbacks();
- ACE_Future_Set<QueryResult> _nameQueryCallbacks;
- QueryResultFuture _charEnumCallback;
- QueryResultFuture _addIgnoreCallback;
- QueryResultFuture _stablePetCallback;
- QueryCallback<QueryResult, std::string> _charRenameCallback;
- QueryCallback<QueryResult, std::string> _addFriendCallback;
- QueryCallback<QueryResult, uint32> _unstablePetCallback;
- QueryCallback<QueryResult, uint32> _stableSwapCallback;
- QueryCallback<QueryResult, uint64> _sendStabledPetCallback;
- QueryCallback<PreparedQueryResult, CharacterCreateInfo*> _charCreateCallback;
+ PreparedQueryResultFuture _charEnumCallback;
+ PreparedQueryResultFuture _addIgnoreCallback;
+ PreparedQueryResultFuture _stablePetCallback;
+ QueryCallback<PreparedQueryResult, std::string> _charRenameCallback;
+ QueryCallback<PreparedQueryResult, std::string> _addFriendCallback;
+ QueryCallback<PreparedQueryResult, uint32> _unstablePetCallback;
+ QueryCallback<PreparedQueryResult, uint32> _stableSwapCallback;
+ QueryCallback<PreparedQueryResult, uint64> _sendStabledPetCallback;
+ QueryCallback<PreparedQueryResult, CharacterCreateInfo*, true> _charCreateCallback;
QueryResultHolderFuture _charLoginCallback;
private:
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 3875156289e..ac6f11660e4 100755
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -802,7 +802,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
recvPacket >> clientSeed;
recvPacket >> unk5 >> unk6 >> unk7;
recvPacket >> unk4;
- recvPacket.read (digest, 20);
+ recvPacket.read(digest, 20);
sLog->outStaticDebug ("WorldSocket::HandleAuthSession: client %u, unk2 %u, account %s, unk3 %u, clientseed %u",
BuiltNumberClient,
@@ -889,7 +889,13 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
if (mutetime < 0)
{
mutetime = time(NULL) + llabs(mutetime);
- LoginDatabase.PExecute("UPDATE account SET mutetime = " SI64FMTD " WHERE id = '%u'", mutetime, id);
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);
+
+ stmt->setInt64(0, mutetime);
+ stmt->setUInt32(1, id);
+
+ LoginDatabase.Execute(stmt);
}
locale = LocaleConstant (fields[8].GetUInt8());
@@ -985,14 +991,13 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
isRecruiter = true;
// Update the last_ip in the database
- // No SQL injection, username escaped.
- LoginDatabase.EscapeString (address);
- LoginDatabase.PExecute ("UPDATE account "
- "SET last_ip = '%s' "
- "WHERE username = '%s'",
- address.c_str(),
- safe_account.c_str());
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_IP);
+
+ stmt->setString(0, address);
+ stmt->setString(1, account);
+
+ LoginDatabase.Execute(stmt);
// NOTE ATM the socket is single-threaded, have this in mind ...
ACE_NEW_RETURN (m_Session, WorldSession (id, this, AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter), -1);
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index aa7424085f8..3396803ff62 100755
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Server/WorldSocketAcceptor.h b/src/server/game/Server/WorldSocketAcceptor.h
index 1d3155b9e06..a16c5c2189f 100644
--- a/src/server/game/Server/WorldSocketAcceptor.h
+++ b/src/server/game/Server/WorldSocketAcceptor.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index ec29273d6b0..00a8b263847 100755
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -109,7 +109,7 @@ class ReactorRunnable : protected ACE_Task_Base
int AddSocket (WorldSocket* sock)
{
- ACE_GUARD_RETURN (ACE_Thread_Mutex, Guard, m_NewSockets_Lock, -1);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_NewSockets_Lock);
++m_Connections;
sock->AddReference();
@@ -130,7 +130,7 @@ class ReactorRunnable : protected ACE_Task_Base
void AddNewSockets()
{
- ACE_GUARD (ACE_Thread_Mutex, Guard, m_NewSockets_Lock);
+ TRINITY_GUARD(ACE_Thread_Mutex, m_NewSockets_Lock);
if (m_NewSockets.empty())
return;
@@ -192,7 +192,7 @@ class ReactorRunnable : protected ACE_Task_Base
}
}
- sLog->outStaticDebug ("Network Thread Exitting");
+ sLog->outStaticDebug ("Network Thread exits");
return 0;
}
diff --git a/src/server/game/Server/WorldSocketMgr.h b/src/server/game/Server/WorldSocketMgr.h
index 25f92042f4e..fd7e28485cf 100755
--- a/src/server/game/Server/WorldSocketMgr.h
+++ b/src/server/game/Server/WorldSocketMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp
index 1899d75b4cf..466d3ac83a2 100755
--- a/src/server/game/Skills/SkillDiscovery.cpp
+++ b/src/server/game/Skills/SkillDiscovery.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Skills/SkillDiscovery.h b/src/server/game/Skills/SkillDiscovery.h
index ae4f3494534..110adb91cf2 100755
--- a/src/server/game/Skills/SkillDiscovery.h
+++ b/src/server/game/Skills/SkillDiscovery.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Skills/SkillExtraItems.cpp b/src/server/game/Skills/SkillExtraItems.cpp
index 600655c4a60..b5b6b5d7b96 100755
--- a/src/server/game/Skills/SkillExtraItems.cpp
+++ b/src/server/game/Skills/SkillExtraItems.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Skills/SkillExtraItems.h b/src/server/game/Skills/SkillExtraItems.h
index 2b453508c8c..c4e20b9fbef 100755
--- a/src/server/game/Skills/SkillExtraItems.h
+++ b/src/server/game/Skills/SkillExtraItems.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 7c0be84bf50..ddb230d6773 100755
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 4876f435f55..2a67d2e364c 100755
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -563,10 +563,10 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
amount += (int32)DoneActualBenefit;
// Arena - Dampening
- if (AuraEffect const* pAurEff = caster->GetAuraEffect(74410, 0))
- AddPctN(amount, pAurEff->GetAmount());
- // Battleground - Dampening
- else if (AuraEffect const* pAurEff = caster->GetAuraEffect(74411, 0))
+ AuraEffect const* pAurEff = caster->GetAuraEffect(74410, 0);
+ if (!pAurEff)
+ pAurEff = caster->GetAuraEffect(74411, 0); // Battleground - Dampening
+ if (pAurEff)
AddPctN(amount, pAurEff->GetAmount());
return amount;
@@ -719,7 +719,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
case SPELL_AURA_MOD_THREAT:
{
uint8 level_diff = 0;
- float multiplier = 0.0;
+ float multiplier = 0.0f;
switch (GetId())
{
// Arcane Shroud
@@ -903,25 +903,6 @@ void AuraEffect::CalculateSpellMod()
default:
break;
}
- case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
- switch (GetId())
- {
- case 51466: // Elemental oath
- case 51470: // Elemental oath
- // "while Clearcasting from Elemental Focus is active, you deal 5%/10% more spell damage."
- if (!m_spellmod)
- {
- m_spellmod = new SpellModifier(GetBase());
- m_spellmod->op = SPELLMOD_EFFECT2;
- m_spellmod->type = SPELLMOD_FLAT;
- m_spellmod->spellId = GetId();
- m_spellmod->mask[1] = 0x0004000;
- }
- m_spellmod->value = GetBase()->GetUnitOwner()->CalculateSpellDamage(GetBase()->GetUnitOwner(), GetSpellInfo(), 1);
- break;
- default:
- break;
- }
break;
case SPELL_AURA_ADD_FLAT_MODIFIER:
case SPELL_AURA_ADD_PCT_MODIFIER:
@@ -1527,17 +1508,17 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
// Nurturing Instinct
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT, SPELLFAMILY_DRUID, 2254, 0))
{
- uint32 spellId = 0;
+ uint32 spellId3 = 0;
switch (aurEff->GetId())
{
- case 33872:
- spellId = 47179;
- break;
- case 33873:
- spellId = 47180;
- break;
+ case 33872:
+ spellId3 = 47179;
+ break;
+ case 33873:
+ spellId3 = 47180;
+ break;
}
- target->CastSpell(target, spellId, true, NULL, this);
+ target->CastSpell(target, spellId3, true, NULL, this);
}
// Master Shapeshifter - Cat
if (AuraEffect const* aurEff = target->GetDummyAuraEffect(SPELLFAMILY_GENERIC, 2851, 0))
@@ -1588,9 +1569,9 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
target->RemoveAurasDueToSpell(spellId2);
// Improved Barkskin - apply/remove armor bonus due to shapeshift
- if (Player* pl=target->ToPlayer())
+ if (Player* player=target->ToPlayer())
{
- if (pl->HasSpell(63410) || pl->HasSpell(63411))
+ if (player->HasSpell(63410) || player->HasSpell(63411))
{
target->RemoveAurasDueToSpell(66530);
target->CastSpell(target, 66530, true);
@@ -2840,7 +2821,7 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo
}
else
{
- target->Unmount();
+ target->Dismount();
//some mounts like Headless Horseman's Mount or broom stick are skill based spell
// need to remove ALL arura related to mounts, this will stop client crash with broom stick
// and never endless flying after using Headless Horseman's Mount
@@ -2866,7 +2847,7 @@ void AuraEffect::HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode
if (target->GetTypeId() == TYPEID_UNIT)
target->SetFlying(apply);
- if (Player* plr = target->m_movedPlayer)
+ if (Player* player = target->m_movedPlayer)
{
// allow flying
WorldPacket data;
@@ -2876,7 +2857,7 @@ void AuraEffect::HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
data.append(target->GetPackGUID());
data << uint32(0); // unk
- plr->SendDirectMessage(&data);
+ player->SendDirectMessage(&data);
}
}
@@ -3265,16 +3246,16 @@ void AuraEffect::HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp,
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK && (apply || (!target->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !target->HasAuraType(SPELL_AURA_FLY))))
{
- if (Player* plr = target->m_movedPlayer)
+ if (Player* player = target->m_movedPlayer)
{
WorldPacket data;
if (apply)
data.Initialize(SMSG_MOVE_SET_CAN_FLY, 12);
else
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
- data.append(plr->GetPackGUID());
+ data.append(player->GetPackGUID());
data << uint32(0); // unknown
- plr->SendDirectMessage(&data);
+ player->SendDirectMessage(&data);
}
}
@@ -4003,8 +3984,18 @@ void AuraEffect::HandleAuraModIncreaseEnergyPercent(AuraApplication const* aurAp
// return;
UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + powerType);
+ float amount = float(GetAmount());
- target->HandleStatModifier(unitMod, TOTAL_PCT, float(GetAmount()), apply);
+ if (apply)
+ {
+ target->HandleStatModifier(unitMod, TOTAL_PCT, amount, apply);
+ target->ModifyPowerPct(powerType, amount, apply);
+ }
+ else
+ {
+ target->ModifyPowerPct(powerType, amount, apply);
+ target->HandleStatModifier(unitMod, TOTAL_PCT, amount, apply);
+ }
}
void AuraEffect::HandleAuraModIncreaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4803,15 +4794,23 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
break;
case 63322: // Saronite Vapors
{
- int32 mana = int32(GetAmount() * pow(2.0f, GetBase()->GetStackAmount())); // mana restore - bp * 2^stackamount
- int32 damage = mana * 2; // damage
- caster->CastCustomSpell(target, 63337, &mana, NULL, NULL, true);
- caster->CastCustomSpell(target, 63338, &damage, NULL, NULL, true);
+ if (caster)
+ {
+ int32 mana = int32(GetAmount() * pow(2.0f, GetBase()->GetStackAmount())); // mana restore - bp * 2^stackamount
+ int32 damage = mana * 2; // damage
+ caster->CastCustomSpell(target, 63337, &mana, NULL, NULL, true);
+ caster->CastCustomSpell(target, 63338, &damage, NULL, NULL, true);
+ }
break;
}
case 71563:
if (Aura* newAura = target->AddAura(71564, target))
newAura->SetStackAmount(newAura->GetSpellInfo()->StackAmount);
+ break;
+ case 59628: // Tricks of the Trade
+ if (caster && caster->GetMisdirectionTarget())
+ target->SetReducedThreatPercent(100, caster->GetMisdirectionTarget()->GetGUID());
+ break;
}
}
// AT REMOVE
@@ -4901,8 +4900,8 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
// Living Bomb
if (m_spellInfo->SpellFamilyFlags[1] & 0x20000)
{
- AuraRemoveMode mode = aurApp->GetRemoveMode();
- if (caster && (mode == AURA_REMOVE_BY_ENEMY_SPELL || mode == AURA_REMOVE_BY_EXPIRE))
+ AuraRemoveMode removeMode = aurApp->GetRemoveMode();
+ if (caster && (removeMode == AURA_REMOVE_BY_ENEMY_SPELL || removeMode == AURA_REMOVE_BY_EXPIRE))
caster->CastSpell(target, GetAmount(), true);
}
break;
@@ -4959,6 +4958,20 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (GetId() == 61777)
target->CastSpell(target, GetAmount(), true);
break;
+ case SPELLFAMILY_ROGUE:
+ // Tricks of the trade
+ switch(GetId())
+ {
+ case 59628: //Tricks of the trade buff on rogue (6sec duration)
+ target->SetReducedThreatPercent(0,0);
+ break;
+ case 57934: //Tricks of the trade buff on rogue (30sec duration)
+ if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE || !caster->GetMisdirectionTarget())
+ target->SetReducedThreatPercent(0,0);
+ else
+ target->SetReducedThreatPercent(0,caster->GetMisdirectionTarget()->GetGUID());
+ break;
+ }
default:
break;
}
@@ -5197,7 +5210,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (!(mode & AURA_EFFECT_HANDLE_REAL))
break;
// Sentry Totem
- if (GetId() == 6495 && caster->GetTypeId() == TYPEID_PLAYER)
+ if (GetId() == 6495 && caster && caster->GetTypeId() == TYPEID_PLAYER)
{
if (apply)
{
@@ -5403,9 +5416,9 @@ void AuraEffect::HandleAuraConvertRune(AuraApplication const* aurApp, uint8 mode
if (target->GetTypeId() != TYPEID_PLAYER)
return;
- Player* plr = (Player*)target;
+ Player* player = (Player*)target;
- if (plr->getClass() != CLASS_DEATH_KNIGHT)
+ if (player->getClass() != CLASS_DEATH_KNIGHT)
return;
uint32 runes = m_amount;
@@ -5414,17 +5427,17 @@ void AuraEffect::HandleAuraConvertRune(AuraApplication const* aurApp, uint8 mode
{
for (uint32 i = 0; i < MAX_RUNES && runes; ++i)
{
- if (GetMiscValue() != plr->GetCurrentRune(i))
+ if (GetMiscValue() != player->GetCurrentRune(i))
continue;
- if (!plr->GetRuneCooldown(i))
+ if (!player->GetRuneCooldown(i))
{
- plr->AddRuneByAuraEffect(i, RuneType(GetMiscValueB()), this);
+ player->AddRuneByAuraEffect(i, RuneType(GetMiscValueB()), this);
--runes;
}
}
}
else
- plr->RemoveRunesByAuraEffect(this);
+ player->RemoveRunesByAuraEffect(this);
}
void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -5608,6 +5621,9 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
case 66149: // Bullet Controller Periodic - 10 Man
case 68396: // Bullet Controller Periodic - 25 Man
{
+ if (!caster)
+ break;
+
caster->CastCustomSpell(66152, SPELLVALUE_MAX_TARGETS, urand(1, 6), target, true);
caster->CastCustomSpell(66153, SPELLVALUE_MAX_TARGETS, urand(1, 6), target, true);
break;
@@ -5720,9 +5736,8 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
// eff_radius == 0
float radius = GetSpellInfo()->GetMaxRange(false);
- CellPair p(Trinity::ComputeCellPair(target->GetPositionX(), target->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(target->GetPositionX(), target->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
Trinity::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck u_check(target, radius);
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck> checker(target, targets, u_check);
@@ -6026,13 +6041,15 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
case 65923:
{
Unit* permafrostCaster = NULL;
- if (Aura* permafrostAura = target->GetAura(66193))
- permafrostCaster = permafrostAura->GetCaster();
- else if (Aura* permafrostAura = target->GetAura(67855))
- permafrostCaster = permafrostAura->GetCaster();
- else if (Aura* permafrostAura = target->GetAura(67856))
- permafrostCaster = permafrostAura->GetCaster();
- else if (Aura* permafrostAura = target->GetAura(67857))
+ Aura* permafrostAura = target->GetAura(66193);
+ if (!permafrostAura)
+ permafrostAura = target->GetAura(67855);
+ if (!permafrostAura)
+ permafrostAura = target->GetAura(67856);
+ if (!permafrostAura)
+ permafrostAura = target->GetAura(67857);
+
+ if (permafrostAura)
permafrostCaster = permafrostAura->GetCaster();
if (permafrostCaster)
@@ -6468,15 +6485,15 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
// damage caster for heal amount
if (target != caster && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_HEALTH_FUNNEL)
{
- uint32 damage = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); // damage is not affected by spell power
- if ((int32)damage > gain)
- damage = gain;
- uint32 absorb = 0;
- caster->DealDamageMods(caster, damage, &absorb);
- caster->SendSpellNonMeleeDamageLog(caster, GetId(), damage, GetSpellInfo()->GetSchoolMask(), absorb, 0, false, 0, false);
+ uint32 funnelDamage = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); // damage is not affected by spell power
+ if ((int32)funnelDamage > gain)
+ funnelDamage = gain;
+ uint32 funnelAbsorb = 0;
+ caster->DealDamageMods(caster, funnelDamage, &funnelAbsorb);
+ caster->SendSpellNonMeleeDamageLog(caster, GetId(), funnelDamage, GetSpellInfo()->GetSchoolMask(), funnelAbsorb, 0, false, 0, false);
CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
- caster->DealDamage(caster, damage, &cleanDamage, NODAMAGE, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true);
+ caster->DealDamage(caster, funnelDamage, &cleanDamage, NODAMAGE, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true);
}
uint32 procAttacker = PROC_FLAG_DONE_PERIODIC;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index c34391471d7..31dd3ad7471 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -80,6 +80,7 @@ class AuraEffect
bool IsPeriodic() const { return m_isPeriodic; }
void SetPeriodic(bool isPeriodic) { m_isPeriodic = isPeriodic; }
bool IsAffectedOnSpell(SpellInfo const* spell) const;
+ bool HasSpellClassMask() const { return m_spellInfo->Effects[m_effIndex].SpellClassMask; }
void SendTickImmune(Unit* target, Unit* caster) const;
void PeriodicTick(AuraApplication * aurApp, Unit* caster) const;
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index df6ac44f2cc..3d964a6e14e 100755
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -557,7 +557,14 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply)
else
{
// owner has to be in world, or effect has to be applied to self
- ASSERT((!GetOwner()->IsInWorld() && GetOwner() == itr->first) || GetOwner()->IsInMap(itr->first));
+ if (!GetOwner()->IsSelfOrInSameMap(itr->first))
+ {
+ //TODO: There is a crash caused by shadowfiend load addon
+ sLog->outCrash("Aura %u: Owner %s (map %u) is not in the same map as target %s (map %u).", GetSpellInfo()->Id,
+ GetOwner()->GetName(), GetOwner()->IsInWorld() ? GetOwner()->GetMap()->GetId() : uint32(-1),
+ itr->first->GetName(), itr->first->IsInWorld() ? itr->first->GetMap()->GetId() : uint32(-1));
+ ASSERT(false);
+ }
itr->first->_CreateAuraApplication(this, itr->second);
++itr;
}
@@ -1325,6 +1332,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
if (removeMode != AURA_REMOVE_BY_EXPIRE)
break;
target->CastSpell(target, 32612, true, NULL, GetEffect(1));
+ target->CombatStop();
break;
case 74396: // Fingers of Frost
// Remove the IGNORE_AURASTATE aura
@@ -2027,7 +2035,6 @@ void Aura::_DeleteRemovedApplications()
void Aura::LoadScripts()
{
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Aura::LoadScripts");
sScriptMgr->CreateAuraScripts(m_spellInfo->Id, m_loadedScripts);
for (std::list<AuraScript*>::iterator itr = m_loadedScripts.begin(); itr != m_loadedScripts.end() ;)
{
@@ -2038,6 +2045,7 @@ void Aura::LoadScripts()
m_loadedScripts.erase(bitr);
continue;
}
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Aura::LoadScripts: Script `%s` for aura `%u` is loaded now", (*itr)->_GetScriptName()->c_str(), m_spellInfo->Id);
(*itr)->Register();
++itr;
}
diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h
index bcf40fe69d7..8c9cde37c15 100755
--- a/src/server/game/Spells/Auras/SpellAuras.h
+++ b/src/server/game/Spells/Auras/SpellAuras.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 16243396ebb..bbc07c0572e 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -598,9 +598,8 @@ WorldObject* Spell::FindCorpseUsing()
// non-standard target selection
float max_range = m_spellInfo->GetMaxRange(false);
- CellPair p(Trinity::ComputeCellPair(m_caster->GetPositionX(), m_caster->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(m_caster->GetPositionX(), m_caster->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
WorldObject* result = NULL;
@@ -642,23 +641,24 @@ void Spell::InitExplicitTargets(SpellCastTargets const& targets)
// try to select correct unit target if not provided by client or by serverside cast
if (neededTargets & (TARGET_FLAG_UNIT_MASK))
{
- Unit* target = NULL;
+ Unit* unit = 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;
+ unit = 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();
+ unit = 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 = m_caster;
+ if (!unit && neededTargets & (TARGET_FLAG_UNIT_RAID | TARGET_FLAG_UNIT_PARTY | TARGET_FLAG_UNIT_ALLY))
+ unit = m_caster;
- m_targets.SetUnitTarget(target);
+ m_targets.SetUnitTarget(unit);
}
}
@@ -1202,7 +1202,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
m_spellAura = NULL; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied
//Spells with this flag cannot trigger if effect is casted on self
- // Slice and Dice, relentless strikes, eviscerate
bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && CanExecuteTriggersOnHit(mask);
Unit* spellHitTarget = NULL;
@@ -1220,11 +1219,11 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
if (spellHitTarget)
{
- SpellMissInfo missInfo = DoSpellHitOnUnit(spellHitTarget, mask, target->scaleAura);
- if (missInfo != SPELL_MISS_NONE)
+ SpellMissInfo missInfo2 = DoSpellHitOnUnit(spellHitTarget, mask, target->scaleAura);
+ if (missInfo2 != SPELL_MISS_NONE)
{
- if (missInfo != SPELL_MISS_MISS)
- m_caster->SendSpellMiss(unit, m_spellInfo->Id, missInfo);
+ if (missInfo2 != SPELL_MISS_MISS)
+ m_caster->SendSpellMiss(unit, m_spellInfo->Id, missInfo2);
m_damage = 0;
spellHitTarget = NULL;
}
@@ -1539,7 +1538,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, const uint32 effectMask, bool
if (AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID()))
positive = aurApp->IsPositive();
- duration = m_originalCaster->ModSpellDuration(aurSpellInfo, unit, duration, positive);
+ duration = m_originalCaster->ModSpellDuration(aurSpellInfo, unit, duration, positive, effectMask);
// Haste modifies duration of channeled spells
if (m_spellInfo->IsChanneled())
@@ -1598,12 +1597,12 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask)
// this is executed after spell proc spells on target hit
// spells are triggered for each hit spell target
// info confirmed with retail sniffs of permafrost and shadow weaving
- if (!m_hitTriggerSpells.empty() && CanExecuteTriggersOnHit(effMask))
+ if (!m_hitTriggerSpells.empty())
{
int _duration = 0;
for (HitTriggerSpells::const_iterator i = m_hitTriggerSpells.begin(); i != m_hitTriggerSpells.end(); ++i)
{
- if (roll_chance_i(i->second))
+ if (CanExecuteTriggersOnHit(effMask, i->first) && roll_chance_i(i->second))
{
m_caster->CastSpell(unit, i->first, true);
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell %d triggered spell %d by SPELL_AURA_ADD_TARGET_TRIGGER aura", m_spellInfo->Id, i->first->Id);
@@ -2034,7 +2033,7 @@ uint32 Spell::SelectEffectTargets(uint32 i, SpellImplicitTargetInfo const& cur)
float max_dis = m_spellInfo->GetMaxRange(true);
float dis = (float)rand_norm() * (max_dis - min_dis) + min_dis;
float x, y, z, angle;
- angle = (float)rand_norm() * static_cast<float>(M_PI * 70.0f / 180.0f) - static_cast<float>(M_PI * 35.0f / 180.0f);
+ angle = (float)rand_norm() * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f);
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dis, angle);
m_targets.SetDst(x, y, z, m_caster->GetOrientation());
break;
@@ -3092,6 +3091,8 @@ void Spell::cast(bool skipCheck)
m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
}
+ CallScriptBeforeCastHandlers();
+
// skip check if done already (for instant cast spells for example)
if (!skipCheck)
{
@@ -3161,6 +3162,8 @@ void Spell::cast(bool skipCheck)
PrepareTriggersExecutedOnHit();
+ CallScriptOnCastHandlers();
+
// traded items have trade slot instead of guid in m_itemTargetGUID
// set to real guid to be sent later to the client
m_targets.UpdateTradeSlotItem();
@@ -3220,6 +3223,8 @@ void Spell::cast(bool skipCheck)
handle_immediate();
}
+ CallScriptAfterCastHandlers();
+
if (const std::vector<int32> *spell_triggered = sSpellMgr->GetSpellLinked(m_spellInfo->Id))
{
for (std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i)
@@ -3255,6 +3260,12 @@ void Spell::handle_immediate()
m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags);
SendChannelStart(duration);
}
+ else if (duration == -1)
+ {
+ m_spellState = SPELL_STATE_CASTING;
+ m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags);
+ SendChannelStart(duration);
+ }
}
PrepareTargetProcessing();
@@ -3280,7 +3291,6 @@ void Spell::handle_immediate()
if (m_spellInfo->IsRangedWeaponSpell() && m_spellInfo->IsChanneled())
TakeAmmo();
-
if (m_spellState != SPELL_STATE_CASTING)
finish(true); // successfully finish spell cast (not last in case autorepeat or channel spell)
}
@@ -3479,9 +3489,9 @@ void Spell::update(uint32 difftime)
{
case SPELL_STATE_PREPARING:
{
- if (m_timer)
+ if (m_timer > 0)
{
- if (difftime >= m_timer)
+ if (difftime >= (uint32)m_timer)
m_timer = 0;
else
m_timer -= difftime;
@@ -3490,10 +3500,11 @@ void Spell::update(uint32 difftime)
if (m_timer == 0 && !IsNextMeleeSwingSpell() && !IsAutoRepeat())
// don't CheckCast for instant spells - done in spell::prepare, skip duplicate checks, needed for range checks for example
cast(!m_casttime);
- } break;
+ break;
+ }
case SPELL_STATE_CASTING:
{
- if (m_timer > 0)
+ if (m_timer)
{
// check if there are alive targets left
if (!UpdateChanneledTargetList())
@@ -3503,10 +3514,13 @@ void Spell::update(uint32 difftime)
finish();
}
- if (difftime >= m_timer)
- m_timer = 0;
- else
- m_timer -= difftime;
+ if (m_timer > 0)
+ {
+ if (difftime >= (uint32)m_timer)
+ m_timer = 0;
+ else
+ m_timer -= difftime;
+ }
}
if (m_timer == 0)
@@ -3548,10 +3562,10 @@ void Spell::update(uint32 difftime)
finish();
}
- } break;
+ break;
+ }
default:
- {
- }break;
+ break;
}
}
@@ -3667,9 +3681,9 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas
switch (result)
{
case SPELL_FAILED_REQUIRES_SPELL_FOCUS:
- data << uint32(spellInfo->RequiresSpellFocus);
+ data << uint32(spellInfo->RequiresSpellFocus); // SpellFocusObject.dbc id
break;
- case SPELL_FAILED_REQUIRES_AREA:
+ case SPELL_FAILED_REQUIRES_AREA: // AreaTable.dbc id
// hardcode areas limitation case
switch (spellInfo->Id)
{
@@ -3702,14 +3716,15 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas
data << uint32(spellInfo->TotemCategory[1]);
break;
case SPELL_FAILED_EQUIPPED_ITEM_CLASS:
+ case SPELL_FAILED_EQUIPPED_ITEM_CLASS_MAINHAND:
+ case SPELL_FAILED_EQUIPPED_ITEM_CLASS_OFFHAND:
data << uint32(spellInfo->EquippedItemClass);
data << uint32(spellInfo->EquippedItemSubClassMask);
- //data << uint32(spellInfo->EquippedItemInventoryTypeMask);
break;
case SPELL_FAILED_TOO_MANY_OF_ITEM:
{
uint32 item = 0;
- for (int8 x = 0;x < 3; x++)
+ for (int8 x = 0; x < 3; x++)
if (spellInfo->Effects[x].ItemType)
item = spellInfo->Effects[x].ItemType;
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(item);
@@ -3758,7 +3773,7 @@ void Spell::SendSpellStart()
data << uint8(m_cast_count); // pending spell cast?
data << uint32(m_spellInfo->Id); // spellId
data << uint32(castFlags); // cast flags
- data << uint32(m_timer); // delay?
+ data << int32(m_timer); // delay?
m_targets.Write(data);
@@ -3836,24 +3851,28 @@ void Spell::SendSpellGo()
if (castFlags & CAST_FLAG_RUNE_LIST) // rune cooldowns list
{
- Player* player = m_caster->ToPlayer();
- uint8 runeMaskInitial = m_runesState;
- uint8 runeMaskAfterCast = player->GetRunesState();
- data << uint8(runeMaskInitial); // runes state before
- data << uint8(runeMaskAfterCast); // runes state after
- for (uint8 i = 0; i < MAX_RUNES; ++i)
+ //TODO: There is a crash caused by a spell with CAST_FLAG_RUNE_LIST casted by a creature
+ //The creature is the mover of a player, so HandleCastSpellOpcode uses it as the caster
+ if (Player* player = m_caster->ToPlayer())
{
- uint8 mask = (1 << i);
- if (mask & runeMaskInitial && !(mask & runeMaskAfterCast)) // usable before andon cooldown now...
+ uint8 runeMaskInitial = m_runesState;
+ uint8 runeMaskAfterCast = player->GetRunesState();
+ data << uint8(runeMaskInitial); // runes state before
+ data << uint8(runeMaskAfterCast); // runes state after
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
{
- // float casts ensure the division is performed on floats as we need float result
- float baseCd = float(player->GetRuneBaseCooldown(i));
- data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255); // rune cooldown passed
+ uint8 mask = (1 << i);
+ if (mask & runeMaskInitial && !(mask & runeMaskAfterCast)) // usable before andon cooldown now...
+ {
+ // float casts ensure the division is performed on floats as we need float result
+ float baseCd = float(player->GetRuneBaseCooldown(i));
+ data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255); // rune cooldown passed
+ }
}
}
}
- if (castFlags & CAST_FLAG_UNKNOWN_18) // unknown wotlk
+ if (castFlags & CAST_FLAG_UNKNOWN_18)
{
data << float(0);
data << uint32(0);
@@ -3862,7 +3881,7 @@ void Spell::SendSpellGo()
if (castFlags & CAST_FLAG_AMMO)
WriteAmmoToPacket(&data);
- if (castFlags & CAST_FLAG_UNKNOWN_20) // unknown wotlk
+ if (castFlags & CAST_FLAG_UNKNOWN_20)
{
data << uint32(0);
data << uint32(0);
@@ -4123,9 +4142,6 @@ void Spell::SendChannelUpdate(uint32 time)
m_caster->SetUInt32Value(UNIT_CHANNEL_SPELL, 0);
}
- if (m_caster->GetTypeId() != TYPEID_PLAYER)
- return;
-
WorldPacket data(MSG_CHANNEL_UPDATE, 8+4);
data.append(m_caster->GetPackGUID());
data << uint32(time);
@@ -4328,9 +4344,9 @@ SpellCastResult Spell::CheckRuneCost(uint32 runeCostID)
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return SPELL_CAST_OK;
- Player* plr = (Player*)m_caster;
+ Player* player = (Player*)m_caster;
- if (plr->getClass() != CLASS_DEATH_KNIGHT)
+ if (player->getClass() != CLASS_DEATH_KNIGHT)
return SPELL_CAST_OK;
SpellRuneCostEntry const* src = sSpellRuneCostStore.LookupEntry(runeCostID);
@@ -4354,8 +4370,8 @@ SpellCastResult Spell::CheckRuneCost(uint32 runeCostID)
for (uint32 i = 0; i < MAX_RUNES; ++i)
{
- RuneType rune = plr->GetCurrentRune(i);
- if ((plr->GetRuneCooldown(i) == 0) && (runeCost[rune] > 0))
+ RuneType rune = player->GetCurrentRune(i);
+ if ((player->GetRuneCooldown(i) == 0) && (runeCost[rune] > 0))
runeCost[rune]--;
}
@@ -5639,7 +5655,17 @@ SpellCastResult Spell::CheckRange(bool strict)
if (!strict && m_casttime == 0)
return SPELL_CAST_OK;
- uint32 range_type = m_spellInfo->RangeEntry ? m_spellInfo->RangeEntry->type : 0;
+ uint32 range_type = 0;
+
+ if (m_spellInfo->RangeEntry)
+ {
+ // check needed by 68766 51693 - both spells are cast on enemies and have 0 max range
+ // these are triggered by other spells - possibly we should omit range check in that case?
+ if (m_spellInfo->RangeEntry->ID == 1)
+ return SPELL_CAST_OK;
+
+ range_type = m_spellInfo->RangeEntry->type;
+ }
Unit* target = m_targets.GetUnitTarget();
float max_range = m_caster->GetSpellMaxRangeForTarget(target, m_spellInfo);
@@ -5820,9 +5846,8 @@ SpellCastResult Spell::CheckItems()
// check spell focus object
if (m_spellInfo->RequiresSpellFocus)
{
- CellPair p(Trinity::ComputeCellPair(m_caster->GetPositionX(), m_caster->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(m_caster->GetPositionX(), m_caster->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
GameObject* ok = NULL;
Trinity::GameObjectFocusCheck go_check(m_caster, m_spellInfo->RequiresSpellFocus);
@@ -6252,7 +6277,7 @@ void Spell::Delayed() // only called in DealDamage()
AddPctN(delaytime, -delayReduce);
- if (int32(m_timer) + delaytime > m_casttime)
+ if (m_timer + delaytime > m_casttime)
{
delaytime = m_casttime - m_timer;
m_timer = m_casttime;
@@ -6287,7 +6312,7 @@ void Spell::DelayedChannel()
AddPctN(delaytime, -delayReduce);
- if (int32(m_timer) <= delaytime)
+ if (m_timer <= delaytime)
{
delaytime = m_timer;
m_timer = 0;
@@ -6409,7 +6434,8 @@ bool Spell::IsNextMeleeSwingSpell() const
bool Spell::IsAutoActionResetSpell() const
{
- return !IsTriggered() && (m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_AUTOATTACK);
+ // TODO: changed SPELL_INTERRUPT_FLAG_AUTOATTACK -> SPELL_INTERRUPT_FLAG_INTERRUPT to fix compile - is this check correct at all?
+ return !IsTriggered() && (m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT);
}
bool Spell::IsNeedSendToClient() const
@@ -6787,7 +6813,7 @@ void Spell::SelectTrajTargets()
if (!dist2d)
return;
- float dz = m_targets.GetDst()->m_positionZ - m_targets.GetSrc()->m_positionZ;
+ float srcToDestDelta = m_targets.GetDst()->m_positionZ - m_targets.GetSrc()->m_positionZ;
UnitList unitList;
SearchAreaTarget(unitList, dist2d, PUSH_IN_THIN_LINE, SPELL_TARGETS_ANY);
@@ -6797,8 +6823,9 @@ void Spell::SelectTrajTargets()
unitList.sort(Trinity::ObjectDistanceOrderPred(m_caster));
float b = tangent(m_targets.GetElevation());
- float a = (dz - dist2d * b) / (dist2d * dist2d);
- if (a > -0.0001f) a = 0;
+ float a = (srcToDestDelta - dist2d * b) / (dist2d * dist2d);
+ if (a > -0.0001f)
+ a = 0;
DEBUG_TRAJ(sLog->outError("Spell::SelectTrajTargets: a %f b %f", a, b);)
float bestDist = m_spellInfo->GetMaxRange(false);
@@ -6826,9 +6853,14 @@ void Spell::SelectTrajTargets()
}
#define CHECK_DIST {\
- DEBUG_TRAJ(sLog->outError("Spell::SelectTrajTargets: dist %f, height %f.", dist, height);)\
- if (dist > bestDist) continue;\
- if (dist < objDist2d + size && dist > objDist2d - size) { bestDist = dist; break; }\
+ DEBUG_TRAJ(sLog->outError("Spell::SelectTrajTargets: dist %f, height %f.", dist, height);)\
+ if (dist > bestDist)\
+ continue;\
+ if (dist < objDist2d + size && dist > objDist2d - size)\
+ {\
+ bestDist = dist;\
+ break;\
+ }\
}
if (!a)
@@ -6943,7 +6975,6 @@ void Spell::CheckEffectExecuteData()
void Spell::LoadScripts()
{
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell::LoadScripts");
sScriptMgr->CreateSpellScripts(m_spellInfo->Id, m_loadedScripts);
for (std::list<SpellScript*>::iterator itr = m_loadedScripts.begin(); itr != m_loadedScripts.end() ;)
{
@@ -6954,15 +6985,49 @@ void Spell::LoadScripts()
m_loadedScripts.erase(bitr);
continue;
}
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell::LoadScripts: Script `%s` for spell `%u` is loaded now", (*itr)->_GetScriptName()->c_str(), m_spellInfo->Id);
(*itr)->Register();
++itr;
}
}
-void Spell::PrepareScriptHitHandlers()
+void Spell::CallScriptBeforeCastHandlers()
{
for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end() ; ++scritr)
- (*scritr)->_InitHit();
+ {
+ (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_BEFORE_CAST);
+ std::list<SpellScript::CastHandler>::iterator hookItrEnd = (*scritr)->BeforeCast.end(), hookItr = (*scritr)->BeforeCast.begin();
+ for (; hookItr != hookItrEnd ; ++hookItr)
+ (*hookItr).Call(*scritr);
+
+ (*scritr)->_FinishScriptCall();
+ }
+}
+
+void Spell::CallScriptOnCastHandlers()
+{
+ for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end() ; ++scritr)
+ {
+ (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_ON_CAST);
+ std::list<SpellScript::CastHandler>::iterator hookItrEnd = (*scritr)->OnCast.end(), hookItr = (*scritr)->OnCast.begin();
+ for (; hookItr != hookItrEnd ; ++hookItr)
+ (*hookItr).Call(*scritr);
+
+ (*scritr)->_FinishScriptCall();
+ }
+}
+
+void Spell::CallScriptAfterCastHandlers()
+{
+ for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end() ; ++scritr)
+ {
+ (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_AFTER_CAST);
+ std::list<SpellScript::CastHandler>::iterator hookItrEnd = (*scritr)->AfterCast.end(), hookItr = (*scritr)->AfterCast.begin();
+ for (; hookItr != hookItrEnd ; ++hookItr)
+ (*hookItr).Call(*scritr);
+
+ (*scritr)->_FinishScriptCall();
+ }
}
SpellCastResult Spell::CallScriptCheckCastHandlers()
@@ -6984,6 +7049,12 @@ SpellCastResult Spell::CallScriptCheckCastHandlers()
return retVal;
}
+void Spell::PrepareScriptHitHandlers()
+{
+ for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end() ; ++scritr)
+ (*scritr)->_InitHit();
+}
+
bool Spell::CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMode mode)
{
// execute script effect handler hooks and check if effects was prevented
@@ -7016,7 +7087,7 @@ bool Spell::CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMo
break;
default:
ASSERT(false);
- break;
+ return false;
}
(*scritr)->_PrepareScriptCall(hookType);
for (; effItr != effEndItr ; ++effItr)
@@ -7085,17 +7156,17 @@ void Spell::CallScriptAfterUnitTargetSelectHandlers(std::list<Unit*>& unitTarget
}
}
-bool Spell::CanExecuteTriggersOnHit(uint8 effMask) const
+bool Spell::CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* spellInfo) const
{
- // check which effects can trigger proc
- // don't allow to proc for dummy-only spell target hits
- // prevents triggering/procing effects twice from spells like Eviscerate
- for (uint8 i = 0;effMask && i < MAX_SPELL_EFFECTS; ++i)
+ bool only_on_dummy = (spellInfo && (spellInfo->AttributesEx4 & SPELL_ATTR4_PROC_ONLY_ON_DUMMY));
+ // If triggered spell has SPELL_ATTR4_PROC_ONLY_ON_DUMMY then it can only proc on a casted spell with SPELL_EFFECT_DUMMY
+ // If triggered spell doesn't have SPELL_ATTR4_PROC_ONLY_ON_DUMMY then it can NOT proc on SPELL_EFFECT_DUMMY (needs confirmation)
+ for (uint8 i = 0;i < MAX_SPELL_EFFECTS; ++i)
{
- if (m_spellInfo->Effects[i].Effect == SPELL_EFFECT_DUMMY)
- effMask &= ~(1<<i);
+ if ((effMask & (1 << i)) && (only_on_dummy == (m_spellInfo->Effects[i].Effect == SPELL_EFFECT_DUMMY)))
+ return true;
}
- return effMask;
+ return false;
}
void Spell::PrepareTriggersExecutedOnHit()
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 27b0844f32e..6b7c73ad32b 100755
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -453,7 +453,7 @@ class Spell
UsedSpellMods m_appliedMods;
- int32 CalcCastTime() const { return m_casttime; }
+ int32 GetCastTime() const { return m_casttime; }
bool IsAutoRepeat() const { return m_autoRepeat; }
void SetAutoRepeat(bool rep) { m_autoRepeat = rep; }
void ReSetTimer() { m_timer = m_casttime > 0 ? m_casttime : 0; }
@@ -624,6 +624,9 @@ class Spell
// Scripting system
void LoadScripts();
+ void CallScriptBeforeCastHandlers();
+ void CallScriptOnCastHandlers();
+ void CallScriptAfterCastHandlers();
SpellCastResult CallScriptCheckCastHandlers();
void PrepareScriptHitHandlers();
bool CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMode mode);
@@ -633,7 +636,7 @@ class Spell
void CallScriptAfterUnitTargetSelectHandlers(std::list<Unit*>& unitTargets, SpellEffIndex effIndex);
std::list<SpellScript*> m_loadedScripts;
- bool CanExecuteTriggersOnHit(uint8 effMask) const;
+ bool CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* spellInfo = NULL) const;
void PrepareTriggersExecutedOnHit();
typedef std::list< std::pair<SpellInfo const*, int32> > HitTriggerSpells;
HitTriggerSpells m_hitTriggerSpells;
@@ -647,7 +650,7 @@ class Spell
// -------------------------------------------
uint32 m_spellState;
- uint32 m_timer;
+ int32 m_timer;
TriggerCastFlags _triggeredCastFlags;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index b03859638a1..0e25fdcbf37 100755
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -456,7 +456,11 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
ApplyPctF(damage, m_caster->GetTotalAttackPowerValue(BASE_ATTACK));
// Shield Slam
else if (m_spellInfo->SpellFamilyFlags[1] & 0x200 && m_spellInfo->Category == 1209)
- damage += int32(m_caster->ApplyEffectModifiers(m_spellInfo, effIndex, float(m_caster->GetShieldBlockValue())));
+ {
+ uint8 level = m_caster->getLevel();
+ uint32 block_value = m_caster->GetShieldBlockValue(uint32(float(level) * 24.5f), uint32(float(level) * 34.5f));
+ damage += int32(m_caster->ApplyEffectModifiers(m_spellInfo, effIndex, float(block_value)));
+ }
// Victory Rush
else if (m_spellInfo->SpellFamilyFlags[1] & 0x100)
ApplyPctF(damage, m_caster->GetTotalAttackPowerValue(BASE_ATTACK));
@@ -602,57 +606,67 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
case SPELLFAMILY_ROGUE:
{
// Envenom
- if (m_caster->GetTypeId() == TYPEID_PLAYER && (m_spellInfo->SpellFamilyFlags[1] & 0x8))
+ if (m_spellInfo->SpellFamilyFlags[1] & 0x00000008)
{
- // consume from stack dozes not more that have combo-points
- if (uint32 combo = m_caster->ToPlayer()->GetComboPoints())
+ if (Player* player = m_caster->ToPlayer())
{
- // Lookup for Deadly poison (only attacker applied)
- if (AuraEffect const* aurEff = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_ROGUE, 0x10000, 0, 0, m_caster->GetGUID()))
+ // consume from stack dozes not more that have combo-points
+ if (uint32 combo = player->GetComboPoints())
{
- // count consumed deadly poison doses at target
- bool needConsume = true;
- uint32 spellId = aurEff->GetId();
- uint32 doses = aurEff->GetBase()->GetStackAmount();
- if (doses > combo)
- doses = combo;
- // Master Poisoner
- Unit::AuraEffectList const& auraList = m_caster->ToPlayer()->GetAuraEffectsByType(SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK);
- for (Unit::AuraEffectList::const_iterator iter = auraList.begin(); iter != auraList.end(); ++iter)
+ // Lookup for Deadly poison (only attacker applied)
+ if (AuraEffect const* aurEff = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_ROGUE, 0x00010000, 0, 0, m_caster->GetGUID()))
{
- if ((*iter)->GetSpellInfo()->SpellFamilyName == SPELLFAMILY_ROGUE && (*iter)->GetSpellInfo()->SpellIconID == 1960)
+ // count consumed deadly poison doses at target
+ bool needConsume = true;
+ uint32 spellId = aurEff->GetId();
+
+ uint32 doses = aurEff->GetBase()->GetStackAmount();
+ if (doses > combo)
+ doses = combo;
+
+ // Master Poisoner
+ Unit::AuraEffectList const& auraList = player->GetAuraEffectsByType(SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK);
+ for (Unit::AuraEffectList::const_iterator iter = auraList.begin(); iter != auraList.end(); ++iter)
{
- uint32 chance = (*iter)->GetSpellInfo()->Effects[EFFECT_2].CalcValue(m_caster);
+ if ((*iter)->GetSpellInfo()->SpellFamilyName == SPELLFAMILY_ROGUE && (*iter)->GetSpellInfo()->SpellIconID == 1960)
+ {
+ uint32 chance = (*iter)->GetSpellInfo()->Effects[EFFECT_2].CalcValue(m_caster);
- if (chance && roll_chance_i(chance))
- needConsume = false;
+ if (chance && roll_chance_i(chance))
+ needConsume = false;
- break;
+ break;
+ }
}
+
+ if (needConsume)
+ for (uint32 i = 0; i < doses; ++i)
+ unitTarget->RemoveAuraFromStack(spellId);
+
+ damage *= doses;
+ damage += int32(player->GetTotalAttackPowerValue(BASE_ATTACK) * 0.09f * combo);
}
- if (needConsume)
- for (uint32 i = 0; i < doses; ++i)
- unitTarget->RemoveAuraFromStack(spellId);
- damage *= doses;
- damage += int32(((Player*)m_caster)->GetTotalAttackPowerValue(BASE_ATTACK) * 0.09f * doses);
+ // Eviscerate and Envenom Bonus Damage (item set effect)
+ if (m_caster->HasAura(37169))
+ damage += combo * 40;
}
- // Eviscerate and Envenom Bonus Damage (item set effect)
- if (m_caster->HasAura(37169))
- damage += ((Player*)m_caster)->GetComboPoints()*40;
}
}
// Eviscerate
- else if ((m_spellInfo->SpellFamilyFlags[0] & 0x00020000) && m_caster->GetTypeId() == TYPEID_PLAYER)
+ else if (m_spellInfo->SpellFamilyFlags[0] & 0x00020000)
{
- if (uint32 combo = ((Player*)m_caster)->GetComboPoints())
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
- float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
- damage += irand(int32(ap * combo * 0.03f), int32(ap * combo * 0.07f));
+ if (uint32 combo = ((Player*)m_caster)->GetComboPoints())
+ {
+ float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
+ damage += irand(int32(ap * combo * 0.03f), int32(ap * combo * 0.07f));
- // Eviscerate and Envenom Bonus Damage (item set effect)
- if (m_caster->HasAura(37169))
- damage += combo*40;
+ // Eviscerate and Envenom Bonus Damage (item set effect)
+ if (m_caster->HasAura(37169))
+ damage += combo*40;
+ }
}
}
break;
@@ -716,7 +730,9 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
// Shield of Righteousness
if (m_spellInfo->SpellFamilyFlags[EFFECT_1] & 0x100000)
{
- damage += CalculatePctN(m_caster->GetShieldBlockValue(), m_spellInfo->Effects[EFFECT_1].CalcValue());
+ uint8 level = m_caster->getLevel();
+ uint32 block_value = m_caster->GetShieldBlockValue(uint32(float(level) * 29.5f), uint32(float(level) * 39.5f));
+ damage += CalculatePctN(block_value, m_spellInfo->Effects[EFFECT_1].CalcValue());
break;
}
break;
@@ -917,7 +933,7 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return;
- uint32 spell_id = roll_chance_i(50)
+ spell_id = roll_chance_i(50)
? 29277 // Summon Purified Helboar Meat
: 29278; // Summon Toxic Helboar Meat
@@ -945,12 +961,16 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
return;
case 35745: // Socrethar's Stone
{
- uint32 spell_id;
switch (m_caster->GetAreaId())
{
- case 3900: spell_id = 35743; break; // Socrethar Portal
- case 3742: spell_id = 35744; break; // Socrethar Portal
- default: return;
+ case 3900:
+ spell_id = 35743;
+ break; // Socrethar Portal
+ case 3742:
+ spell_id = 35744;
+ break; // Socrethar Portal
+ default:
+ return;
}
m_caster->CastSpell(m_caster, spell_id, true);
@@ -1405,11 +1425,19 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
{
if (!unitTarget)
return;
- // Restorative Totems
if (Unit* owner = m_caster->GetOwner())
+ {
+ if (m_triggeredByAuraSpell)
+ damage = int32(owner->SpellHealingBonus(unitTarget, m_triggeredByAuraSpell, damage, HEAL));
+
+ // Restorative Totems
if (AuraEffect* dummy = owner->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 338, 1))
AddPctN(damage, dummy->GetAmount());
+ // Glyph of Healing Stream Totem
+ if (AuraEffect const* aurEff = owner->GetAuraEffect(55456, EFFECT_0))
+ AddPctN(damage, aurEff->GetAmount());
+ }
m_caster->CastCustomSpell(unitTarget, 52042, &damage, 0, 0, true, 0, 0, m_originalCasterGUID);
return;
}
@@ -1441,7 +1469,7 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
if (m_spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_DK_DEATH_STRIKE)
{
uint32 count = unitTarget->GetDiseasesByCaster(m_caster->GetGUID());
- int32 bp = int32(count * m_caster->CountPctFromMaxHealth(int32(m_spellInfo->Effects[EFFECT_0].DamageMultiplier)));
+ bp = int32(count * m_caster->CountPctFromMaxHealth(int32(m_spellInfo->Effects[EFFECT_0].DamageMultiplier)));
// Improved Death Strike
if (AuraEffect const* aurEff = m_caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_DEATHKNIGHT, 2751, 0))
AddPctN(bp, m_caster->CalculateSpellDamage(m_caster, aurEff->GetSpellInfo(), 2));
@@ -1453,12 +1481,12 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
{
if (m_caster->IsFriendlyTo(unitTarget))
{
- int32 bp = int32(damage * 1.5f);
+ bp = int32(damage * 1.5f);
m_caster->CastCustomSpell(unitTarget, 47633, &bp, NULL, NULL, true);
}
else
{
- int32 bp = damage;
+ bp = damage;
m_caster->CastCustomSpell(unitTarget, 47632, &bp, NULL, NULL, true);
}
return;
@@ -1657,13 +1685,6 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
}
return;
}
- // Priest Shadowfiend (34433) need apply mana gain trigger aura on pet
- case 41967:
- {
- if (Unit* pet = unitTarget->GetGuardianPet())
- pet->CastSpell(pet, 28305, true);
- return;
- }
}
}
@@ -2084,12 +2105,12 @@ void Spell::EffectUnlearnSpecialization(SpellEffIndex effIndex)
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- Player* _player = unitTarget->ToPlayer();
+ Player* player = unitTarget->ToPlayer();
uint32 spellToUnlearn = m_spellInfo->Effects[effIndex].TriggerSpell;
- _player->removeSpell(spellToUnlearn);
+ player->removeSpell(spellToUnlearn);
- sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell: Player %u has unlearned spell %u from NpcGUID: %u", _player->GetGUIDLow(), spellToUnlearn, m_caster->GetGUIDLow());
+ sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUIDLow(), spellToUnlearn, m_caster->GetGUIDLow());
}
void Spell::EffectPowerDrain(SpellEffIndex effIndex)
@@ -2138,7 +2159,7 @@ void Spell::EffectSendEvent(SpellEffIndex effIndex)
WorldObject* target = NULL;
- // call events for target if present
+ // call events for object target if present
if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT_TARGET)
{
if (unitTarget)
@@ -2146,9 +2167,15 @@ void Spell::EffectSendEvent(SpellEffIndex effIndex)
else if (gameObjTarget)
target = gameObjTarget;
}
- // call event with no target or focus target when no targets could be found due to no dbc entry
- else if (!m_spellInfo->Effects[effIndex].GetProvidedTargetMask())
+ else // if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT)
{
+ // let's prevent executing effect handler twice in case when spell effect is capable of targeting an object
+ // this check was requested by scripters, but it has some downsides:
+ // now it's impossible to script (using sEventScripts) a cast which misses all targets
+ // or to have an ability to script the moment spell hits dest (in a case when there are object targets present)
+ if (m_spellInfo->Effects[effIndex].GetProvidedTargetMask() & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_GAMEOBJECT_MASK))
+ return;
+ // some spells have no target entries in dbc and they use focus target
if (focusObject)
target = focusObject;
// TODO: there should be a possibility to pass dest target to event script
@@ -2232,6 +2259,13 @@ void Spell::EffectHeal(SpellEffIndex /*effIndex*/)
addhealth += damageAmount;
}
+ // Runic Healing Injector (heal increased by 25% for engineers - 3.2.0 patch change)
+ else if (m_spellInfo->Id == 67489)
+ {
+ if (Player* player = m_caster->ToPlayer())
+ if (player->HasSkill(SKILL_ENGINEERING))
+ AddPctN(addhealth, 25);
+ }
// Swiftmend - consumes Regrowth or Rejuvenation
else if (m_spellInfo->TargetAuraState == AURA_STATE_SWIFTMEND && unitTarget->HasAuraState(AURA_STATE_SWIFTMEND, m_spellInfo, m_caster))
{
@@ -2562,15 +2596,13 @@ void Spell::EffectPersistentAA(SpellEffIndex effIndex)
// Caster not in world, might be spell triggered from aura removal
if (!caster->IsInWorld())
return;
- DynamicObject* dynObj = new DynamicObject();
- if (!dynObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), caster, m_spellInfo->Id, *m_targets.GetDst(), radius, false, DYNAMIC_OBJECT_AREA_SPELL))
+ DynamicObject* dynObj = new DynamicObject(false);
+ if (!dynObj->CreateDynamicObject(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), caster, m_spellInfo->Id, *m_targets.GetDst(), radius, DYNAMIC_OBJECT_AREA_SPELL))
{
delete dynObj;
return;
}
- dynObj->GetMap()->AddToMap(dynObj);
-
if (Aura* aura = Aura::TryCreate(m_spellInfo, MAX_EFFECT_MASK, dynObj, caster, &m_spellValue->EffectBasePoints[0]))
{
m_spellAura = aura;
@@ -2624,6 +2656,13 @@ void Spell::EffectEnergize(SpellEffIndex effIndex)
case 48542: // Revitalize
damage = int32(CalculatePctN(unitTarget->GetMaxPower(power), damage));
break;
+ case 67490: // Runic Mana Injector (mana gain increased by 25% for engineers - 3.2.0 patch change)
+ {
+ if (Player* player = m_caster->ToPlayer())
+ if (player->HasSkill(SKILL_ENGINEERING))
+ AddPctN(damage, 25);
+ break;
+ }
case 71132: // Glyph of Shadow Word: Pain
damage = int32(CalculatePctN(unitTarget->GetCreateMana(), 1)); // set 1 as value, missing in dbc
break;
@@ -3406,17 +3445,14 @@ void Spell::EffectAddFarsight(SpellEffIndex effIndex)
if (!m_caster->IsInWorld())
return;
- DynamicObject* dynObj = new DynamicObject();
- if (!dynObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), m_caster, m_spellInfo->Id, *m_targets.GetDst(), radius, true, DYNAMIC_OBJECT_FARSIGHT_FOCUS))
+ DynamicObject* dynObj = new DynamicObject(true);
+ if (!dynObj->CreateDynamicObject(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), m_caster, m_spellInfo->Id, *m_targets.GetDst(), radius, DYNAMIC_OBJECT_FARSIGHT_FOCUS))
{
delete dynObj;
return;
}
dynObj->SetDuration(duration);
-
- dynObj->setActive(true); //must before add to map to be put in world container
- dynObj->GetMap()->AddToMap(dynObj); //grid will also be loaded
dynObj->SetCasterViewpoint();
}
@@ -3569,7 +3605,7 @@ void Spell::EffectEnchantItemPerm(SpellEffIndex effIndex)
// add new enchanting if equipped
item_owner->ApplyEnchantment(itemTarget, PERM_ENCHANTMENT_SLOT, true);
- itemTarget->SetSoulboundTradeable(NULL, item_owner, false);
+ itemTarget->ClearSoulboundTradeable(item_owner);
}
}
@@ -3633,7 +3669,7 @@ void Spell::EffectEnchantItemPrismatic(SpellEffIndex effIndex)
// add new enchanting if equipped
item_owner->ApplyEnchantment(itemTarget, PRISMATIC_ENCHANTMENT_SLOT, true);
- itemTarget->SetSoulboundTradeable(NULL, item_owner, false);
+ itemTarget->ClearSoulboundTradeable(item_owner);
}
void Spell::EffectEnchantItemTmp(SpellEffIndex effIndex)
@@ -4314,19 +4350,22 @@ void Spell::EffectInterruptCast(SpellEffIndex effIndex)
// TODO: not all spells that used this effect apply cooldown at school spells
// also exist case: apply cooldown to interrupted cast only and to all spells
- for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; ++i)
+ // there is no CURRENT_AUTOREPEAT_SPELL spells that can be interrupted
+ for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_AUTOREPEAT_SPELL; ++i)
{
if (Spell* spell = unitTarget->GetCurrentSpell(CurrentSpellTypes(i)))
{
SpellInfo const* curSpellInfo = spell->m_spellInfo;
// check if we can interrupt spell
if ((spell->getState() == SPELL_STATE_CASTING
- || (spell->getState() == SPELL_STATE_PREPARING && spell->CalcCastTime() > 0.0f))
- && curSpellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT && curSpellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)
+ || (spell->getState() == SPELL_STATE_PREPARING && spell->GetCastTime() > 0.0f))
+ && curSpellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE
+ && ((i == CURRENT_GENERIC_SPELL && curSpellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT)
+ || (i == CURRENT_CHANNELED_SPELL && curSpellInfo->ChannelInterruptFlags & CHANNEL_INTERRUPT_FLAG_INTERRUPT)))
{
if (m_originalCaster)
{
- int32 duration = m_originalCaster->ModSpellDuration(m_spellInfo, unitTarget, m_originalCaster->CalcSpellDuration(m_spellInfo), false);
+ int32 duration = m_originalCaster->ModSpellDuration(m_spellInfo, unitTarget, m_originalCaster->CalcSpellDuration(m_spellInfo), false, 1 << effIndex);
unitTarget->ProhibitSpellSchool(curSpellInfo->GetSchoolMask(), duration/*GetSpellDuration(m_spellInfo)*/);
}
ExecuteLogEffectInterruptCast(effIndex, unitTarget, curSpellInfo->Id);
@@ -4376,8 +4415,8 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex)
if (pGameObj->GetGoType() == GAMEOBJECT_TYPE_FLAGDROP && m_caster->GetTypeId() == TYPEID_PLAYER)
{
- Player* pl = m_caster->ToPlayer();
- Battleground* bg = pl->GetBattleground();
+ Player* player = m_caster->ToPlayer();
+ Battleground* bg = player->GetBattleground();
switch (pGameObj->GetMapId())
{
@@ -4387,7 +4426,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex)
{
uint32 team = ALLIANCE;
- if (pl->GetTeam() == team)
+ if (player->GetTeam() == team)
team = HORDE;
((BattlegroundWS*)bg)->SetDroppedFlagGUID(pGameObj->GetGUID(), team);
@@ -4931,6 +4970,25 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
}
return;
}
+ case 57347: // Retrieving (Wintergrasp RP-GG pickup spell)
+ {
+ if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT || m_caster->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ unitTarget->ToCreature()->DespawnOrUnsummon();
+
+ return;
+ }
+ case 57349: // Drop RP-GG (Wintergrasp RP-GG at death drop spell)
+ {
+ if (m_caster->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ // Delete item from inventory at death
+ m_caster->ToPlayer()->DestroyItemCount(damage, 5, true);
+
+ return;
+ }
case 58418: // Portal to Orgrimmar
case 58420: // Portal to Stormwind
{
@@ -5322,11 +5380,11 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
case 64142: // Upper Deck - Create Foam Sword
if (unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- Player* plr = unitTarget->ToPlayer();
+ Player* player = unitTarget->ToPlayer();
static uint32 const itemId[] = {45061, 45176, 45177, 45178, 45179, 0};
// player can only have one of these items
for (uint32 const* itr = &itemId[0]; *itr; ++itr)
- if (plr->HasItemCount(*itr, 1, true))
+ if (player->HasItemCount(*itr, 1, true))
return;
DoCreateItem(effIndex, itemId[urand(0, 4)]);
return;
@@ -5814,7 +5872,10 @@ void Spell::EffectInebriate(SpellEffIndex /*effIndex*/)
uint16 currentDrunk = player->GetDrunkValue();
uint16 drunkMod = damage * 256;
if (currentDrunk + drunkMod > 0xFFFF)
+ {
currentDrunk = 0xFFFF;
+ player->CastSpell(player, 67468, false);
+ }
else
currentDrunk += drunkMod;
player->SetDrunkValue(currentDrunk, m_CastItem ? m_CastItem->GetEntry() : 0);
@@ -5825,16 +5886,15 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex)
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
- if (m_caster->GetTypeId() != TYPEID_PLAYER)
+ Player* player = m_caster->ToPlayer();
+ if (!player)
return;
- Player* _player = m_caster->ToPlayer();
-
Item* foodItem = itemTarget;
if (!foodItem)
return;
- Pet* pet = _player->GetPet();
+ Pet* pet = player->GetPet();
if (!pet)
return;
@@ -5848,7 +5908,7 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex)
ExecuteLogEffectDestroyItem(effIndex, foodItem->GetEntry());
uint32 count = 1;
- _player->DestroyItemCount(foodItem, count, true);
+ player->DestroyItemCount(foodItem, count, true);
// TODO: fix crash when a spell has two effects, both pointed at the same item target
m_caster->CastCustomSpell(pet, m_spellInfo->Effects[effIndex].TriggerSpell, &benefit, NULL, NULL, true);
@@ -6047,7 +6107,7 @@ void Spell::EffectReputation(SpellEffIndex effIndex)
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- Player* _player = unitTarget->ToPlayer();
+ Player* player = unitTarget->ToPlayer();
int32 rep_change = damage;
@@ -6064,10 +6124,10 @@ void Spell::EffectReputation(SpellEffIndex effIndex)
}
// Bonus from spells that increase reputation gain
- float bonus = rep_change * _player->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN) / 100.0f; // 10%
+ float bonus = rep_change * player->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN) / 100.0f; // 10%
rep_change += (int32)bonus;
- _player->GetReputationMgr().ModifyReputation(factionEntry, rep_change);
+ player->GetReputationMgr().ModifyReputation(factionEntry, rep_change);
}
void Spell::EffectQuestComplete(SpellEffIndex effIndex)
@@ -6133,15 +6193,15 @@ void Spell::EffectSelfResurrect(SpellEffIndex effIndex)
mana = CalculatePctN(m_caster->GetMaxPower(POWER_MANA), damage);
}
- Player* plr = m_caster->ToPlayer();
- plr->ResurrectPlayer(0.0f);
+ Player* player = m_caster->ToPlayer();
+ player->ResurrectPlayer(0.0f);
- plr->SetHealth(health);
- plr->SetPower(POWER_MANA, mana);
- plr->SetPower(POWER_RAGE, 0);
- plr->SetPower(POWER_ENERGY, plr->GetMaxPower(POWER_ENERGY));
+ player->SetHealth(health);
+ player->SetPower(POWER_MANA, mana);
+ player->SetPower(POWER_RAGE, 0);
+ player->SetPower(POWER_ENERGY, player->GetMaxPower(POWER_ENERGY));
- plr->SpawnCorpseBones();
+ player->SpawnCorpseBones();
}
void Spell::EffectSkinning(SpellEffIndex /*effIndex*/)
@@ -6177,9 +6237,13 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/)
if (!unitTarget)
return;
- float x, y, z;
- unitTarget->GetContactPoint(m_caster, x, y, z);
- m_caster->GetMotionMaster()->MoveCharge(x, y, z);
+ float angle = unitTarget->GetRelativeAngle(m_caster);
+ Position pos;
+
+ unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
+ unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetObjectSize(), angle);
+
+ m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ + unitTarget->GetObjectSize());
}
if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT_TARGET)
@@ -6200,9 +6264,13 @@ void Spell::EffectChargeDest(SpellEffIndex /*effIndex*/)
if (m_targets.HasDst())
{
- float x, y, z;
- m_targets.GetDst()->GetPosition(x, y, z);
- m_caster->GetMotionMaster()->MoveCharge(x, y, z);
+ Position pos;
+ m_targets.GetDst()->GetPosition(&pos);
+ float angle = m_caster->GetRelativeAngle(pos.GetPositionX(), pos.GetPositionY());
+ float dist = m_caster->GetDistance(pos);
+ m_caster->GetFirstCollisionPosition(pos, dist, angle);
+
+ m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ);
}
}
@@ -6297,13 +6365,13 @@ void Spell::EffectQuestClear(SpellEffIndex effIndex)
// remove all quest entries for 'entry' from quest log
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
{
- uint32 quest = player->GetQuestSlotQuestId(slot);
- if (quest == quest_id)
+ uint32 logQuest = player->GetQuestSlotQuestId(slot);
+ if (logQuest == quest_id)
{
player->SetQuestSlot(slot, 0);
- // we ignore unequippable quest items in this case, its' still be equipped
- player->TakeQuestSourceItem(quest, false);
+ // we ignore unequippable quest items in this case, it's still be equipped
+ player->TakeQuestSourceItem(logQuest, false);
}
}
@@ -6382,20 +6450,20 @@ void Spell::EffectSummonDeadPet(SpellEffIndex /*effIndex*/)
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT)
return;
- if (m_caster->GetTypeId() != TYPEID_PLAYER)
- return;
- Player* _player = m_caster->ToPlayer();
- Pet* pet = _player->GetPet();
- if (!pet)
+ Player* player = m_caster->ToPlayer();
+ if (!player)
return;
- if (pet->isAlive())
+
+ Pet* pet = player->GetPet();
+ if (!pet || pet->isAlive())
return;
+
if (damage < 0)
return;
float x, y, z;
- _player->GetPosition(x, y, z);
- _player->GetMap()->CreatureRelocation(pet, x, y, z, _player->GetOrientation());
+ player->GetPosition(x, y, z);
+ player->GetMap()->CreatureRelocation(pet, x, y, z, player->GetOrientation());
pet->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
pet->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
@@ -6404,7 +6472,7 @@ void Spell::EffectSummonDeadPet(SpellEffIndex /*effIndex*/)
pet->SetHealth(pet->CountPctFromMaxHealth(damage));
//pet->AIM_Initialize();
- //_player->PetSpellInitialize();
+ //player->PetSpellInitialize();
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
}
@@ -6915,9 +6983,9 @@ void Spell::EffectActivateRune(SpellEffIndex effIndex)
if (m_caster->GetTypeId() != TYPEID_PLAYER)
return;
- Player* plr = m_caster->ToPlayer();
+ Player* player = m_caster->ToPlayer();
- if (plr->getClass() != CLASS_DEATH_KNIGHT)
+ if (player->getClass() != CLASS_DEATH_KNIGHT)
return;
// needed later
@@ -6927,12 +6995,37 @@ void Spell::EffectActivateRune(SpellEffIndex effIndex)
if (count == 0) count = 1;
for (uint32 j = 0; j < MAX_RUNES && count > 0; ++j)
{
- if (plr->GetRuneCooldown(j) && plr->GetCurrentRune(j) == RuneType(m_spellInfo->Effects[effIndex].MiscValue))
+ if (player->GetRuneCooldown(j) && player->GetCurrentRune(j) == RuneType(m_spellInfo->Effects[effIndex].MiscValue))
{
- plr->SetRuneCooldown(j, 0);
+ if (m_spellInfo->Id == 45529)
+ if (player->GetBaseRune(j) != RuneType(m_spellInfo->Effects[effIndex].MiscValueB))
+ continue;
+ player->SetRuneCooldown(j, 0);
--count;
}
}
+
+ // Blood Tap
+ if (m_spellInfo->Id == 45529 && count > 0)
+ {
+ for (uint32 l = 0; l < MAX_RUNES && count > 0; ++l)
+ {
+ // Check if both runes are on cd as that is the only time when this needs to come into effect
+ if ((player->GetRuneCooldown(l) && player->GetCurrentRune(l) == RuneType(m_spellInfo->Effects[effIndex].MiscValueB)) && (player->GetRuneCooldown(l+1) && player->GetCurrentRune(l+1) == RuneType(m_spellInfo->Effects[effIndex].MiscValueB)))
+ {
+ // Should always update the rune with the lowest cd
+ if (player->GetRuneCooldown(l) >= player->GetRuneCooldown(l+1))
+ l++;
+ player->SetRuneCooldown(l, 0);
+ --count;
+ // is needed to push through to the client that the rune is active
+ player->ResyncRunes(MAX_RUNES);
+ }
+ else
+ break;
+ }
+ }
+
// Empower rune weapon
if (m_spellInfo->Id == 47568)
{
@@ -6942,8 +7035,8 @@ void Spell::EffectActivateRune(SpellEffIndex effIndex)
for (uint32 i = 0; i < MAX_RUNES; ++i)
{
- if (plr->GetRuneCooldown(i) && (plr->GetCurrentRune(i) == RUNE_FROST || plr->GetCurrentRune(i) == RUNE_DEATH))
- plr->SetRuneCooldown(i, 0);
+ if (player->GetRuneCooldown(i) && (player->GetCurrentRune(i) == RUNE_FROST || player->GetCurrentRune(i) == RUNE_DEATH))
+ player->SetRuneCooldown(i, 0);
}
}
}
@@ -7063,9 +7156,9 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const*
// level of pet summoned using engineering item based at engineering skill level
if (m_CastItem && caster->GetTypeId() == TYPEID_PLAYER)
if (ItemTemplate const* proto = m_CastItem->GetTemplate())
- if (proto->RequiredSkill == SKILL_ENGINERING)
- if (uint16 skill202 = caster->ToPlayer()->GetSkillValue(SKILL_ENGINERING))
- level = skill202/5;
+ if (proto->RequiredSkill == SKILL_ENGINEERING)
+ if (uint16 skill202 = caster->ToPlayer()->GetSkillValue(SKILL_ENGINEERING))
+ level = skill202 / 5;
//float radius = GetSpellRadiusForFriend(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i]));
float radius = 5.0f;
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 543baa82789..7836c177c26 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -1735,6 +1735,17 @@ uint32 SpellInfo::GetEffectMechanicMask(uint8 effIndex) const
return mask;
}
+uint32 SpellInfo::GetSpellMechanicMaskByEffectMask(uint32 effectMask) const
+{
+ uint32 mask = 0;
+ if (Mechanic)
+ mask |= 1<< Mechanic;
+ for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if ((effectMask & (1 << i)) && Effects[i].Mechanic)
+ mask |= 1<< Effects[i].Mechanic;
+ return mask;
+}
+
Mechanics SpellInfo::GetEffectMechanic(uint8 effIndex) const
{
if (Effects[effIndex].IsEffect() && Effects[effIndex].Mechanic)
@@ -2293,6 +2304,19 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
if (Id == 30708)
return false;
break;
+ case SPELLFAMILY_ROGUE:
+ switch (Id)
+ {
+ // Envenom must be considered as a positive effect even though it deals damage
+ case 32645: // Envenom (Rank 1)
+ case 32684: // Envenom (Rank 2)
+ case 57992: // Envenom (Rank 3)
+ case 57993: // Envenom (Rank 4)
+ return true;
+ default:
+ break;
+ }
+ break;
default:
break;
}
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index b4f4ca8c11e..cdc24f9ceac 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -444,6 +444,7 @@ public:
SpellSchoolMask GetSchoolMask() const;
uint32 GetAllEffectsMechanicMask() const;
uint32 GetEffectMechanicMask(uint8 effIndex) const;
+ uint32 GetSpellMechanicMaskByEffectMask(uint32 effectMask) const;
Mechanics GetEffectMechanic(uint8 effIndex) const;
uint32 GetDispelMask() const;
static uint32 GetDispelMask(DispelType type);
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index cfa28080b2b..b7c31ee29c6 100755
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -96,7 +96,7 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto,
return DIMINISHING_CONTROLLED_ROOT;
// Dragon's Breath
else if (spellproto->SpellFamilyFlags[0] & 0x800000)
- return DIMINISHING_DISORIENT;
+ return DIMINISHING_DRAGONS_BREATH;
break;
}
case SPELLFAMILY_WARRIOR:
@@ -167,7 +167,7 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto,
}
case SPELLFAMILY_HUNTER:
{
- // Hunter's mark
+ // Hunter's Mark
if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538)
return DIMINISHING_LIMITONLY;
// Scatter Shot (own diminishing)
@@ -321,20 +321,20 @@ bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
{
switch (group)
{
+ case DIMINISHING_BANISH:
case DIMINISHING_CONTROLLED_STUN:
- case DIMINISHING_STUN:
- case DIMINISHING_ENTRAPMENT:
case DIMINISHING_CONTROLLED_ROOT:
- case DIMINISHING_ROOT:
+ case DIMINISHING_CYCLONE:
+ case DIMINISHING_DISORIENT:
+ case DIMINISHING_ENTRAPMENT:
case DIMINISHING_FEAR:
+ case DIMINISHING_HORROR:
case DIMINISHING_MIND_CONTROL:
- case DIMINISHING_DISORIENT:
- case DIMINISHING_CYCLONE:
- case DIMINISHING_BANISH:
- case DIMINISHING_LIMITONLY:
case DIMINISHING_OPENING_STUN:
- case DIMINISHING_HORROR:
+ case DIMINISHING_ROOT:
+ case DIMINISHING_STUN:
case DIMINISHING_SLEEP:
+ case DIMINISHING_LIMITONLY:
return true;
default:
return false;
@@ -351,7 +351,7 @@ SpellMgr::~SpellMgr()
}
/// Some checks for spells, to prevent adding deprecated/broken spells for trainers, spell book, etc
-bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* pl, bool msg)
+bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* player, bool msg)
{
// not exist
if (!spellInfo)
@@ -378,8 +378,8 @@ bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* pl, bool msg)
{
if (msg)
{
- if (pl)
- ChatHandler(pl).PSendSysMessage("Craft spell %u not have create item entry.", spellInfo->Id);
+ if (player)
+ ChatHandler(player).PSendSysMessage("Craft spell %u not have create item entry.", spellInfo->Id);
else
sLog->outErrorDb("Craft spell %u not have create item entry.", spellInfo->Id);
}
@@ -392,8 +392,8 @@ bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* pl, bool msg)
{
if (msg)
{
- if (pl)
- ChatHandler(pl).PSendSysMessage("Craft spell %u create not-exist in DB item (Entry: %u) and then...", spellInfo->Id, spellInfo->Effects[i].ItemType);
+ if (player)
+ ChatHandler(player).PSendSysMessage("Craft spell %u create not-exist in DB item (Entry: %u) and then...", spellInfo->Id, spellInfo->Effects[i].ItemType);
else
sLog->outErrorDb("Craft spell %u create not-exist in DB item (Entry: %u) and then...", spellInfo->Id, spellInfo->Effects[i].ItemType);
}
@@ -406,12 +406,12 @@ bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* pl, bool msg)
case SPELL_EFFECT_LEARN_SPELL:
{
SpellInfo const* spellInfo2 = sSpellMgr->GetSpellInfo(spellInfo->Effects[i].TriggerSpell);
- if (!IsSpellValid(spellInfo2, pl, msg))
+ if (!IsSpellValid(spellInfo2, player, msg))
{
if (msg)
{
- if (pl)
- ChatHandler(pl).PSendSysMessage("Spell %u learn to broken spell %u, and then...", spellInfo->Id, spellInfo->Effects[i].TriggerSpell);
+ if (player)
+ ChatHandler(player).PSendSysMessage("Spell %u learn to broken spell %u, and then...", spellInfo->Id, spellInfo->Effects[i].TriggerSpell);
else
sLog->outErrorDb("Spell %u learn to invalid spell %u, and then...", spellInfo->Id, spellInfo->Effects[i].TriggerSpell);
}
@@ -430,8 +430,8 @@ bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* pl, bool msg)
{
if (msg)
{
- if (pl)
- ChatHandler(pl).PSendSysMessage("Craft spell %u have not-exist reagent in DB item (Entry: %u) and then...", spellInfo->Id, spellInfo->Reagent[j]);
+ if (player)
+ ChatHandler(player).PSendSysMessage("Craft spell %u have not-exist reagent in DB item (Entry: %u) and then...", spellInfo->Id, spellInfo->Reagent[j]);
else
sLog->outErrorDb("Craft spell %u have not-exist reagent in DB item (Entry: %u) and then...", spellInfo->Id, spellInfo->Reagent[j]);
}
@@ -694,6 +694,38 @@ void SpellMgr::GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>&
}
}
+bool SpellMgr::AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, int32 amount, std::map<SpellGroup, int32>& groups) const
+{
+ uint32 spellId = spellInfo->GetFirstRankSpell()->Id;
+ SpellSpellGroupMapBounds spellGroup = GetSpellSpellGroupMapBounds(spellId);
+ // Find group with SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT if it belongs to one
+ for (SpellSpellGroupMap::const_iterator itr = spellGroup.first; itr != spellGroup.second ; ++itr)
+ {
+ SpellGroup group = itr->second;
+ SpellGroupStackMap::const_iterator found = mSpellGroupStack.find(group);
+ if (found != mSpellGroupStack.end())
+ {
+ if (found->second == SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT)
+ {
+ // Put the highest amount in the map
+ if (groups.find(group) == groups.end())
+ groups[group] = amount;
+ else
+ {
+ int32 curr_amount = groups[group];
+ // Take absolute value because this also counts for the highest negative aura
+ if (abs(curr_amount) < abs(amount))
+ groups[group] = amount;
+ }
+ // return because a spell should be in only one SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT group
+ return true;
+ }
+ }
+ }
+ // Not in a SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT group, so return false
+ return false;
+}
+
SpellGroupStackRule SpellMgr::CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const
{
uint32 spellid_1 = spellInfo1->GetFirstRankSpell()->Id;
@@ -973,7 +1005,7 @@ SpellThreatEntry const* SpellMgr::GetSpellThreatEntry(uint32 spellID) const
else
{
uint32 firstSpell = GetFirstSpellInChain(spellID);
- SpellThreatMap::const_iterator itr = mSpellThreatMap.find(firstSpell);
+ itr = mSpellThreatMap.find(firstSpell);
if (itr != mSpellThreatMap.end())
return &itr->second;
}
@@ -2792,6 +2824,13 @@ void SpellMgr::LoadSpellCustomAttr()
case 48689:
case 48690:
case 48691:
+ case 6785: // Ravage
+ case 6787:
+ case 9866:
+ case 9867:
+ case 27005:
+ case 48578:
+ case 48579:
case 21987: // Lash of Pain
case 23959: // Test Stab R50
case 24825: // Test Backstab
@@ -2933,11 +2972,15 @@ void SpellMgr::LoadDbcDataCorrections()
break;
case 31447: // Mark of Kaz'rogal (needs target selection script)
case 31298: // Sleep (needs target selection script)
+ case 51904: // Summon Ghouls On Scarlet Crusade (this should use conditions table, script for this spell needs to be fixed)
+ case 2895: // Wrath of Air Totem rank 1 (Aura)
+ case 68933: // Wrath of Air Totem rank 2 (Aura)
+ case 29200: // Purify Helboar Meat
spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER;
spellInfo->EffectImplicitTargetB[0] = 0;
break;
case 31344: // Howl of Azgalor
- spellInfo->EffectRadiusIndex[0] = 12; // 100yards instead of 50000?!
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_100_YARDS; // 100yards instead of 50000?!
break;
case 42818: // Headless Horseman - Wisp Flight Port
case 42821: // Headless Horseman - Wisp Flight Missile
@@ -2973,10 +3016,14 @@ void SpellMgr::LoadDbcDataCorrections()
case 59725: // Improved Spell Reflection - aoe aura
// Target entry seems to be wrong for this spell :/
spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER_AREA_PARTY;
- spellInfo->EffectRadiusIndex[0] = 45;
- break;
- case 44978: case 45001: case 45002: // Wild Magic
- case 45004: case 45006: case 45010: // Wild Magic
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_10_YARDS_2;
+ break;
+ case 44978: // Wild Magic
+ case 45001:
+ case 45002:
+ case 45004:
+ case 45006:
+ case 45010:
case 31347: // Doom
case 41635: // Prayer of Mending
case 44869: // Spectral Blast
@@ -3033,7 +3080,8 @@ void SpellMgr::LoadDbcDataCorrections()
case 50312: // Unholy Frenzy
spellInfo->MaxAffectedTargets = 15;
break;
- case 38794: case 33711: //Murmur's Touch
+ case 33711: //Murmur's Touch
+ case 38794:
spellInfo->MaxAffectedTargets = 1;
spellInfo->EffectTriggerSpell[0] = 33760;
break;
@@ -3073,11 +3121,8 @@ void SpellMgr::LoadDbcDataCorrections()
case 51852: // The Eye of Acherus (no spawn in phase 2 in db)
spellInfo->EffectMiscValue[0] |= 1;
break;
- case 51904: // Summon Ghouls On Scarlet Crusade (this should use conditions table, script for this spell needs to be fixed)
- spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER;
- break;
case 29809: // Desecration Arm - 36 instead of 37 - typo? :/
- spellInfo->EffectRadiusIndex[0] = 37;
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_7_YARDS;
break;
// Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data
// To prevent aura staying on target after talent unlearned
@@ -3090,13 +3135,23 @@ void SpellMgr::LoadDbcDataCorrections()
case 48422:
spellInfo->Stances = 1 << (FORM_TREE - 1);
break;
+ case 51466: // Elemental Oath (Rank 1)
+ case 51470: // Elemental Oath (Rank 2)
+ spellInfo->Effect[EFFECT_1] = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->EffectApplyAuraName[EFFECT_1] = SPELL_AURA_ADD_FLAT_MODIFIER;
+ spellInfo->EffectMiscValue[EFFECT_1] = SPELLMOD_EFFECT2;
+ spellInfo->EffectSpellClassMask[EFFECT_1] = flag96(0x00000000, 0x00004000, 0x00000000);
+ break;
case 47569: // Improved Shadowform (Rank 1)
// with this spell atrribute aura can be stacked several times
spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFT;
break;
- case 64904: //Hymn of Hope
+ case 64904: // Hymn of Hope
spellInfo->EffectApplyAuraName[EFFECT_1] = SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT;
break;
+ case 19465: // Improved Stings (Rank 2)
+ spellInfo->EffectImplicitTargetA[EFFECT_2] = TARGET_UNIT_CASTER;
+ break;
case 30421: // Nether Portal - Perseverence
spellInfo->EffectBasePoints[2] += 30000;
break;
@@ -3109,9 +3164,10 @@ void SpellMgr::LoadDbcDataCorrections()
case 51726:
spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS;
spellInfo->SpellFamilyFlags[2] = 0x10;
+ spellInfo->EffectApplyAuraName[1] = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN;
break;
case 41913: // Parasitic Shadowfiend Passive
- spellInfo->EffectApplyAuraName[0] = 4; // proc debuff, and summon infinite fiends
+ spellInfo->EffectApplyAuraName[0] = SPELL_AURA_DUMMY; // proc debuff, and summon infinite fiends
break;
case 27892: // To Anchor 1
case 27928: // To Anchor 1
@@ -3139,12 +3195,25 @@ void SpellMgr::LoadDbcDataCorrections()
case 6474: // Earthbind Totem (instant pulse)
spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY;
break;
+ case 52109: // Flametongue Totem rank 1 (Aura)
+ case 52110: // Flametongue Totem rank 2 (Aura)
+ case 52111: // Flametongue Totem rank 3 (Aura)
+ case 52112: // Flametongue Totem rank 4 (Aura)
+ case 52113: // Flametongue Totem rank 5 (Aura)
+ case 58651: // Flametongue Totem rank 6 (Aura)
+ case 58654: // Flametongue Totem rank 7 (Aura)
+ case 58655: // Flametongue Totem rank 8 (Aura)
+ spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_CASTER;
+ spellInfo->EffectImplicitTargetA[1] = TARGET_UNIT_CASTER;
+ spellInfo->EffectImplicitTargetB[0] = 0;
+ spellInfo->EffectImplicitTargetB[1] = 0;
+ break;
case 53241: // Marked for Death (Rank 1)
case 53243: // Marked for Death (Rank 2)
case 53244: // Marked for Death (Rank 3)
case 53245: // Marked for Death (Rank 4)
case 53246: // Marked for Death (Rank 5)
- spellInfo->EffectSpellClassMask[0] = flag96(423937, 276955137, 2049);
+ spellInfo->EffectSpellClassMask[0] = flag96(0x00067801, 0x10820001, 0x00000801);
break;
case 70728: // Exploit Weakness (needs target selection script)
case 70840: // Devious Minds (needs target selection script)
@@ -3161,6 +3230,10 @@ void SpellMgr::LoadDbcDataCorrections()
// this needs research on modifier applying rules, does not seem to be in Attributes fields
spellInfo->EffectSpellClassMask[0] = flag96(0x00000040, 0x00000000, 0x00000000);
break;
+ case 63163: // Apply Enchanted Bridle (Argent Tournament)
+ spellInfo->EffectDieSides[0] = 0; // was 1, that should probably mean seat 0, but instead it's treated as spell 1
+ spellInfo->EffectBasePoints[0] = 52391; // Ride Vehicle (forces seat 0)
+ break;
case 19970: // Entangling Roots (Rank 6) -- Nature's Grasp Proc
case 19971: // Entangling Roots (Rank 5) -- Nature's Grasp Proc
case 19972: // Entangling Roots (Rank 4) -- Nature's Grasp Proc
@@ -3177,7 +3250,7 @@ void SpellMgr::LoadDbcDataCorrections()
// ULDUAR SPELLS
//
case 62374: // Pursued (Flame Leviathan)
- spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // 50000yd
break;
case 63342: // Focused Eyebeam Summon Trigger (Kologarn)
spellInfo->MaxAffectedTargets = 1;
@@ -3245,7 +3318,7 @@ void SpellMgr::LoadDbcDataCorrections()
break;
case 69055: // Saber Lash (Lord Marrowgar)
case 70814: // Saber Lash (Lord Marrowgar)
- spellInfo->EffectRadiusIndex[0] = 8; // 5yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_5_YARDS; // 5yd
break;
case 69075: // Bone Storm (Lord Marrowgar)
case 70834: // Bone Storm (Lord Marrowgar)
@@ -3257,7 +3330,7 @@ void SpellMgr::LoadDbcDataCorrections()
case 71160: // Plague Stench (Stinky)
case 71161: // Plague Stench (Stinky)
case 71123: // Decimate (Stinky & Precious)
- spellInfo->EffectRadiusIndex[0] = 12; // 100yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_100_YARDS; // 100yd
break;
case 72723: // Resistant Skin (Deathbringer Saurfang adds)
// this spell initially granted Shadow damage immunity, however it was removed but the data was left in client
@@ -3284,7 +3357,7 @@ void SpellMgr::LoadDbcDataCorrections()
case 72464: // Mutated Plague (Professor Putricide)
case 72506: // Mutated Plague (Professor Putricide)
case 72507: // Mutated Plague (Professor Putricide)
- spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // 50000yd
break;
case 70911: // Unbound Plague (Professor Putricide) (needs target selection script)
case 72854: // Unbound Plague (Professor Putricide) (needs target selection script)
@@ -3295,7 +3368,7 @@ void SpellMgr::LoadDbcDataCorrections()
case 71518: // Unholy Infusion Quest Credit (Professor Putricide)
case 72934: // Blood Infusion Quest Credit (Blood-Queen Lana'thel)
case 72289: // Frost Infusion Quest Credit (Sindragosa)
- spellInfo->EffectRadiusIndex[0] = 28; // another missing radius
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // another missing radius
break;
case 71708: // Empowered Flare (Blood Prince Council)
case 72785: // Empowered Flare (Blood Prince Council)
@@ -3322,7 +3395,7 @@ void SpellMgr::LoadDbcDataCorrections()
break;
case 72706: // Achievement Check (Valithria Dreamwalker)
case 71357: // Order Whelp
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
break;
case 70598: // Sindragosa's Fury
spellInfo->EffectImplicitTargetA[0] = TARGET_DEST_CASTER;
@@ -3346,12 +3419,12 @@ void SpellMgr::LoadDbcDataCorrections()
case 73708: // Defile
case 73709: // Defile
case 73710: // Defile
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
- spellInfo->EffectRadiusIndex[1] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
+ spellInfo->EffectRadiusIndex[1] = EFFECT_RADIUS_200_YARDS; // 200yd
break;
case 69030: // Val'kyr Target Search
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
- spellInfo->EffectRadiusIndex[1] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
+ spellInfo->EffectRadiusIndex[1] = EFFECT_RADIUS_200_YARDS; // 200yd
break;
case 69198: // Raging Spirit Visual
spellInfo->rangeIndex = 13; // 50000yd
@@ -3360,9 +3433,9 @@ void SpellMgr::LoadDbcDataCorrections()
case 74295: // Harvest Souls
case 74296: // Harvest Souls
case 74297: // Harvest Souls
- spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
- spellInfo->EffectRadiusIndex[1] = 28; // 50000yd
- spellInfo->EffectRadiusIndex[2] = 28; // 50000yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // 50000yd
+ spellInfo->EffectRadiusIndex[1] = EFFECT_RADIUS_50000_YARDS; // 50000yd
+ spellInfo->EffectRadiusIndex[2] = EFFECT_RADIUS_50000_YARDS; // 50000yd
break;
case 73655: // Harvest Soul
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS;
@@ -3374,34 +3447,34 @@ void SpellMgr::LoadDbcDataCorrections()
spellInfo->DurationIndex = 28; // 5 seconds
break;
case 73529: // Shadow Trap
- spellInfo->EffectRadiusIndex[1] = 13; // 10yd
+ spellInfo->EffectRadiusIndex[1] = EFFECT_RADIUS_10_YARDS; // 10yd
break;
case 74282: // Shadow Trap (searcher)
- spellInfo->EffectRadiusIndex[0] = 15; // 3yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_3_YARDS; // 3yd
break;
case 72595: // Restore Soul
case 73650: // Restore Soul
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
break;
case 74086: // Destroy Soul
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
break;
case 74302: // Summon Spirit Bomb
case 74342: // Summon Spirit Bomb
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
spellInfo->MaxAffectedTargets = 1;
break;
case 74341: // Summon Spirit Bomb
case 74343: // Summon Spirit Bomb
- spellInfo->EffectRadiusIndex[0] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_200_YARDS; // 200yd
spellInfo->MaxAffectedTargets = 3;
break;
case 73579: // Summon Spirit Bomb
- spellInfo->EffectRadiusIndex[0] = 20; // 25yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_25_YARDS; // 25yd
break;
case 72350: // Fury of Frostmourne
- spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
- spellInfo->EffectRadiusIndex[1] = 28; // 50000yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // 50000yd
+ spellInfo->EffectRadiusIndex[1] = EFFECT_RADIUS_50000_YARDS; // 50000yd
break;
case 75127: // Kill Frostmourne Players
case 72351: // Fury of Frostmourne
@@ -3409,18 +3482,18 @@ void SpellMgr::LoadDbcDataCorrections()
case 72429: // Mass Resurrection
case 73159: // Play Movie
case 73582: // Trigger Vile Spirit (Inside, Heroic)
- spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // 50000yd
break;
case 72376: // Raise Dead
spellInfo->MaxAffectedTargets = 3;
- spellInfo->EffectRadiusIndex[0] = 28; // 50000yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_50000_YARDS; // 50000yd
break;
case 71809: // Jump
spellInfo->rangeIndex = 3; // 20yd
- spellInfo->EffectRadiusIndex[0] = 20; // 25yd
+ spellInfo->EffectRadiusIndex[0] = EFFECT_RADIUS_25_YARDS; // 25yd
break;
case 72405: // Broken Frostmourne
- spellInfo->EffectRadiusIndex[1] = 22; // 200yd
+ spellInfo->EffectRadiusIndex[1] = EFFECT_RADIUS_200_YARDS; // 200yd
break;
default:
break;
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h
index d701ab2882c..14137b6a91b 100755
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -322,6 +322,7 @@ typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap;
enum SpellGroup
{
+ SPELL_GROUP_NONE = 0,
SPELL_GROUP_ELIXIR_BATTLE = 1,
SPELL_GROUP_ELIXIR_GUARDIAN = 2,
SPELL_GROUP_ELIXIR_UNSTABLE = 3,
@@ -344,8 +345,9 @@ enum SpellGroupStackRule
SPELL_GROUP_STACK_RULE_DEFAULT = 0,
SPELL_GROUP_STACK_RULE_EXCLUSIVE = 1,
SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER = 2,
+ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT = 3,
};
-#define SPELL_GROUP_STACK_RULE_MAX 3
+#define SPELL_GROUP_STACK_RULE_MAX 4
typedef std::map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap;
@@ -379,6 +381,68 @@ struct SpellTargetPosition
float target_Orientation;
};
+// Enum with EffectRadiusIndex and their actual radius
+enum EffectRadiusIndex
+{
+ EFFECT_RADIUS_2_YARDS = 7,
+ EFFECT_RADIUS_5_YARDS = 8,
+ EFFECT_RADIUS_20_YARDS = 9,
+ EFFECT_RADIUS_30_YARDS = 10,
+ EFFECT_RADIUS_45_YARDS = 11,
+ EFFECT_RADIUS_100_YARDS = 12,
+ EFFECT_RADIUS_10_YARDS = 13,
+ EFFECT_RADIUS_8_YARDS = 14,
+ EFFECT_RADIUS_3_YARDS = 15,
+ EFFECT_RADIUS_1_YARD = 16,
+ EFFECT_RADIUS_13_YARDS = 17,
+ EFFECT_RADIUS_15_YARDS = 18,
+ EFFECT_RADIUS_18_YARDS = 19,
+ EFFECT_RADIUS_25_YARDS = 20,
+ EFFECT_RADIUS_35_YARDS = 21,
+ EFFECT_RADIUS_200_YARDS = 22,
+ EFFECT_RADIUS_40_YARDS = 23,
+ EFFECT_RADIUS_65_YARDS = 24,
+ EFFECT_RADIUS_70_YARDS = 25,
+ EFFECT_RADIUS_4_YARDS = 26,
+ EFFECT_RADIUS_50_YARDS = 27,
+ EFFECT_RADIUS_50000_YARDS = 28,
+ EFFECT_RADIUS_6_YARDS = 29,
+ EFFECT_RADIUS_500_YARDS = 30,
+ EFFECT_RADIUS_80_YARDS = 31,
+ EFFECT_RADIUS_12_YARDS = 32,
+ EFFECT_RADIUS_99_YARDS = 33,
+ EFFECT_RADIUS_55_YARDS = 35,
+ EFFECT_RADIUS_0_YARDS = 36,
+ EFFECT_RADIUS_7_YARDS = 37,
+ EFFECT_RADIUS_21_YARDS = 38,
+ EFFECT_RADIUS_34_YARDS = 39,
+ EFFECT_RADIUS_9_YARDS = 40,
+ EFFECT_RADIUS_150_YARDS = 41,
+ EFFECT_RADIUS_11_YARDS = 42,
+ EFFECT_RADIUS_16_YARDS = 43,
+ EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
+ EFFECT_RADIUS_10_YARDS_2 = 45,
+ EFFECT_RADIUS_5_YARDS_2 = 46,
+ EFFECT_RADIUS_15_YARDS_2 = 47,
+ EFFECT_RADIUS_60_YARDS = 48,
+ EFFECT_RADIUS_90_YARDS = 49,
+ EFFECT_RADIUS_15_YARDS_3 = 50,
+ EFFECT_RADIUS_60_YARDS_2 = 51,
+ EFFECT_RADIUS_5_YARDS_3 = 52,
+ EFFECT_RADIUS_60_YARDS_3 = 53,
+ EFFECT_RADIUS_50000_YARDS_2 = 54,
+ EFFECT_RADIUS_130_YARDS = 55,
+ EFFECT_RADIUS_38_YARDS = 56,
+ EFFECT_RADIUS_45_YARDS_2 = 57,
+ EFFECT_RADIUS_32_YARDS = 59,
+ EFFECT_RADIUS_44_YARDS = 60,
+ EFFECT_RADIUS_14_YARDS = 61,
+ EFFECT_RADIUS_47_YARDS = 62,
+ EFFECT_RADIUS_23_YARDS = 63,
+ EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
+ EFFECT_RADIUS_80_YARDS_2 = 65
+};
+
typedef UNORDERED_MAP<uint32, SpellTargetPosition> SpellTargetPositionMap;
// Spell pet auras
@@ -553,7 +617,7 @@ class SpellMgr
// Accessors (const or static functions)
public:
// Spell correctess for client using
- static bool IsSpellValid(SpellInfo const* spellInfo, Player* pl = NULL, bool msg = true);
+ static bool IsSpellValid(SpellInfo const* spellInfo, Player* player = NULL, bool msg = true);
// Spell difficulty
uint32 GetSpellDifficultyId(uint32 spellId) const;
@@ -596,6 +660,7 @@ class SpellMgr
void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells, std::set<SpellGroup>& usedGroups) const;
// Spell Group Stack Rules table
+ bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, int32 amount, std::map<SpellGroup, int32>& groups) const;
SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
// Spell proc event table
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp
index 53ec7822623..8e20fd21fcf 100755
--- a/src/server/game/Spells/SpellScript.cpp
+++ b/src/server/game/Spells/SpellScript.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -52,6 +52,11 @@ void _SpellScript::_Init(std::string const* scriptname, uint32 spellId)
m_scriptSpellId = spellId;
}
+std::string const* _SpellScript::_GetScriptName() const
+{
+ return m_scriptName;
+}
+
_SpellScript::EffectHook::EffectHook(uint8 _effIndex)
{
// effect index must be in range <0;2>, allow use of special effindexes
@@ -147,6 +152,16 @@ std::string _SpellScript::EffectAuraNameCheck::ToString()
}
}
+SpellScript::CastHandler::CastHandler(SpellCastFnType _pCastHandlerScript)
+{
+ pCastHandlerScript = _pCastHandlerScript;
+}
+
+void SpellScript::CastHandler::Call(SpellScript* spellScript)
+{
+ (spellScript->*pCastHandlerScript)();
+}
+
SpellScript::CheckCastHandler::CheckCastHandler(SpellCheckCastFnType checkCastHandlerScript)
{
_checkCastHandlerScript = checkCastHandlerScript;
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h
index dab77f6533d..a1d8e6563b0 100755
--- a/src/server/game/Spells/SpellScript.h
+++ b/src/server/game/Spells/SpellScript.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -64,6 +64,7 @@ class _SpellScript
virtual void _Register();
virtual void _Unload();
virtual void _Init(std::string const* scriptname, uint32 spellId);
+ std::string const* _GetScriptName() const;
protected:
class EffectHook
@@ -131,6 +132,9 @@ enum SpellScriptHookType
SPELL_SCRIPT_HOOK_AFTER_HIT,
SPELL_SCRIPT_HOOK_UNIT_TARGET_SELECT,
SPELL_SCRIPT_HOOK_CHECK_CAST,
+ SPELL_SCRIPT_HOOK_BEFORE_CAST,
+ SPELL_SCRIPT_HOOK_ON_CAST,
+ SPELL_SCRIPT_HOOK_AFTER_CAST,
};
#define HOOK_SPELL_HIT_START SPELL_SCRIPT_HOOK_EFFECT_HIT
@@ -148,10 +152,20 @@ class SpellScript : public _SpellScript
typedef SpellCastResult(CLASSNAME::*SpellCheckCastFnType)(); \
typedef void(CLASSNAME::*SpellEffectFnType)(SpellEffIndex); \
typedef void(CLASSNAME::*SpellHitFnType)(); \
+ typedef void(CLASSNAME::*SpellCastFnType)(); \
typedef void(CLASSNAME::*SpellUnitTargetFnType)(std::list<Unit*>&); \
SPELLSCRIPT_FUNCTION_TYPE_DEFINES(SpellScript)
+ class CastHandler
+ {
+ public:
+ CastHandler(SpellCastFnType _pCastHandlerScript);
+ void Call(SpellScript* spellScript);
+ private:
+ SpellCastFnType pCastHandlerScript;
+ };
+
class CheckCastHandler
{
public:
@@ -194,6 +208,7 @@ class SpellScript : public _SpellScript
};
#define SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) \
+ class CastHandlerFunction : public SpellScript::CastHandler { public: CastHandlerFunction(SpellCastFnType _pCastHandlerScript) : SpellScript::CastHandler((SpellScript::SpellCastFnType)_pCastHandlerScript) {} }; \
class CheckCastHandlerFunction : public SpellScript::CheckCastHandler { public: CheckCastHandlerFunction(SpellCheckCastFnType _checkCastHandlerScript) : SpellScript::CheckCastHandler((SpellScript::SpellCheckCastFnType)_checkCastHandlerScript) {} }; \
class EffectHandlerFunction : public SpellScript::EffectHandler { public: EffectHandlerFunction(SpellEffectFnType _pEffectHandlerScript, uint8 _effIndex, uint16 _effName) : SpellScript::EffectHandler((SpellScript::SpellEffectFnType)_pEffectHandlerScript, _effIndex, _effName) {} }; \
class HitHandlerFunction : public SpellScript::HitHandler { public: HitHandlerFunction(SpellHitFnType _pHitHandlerScript) : SpellScript::HitHandler((SpellScript::SpellHitFnType)_pHitHandlerScript) {} }; \
@@ -221,6 +236,13 @@ class SpellScript : public _SpellScript
// SpellScript interface
// hooks to which you can attach your functions
//
+ // example: BeforeCast += SpellCastFn(class::function);
+ HookList<CastHandler> BeforeCast;
+ // example: OnCast += SpellCastFn(class::function);
+ HookList<CastHandler> OnCast;
+ // example: AfterCast += SpellCastFn(class::function);
+ HookList<CastHandler> AfterCast;
+ #define SpellCastFn(F) CastHandlerFunction(&F)
// example: OnCheckCast += SpellCheckCastFn();
// where function is SpellCastResult function()
@@ -250,14 +272,18 @@ class SpellScript : public _SpellScript
#define SpellUnitTargetFn(F, I, N) UnitTargetHandlerFunction(&F, I, N)
// hooks are executed in following order, at specified event of spell:
- // 1. OnUnitTargetSelect - executed just before adding selected targets to final target list
- // 2. OnEffectLaunch - executed just before specified effect handler call - when spell missile is launched
- // 3. OnEffectLaunchTarget - executed just before specified effect handler call - when spell missile is launched - called for each target from spell target map
- // 4. OnEffectHit - executed just before specified effect handler call - when spell missile hits dest
- // 5. BeforeHit - executed just before spell hits a target - called for each target from spell target map
- // 6. OnEffectHitTarget - executed just before specified effect handler call - called for each target from spell target map
- // 7. OnHit - executed just before spell deals damage and procs auras - when spell hits target - called for each target from spell target map
- // 8. AfterHit - executed just after spell finishes all it's jobs for target - called for each target from spell target map
+ // 1. BeforeCast - executed when spell preparation is finished (when cast bar becomes full) before cast is handled
+ // 2. OnCheckCast - allows to override result of CheckCast function
+ // 3. OnUnitTargetSelect - executed just before adding selected targets to final target list
+ // 4. OnCast - executed just before spell is launched (creates missile) or executed
+ // 5. AfterCast - executed after spell missile is launched and immediate spell actions are done
+ // 6. OnEffectLaunch - executed just before specified effect handler call - when spell missile is launched
+ // 7. OnEffectLaunchTarget - executed just before specified effect handler call - when spell missile is launched - called for each target from spell target map
+ // 8. OnEffectHit - executed just before specified effect handler call - when spell missile hits dest
+ // 9. BeforeHit - executed just before spell hits a target - called for each target from spell target map
+ // 10. OnEffectHitTarget - executed just before specified effect handler call - called for each target from spell target map
+ // 11. OnHit - executed just before spell deals damage and procs auras - when spell hits target - called for each target from spell target map
+ // 12. AfterHit - executed just after spell finishes all it's jobs for target - called for each target from spell target map
//
// methods allowing interaction with Spell object
diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp
index f901c0acac8..e5a12693aa7 100755
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -27,7 +27,7 @@ void CreatureTextMgr::LoadCreatureTexts()
mTextMap.clear(); // for reload case
mTextRepeatMap.clear(); //reset all currently used temp texts
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_LOAD_CRETEXT);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEXT);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
@@ -381,12 +381,12 @@ void CreatureTextMgr::SendChatPacket(WorldPacket* data, WorldObject* source, Cha
const SessionMap smap = sWorld->GetAllSessions();
for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
{
- if (Player* plr = (*iter).second->GetPlayer())
+ if (Player* player = (*iter).second->GetPlayer())
{
if (data->GetOpcode() == SMSG_MESSAGECHAT)//override whisperguid with actual player's guid
- data->put<uint64>(1+4+8+4+4+(int32)(strlen(source->GetName())+1), uint64(plr->GetGUID()));
- if (plr->GetSession() && (!team || Team(plr->GetTeam()) == team) && (!gmOnly || plr->isGameMaster()))
- plr->GetSession()->SendPacket(data);
+ data->put<uint64>(1+4+8+4+4+(int32)(strlen(source->GetName())+1), uint64(player->GetGUID()));
+ if (player->GetSession() && (!team || Team(player->GetTeam()) == team) && (!gmOnly || player->isGameMaster()))
+ player->GetSession()->SendPacket(data);
}
}
return;
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index 5d4e6357079..0c80e2d568f 100755
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index 10c1f4a1dfd..96f4438544f 100755
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -79,7 +79,7 @@ bool GmTicket::LoadFromDB(Field* fields)
void GmTicket::SaveToDB(SQLTransaction& trans) const
{
uint8 index = 0;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_GM_TICKET);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GM_TICKET);
stmt->setUInt32( index, _id);
stmt->setUInt32(++index, GUID_LOPART(_playerGuid));
stmt->setString(++index, _playerName);
@@ -207,7 +207,10 @@ void TicketMgr::ResetTickets()
sTicketMgr->RemoveTicket(itr->second->GetId());
_lastTicketId = 0;
- CharacterDatabase.PExecute("TRUNCATE TABLE gm_tickets");
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ALL_GM_TICKETS);
+
+ CharacterDatabase.Execute(stmt);
}
void TicketMgr::LoadTickets()
@@ -223,7 +226,7 @@ void TicketMgr::LoadTickets()
_lastTicketId = 0;
_openTicketCount = 0;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_LOAD_GM_TICKETS);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GM_TICKETS);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
{
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index 04fb7101ff7..cb0a1bab22b 100755
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/game/Tools/CharacterDatabaseCleaner.cpp b/src/server/game/Tools/CharacterDatabaseCleaner.cpp
index e5865cc4f90..b734d90b040 100644
--- a/src/server/game/Tools/CharacterDatabaseCleaner.cpp
+++ b/src/server/game/Tools/CharacterDatabaseCleaner.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Tools/CharacterDatabaseCleaner.h b/src/server/game/Tools/CharacterDatabaseCleaner.h
index 1ec52497ce0..d6f541dcfbb 100644
--- a/src/server/game/Tools/CharacterDatabaseCleaner.h
+++ b/src/server/game/Tools/CharacterDatabaseCleaner.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index 92fa001fe46..b076447dd90 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -443,6 +443,10 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
typedef PetIds::value_type PetIdsPair;
PetIds petids;
+ uint8 gender = GENDER_NONE;
+ uint8 race = RACE_NONE;
+ uint8 playerClass = 0;
+
SQLTransaction trans = CharacterDatabase.BeginTransaction();
while (!feof(fin))
{
@@ -512,6 +516,9 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
if (!changenth(line, 2, chraccount)) // characters.account update
ROLLBACK(DUMP_FILE_BROKEN);
+ race = uint8(atol(getnth(line, 4).c_str()));
+ playerClass = uint8(atol(getnth(line, 5).c_str()));
+ gender = uint8(atol(getnth(line, 6).c_str()));
if (name == "")
{
// check if the original name already exists
@@ -520,10 +527,8 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
result = CharacterDatabase.PQuery("SELECT 1 FROM characters WHERE name = '%s'", name.c_str());
if (result)
- {
if (!changenth(line, 37, "1")) // characters.at_login set to "rename on login"
ROLLBACK(DUMP_FILE_BROKEN);
- }
}
else if (!changenth(line, 3, name.c_str())) // characters.name
ROLLBACK(DUMP_FILE_BROKEN);
@@ -654,6 +659,9 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
CharacterDatabase.CommitTransaction(trans);
+ // in case of name conflict player has to rename at login anyway
+ sWorld->AddCharacterNameData(guid, name, gender, race, playerClass);
+
sObjectMgr->m_hiItemGuid += items.size();
sObjectMgr->m_mailid += mails.size();
@@ -664,4 +672,3 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
return DUMP_SUCCESS;
}
-
diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h
index a6e379a934e..b5655328507 100755
--- a/src/server/game/Tools/PlayerDump.h
+++ b/src/server/game/Tools/PlayerDump.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp
index 590e6912cc5..2a48ede4c81 100755
--- a/src/server/game/Weather/Weather.cpp
+++ b/src/server/game/Weather/Weather.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Weather/Weather.h b/src/server/game/Weather/Weather.h
index 4b2d927f690..0c17cfd1efe 100755
--- a/src/server/game/Weather/Weather.h
+++ b/src/server/game/Weather/Weather.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 938ff46a953..731aba8d197 100755
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/Weather/WeatherMgr.h b/src/server/game/Weather/WeatherMgr.h
index 4cc64f73533..768cd2dca17 100755
--- a/src/server/game/Weather/WeatherMgr.h
+++ b/src/server/game/Weather/WeatherMgr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 28657faedb1..426a93fda57 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -1246,8 +1246,10 @@ void World::SetInitialWorldSettings()
server_type = REALM_TYPE_PVP;
else
server_type = getIntConfig(CONFIG_GAME_TYPE);
+
uint32 realm_zone = getIntConfig(CONFIG_REALM_ZONE);
- LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realmID);
+
+ LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realmID); // One-time query
///- Remove the bones (they should not exist in DB though) and old corpses after a restart
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_OLD_CORPSES);
@@ -1387,7 +1389,7 @@ void World::SetInitialWorldSettings()
sLog->outString("Loading pet default spells additional to levelup spells...");
sSpellMgr->LoadPetDefaultSpells();
- sLog->outString("Loading Creature Template Addon Data...");
+ sLog->outString("Loading Creature Addon Data...");
sObjectMgr->LoadCreatureAddons(); // must be after LoadCreatureTemplates() and LoadCreatures()
sLog->outString("Loading Creature Respawn Data..."); // must be after PackInstances()
@@ -1650,7 +1652,7 @@ void World::SetInitialWorldSettings()
local.tm_year+1900, local.tm_mon+1, local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec);
LoginDatabase.PExecute("INSERT INTO uptime (realmid, starttime, startstring, uptime, revision) VALUES('%u', " UI64FMTD ", '%s', 0, '%s')",
- realmID, uint64(m_startTime), isoDate, _FULLVERSION);
+ realmID, uint64(m_startTime), isoDate, _FULLVERSION); // One-time query
m_timers[WUPDATE_WEATHERS].SetInterval(1*IN_MILLISECONDS);
m_timers[WUPDATE_AUCTIONS].SetInterval(MINUTE*IN_MILLISECONDS);
@@ -1928,7 +1930,15 @@ void World::Update(uint32 diff)
uint32 maxOnlinePlayers = GetMaxPlayerCount();
m_timers[WUPDATE_UPTIME].Reset();
- LoginDatabase.PExecute("UPDATE uptime SET uptime = %u, maxplayers = %u WHERE realmid = %u AND starttime = " UI64FMTD, tmpDiff, maxOnlinePlayers, realmID, uint64(m_startTime));
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_UPTIME_PLAYERS);
+
+ stmt->setUInt64(0, uint64(tmpDiff));
+ stmt->setUInt16(1, uint16(maxOnlinePlayers));
+ stmt->setUInt32(2, realmID);
+ stmt->setUInt64(3, uint64(m_startTime));
+
+ LoginDatabase.Execute(stmt);
}
/// <li> Clean logs table
@@ -1937,14 +1947,21 @@ void World::Update(uint32 diff)
if (m_timers[WUPDATE_CLEANDB].Passed())
{
m_timers[WUPDATE_CLEANDB].Reset();
- LoginDatabase.PExecute("DELETE FROM logs WHERE (time + %u) < "UI64FMTD";",
- sWorld->getIntConfig(CONFIG_LOGDB_CLEARTIME), uint64(time(0)));
+
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_OLD_LOGS);
+
+ stmt->setUInt32(0, sWorld->getIntConfig(CONFIG_LOGDB_CLEARTIME));
+ stmt->setUInt32(1, uint32(time(0)));
+
+ LoginDatabase.Execute(stmt);
}
}
/// <li> Handle all other objects
///- Update objects when the timer has passed (maps, transport, creatures, ...)
+ RecordTimeDiff(NULL);
sMapMgr->Update(diff);
+ RecordTimeDiff("UpdateMapMgr");
if (sWorld->getBoolConfig(CONFIG_AUTOBROADCAST))
{
@@ -2226,10 +2243,10 @@ BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string dura
{
case BAN_IP:
// No SQL injection with prepared statements
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCOUNT_BY_IP);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BY_IP);
stmt->setString(0, nameOrIP);
resultAccounts = LoginDatabase.Query(stmt);
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_IP_BANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_IP_BANNED);
stmt->setString(0, nameOrIP);
stmt->setUInt32(1, duration_secs);
stmt->setString(2, author);
@@ -2238,13 +2255,13 @@ BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string dura
break;
case BAN_ACCOUNT:
// No SQL injection with prepared statements
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_ACCIDBYNAME);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME);
stmt->setString(0, nameOrIP);
resultAccounts = LoginDatabase.Query(stmt);
break;
case BAN_CHARACTER:
// No SQL injection with prepared statements
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_ACCOUNT_BY_NAME);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_BY_NAME);
stmt->setString(0, nameOrIP);
resultAccounts = CharacterDatabase.Query(stmt);
break;
@@ -2270,11 +2287,11 @@ BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string dura
if (mode != BAN_IP)
{
// make sure there is only one active ban
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_ACCOUNT_NOT_BANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_NOT_BANNED);
stmt->setUInt32(0, account);
trans->Append(stmt);
// No SQL injection with prepared statements
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_ACCOUNT_BANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_BANNED);
stmt->setUInt32(0, account);
stmt->setUInt32(1, duration_secs);
stmt->setString(2, author);
@@ -2298,7 +2315,7 @@ bool World::RemoveBanAccount(BanMode mode, std::string nameOrIP)
PreparedStatement* stmt = NULL;
if (mode == BAN_IP)
{
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_IP_NOT_BANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_IP_NOT_BANNED);
stmt->setString(0, nameOrIP);
LoginDatabase.Execute(stmt);
}
@@ -2314,7 +2331,7 @@ bool World::RemoveBanAccount(BanMode mode, std::string nameOrIP)
return false;
//NO SQL injection as account is uint32
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_ACCOUNT_NOT_BANNED);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_NOT_BANNED);
stmt->setUInt32(0, account);
LoginDatabase.Execute(stmt);
}
@@ -2332,7 +2349,7 @@ BanReturn World::BanCharacter(std::string name, std::string duration, std::strin
/// Pick a player to ban if not online
if (!pBanned)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_GUID_BY_NAME);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME);
stmt->setString(0, name);
PreparedQueryResult resultCharacter = CharacterDatabase.Query(stmt);
@@ -2345,11 +2362,11 @@ BanReturn World::BanCharacter(std::string name, std::string duration, std::strin
guid = pBanned->GetGUIDLow();
// make sure there is only one active ban
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_NOT_BANNED);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_BAN);
stmt->setUInt32(0, guid);
CharacterDatabase.Execute(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_BAN);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_BAN);
stmt->setUInt32(0, guid);
stmt->setUInt32(1, duration_secs);
stmt->setString(2, author);
@@ -2371,7 +2388,7 @@ bool World::RemoveBanCharacter(std::string name)
/// Pick a player to ban if not online
if (!pBanned)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_GUID_BY_NAME);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME);
stmt->setString(0, name);
PreparedQueryResult resultCharacter = CharacterDatabase.Query(stmt);
@@ -2386,7 +2403,7 @@ bool World::RemoveBanCharacter(std::string name)
if (!guid)
return false;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_NOT_BANNED);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_BAN);
stmt->setUInt32(0, guid);
CharacterDatabase.Execute(stmt);
return true;
@@ -2589,7 +2606,7 @@ void World::SendAutoBroadcast()
void World::UpdateRealmCharCount(uint32 accountId)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_CHARACTER_COUNT);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT);
stmt->setUInt32(0, accountId);
PreparedQueryResultFuture result = CharacterDatabase.AsyncQuery(stmt);
m_realmCharCallbacks.insert(result);
@@ -2603,12 +2620,12 @@ void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
uint32 accountId = fields[0].GetUInt32();
uint32 charCount = fields[1].GetUInt32();
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALMCHARACTERS);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS);
stmt->setUInt32(0, accountId);
stmt->setUInt32(1, realmID);
LoginDatabase.Execute(stmt);
- stmt = LoginDatabase.GetPreparedStatement(LOGIN_ADD_REALMCHARACTERS);
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS);
stmt->setUInt32(0, charCount);
stmt->setUInt32(1, accountId);
stmt->setUInt32(2, realmID);
@@ -2687,7 +2704,10 @@ void World::InitRandomBGResetTime()
void World::ResetDailyQuests()
{
sLog->outDetail("Daily quests reset for all characters.");
- CharacterDatabase.Execute("DELETE FROM character_queststatus_daily");
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_DAILY);
+ CharacterDatabase.Execute(stmt);
+
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
if (itr->second->GetPlayer())
itr->second->GetPlayer()->ResetDailyQuestStatus();
@@ -2714,7 +2734,9 @@ void World::SetPlayerSecurityLimit(AccountTypes _sec)
void World::ResetWeeklyQuests()
{
- CharacterDatabase.Execute("DELETE FROM character_queststatus_weekly");
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY);
+ CharacterDatabase.Execute(stmt);
+
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
if (itr->second->GetPlayer())
itr->second->GetPlayer()->ResetWeeklyQuestStatus();
@@ -2726,10 +2748,24 @@ void World::ResetWeeklyQuests()
sPoolMgr->ChangeWeeklyQuests();
}
+void World::ResetEventSeasonalQuests(uint16 event_id)
+{
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_SEASONAL);
+ stmt->setUInt16(0,event_id);
+ CharacterDatabase.Execute(stmt);
+
+ for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
+ if (itr->second->GetPlayer())
+ itr->second->GetPlayer()->ResetSeasonalQuestStatus(event_id);
+}
+
void World::ResetRandomBG()
{
sLog->outDetail("Random BG status reset for all characters.");
- CharacterDatabase.Execute("DELETE FROM character_battleground_random");
+
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM);
+ CharacterDatabase.Execute(stmt);
+
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
if (itr->second->GetPlayer())
itr->second->GetPlayer()->SetRandomWinner(false);
@@ -2746,22 +2782,18 @@ void World::UpdateMaxSessionCounters()
void World::LoadDBVersion()
{
- QueryResult result = WorldDatabase.Query("SELECT db_version, script_version, cache_id FROM version LIMIT 1");
+ QueryResult result = WorldDatabase.Query("SELECT db_version, cache_id FROM version LIMIT 1");
if (result)
{
Field* fields = result->Fetch();
m_DBVersion = fields[0].GetString();
- m_CreatureEventAIVersion = fields[1].GetString();
// will be overwrite by config values if different and non-0
- m_int_configs[CONFIG_CLIENTCACHE_VERSION] = fields[2].GetUInt32();
+ m_int_configs[CONFIG_CLIENTCACHE_VERSION] = fields[1].GetUInt32();
}
if (m_DBVersion.empty())
m_DBVersion = "Unknown world database.";
-
- if (m_CreatureEventAIVersion.empty())
- m_CreatureEventAIVersion = "Unknown creature EventAI.";
}
void World::ProcessStartEvent()
@@ -2817,9 +2849,23 @@ void World::setWorldState(uint32 index, uint64 value)
{
WorldStatesMap::const_iterator it = m_worldstates.find(index);
if (it != m_worldstates.end())
- CharacterDatabase.PExecute("UPDATE worldstates SET value="UI64FMTD" where entry=%u", value, index);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_WORLDSTATE);
+
+ stmt->setUInt32(0, uint32(value));
+ stmt->setUInt32(1, index);
+
+ CharacterDatabase.Execute(stmt);
+ }
else
- CharacterDatabase.PExecute("INSERT INTO worldstates (entry, value) VALUES (%u, "UI64FMTD")", index, value);
+ {
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_WORLDSTATE);
+
+ stmt->setUInt32(0, index);
+ stmt->setUInt32(1, uint32(value));
+
+ CharacterDatabase.Execute(stmt);
+ }
m_worldstates[index] = value;
}
@@ -2873,7 +2919,7 @@ void World::LoadCharacterNameData()
sLog->outString("Loaded name data for %u characters", count);
}
-void World::AddCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race, uint8 playerClass)
+void World::AddCharacterNameData(uint32 guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass)
{
CharacterNameData& data = _characterNameDataMap[guid];
data.m_name = name;
@@ -2882,18 +2928,22 @@ void World::AddCharacterNameData(uint32 guid, const std::string& name, uint8 gen
data.m_class = playerClass;
}
-void World::UpdateCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race)
+void World::UpdateCharacterNameData(uint32 guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/)
{
std::map<uint32, CharacterNameData>::iterator itr = _characterNameDataMap.find(guid);
if (itr == _characterNameDataMap.end())
return;
+
itr->second.m_name = name;
- itr->second.m_gender = gender;
- if(race != RACE_NONE)
+
+ if (gender != GENDER_NONE)
+ itr->second.m_gender = gender;
+
+ if (race != RACE_NONE)
itr->second.m_race = race;
}
-const CharacterNameData* World::GetCharacterNameData(uint32 guid) const
+CharacterNameData const* World::GetCharacterNameData(uint32 guid) const
{
std::map<uint32, CharacterNameData>::const_iterator itr = _characterNameDataMap.find(guid);
if (itr != _characterNameDataMap.end())
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 06dc0066bb4..bedd8a87b20 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -634,7 +634,8 @@ class World
void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL);
/// Are we in the middle of a shutdown?
- bool IsShutdowning() const { return m_ShutdownTimer > 0; }
+ bool IsShuttingDown() const { return m_ShutdownTimer > 0; }
+ uint32 GetShutDownTimeLeft() const { return m_ShutdownTimer; }
void ShutdownServ(uint32 time, uint32 options, uint8 exitcode);
void ShutdownCancel();
void ShutdownMsg(bool show = false, Player* player = NULL);
@@ -722,10 +723,9 @@ class World
LocaleConstant GetAvailableDbcLocale(LocaleConstant locale) const { if (m_availableDbcLocaleMask & (1 << locale)) return locale; else return m_defaultDbcLocale; }
- //used World DB version
+ // used World DB version
void LoadDBVersion();
char const* GetDBVersion() const { return m_DBVersion.c_str(); }
- char const* GetCreatureEventAIVersion() const { return m_CreatureEventAIVersion.c_str(); }
void RecordTimeDiff(const char * text, ...);
@@ -739,13 +739,14 @@ class World
bool isEventKillStart;
- const CharacterNameData* GetCharacterNameData(uint32 guid) const;
- void AddCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race, uint8 playerClass);
- void UpdateCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race = RACE_NONE);
+ CharacterNameData const* GetCharacterNameData(uint32 guid) const;
+ void AddCharacterNameData(uint32 guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass);
+ void UpdateCharacterNameData(uint32 guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE);
void DeleteCharaceterNameData(uint32 guid) { _characterNameDataMap.erase(guid); }
uint32 GetCleaningFlags() const { return m_CleaningFlags; }
void SetCleaningFlags(uint32 flags) { m_CleaningFlags = flags; }
+ void ResetEventSeasonalQuests(uint16 event_id);
protected:
void _UpdateGameTime();
// callback for UpdateRealmCharacters
@@ -821,13 +822,12 @@ class World
//Player Queue
Queue m_QueuedPlayer;
- //sessions that are added async
+ // sessions that are added async
void AddSession_(WorldSession* s);
ACE_Based::LockedQueue<WorldSession*, ACE_Thread_Mutex> addSessQueue;
- //used versions
+ // used versions
std::string m_DBVersion;
- std::string m_CreatureEventAIVersion;
std::list<std::string> m_Autobroadcasts;
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index de660b8f106..d34b1b8c3c3 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp
index 80dd2dc366a..bd415c0f79f 100644
--- a/src/server/scripts/Commands/cs_account.cpp
+++ b/src/server/scripts/Commands/cs_account.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -81,8 +81,13 @@ public:
return false;
}
- // No SQL injection
- LoginDatabase.PExecute("UPDATE account SET expansion = '%d' WHERE id = '%u'", expansion, accountId);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPANSION);
+
+ stmt->setUInt8(0, uint8(expansion));
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
handler->PSendSysMessage(LANG_ACCOUNT_ADDON, expansion);
return true;
}
@@ -104,6 +109,7 @@ public:
{
case AOR_OK:
handler->PSendSysMessage(LANG_ACCOUNT_CREATED, accountName);
+ sLog->outChar("Account: %d (IP: %s) Character:[%s] (GUID: %u) Change Password.", handler->GetSession()->GetAccountId(),handler->GetSession()->GetRemoteAddress().c_str(), handler->GetSession()->GetPlayer()->GetName(), handler->GetSession()->GetPlayer()->GetGUIDLow());
break;
case AOR_NAME_TOO_LONG:
handler->SendSysMessage(LANG_ACCOUNT_TOO_LONG);
@@ -242,17 +248,25 @@ public:
}
std::string param = (char*)args;
- if (param == "on")
- {
- LoginDatabase.PExecute("UPDATE account SET locked = '1' WHERE id = '%d'", handler->GetSession()->GetAccountId());
- handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
- return true;
- }
- if (param == "off")
+ if (!param.empty())
{
- LoginDatabase.PExecute("UPDATE account SET locked = '0' WHERE id = '%d'", handler->GetSession()->GetAccountId());
- handler->PSendSysMessage(LANG_COMMAND_ACCLOCKUNLOCKED);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_LOCK);
+
+ if (param == "on")
+ {
+ stmt->setBool(0, true); // locked
+ handler->PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED);
+ }
+ else if (param == "off")
+ {
+ stmt->setBool(0, false); // unlocked
+ handler->PSendSysMessage(LANG_COMMAND_ACCLOCKUNLOCKED);
+ }
+
+ stmt->setUInt32(1, handler->GetSession()->GetAccountId());
+
+ LoginDatabase.Execute(stmt);
return true;
}
@@ -375,8 +389,13 @@ public:
if (expansion < 0 || uint8(expansion) > sWorld->getIntConfig(CONFIG_EXPANSION))
return false;
- // No SQL injection
- LoginDatabase.PExecute("UPDATE account SET expansion = '%d' WHERE id = '%u'", expansion, accountId);
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPANSION);
+
+ stmt->setUInt8(0, expansion);
+ stmt->setUInt32(1, accountId);
+
+ LoginDatabase.Execute(stmt);
+
handler->PSendSysMessage(LANG_ACCOUNT_SETADDON, accountName.c_str(), accountId, expansion);
return true;
}
@@ -467,13 +486,34 @@ public:
}
// If gmRealmID is -1, delete all values for the account id, else, insert values for the specific realmID
+ PreparedStatement* stmt;
+
if (gmRealmID == -1)
- LoginDatabase.PExecute("DELETE FROM account_access WHERE id = '%u'", targetAccountId);
+ {
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT_ACCESS);
+
+ stmt->setUInt32(0, targetAccountId);
+ }
else
- LoginDatabase.PExecute("DELETE FROM account_access WHERE id = '%u' AND (RealmID = '%d' OR RealmID = '-1')", targetAccountId, realmID);
+ {
+ stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_ACCOUNT_ACCESS_BY_REALM);
+
+ stmt->setUInt32(0, targetAccountId);
+ stmt->setUInt32(1, realmID);
+ }
+ LoginDatabase.Execute(stmt);
if (gm != 0)
- LoginDatabase.PExecute("INSERT INTO account_access VALUES ('%u', '%d', '%d')", targetAccountId, gm, realmID);
+ {
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_ACCESS);
+
+ stmt->setUInt32(0, targetAccountId);
+ stmt->setUInt8(1, uint8(gm));
+ stmt->setUInt32(2, gmRealmID);
+
+ LoginDatabase.Execute(stmt);
+ }
+
handler->PSendSysMessage(LANG_YOU_CHANGE_SECURITY, targetAccountName.c_str(), gm);
return true;
diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp
index 61ce13f0ecb..f136cba46ab 100644
--- a/src/server/scripts/Commands/cs_achievement.cpp
+++ b/src/server/scripts/Commands/cs_achievement.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 9e1d5717f1f..311c6586a0f 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp
index 3bd745df4f4..4f6acd7b629 100644
--- a/src/server/scripts/Commands/cs_event.cpp
+++ b/src/server/scripts/Commands/cs_event.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 2a352e92d01..b69f800327e 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -117,8 +117,8 @@ public:
bool first = true;
bool footer = false;
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, *HashMapHolder<Player>::GetLock(), true);
- HashMapHolder<Player>::MapType& m = sObjectAccessor->GetPlayers();
+ TRINITY_READ_GUARD(HashMapHolder<Player>::LockType, *HashMapHolder<Player>::GetLock());
+ HashMapHolder<Player>::MapType const& m = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
{
AccountTypes itrSec = itr->second->GetSession()->GetSecurity();
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index 5ed2d6a3dd8..3de0d89bac5 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index 4c9960992e1..2fb6c3f0d10 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -165,14 +165,12 @@ public:
object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn());
// this will generate a new guid if the object is in an instance
- if (!object->LoadFromDB(guidLow, map))
+ if (!object->LoadGameObjectFromDB(guidLow, map))
{
delete object;
return false;
}
- map->AddToMap(object);
-
// TODO: is it really necessary to add both the real and DB table guid here ?
sObjectMgr->AddGameobjectToGrid(guidLow, sObjectMgr->GetGOData(guidLow));
diff --git a/src/server/scripts/Commands/cs_gps.cpp b/src/server/scripts/Commands/cs_gps.cpp
index 2a270527fb8..8f15f8c9ce3 100644
--- a/src/server/scripts/Commands/cs_gps.cpp
+++ b/src/server/scripts/Commands/cs_gps.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -43,16 +43,16 @@ public:
return commandTable;
}
- static bool HandleGPSCommand(ChatHandler* handler, const char *args)
+ static bool HandleGPSCommand(ChatHandler* handler, char const* args)
{
- WorldObject* obj = NULL;
+ WorldObject* object = NULL;
if (*args)
{
uint64 guid = handler->extractGuidFromLink((char*)args);
if (guid)
- obj = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*handler->GetSession()->GetPlayer(), guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT);
+ object = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*handler->GetSession()->GetPlayer(), guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT);
- if (!obj)
+ if (!object)
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
@@ -61,71 +61,73 @@ public:
}
else
{
- obj = handler->getSelectedUnit();
+ object = handler->getSelectedUnit();
- if (!obj)
+ if (!object)
{
handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
handler->SetSentErrorMessage(true);
return false;
}
}
- CellPair cell_val = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
- Cell cell(cell_val);
- uint32 zone_id, area_id;
- obj->GetZoneAndAreaId(zone_id, area_id);
+ CellCoord cellCoord = Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY());
+ Cell cell(cellCoord);
- MapEntry const* mapEntry = sMapStore.LookupEntry(obj->GetMapId());
- AreaTableEntry const* zoneEntry = GetAreaEntryByAreaID(zone_id);
- AreaTableEntry const* areaEntry = GetAreaEntryByAreaID(area_id);
+ uint32 zoneId, areaId;
+ object->GetZoneAndAreaId(zoneId, areaId);
- float zone_x = obj->GetPositionX();
- float zone_y = obj->GetPositionY();
+ MapEntry const* mapEntry = sMapStore.LookupEntry(object->GetMapId());
+ AreaTableEntry const* zoneEntry = GetAreaEntryByAreaID(zoneId);
+ AreaTableEntry const* areaEntry = GetAreaEntryByAreaID(areaId);
- Map2ZoneCoordinates(zone_x, zone_y, zone_id);
+ float zoneX = object->GetPositionX();
+ float zoneY = object->GetPositionY();
- Map const* map = obj->GetMap();
- float ground_z = map->GetHeight(obj->GetPositionX(), obj->GetPositionY(), MAX_HEIGHT);
- float floor_z = map->GetHeight(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ());
+ Map2ZoneCoordinates(zoneX, zoneY, zoneId);
- GridPair p = Trinity::ComputeGridPair(obj->GetPositionX(), obj->GetPositionY());
+ Map const* map = object->GetMap();
+ float groundZ = map->GetHeight(object->GetPositionX(), object->GetPositionY(), MAX_HEIGHT);
+ float floorZ = map->GetHeight(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ());
+
+ GridCoord gridCoord = Trinity::ComputeGridCoord(object->GetPositionX(), object->GetPositionY());
// 63? WHY?
- int gx = 63 - p.x_coord;
- int gy = 63 - p.y_coord;
+ int gridX = 63 - gridCoord.x_coord;
+ int gridY = 63 - gridCoord.y_coord;
- uint32 have_map = Map::ExistMap(obj->GetMapId(), gx, gy) ? 1 : 0;
- uint32 have_vmap = Map::ExistVMap(obj->GetMapId(), gx, gy) ? 1 : 0;
+ uint32 haveMap = Map::ExistMap(object->GetMapId(), gridX, gridY) ? 1 : 0;
+ uint32 haveVMap = Map::ExistVMap(object->GetMapId(), gridX, gridY) ? 1 : 0;
- if (have_vmap)
+ if (haveVMap)
{
- if (map->IsOutdoors(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ()))
+ if (map->IsOutdoors(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ()))
handler->PSendSysMessage("You are outdoors");
else
handler->PSendSysMessage("You are indoors");
}
- else handler->PSendSysMessage("no VMAP available for area info");
+ else
+ handler->PSendSysMessage("no VMAP available for area info");
handler->PSendSysMessage(LANG_MAP_POSITION,
- obj->GetMapId(), (mapEntry ? mapEntry->name[handler->GetSessionDbcLocale()] : "<unknown>"),
- zone_id, (zoneEntry ? zoneEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
- area_id, (areaEntry ? areaEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
- obj->GetPhaseMask(),
- obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),
- cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), obj->GetInstanceId(),
- zone_x, zone_y, ground_z, floor_z, have_map, have_vmap);
-
- LiquidData liquid_status;
- ZLiquidStatus res = map->getLiquidStatus(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), MAP_ALL_LIQUIDS, &liquid_status);
- if (res)
- {
- handler->PSendSysMessage(LANG_LIQUID_STATUS, liquid_status.level, liquid_status.depth_level, liquid_status.type, res);
- }
+ object->GetMapId(), (mapEntry ? mapEntry->name[handler->GetSessionDbcLocale()] : "<unknown>"),
+ zoneId, (zoneEntry ? zoneEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
+ areaId, (areaEntry ? areaEntry->area_name[handler->GetSessionDbcLocale()] : "<unknown>"),
+ object->GetPhaseMask(),
+ object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation(),
+ cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), object->GetInstanceId(),
+ zoneX, zoneY, groundZ, floorZ, haveMap, haveVMap);
+
+ LiquidData liquidStatus;
+ ZLiquidStatus status = map->getLiquidStatus(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), MAP_ALL_LIQUIDS, &liquidStatus);
+
+ if (status)
+ handler->PSendSysMessage(LANG_LIQUID_STATUS, liquidStatus.level, liquidStatus.depth_level, liquidStatus.type, status);
+
return true;
}
- static bool HandleWPGPSCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleWPGPSCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp
index 6f44000017d..4edc5f6fea0 100644
--- a/src/server/scripts/Commands/cs_honor.cpp
+++ b/src/server/scripts/Commands/cs_honor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -39,12 +39,14 @@ public:
{ "", SEC_GAMEMASTER, false, &HandleHonorAddCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
+
static ChatCommand honorCommandTable[] =
{
{ "add", SEC_GAMEMASTER, false, NULL, "", honorAddCommandTable },
{ "update", SEC_GAMEMASTER, false, &HandleHonorUpdateCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
+
static ChatCommand commandTable[] =
{
{ "honor", SEC_GAMEMASTER, false, NULL, "", honorCommandTable },
@@ -52,7 +54,8 @@ public:
};
return commandTable;
}
- static bool HandleHonorAddCommand(ChatHandler* handler, const char* args)
+
+ static bool HandleHonorAddCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
@@ -73,7 +76,8 @@ public:
target->RewardHonor(NULL, 1, amount);
return true;
}
- static bool HandleHonorAddKillCommand(ChatHandler* handler, const char* /*args*/)
+
+ static bool HandleHonorAddKillCommand(ChatHandler* handler, char const* /*args*/)
{
Unit* target = handler->getSelectedUnit();
if (!target)
@@ -90,7 +94,8 @@ public:
handler->GetSession()->GetPlayer()->RewardHonor(target, 1);
return true;
}
- static bool HandleHonorUpdateCommand(ChatHandler* handler, const char* /*args*/)
+
+ static bool HandleHonorUpdateCommand(ChatHandler* handler, char const* /*args*/)
{
Player* target = handler->getSelectedPlayer();
if (!target)
diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp
index 9eb315b0b6a..fcabaaa7e5b 100644
--- a/src/server/scripts/Commands/cs_learn.cpp
+++ b/src/server/scripts/Commands/cs_learn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -37,28 +37,29 @@ public:
{
static ChatCommand learnAllMyCommandTable[] =
{
- { "class", SEC_ADMINISTRATOR, false, &HandleLearnAllMyClassCommand, "", NULL },
- { "pettalents", SEC_ADMINISTRATOR, false, &HandleLearnAllMyPetTalentsCommand, "", NULL },
- { "spells", SEC_ADMINISTRATOR, false, &HandleLearnAllMySpellsCommand, "", NULL },
- { "talents", SEC_ADMINISTRATOR, false, &HandleLearnAllMyTalentsCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "class", SEC_ADMINISTRATOR, false, &HandleLearnAllMyClassCommand, "", NULL },
+ { "pettalents", SEC_ADMINISTRATOR, false, &HandleLearnAllMyPetTalentsCommand, "", NULL },
+ { "spells", SEC_ADMINISTRATOR, false, &HandleLearnAllMySpellsCommand, "", NULL },
+ { "talents", SEC_ADMINISTRATOR, false, &HandleLearnAllMyTalentsCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
+
static ChatCommand learnAllCommandTable[] =
{
- { "my", SEC_ADMINISTRATOR, false, NULL, "", learnAllMyCommandTable },
- { "gm", SEC_GAMEMASTER, false, &HandleLearnAllGMCommand, "", NULL },
- { "crafts", SEC_GAMEMASTER, false, &HandleLearnAllCraftsCommand, "", NULL },
- { "default", SEC_MODERATOR, false, &HandleLearnAllDefaultCommand, "", NULL },
- { "lang", SEC_MODERATOR, false, &HandleLearnAllLangCommand, "", NULL },
- { "recipes", SEC_GAMEMASTER, false, &HandleLearnAllRecipesCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "my", SEC_ADMINISTRATOR, false, NULL, "", learnAllMyCommandTable },
+ { "gm", SEC_GAMEMASTER, false, &HandleLearnAllGMCommand, "", NULL },
+ { "crafts", SEC_GAMEMASTER, false, &HandleLearnAllCraftsCommand, "", NULL },
+ { "default", SEC_MODERATOR, false, &HandleLearnAllDefaultCommand, "", NULL },
+ { "lang", SEC_MODERATOR, false, &HandleLearnAllLangCommand, "", NULL },
+ { "recipes", SEC_GAMEMASTER, false, &HandleLearnAllRecipesCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand learnCommandTable[] =
{
- { "all", SEC_ADMINISTRATOR, false, NULL, "", learnAllCommandTable },
- { "", SEC_ADMINISTRATOR, false, &HandleLearnCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
+ { "all", SEC_ADMINISTRATOR, false, NULL, "", learnAllCommandTable },
+ { "", SEC_ADMINISTRATOR, false, &HandleLearnCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
@@ -68,7 +69,8 @@ public:
};
return commandTable;
}
- static bool HandleLearnCommand(ChatHandler* handler, const char* args)
+
+ static bool HandleLearnCommand(ChatHandler* handler, char const* args)
{
Player* targetPlayer = handler->getSelectedPlayer();
@@ -84,8 +86,8 @@ public:
if (!spell || !sSpellMgr->GetSpellInfo(spell))
return false;
- char const* allStr = strtok(NULL, " ");
- bool allRanks = allStr ? (strncmp(allStr, "all", strlen(allStr)) == 0) : false;
+ char const* all = strtok(NULL, " ");
+ bool allRanks = all ? (strncmp(all, "all", strlen(all)) == 0) : false;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell);
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer()))
@@ -110,14 +112,14 @@ public:
else
targetPlayer->learnSpell(spell, false);
- uint32 first_spell = sSpellMgr->GetFirstSpellInChain(spell);
- if (GetTalentSpellCost(first_spell))
+ uint32 firstSpell = sSpellMgr->GetFirstSpellInChain(spell);
+ if (GetTalentSpellCost(firstSpell))
targetPlayer->SendTalentsInfoData(false);
return true;
}
- static bool HandleLearnAllGMCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllGMCommand(ChatHandler* handler, char const* /*args*/)
{
for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i)
{
@@ -135,19 +137,19 @@ public:
return true;
}
- static bool HandleLearnAllMyClassCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllMyClassCommand(ChatHandler* handler, char const* /*args*/)
{
HandleLearnAllMySpellsCommand(handler, "");
HandleLearnAllMyTalentsCommand(handler, "");
return true;
}
- static bool HandleLearnAllMySpellsCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllMySpellsCommand(ChatHandler* handler, char const* /*args*/)
{
- ChrClassesEntry const* clsEntry = sChrClassesStore.LookupEntry(handler->GetSession()->GetPlayer()->getClass());
- if (!clsEntry)
+ ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(handler->GetSession()->GetPlayer()->getClass());
+ if (!classEntry)
return true;
- uint32 family = clsEntry->spellfamily;
+ uint32 family = classEntry->spellfamily;
for (uint32 i = 0; i < sSkillLineAbilityStore.GetNumRows(); ++i)
{
@@ -172,8 +174,8 @@ public:
continue;
// skip spells with first rank learned as talent (and all talents then also)
- uint32 first_rank = sSpellMgr->GetFirstSpellInChain(spellInfo->Id);
- if (GetTalentSpellCost(first_rank) > 0)
+ uint32 firstRank = sSpellMgr->GetFirstSpellInChain(spellInfo->Id);
+ if (GetTalentSpellCost(firstRank) > 0)
continue;
// skip broken spells
@@ -187,7 +189,7 @@ public:
return true;
}
- static bool HandleLearnAllMyTalentsCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllMyTalentsCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
uint32 classMask = player->getClassMask();
@@ -207,7 +209,7 @@ public:
// search highest talent rank
uint32 spellId = 0;
- for (int8 rank = MAX_TALENT_RANK-1; rank >= 0; --rank)
+ for (int8 rank = MAX_TALENT_RANK - 1; rank >= 0; --rank)
{
if (talentInfo->RankID[rank] != 0)
{
@@ -234,7 +236,7 @@ public:
return true;
}
- static bool HandleLearnAllMyPetTalentsCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllMyPetTalentsCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
@@ -246,23 +248,23 @@ public:
return false;
}
- CreatureTemplate const* ci = pet->GetCreatureInfo();
- if (!ci)
+ CreatureTemplate const* creatureInfo = pet->GetCreatureInfo();
+ if (!creatureInfo)
{
handler->SendSysMessage(LANG_WRONG_PET_TYPE);
handler->SetSentErrorMessage(true);
return false;
}
- CreatureFamilyEntry const* pet_family = sCreatureFamilyStore.LookupEntry(ci->family);
- if (!pet_family)
+ CreatureFamilyEntry const* petFamily = sCreatureFamilyStore.LookupEntry(creatureInfo->family);
+ if (!petFamily)
{
handler->SendSysMessage(LANG_WRONG_PET_TYPE);
handler->SetSentErrorMessage(true);
return false;
}
- if (pet_family->petTalentType < 0) // not hunter pet
+ if (petFamily->petTalentType < 0) // not hunter pet
{
handler->SendSysMessage(LANG_WRONG_PET_TYPE);
handler->SetSentErrorMessage(true);
@@ -280,30 +282,30 @@ public:
continue;
// prevent learn talent for different family (cheating)
- if (((1 << pet_family->petTalentType) & talentTabInfo->petTalentMask) == 0)
+ if (((1 << petFamily->petTalentType) & talentTabInfo->petTalentMask) == 0)
continue;
// search highest talent rank
- uint32 spellid = 0;
+ uint32 spellId = 0;
for (int8 rank = MAX_TALENT_RANK-1; rank >= 0; --rank)
{
if (talentInfo->RankID[rank] != 0)
{
- spellid = talentInfo->RankID[rank];
+ spellId = talentInfo->RankID[rank];
break;
}
}
- if (!spellid) // ??? none spells in talent
+ if (!spellId) // ??? none spells in talent
continue;
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid);
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer(), false))
continue;
// learn highest rank of talent and learn all non-talent spell ranks (recursive by tree)
- pet->learnSpellHighRank(spellid);
+ pet->learnSpellHighRank(spellId);
}
pet->SetFreeTalentPoints(0);
@@ -312,7 +314,7 @@ public:
return true;
}
- static bool HandleLearnAllLangCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllLangCommand(ChatHandler* handler, char const* /*args*/)
{
// skipping UNIVERSAL language (0)
for (uint8 i = 1; i < LANGUAGES_COUNT; ++i)
@@ -322,7 +324,7 @@ public:
return true;
}
- static bool HandleLearnAllDefaultCommand(ChatHandler* handler, const char* args)
+ static bool HandleLearnAllDefaultCommand(ChatHandler* handler, char const* args)
{
Player* target;
if (!handler->extractPlayerTarget((char*)args, &target))
@@ -335,9 +337,8 @@ public:
return true;
}
- static bool HandleLearnAllCraftsCommand(ChatHandler* handler, const char* /*args*/)
+ static bool HandleLearnAllCraftsCommand(ChatHandler* handler, char const* /*args*/)
{
-
for (uint32 i = 0; i < sSkillLineStore.GetNumRows(); ++i)
{
SkillLineEntry const* skillInfo = sSkillLineStore.LookupEntry(i);
@@ -355,7 +356,7 @@ public:
return true;
}
- static bool HandleLearnAllRecipesCommand(ChatHandler* handler, const char* args)
+ static bool HandleLearnAllRecipesCommand(ChatHandler* handler, char const* args)
{
// Learns all recipes of specified profession and sets skill to max
// Example: .learn all_recipes enchanting
@@ -370,13 +371,13 @@ public:
if (!*args)
return false;
- std::wstring wnamepart;
+ std::wstring namePart;
- if (!Utf8toWStr(args, wnamepart))
+ if (!Utf8toWStr(args, namePart))
return false;
// converting string that we try to find to lower case
- wstrToLower(wnamepart);
+ wstrToLower(namePart);
std::string name;
@@ -392,29 +393,29 @@ public:
!skillInfo->canLink) // only prof with recipes have set
continue;
- int loc = handler->GetSessionDbcLocale();
- name = skillInfo->name[loc];
+ int locale = handler->GetSessionDbcLocale();
+ name = skillInfo->name[locale];
if (name.empty())
continue;
- if (!Utf8FitTo(name, wnamepart))
+ if (!Utf8FitTo(name, namePart))
{
- loc = 0;
- for (; loc < TOTAL_LOCALES; ++loc)
+ locale = 0;
+ for (; locale < TOTAL_LOCALES; ++locale)
{
- if (loc == handler->GetSessionDbcLocale())
+ if (locale == handler->GetSessionDbcLocale())
continue;
- name = skillInfo->name[loc];
+ name = skillInfo->name[locale];
if (name.empty())
continue;
- if (Utf8FitTo(name, wnamepart))
+ if (Utf8FitTo(name, namePart))
break;
}
}
- if (loc < TOTAL_LOCALES)
+ if (locale < TOTAL_LOCALES)
{
targetSkillInfo = skillInfo;
break;
@@ -431,7 +432,8 @@ public:
handler->PSendSysMessage(LANG_COMMAND_LEARN_ALL_RECIPES, name.c_str());
return true;
}
- static void HandleLearnSkillRecipesHelper(Player* player, uint32 skill_id)
+
+ static void HandleLearnSkillRecipesHelper(Player* player, uint32 skillId)
{
uint32 classmask = player->getClassMask();
@@ -442,7 +444,7 @@ public:
continue;
// wrong skill
- if (skillLine->skillId != skill_id)
+ if (skillLine->skillId != skillId)
continue;
// not high rank
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 7c08fe4d297..5f0434e5c55 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 28bc17a7450..358eaacd4f7 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -1129,7 +1129,12 @@ public:
uint16 drunkMod = drunklevel * 0xFFFF / 100;
- handler->GetSession()->GetPlayer()->SetDrunkValue(drunkMod);
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ target = handler->GetSession()->GetPlayer();
+
+ if (target)
+ target->SetDrunkValue(drunkMod);
return true;
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 0fecfa83221..54dac404f03 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -147,15 +147,18 @@ public:
uint32 db_guid = creature->GetDBTableGUIDLow();
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
- creature->LoadFromDB(db_guid, map);
+ if (!creature->LoadCreatureFromDB(db_guid, map))
+ {
+ delete creature;
+ return false;
+ }
- map->AddToMap(creature);
sObjectMgr->AddCreatureToGrid(db_guid, sObjectMgr->GetCreatureData(db_guid));
return true;
}
//add item in vendorlist
- static bool HandleNpcAddVendorItemCommand(ChatHandler* handler, const char* args)
+ static bool HandleNpcAddVendorItemCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
@@ -168,7 +171,11 @@ public:
return false;
}
- uint32 itemId = atol(pitem);
+ int32 item_int = atol(pitem);
+ if (item_int <= 0)
+ return false;
+
+ uint32 itemId = item_int;
char* fmaxcount = strtok(NULL, " "); //add maxcount, default: 0
uint32 maxcount = 0;
@@ -212,10 +219,10 @@ public:
if (!*args)
return false;
- char* guid_str = strtok((char*)args, " ");
- char* wait_str = strtok((char*)NULL, " ");
+ char* guidStr = strtok((char*)args, " ");
+ char* waitStr = strtok((char*)NULL, " ");
- uint32 lowguid = atoi((char*)guid_str);
+ uint32 lowGuid = atoi((char*)guidStr);
Creature* creature = NULL;
@@ -227,10 +234,10 @@ public:
// attempt check creature existence by DB data
if (!creature)
{
- CreatureData const* data = sObjectMgr->GetCreatureData(lowguid);
+ CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid);
if (!data)
{
- handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowguid);
+ handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowGuid);
handler->SetSentErrorMessage(true);
return false;
}
@@ -238,20 +245,22 @@ public:
else
{
// obtain real GUID for DB operations
- lowguid = creature->GetDBTableGUIDLow();
+ lowGuid = creature->GetDBTableGUIDLow();
}
- int wait = wait_str ? atoi(wait_str) : 0;
+ int wait = waitStr ? atoi(waitStr) : 0;
if (wait < 0)
wait = 0;
- //Player* player = handler->GetSession()->GetPlayer();
+ // Update movement type
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
- //WaypointMgr.AddLastNode(lowguid, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), wait, 0);
+ stmt->setUInt8(0, uint8(WAYPOINT_MOTION_TYPE));
+ stmt->setUInt32(1, lowGuid);
+
+ WorldDatabase.Execute(stmt);
- // update movement type
- WorldDatabase.PExecute("UPDATE creature SET MovementType = '%u' WHERE guid = '%u'", WAYPOINT_MOTION_TYPE, lowguid);
if (creature && creature->GetWaypointPath())
{
creature->SetDefaultMovementType(WAYPOINT_MOTION_TYPE);
@@ -450,17 +459,23 @@ public:
creature->setFaction(factionId);
- // faction is set in creature_template - not inside creature
+ // Faction is set in creature_template - not inside creature
- // update in memory
+ // Update in memory..
if (CreatureTemplate const* cinfo = creature->GetCreatureInfo())
{
const_cast<CreatureTemplate*>(cinfo)->faction_A = factionId;
const_cast<CreatureTemplate*>(cinfo)->faction_H = factionId;
}
- // and DB
- WorldDatabase.PExecute("UPDATE creature_template SET faction_A = '%u', faction_H = '%u' WHERE entry = '%u'", factionId, factionId, creature->GetEntry());
+ // ..and DB
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_FACTION);
+
+ stmt->setUInt16(0, uint16(factionId));
+ stmt->setUInt16(1, uint16(factionId));
+ stmt->setUInt32(2, creature->GetEntry());
+
+ WorldDatabase.Execute(stmt);
return true;
}
@@ -484,7 +499,12 @@ public:
creature->SetUInt32Value(UNIT_NPC_FLAGS, npcFlags);
- WorldDatabase.PExecute("UPDATE creature_template SET npcflag = '%u' WHERE entry = '%u'", npcFlags, creature->GetEntry());
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_NPCFLAG);
+
+ stmt->setUInt32(0, npcFlags);
+ stmt->setUInt32(1, creature->GetEntry());
+
+ WorldDatabase.Execute(stmt);
handler->SendSysMessage(LANG_VALUE_SAVED_REJOIN);
@@ -545,15 +565,13 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_PHASEMASK, target->GetPhaseMask());
handler->PSendSysMessage(LANG_NPCINFO_ARMOR, target->GetArmor());
handler->PSendSysMessage(LANG_NPCINFO_POSITION, float(target->GetPositionX()), float(target->GetPositionY()), float(target->GetPositionZ()));
+ handler->PSendSysMessage(LANG_NPCINFO_AIINFO, target->GetAIName().c_str(), target->GetScriptName().c_str());
- if ((npcflags & UNIT_NPC_FLAG_VENDOR))
- {
+ if (npcflags & UNIT_NPC_FLAG_VENDOR)
handler->SendSysMessage(LANG_NPCINFO_VENDOR);
- }
- if ((npcflags & UNIT_NPC_FLAG_TRAINER))
- {
+
+ if (npcflags & UNIT_NPC_FLAG_TRAINER)
handler->SendSysMessage(LANG_NPCINFO_TRAINER);
- }
return true;
}
@@ -632,7 +650,16 @@ public:
}
}
- WorldDatabase.PExecute("UPDATE creature SET position_x = '%f', position_y = '%f', position_z = '%f', orientation = '%f' WHERE guid = '%u'", x, y, z, o, lowguid);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_POSITION);
+
+ stmt->setFloat(0, x);
+ stmt->setFloat(1, y);
+ stmt->setFloat(2, z);
+ stmt->setFloat(3, o);
+ stmt->setUInt32(4, lowguid);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage(LANG_COMMAND_CREATUREMOVED);
return true;
}
@@ -879,10 +906,10 @@ public:
mtype = RANDOM_MOTION_TYPE;
Creature* creature = handler->getSelectedCreature();
- uint32 u_guidlow = 0;
+ uint32 guidLow = 0;
if (creature)
- u_guidlow = creature->GetDBTableGUIDLow();
+ guidLow = creature->GetDBTableGUIDLow();
else
return false;
@@ -895,7 +922,14 @@ public:
creature->Respawn();
}
- WorldDatabase.PExecute("UPDATE creature SET spawndist=%f, MovementType=%i WHERE guid=%u", option, mtype, u_guidlow);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_SPAWN_DISTANCE);
+
+ stmt->setFloat(0, option);
+ stmt->setUInt8(1, uint8(mtype));
+ stmt->setUInt32(2, guidLow);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage(LANG_COMMAND_SPAWNDIST, option);
return true;
}
@@ -911,9 +945,9 @@ public:
if (!stime)
return false;
- int i_stime = atoi((char*)stime);
+ int spawnTime = atoi((char*)stime);
- if (i_stime < 0)
+ if (spawnTime < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
@@ -921,16 +955,22 @@ public:
}
Creature* creature = handler->getSelectedCreature();
- uint32 u_guidlow = 0;
+ uint32 guidLow = 0;
if (creature)
- u_guidlow = creature->GetDBTableGUIDLow();
+ guidLow = creature->GetDBTableGUIDLow();
else
return false;
- WorldDatabase.PExecute("UPDATE creature SET spawntimesecs=%i WHERE guid=%u", i_stime, u_guidlow);
- creature->SetRespawnDelay((uint32)i_stime);
- handler->PSendSysMessage(LANG_COMMAND_SPAWNTIME, i_stime);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_SPAWN_TIME_SECS);
+
+ stmt->setUInt32(0, uint32(spawnTime));
+ stmt->setUInt32(1, guidLow);
+
+ WorldDatabase.Execute(stmt);
+
+ creature->SetRespawnDelay((uint32)spawnTime);
+ handler->PSendSysMessage(LANG_COMMAND_SPAWNTIME, spawnTime);
return true;
}
@@ -1119,7 +1159,7 @@ public:
}
// Everything looks OK, create new pet
- Pet* pet = player->CreateTamedPetFrom (creatureTarget);
+ Pet* pet = player->CreateTamedPetFrom(creatureTarget);
if (!pet)
{
handler->PSendSysMessage (LANG_CREATURE_NON_TAMEABLE, cInfo->Entry);
@@ -1193,8 +1233,15 @@ public:
CreatureGroupMap[lowguid] = group_member;
creature->SearchFormation();
- WorldDatabase.PExecute("INSERT INTO creature_formations (leaderGUID, memberGUID, dist, angle, groupAI) VALUES ('%u', '%u', '%f', '%f', '%u')",
- leaderGUID, lowguid, group_member->follow_dist, group_member->follow_angle, group_member->groupAI);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_FORMATION);
+
+ stmt->setUInt32(0, leaderGUID);
+ stmt->setUInt32(1, lowguid);
+ stmt->setFloat(2, group_member->follow_dist);
+ stmt->setFloat(3, group_member->follow_angle);
+ stmt->setUInt32(4, uint32(group_member->groupAI));
+
+ WorldDatabase.Execute(stmt);
handler->PSendSysMessage("Creature %u added to formation with leader %u", lowguid, leaderGUID);
diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp
index 31d8cd3c8f2..2472a29e595 100644
--- a/src/server/scripts/Commands/cs_quest.cpp
+++ b/src/server/scripts/Commands/cs_quest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -128,13 +128,13 @@ public:
// remove all quest entries for 'entry' from quest log
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
{
- uint32 quest = player->GetQuestSlotQuestId(slot);
- if (quest == entry)
+ uint32 logQuest = player->GetQuestSlotQuestId(slot);
+ if (logQuest == entry)
{
player->SetQuestSlot(slot, 0);
// we ignore unequippable quest items in this case, its' still be equipped
- player->TakeQuestSourceItem(quest, false);
+ player->TakeQuestSourceItem(logQuest, false);
}
}
@@ -176,8 +176,8 @@ public:
// Add quest items for quests that require items
for (uint8 x = 0; x < QUEST_ITEM_OBJECTIVES_COUNT; ++x)
{
- uint32 id = quest->ReqItemId[x];
- uint32 count = quest->ReqItemCount[x];
+ uint32 id = quest->RequiredItemId[x];
+ uint32 count = quest->RequiredItemCount[x];
if (!id || !count)
continue;
@@ -195,10 +195,10 @@ public:
// All creature/GO slain/casted (not required, but otherwise it will display "Creature slain 0/10")
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
{
- int32 creature = quest->ReqCreatureOrGOId[i];
- uint32 creaturecount = quest->ReqCreatureOrGOCount[i];
+ int32 creature = quest->RequiredNpcOrGo[i];
+ uint32 creaturecount = quest->RequiredNpcOrGoCount[i];
- if (uint32 spell_id = quest->ReqSpell[i])
+ if (uint32 spell_id = quest->RequiredSpellCast[i])
{
for (uint16 z = 0; z < creaturecount; ++z)
player->CastedCreatureOrGO(creature, 0, spell_id);
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 7784d495f80..b1aaf82e35b 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp
index 17c076f903c..5054bd83f32 100644
--- a/src/server/scripts/Commands/cs_tele.cpp
+++ b/src/server/scripts/Commands/cs_tele.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -125,6 +125,29 @@ public:
if (!handler->extractPlayerTarget(nameStr, &target, &target_guid, &target_name))
return false;
+ if (strcmp(teleStr, "$home") == 0) // References target's homebind
+ {
+ if (target)
+ target->TeleportTo(target->m_homebindMapId, target->m_homebindX, target->m_homebindY, target->m_homebindZ, target->GetOrientation());
+ else
+ {
+ QueryResult resultDB = CharacterDatabase.PQuery("SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = %u", target_guid);
+ if (resultDB)
+ {
+ Field* fieldsDB = resultDB->Fetch();
+ uint32 mapId = fieldsDB[0].GetUInt32();
+ uint32 zoneId = fieldsDB[1].GetUInt32();
+ float posX = fieldsDB[2].GetFloat();
+ float posY = fieldsDB[3].GetFloat();
+ float posZ = fieldsDB[4].GetFloat();
+
+ Player::SavePositionInDB(mapId, posX, posY, posZ, 0, zoneId, target_guid);
+ }
+ }
+
+ return true;
+ }
+
// id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r
GameTele const* tele = handler->extractGameTeleFromLink(teleStr);
if (!tele)
@@ -187,8 +210,8 @@ public:
if (!*args)
return false;
- Player* player = handler->getSelectedPlayer();
- if (!player)
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
@@ -196,7 +219,7 @@ public:
}
// check online security
- if (handler->HasLowerSecurity(player, 0))
+ if (handler->HasLowerSecurity(target, 0))
return false;
// id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r
@@ -216,9 +239,9 @@ public:
return false;
}
- std::string nameLink = handler->GetNameLink(player);
+ std::string nameLink = handler->GetNameLink(target);
- Group* grp = player->GetGroup();
+ Group* grp = target->GetGroup();
if (!grp)
{
handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str());
@@ -228,38 +251,38 @@ public:
for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())
{
- Player* pl = itr->getSource();
+ Player* player = itr->getSource();
- if (!pl || !pl->GetSession())
+ if (!player || !player->GetSession())
continue;
// check online security
- if (handler->HasLowerSecurity(pl, 0))
+ if (handler->HasLowerSecurity(player, 0))
return false;
- std::string plNameLink = handler->GetNameLink(pl);
+ std::string plNameLink = handler->GetNameLink(player);
- if (pl->IsBeingTeleported())
+ if (player->IsBeingTeleported())
{
handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());
continue;
}
handler->PSendSysMessage(LANG_TELEPORTING_TO, plNameLink.c_str(), "", tele->name.c_str());
- if (handler->needReportToTarget(pl))
- (ChatHandler(pl)).PSendSysMessage(LANG_TELEPORTED_TO_BY, nameLink.c_str());
+ if (handler->needReportToTarget(player))
+ (ChatHandler(player)).PSendSysMessage(LANG_TELEPORTED_TO_BY, nameLink.c_str());
// stop flight if need
- if (pl->isInFlight())
+ if (player->isInFlight())
{
- pl->GetMotionMaster()->MovementExpired();
- pl->CleanupAfterTaxiFlight();
+ player->GetMotionMaster()->MovementExpired();
+ player->CleanupAfterTaxiFlight();
}
// save only in non-flight case
else
- pl->SaveRecallPosition();
+ player->SaveRecallPosition();
- pl->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation);
+ player->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation);
}
return true;
diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp
index 2fb22e0090d..f35f6baca98 100644
--- a/src/server/scripts/Commands/cs_titles.cpp
+++ b/src/server/scripts/Commands/cs_titles.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 75904764f23..8f5e862555c 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -117,8 +117,15 @@ public:
Player* player = handler->GetSession()->GetPlayer();
//Map* map = player->GetMap();
- WorldDatabase.PExecute("INSERT INTO waypoint_data (id, point, position_x, position_y, position_z) VALUES ('%u', '%u', '%f', '%f', '%f')",
- pathid, point+1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_DATA);
+
+ stmt->setUInt32(0, pathid);
+ stmt->setUInt32(1, point + 1);
+ stmt->setFloat(2, player->GetPositionX());
+ stmt->setFloat(3, player->GetPositionY());
+ stmt->setFloat(4, player->GetPositionZ());
+
+ WorldDatabase.Execute(stmt);
handler->PSendSysMessage("%s%s%u%s%u%s|r", "|cff00ff00", "PathID: |r|cff00ffff", pathid, "|r|cff00ff00: Waypoint |r|cff00ffff", point+1, "|r|cff00ff00 created. ");
return true;
@@ -136,7 +143,7 @@ public:
path_number = strtok((char*)args, " ");
uint32 pathid = 0;
- uint32 guidlow = 0;
+ uint32 guidLow = 0;
Creature* target = handler->getSelectedCreature();
// Did player provide a path_id?
@@ -165,15 +172,34 @@ public:
return true;
}
- guidlow = target->GetDBTableGUIDLow();
- QueryResult result = WorldDatabase.PQuery("SELECT guid FROM creature_addon WHERE guid = '%u'", guidlow);
+ guidLow = target->GetDBTableGUIDLow();
+ QueryResult result = WorldDatabase.PQuery("SELECT guid FROM creature_addon WHERE guid = '%u'", guidLow);
+
+ PreparedStatement* stmt;
if (result)
- WorldDatabase.PExecute("UPDATE creature_addon SET path_id = '%u' WHERE guid = '%u'", pathid, guidlow);
+ {
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_ADDON_PATH);
+
+ stmt->setUInt32(0, pathid);
+ stmt->setUInt32(1, guidLow);
+ }
else
- WorldDatabase.PExecute("INSERT INTO creature_addon(guid, path_id) VALUES ('%u', '%u')", guidlow, pathid);
+ {
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_ADDON);
- WorldDatabase.PExecute("UPDATE creature SET MovementType = '%u' WHERE guid = '%u'", WAYPOINT_MOTION_TYPE, guidlow);
+ stmt->setUInt32(0, guidLow);
+ stmt->setUInt32(1, pathid);
+ }
+
+ WorldDatabase.Execute(stmt);
+
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
+
+ stmt->setUInt8(0, uint8(WAYPOINT_MOTION_TYPE));
+ stmt->setUInt32(1, guidLow);
+
+ WorldDatabase.Execute(stmt);
target->LoadPath(pathid);
target->SetDefaultMovementType(WAYPOINT_MOTION_TYPE);
@@ -208,15 +234,27 @@ public:
return true;
}
- uint32 guidlow = target->GetDBTableGUIDLow();
+ uint32 guildLow = target->GetDBTableGUIDLow();
if (target->GetCreatureAddon())
{
if (target->GetCreatureAddon()->path_id != 0)
{
- WorldDatabase.PExecute("DELETE FROM creature_addon WHERE guid = %u", guidlow);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
+
+ stmt->setUInt32(0, guildLow);
+
+ WorldDatabase.Execute(stmt);
+
target->UpdateWaypointID(0);
- WorldDatabase.PExecute("UPDATE creature SET MovementType = '%u' WHERE guid = '%u'", IDLE_MOTION_TYPE, guidlow);
+
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
+
+ stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE));
+ stmt->setUInt32(1, guildLow);
+
+ WorldDatabase.Execute(stmt);
+
target->LoadPath(0);
target->SetDefaultMovementType(IDLE_MOTION_TYPE);
target->GetMotionMaster()->MoveTargetedHome();
@@ -254,7 +292,12 @@ public:
if (!result)
{
- WorldDatabase.PExecute("INSERT INTO waypoint_scripts(guid)VALUES(%u)", id);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
+
+ stmt->setUInt32(0, id);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id);
}
else
@@ -264,7 +307,13 @@ public:
{
QueryResult result = WorldDatabase.Query("SELECT MAX(guid) FROM waypoint_scripts");
id = result->Fetch()->GetUInt32();
- WorldDatabase.PExecute("INSERT INTO waypoint_scripts(guid)VALUES(%u)", id+1);
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
+
+ stmt->setUInt32(0, id + 1);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", id+1);
}
@@ -322,7 +371,12 @@ public:
if (result)
{
- WorldDatabase.PExecute("DELETE FROM waypoint_scripts WHERE guid = %u", id);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_SCRIPT);
+
+ stmt->setUInt32(0, id);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: Waypoint script removed: ", id);
}
else
@@ -379,8 +433,15 @@ public:
{
uint32 newid = atoi(arg_3);
handler->PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r", "|cff00ff00", "Wp Event: Wypoint scipt guid: ", newid, " id changed: ", id);
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET id='%u' WHERE guid='%u'",
- newid, id); return true;
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_ID);
+
+ stmt->setUInt32(0, newid);
+ stmt->setUInt32(1, id);
+
+ WorldDatabase.Execute(stmt);
+
+ return true;
}
else
{
@@ -394,36 +455,56 @@ public:
if (arg_str_2 == "posx")
{
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET x='%f' WHERE guid='%u'",
- (float)(atof(arg_3)), id);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_X);
+
+ stmt->setFloat(0, float(atof(arg_3)));
+ stmt->setUInt32(1, id);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff %u|r|cff00ff00 position_x updated.|r", id);
return true;
}
else if (arg_str_2 == "posy")
{
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET y='%f' WHERE guid='%u'",
- (float)(atof(arg_3)), id);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Y);
+
+ stmt->setFloat(0, float(atof(arg_3)));
+ stmt->setUInt32(1, id);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("|cff00ff00Waypoint script: %u position_y updated.|r", id);
return true;
}
else if (arg_str_2 == "posz")
{
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET z='%f' WHERE guid='%u'",
- (float)(atof(arg_3)), id);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Z);
+
+ stmt->setFloat(0, float(atof(arg_3)));
+ stmt->setUInt32(1, id);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 position_z updated.|r", id);
return true;
}
else if (arg_str_2 == "orientation")
{
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET o='%f' WHERE guid='%u'",
- (float)(atof(arg_3)), id);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_O);
+
+ stmt->setFloat(0, float(atof(arg_3)));
+ stmt->setUInt32(1, id);
+
+ WorldDatabase.Execute(stmt);
+
handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 orientation updated.|r", id);
return true;
}
else if (arg_str_2 == "dataint")
{
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET %s='%u' WHERE guid='%u'",
- arg_2, atoi(arg_3), id);
+ WorldDatabase.PExecute("UPDATE waypoint_scripts SET %s='%u' WHERE guid='%u'", arg_2, atoi(arg_3), id); // Query can't be a prepared statement
+
handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 dataint updated.|r", id);
return true;
}
@@ -431,8 +512,7 @@ public:
{
std::string arg_str_3 = arg_3;
WorldDatabase.EscapeString(arg_str_3);
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET %s='%s' WHERE guid='%u'",
- arg_2, arg_str_3.c_str(), id);
+ WorldDatabase.PExecute("UPDATE waypoint_scripts SET %s='%s' WHERE guid='%u'", arg_2, arg_str_3.c_str(), id); // Query can't be a prepared statement
}
}
handler->PSendSysMessage("%s%s|r|cff00ffff%u:|r|cff00ff00 %s %s|r", "|cff00ff00", "Waypoint script:", id, arg_2, "updated.");
@@ -480,55 +560,43 @@ public:
}
// The visual waypoint
- Creature* wpCreature = NULL;
wpGuid = target->GetGUIDLow();
- // Did the user select a visual spawnpoint?
- if (wpGuid)
- wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(MAKE_NEW_GUID(wpGuid, VISUAL_WAYPOINT, HIGHGUID_UNIT));
- // attempt check creature existence by DB data
- else
- {
- handler->PSendSysMessage(LANG_WAYPOINT_CREATNOTFOUND, wpGuid);
- return false;
- }
// User did select a visual waypoint?
+
// Check the creature
- if (wpCreature->GetEntry() == VISUAL_WAYPOINT)
- {
- QueryResult result = WorldDatabase.PQuery("SELECT id, point FROM waypoint_data WHERE wpguid = %u", wpGuid);
+ QueryResult result = WorldDatabase.PQuery("SELECT id, point FROM waypoint_data WHERE wpguid = %u", wpGuid);
+ if (!result)
+ {
+ handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUIDLow());
+ // Select waypoint number from database
+ // Since we compare float values, we have to deal with
+ // some difficulties.
+ // Here we search for all waypoints that only differ in one from 1 thousand
+ // (0.001) - There is no other way to compare C++ floats with mySQL floats
+ // See also: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
+ const char* maxDIFF = "0.01";
+ result = WorldDatabase.PQuery("SELECT id, point FROM waypoint_data WHERE (abs(position_x - %f) <= %s) and (abs(position_y - %f) <= %s) and (abs(position_z - %f) <= %s)",
+ target->GetPositionX(), maxDIFF, target->GetPositionY(), maxDIFF, target->GetPositionZ(), maxDIFF);
if (!result)
{
- handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUIDLow());
- // Select waypoint number from database
- // Since we compare float values, we have to deal with
- // some difficulties.
- // Here we search for all waypoints that only differ in one from 1 thousand
- // (0.001) - There is no other way to compare C++ floats with mySQL floats
- // See also: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
- const char* maxDIFF = "0.01";
- result = WorldDatabase.PQuery("SELECT id, point FROM waypoint_data WHERE (abs(position_x - %f) <= %s) and (abs(position_y - %f) <= %s) and (abs(position_z - %f) <= %s)",
- wpCreature->GetPositionX(), maxDIFF, wpCreature->GetPositionY(), maxDIFF, wpCreature->GetPositionZ(), maxDIFF);
- if (!result)
- {
- handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM, wpGuid);
- return true;
- }
- }
-
- do
- {
- Field* fields = result->Fetch();
- pathid = fields[0].GetUInt32();
- point = fields[1].GetUInt32();
+ handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM, wpGuid);
+ return true;
}
- while (result->NextRow());
+ }
- // We have the waypoint number and the GUID of the "master npc"
- // Text is enclosed in "<>", all other arguments not
- arg_str = strtok((char*)NULL, " ");
+ do
+ {
+ Field* fields = result->Fetch();
+ pathid = fields[0].GetUInt32();
+ point = fields[1].GetUInt32();
}
+ while (result->NextRow());
+
+ // We have the waypoint number and the GUID of the "master npc"
+ // Text is enclosed in "<>", all other arguments not
+ arg_str = strtok((char*)NULL, " ");
// Check for argument
if (show != "del" && show != "move" && arg_str == NULL)
@@ -552,10 +620,19 @@ public:
wpCreature->AddObjectToRemoveList();
}
- WorldDatabase.PExecute("DELETE FROM waypoint_data WHERE id='%u' AND point='%u'",
- pathid, point);
- WorldDatabase.PExecute("UPDATE waypoint_data SET point=point-1 WHERE id='%u' AND point>'%u'",
- pathid, point);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_DATA);
+
+ stmt->setUInt32(0, pathid);
+ stmt->setUInt32(1, point);
+
+ WorldDatabase.Execute(stmt);
+
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT);
+
+ stmt->setUInt32(0, pathid);
+ stmt->setUInt32(1, point);
+
+ WorldDatabase.Execute(stmt);
handler->PSendSysMessage(LANG_WAYPOINT_REMOVED);
return true;
@@ -590,13 +667,25 @@ public:
wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
- wpCreature2->LoadFromDB(wpCreature2->GetDBTableGUIDLow(), map);
- map->AddToMap(wpCreature2);
+ //TODO: Should we first use "Create" then use "LoadFromDB"?
+ if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetDBTableGUIDLow(), map))
+ {
+ handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT);
+ delete wpCreature2;
+ return false;
+ }
//sMapMgr->GetMap(npcCreature->GetMapId())->Add(wpCreature2);
}
- WorldDatabase.PExecute("UPDATE waypoint_data SET position_x = '%f', position_y = '%f', position_z = '%f' where id = '%u' AND point='%u'",
- chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), pathid, point);
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POSITION);
+
+ stmt->setFloat(0, chr->GetPositionX());
+ stmt->setFloat(1, chr->GetPositionY());
+ stmt->setFloat(2, chr->GetPositionZ());
+ stmt->setUInt32(3, pathid);
+ stmt->setUInt32(4, point);
+
+ WorldDatabase.Execute(stmt);
handler->PSendSysMessage(LANG_WAYPOINT_CHANGED);
}
@@ -608,16 +697,14 @@ public:
if (text == 0)
{
// show_str check for present in list of correct values, no sql injection possible
- WorldDatabase.PExecute("UPDATE waypoint_data SET %s=NULL WHERE id='%u' AND point='%u'",
- show_str, pathid, point);
+ WorldDatabase.PExecute("UPDATE waypoint_data SET %s=NULL WHERE id='%u' AND point='%u'", show_str, pathid, point); // Query can't be a prepared statement
}
else
{
// show_str check for present in list of correct values, no sql injection possible
std::string text2 = text;
WorldDatabase.EscapeString(text2);
- WorldDatabase.PExecute("UPDATE waypoint_data SET %s='%s' WHERE id='%u' AND point='%u'",
- show_str, text2.c_str(), pathid, point);
+ WorldDatabase.PExecute("UPDATE waypoint_data SET %s='%s' WHERE id='%u' AND point='%u'", show_str, text2.c_str(), pathid, point); // Query can't be a prepared statement
}
handler->PSendSysMessage(LANG_WAYPOINT_CHANGED_NO, show_str);
@@ -742,7 +829,12 @@ public:
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, wpguid);
hasError = true;
- WorldDatabase.PExecute("DELETE FROM creature WHERE guid = '%u'", wpguid);
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
+
+ stmt->setUInt32(0, wpguid);
+
+ WorldDatabase.Execute(stmt);
}
else
{
@@ -784,18 +876,28 @@ public:
return false;
}
- // set "wpguid" column to the visual waypoint
- WorldDatabase.PExecute("UPDATE waypoint_data SET wpguid = '%u' WHERE id = '%u' and point = '%u'", wpCreature->GetGUIDLow(), pathid, point);
+ // Set "wpguid" column to the visual waypoint
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID);
+
+ stmt->setInt32(0, int32(wpCreature->GetGUIDLow()));
+ stmt->setUInt32(1, pathid);
+ stmt->setUInt32(2, point);
+
+ WorldDatabase.Execute(stmt);
wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
- wpCreature->LoadFromDB(wpCreature->GetDBTableGUIDLow(), map);
- map->AddToMap(wpCreature);
+ if (!wpCreature->LoadCreatureFromDB(wpCreature->GetDBTableGUIDLow(), map))
+ {
+ handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
+ delete wpCreature;
+ return false;
+ }
if (target)
{
wpCreature->SetDisplayId(target->GetDisplayId());
- wpCreature->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5);
+ wpCreature->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5f);
wpCreature->SetLevel(point > STRONG_MAX_LEVEL ? STRONG_MAX_LEVEL : point);
}
}
@@ -836,13 +938,17 @@ public:
}
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- creature->LoadFromDB(creature->GetDBTableGUIDLow(), map);
- map->AddToMap(creature);
+ if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map))
+ {
+ handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id);
+ delete creature;
+ return false;
+ }
if (target)
{
creature->SetDisplayId(target->GetDisplayId());
- creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5);
+ creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5f);
}
return true;
@@ -858,7 +964,7 @@ public:
else
Maxpoint = 0;
- result = WorldDatabase.PQuery("SELECT position_x, position_y, position_z FROM waypoint_data WHERE point ='%u' AND id = '%u'", Maxpoint, pathid);
+ result = WorldDatabase.PQuery("SELECT position_x, position_y, position_z, orientation FROM waypoint_data WHERE point ='%u' AND id = '%u'", Maxpoint, pathid);
if (!result)
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDLAST, pathid);
@@ -866,13 +972,13 @@ public:
return false;
}
Field* fields = result->Fetch();
- float x = fields[0].GetFloat();
- float y = fields[1].GetFloat();
- float z = fields[2].GetFloat();
+ float x = fields[0].GetFloat();
+ float y = fields[1].GetFloat();
+ float z = fields[2].GetFloat();
+ float o = fields[3].GetFloat();
uint32 id = VISUAL_WAYPOINT;
Player* chr = handler->GetSession()->GetPlayer();
- float o = chr->GetOrientation();
Map* map = chr->GetMap();
Creature* creature = new Creature;
@@ -884,13 +990,17 @@ public:
}
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- creature->LoadFromDB(creature->GetDBTableGUIDLow(), map);
- map->AddToMap(creature);
+ if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map))
+ {
+ handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id);
+ delete creature;
+ return false;
+ }
if (target)
{
creature->SetDisplayId(target->GetDisplayId());
- creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5);
+ creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 0.5f);
}
return true;
@@ -915,7 +1025,12 @@ public:
{
handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, guid);
hasError = true;
- WorldDatabase.PExecute("DELETE FROM creature WHERE guid = '%u'", guid);
+
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
+
+ stmt->setUInt32(0, guid);
+
+ WorldDatabase.Execute(stmt);
}
else
{
@@ -926,7 +1041,9 @@ public:
}
while (result->NextRow());
// set "wpguid" column to "empty" - no visual waypoint spawned
- WorldDatabase.PExecute("UPDATE waypoint_data SET wpguid = '0'");
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_ALL_WAYPOINT_DATA_WPGUID);
+
+ WorldDatabase.Execute(stmt);
//WorldDatabase.PExecute("UPDATE creature_movement SET wpguid = '0' WHERE wpguid <> '0'");
if (hasError)
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index e3295a6c45e..75dd99eef97 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -52,33 +52,31 @@ class mob_av_marshal_or_warmaster : public CreatureScript
public:
mob_av_marshal_or_warmaster()
- : CreatureScript("mob_av_marshal_or_warmaster")
- {
- }
+ : CreatureScript("mob_av_marshal_or_warmaster") {}
struct mob_av_marshal_or_warmasterAI : public ScriptedAI
{
- mob_av_marshal_or_warmasterAI(Creature* c) : ScriptedAI(c) {}
+ mob_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature) {}
- uint32 uiChargeTimer;
- uint32 uiCleaveTimer;
- uint32 uiDemoralizingShoutTimer;
- uint32 uiWhirlwind1Timer;
- uint32 uiWhirlwind2Timer;
- uint32 uiEnrageTimer;
- uint32 uiResetTimer;
+ uint32 ChargeTimer;
+ uint32 CleaveTimer;
+ uint32 DemoralizingShoutTimer;
+ uint32 Whirlwind1Timer;
+ uint32 Whirlwind2Timer;
+ uint32 EnrageTimer;
+ uint32 ResetTimer;
bool bHasAura;
void Reset()
{
- uiChargeTimer = urand(2*IN_MILLISECONDS, 12*IN_MILLISECONDS);
- uiCleaveTimer = urand(1*IN_MILLISECONDS, 11*IN_MILLISECONDS);
- uiDemoralizingShoutTimer = urand(2*IN_MILLISECONDS, 2*IN_MILLISECONDS);
- uiWhirlwind1Timer = urand(1*IN_MILLISECONDS, 12*IN_MILLISECONDS);
- uiWhirlwind2Timer = urand(5*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- uiEnrageTimer = urand(5*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- uiResetTimer = 5*IN_MILLISECONDS;
+ ChargeTimer = urand(2 * IN_MILLISECONDS, 12 * IN_MILLISECONDS);
+ CleaveTimer = urand(1 * IN_MILLISECONDS, 11 * IN_MILLISECONDS);
+ DemoralizingShoutTimer = urand(2 * IN_MILLISECONDS, 2 * IN_MILLISECONDS);
+ Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 12 * IN_MILLISECONDS);
+ Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ EnrageTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ ResetTimer = 5 * IN_MILLISECONDS;
bHasAura = false;
}
@@ -126,49 +124,49 @@ class mob_av_marshal_or_warmaster : public CreatureScript
if (!UpdateVictim())
return;
- if (uiChargeTimer <= diff)
+ if (ChargeTimer <= diff)
{
DoCast(me->getVictim(), SPELL_CHARGE);
- uiChargeTimer = urand(10*IN_MILLISECONDS, 25*IN_MILLISECONDS);
- } else uiChargeTimer -= diff;
+ ChargeTimer = urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS);
+ } else ChargeTimer -= diff;
- if (uiCleaveTimer <= diff)
+ if (CleaveTimer <= diff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
- uiCleaveTimer = urand(10*IN_MILLISECONDS, 16*IN_MILLISECONDS);
- } else uiCleaveTimer -= diff;
+ CleaveTimer = urand(10 * IN_MILLISECONDS, 16 * IN_MILLISECONDS);
+ } else CleaveTimer -= diff;
- if (uiDemoralizingShoutTimer <= diff)
+ if (DemoralizingShoutTimer <= diff)
{
DoCast(me->getVictim(), SPELL_DEMORALIZING_SHOUT);
- uiDemoralizingShoutTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
- } else uiDemoralizingShoutTimer -= diff;
+ DemoralizingShoutTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
+ } else DemoralizingShoutTimer -= diff;
- if (uiWhirlwind1Timer <= diff)
+ if (Whirlwind1Timer <= diff)
{
DoCast(me->getVictim(), SPELL_WHIRLWIND1);
- uiWhirlwind1Timer = urand(6*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- } else uiWhirlwind1Timer -= diff;
+ Whirlwind1Timer = urand(6 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ } else Whirlwind1Timer -= diff;
- if (uiWhirlwind2Timer <= diff)
+ if (Whirlwind2Timer <= diff)
{
DoCast(me->getVictim(), SPELL_WHIRLWIND2);
- uiWhirlwind2Timer = urand(10*IN_MILLISECONDS, 25*IN_MILLISECONDS);
- } else uiWhirlwind2Timer -= diff;
+ Whirlwind2Timer = urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS);
+ } else Whirlwind2Timer -= diff;
- if (uiEnrageTimer <= diff)
+ if (EnrageTimer <= diff)
{
DoCast(me->getVictim(), SPELL_ENRAGE);
- uiEnrageTimer = urand(10*IN_MILLISECONDS, 30*IN_MILLISECONDS);
- }else uiEnrageTimer -= diff;
+ EnrageTimer = urand(10 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
+ }else EnrageTimer -= diff;
// check if creature is not outside of building
- if (uiResetTimer <= diff)
+ if (ResetTimer <= diff)
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
EnterEvadeMode();
- uiResetTimer = 5*IN_MILLISECONDS;
- } else uiResetTimer -= diff;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ } else ResetTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
index f1884b7c0e9..d3083146967 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -48,7 +48,7 @@ public:
struct mob_water_elementalAI : public ScriptedAI
{
- mob_water_elementalAI(Creature* c) : ScriptedAI(c) {}
+ mob_water_elementalAI(Creature* creature) : ScriptedAI(creature) {}
uint32 waterBoltTimer;
uint64 balindaGUID;
@@ -56,8 +56,8 @@ public:
void Reset()
{
- waterBoltTimer = 3*IN_MILLISECONDS;
- resetTimer = 5*IN_MILLISECONDS;
+ waterBoltTimer = 3 * IN_MILLISECONDS;
+ resetTimer = 5 * IN_MILLISECONDS;
}
void UpdateAI(const uint32 diff)
@@ -68,7 +68,7 @@ public:
if (waterBoltTimer < diff)
{
DoCast(me->getVictim(), SPELL_WATERBOLT);
- waterBoltTimer = 5*IN_MILLISECONDS;
+ waterBoltTimer = 5 * IN_MILLISECONDS;
} else waterBoltTimer -= diff;
// check if creature is not outside of building
@@ -77,7 +77,7 @@ public:
if (Creature* pBalinda = Unit::GetCreature(*me, balindaGUID))
if (me->GetDistance2d(pBalinda->GetHomePosition().GetPositionX(), pBalinda->GetHomePosition().GetPositionY()) > 50)
EnterEvadeMode();
- resetTimer = 5*IN_MILLISECONDS;
+ resetTimer = 5 * IN_MILLISECONDS;
} else resetTimer -= diff;
DoMeleeAttackIfReady();
@@ -97,7 +97,7 @@ public:
struct boss_balindaAI : public ScriptedAI
{
- boss_balindaAI(Creature* c) : ScriptedAI(c), summons(me) {}
+ boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me) {}
uint32 arcaneExplosionTimer;
uint32 coneOfColdTimer;
@@ -110,11 +110,11 @@ public:
void Reset()
{
- arcaneExplosionTimer = urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS);
- coneOfColdTimer = 8*IN_MILLISECONDS;
- fireBoltTimer = 1*IN_MILLISECONDS;
- frostboltTimer = 4*IN_MILLISECONDS;
- resetTimer = 5*IN_MILLISECONDS;
+ arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
+ coneOfColdTimer = 8 * IN_MILLISECONDS;
+ fireBoltTimer = 1 * IN_MILLISECONDS;
+ frostboltTimer = 4 * IN_MILLISECONDS;
+ resetTimer = 5 * IN_MILLISECONDS;
waterElementalTimer = 0;
summons.DespawnAll();
@@ -151,32 +151,32 @@ public:
if (waterElementalTimer < diff)
{
if (summons.empty())
- me->SummonCreature(NPC_WATER_ELEMENTAL, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45*IN_MILLISECONDS);
- waterElementalTimer = 50*IN_MILLISECONDS;
+ me->SummonCreature(NPC_WATER_ELEMENTAL, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45 * IN_MILLISECONDS);
+ waterElementalTimer = 50 * IN_MILLISECONDS;
} else waterElementalTimer -= diff;
if (arcaneExplosionTimer < diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_EXPLOSION);
- arcaneExplosionTimer = urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS);
+ arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
} else arcaneExplosionTimer -= diff;
if (coneOfColdTimer < diff)
{
DoCast(me->getVictim(), SPELL_CONE_OF_COLD);
- coneOfColdTimer = urand(10*IN_MILLISECONDS, 20*IN_MILLISECONDS);
+ coneOfColdTimer = urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
} else coneOfColdTimer -= diff;
if (fireBoltTimer < diff)
{
DoCast(me->getVictim(), SPELL_FIREBALL);
- fireBoltTimer = urand(5*IN_MILLISECONDS, 9*IN_MILLISECONDS);
+ fireBoltTimer = urand(5 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
} else fireBoltTimer -= diff;
if (frostboltTimer < diff)
{
DoCast(me->getVictim(), SPELL_FROSTBOLT);
- frostboltTimer = urand(4*IN_MILLISECONDS, 12*IN_MILLISECONDS);
+ frostboltTimer = urand(4 * IN_MILLISECONDS, 12 * IN_MILLISECONDS);
} else frostboltTimer -= diff;
// check if creature is not outside of building
@@ -187,7 +187,7 @@ public:
EnterEvadeMode();
DoScriptText(YELL_EVADE, me);
}
- resetTimer = 5*IN_MILLISECONDS;
+ resetTimer = 5 * IN_MILLISECONDS;
} else resetTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
index e7a7b1a01ba..959ed88be1c 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -48,23 +48,23 @@ public:
struct boss_drektharAI : public ScriptedAI
{
- boss_drektharAI(Creature* c) : ScriptedAI(c) {}
+ boss_drektharAI(Creature* creature) : ScriptedAI(creature) {}
- uint32 uiWhirlwindTimer;
- uint32 uiWhirlwind2Timer;
- uint32 uiKnockdownTimer;
- uint32 uiFrenzyTimer;
- uint32 uiYellTimer;
- uint32 uiResetTimer;
+ uint32 WhirlwindTimer;
+ uint32 Whirlwind2Timer;
+ uint32 KnockdownTimer;
+ uint32 FrenzyTimer;
+ uint32 YellTimer;
+ uint32 ResetTimer;
void Reset()
{
- uiWhirlwindTimer = urand(1*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- uiWhirlwind2Timer = urand(1*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- uiKnockdownTimer = 12*IN_MILLISECONDS;
- uiFrenzyTimer = 6*IN_MILLISECONDS;
- uiResetTimer = 5*IN_MILLISECONDS;
- uiYellTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS); //20 to 30 seconds
+ WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ KnockdownTimer = 12 * IN_MILLISECONDS;
+ FrenzyTimer = 6 * IN_MILLISECONDS;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds
}
void EnterCombat(Unit* /*who*/)
@@ -83,46 +83,46 @@ public:
if (!UpdateVictim())
return;
- if (uiWhirlwindTimer <= diff)
+ if (WhirlwindTimer <= diff)
{
DoCast(me->getVictim(), SPELL_WHIRLWIND);
- uiWhirlwindTimer = urand(8*IN_MILLISECONDS, 18*IN_MILLISECONDS);
- } else uiWhirlwindTimer -= diff;
+ WhirlwindTimer = urand(8 * IN_MILLISECONDS, 18 * IN_MILLISECONDS);
+ } else WhirlwindTimer -= diff;
- if (uiWhirlwind2Timer <= diff)
+ if (Whirlwind2Timer <= diff)
{
DoCast(me->getVictim(), SPELL_WHIRLWIND2);
- uiWhirlwind2Timer = urand(7*IN_MILLISECONDS, 25*IN_MILLISECONDS);
- } else uiWhirlwind2Timer -= diff;
+ Whirlwind2Timer = urand(7 * IN_MILLISECONDS, 25 * IN_MILLISECONDS);
+ } else Whirlwind2Timer -= diff;
- if (uiKnockdownTimer <= diff)
+ if (KnockdownTimer <= diff)
{
DoCast(me->getVictim(), SPELL_KNOCKDOWN);
- uiKnockdownTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
- } else uiKnockdownTimer -= diff;
+ KnockdownTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
+ } else KnockdownTimer -= diff;
- if (uiFrenzyTimer <= diff)
+ if (FrenzyTimer <= diff)
{
DoCast(me->getVictim(), SPELL_FRENZY);
- uiFrenzyTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS);
- } else uiFrenzyTimer -= diff;
+ FrenzyTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
+ } else FrenzyTimer -= diff;
- if (uiYellTimer <= diff)
+ if (YellTimer <= diff)
{
DoScriptText(RAND(YELL_RANDOM1, YELL_RANDOM2, YELL_RANDOM3, YELL_RANDOM4, YELL_RANDOM5), me);
- uiYellTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS); //20 to 30 seconds
- } else uiYellTimer -= diff;
+ YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds
+ } else YellTimer -= diff;
// check if creature is not outside of building
- if (uiResetTimer <= diff)
+ if (ResetTimer <= diff)
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
EnterEvadeMode();
DoScriptText(YELL_EVADE, me);
}
- uiResetTimer = 5*IN_MILLISECONDS;
- } else uiResetTimer -= diff;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ } else ResetTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
index 40d1ca2fe68..95c16612aef 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -39,23 +39,23 @@ public:
struct boss_galvangarAI : public ScriptedAI
{
- boss_galvangarAI(Creature* c) : ScriptedAI(c) {}
+ boss_galvangarAI(Creature* creature) : ScriptedAI(creature) {}
- uint32 uiCleaveTimer;
- uint32 uiFrighteningShoutTimer;
- uint32 uiWhirlwind1Timer;
- uint32 uiWhirlwind2Timer;
- uint32 uiMortalStrikeTimer;
- uint32 uiResetTimer;
+ uint32 CleaveTimer;
+ uint32 FrighteningShoutTimer;
+ uint32 Whirlwind1Timer;
+ uint32 Whirlwind2Timer;
+ uint32 MortalStrikeTimer;
+ uint32 ResetTimer;
void Reset()
{
- uiCleaveTimer = urand(1*IN_MILLISECONDS, 9*IN_MILLISECONDS);
- uiFrighteningShoutTimer = urand(2*IN_MILLISECONDS, 19*IN_MILLISECONDS);
- uiWhirlwind1Timer = urand(1*IN_MILLISECONDS, 13*IN_MILLISECONDS);
- uiWhirlwind2Timer = urand(5*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- uiMortalStrikeTimer = urand(5*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- uiResetTimer = 5*IN_MILLISECONDS;
+ CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
+ FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS);
+ Whirlwind1Timer = urand(1 * IN_MILLISECONDS, 13 * IN_MILLISECONDS);
+ Whirlwind2Timer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ MortalStrikeTimer = urand(5 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ ResetTimer = 5 * IN_MILLISECONDS;
}
void EnterCombat(Unit* /*who*/)
@@ -73,46 +73,46 @@ public:
if (!UpdateVictim())
return;
- if (uiCleaveTimer <= diff)
+ if (CleaveTimer <= diff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
- uiCleaveTimer = urand(10*IN_MILLISECONDS, 16*IN_MILLISECONDS);
- } else uiCleaveTimer -= diff;
+ CleaveTimer = urand(10 * IN_MILLISECONDS, 16 * IN_MILLISECONDS);
+ } else CleaveTimer -= diff;
- if (uiFrighteningShoutTimer <= diff)
+ if (FrighteningShoutTimer <= diff)
{
DoCast(me->getVictim(), SPELL_FRIGHTENING_SHOUT);
- uiFrighteningShoutTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
- } else uiFrighteningShoutTimer -= diff;
+ FrighteningShoutTimer = urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
+ } else FrighteningShoutTimer -= diff;
- if (uiWhirlwind1Timer <= diff)
+ if (Whirlwind1Timer <= diff)
{
DoCast(me->getVictim(), SPELL_WHIRLWIND1);
- uiWhirlwind1Timer = urand(6*IN_MILLISECONDS, 10*IN_MILLISECONDS);
- } else uiWhirlwind1Timer -= diff;
+ Whirlwind1Timer = urand(6 * IN_MILLISECONDS, 10 * IN_MILLISECONDS);
+ } else Whirlwind1Timer -= diff;
- if (uiWhirlwind2Timer <= diff)
+ if (Whirlwind2Timer <= diff)
{
DoCast(me->getVictim(), SPELL_WHIRLWIND2);
- uiWhirlwind2Timer = urand(10*IN_MILLISECONDS, 25*IN_MILLISECONDS);
- } else uiWhirlwind2Timer -= diff;
+ Whirlwind2Timer = urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS);
+ } else Whirlwind2Timer -= diff;
- if (uiMortalStrikeTimer <= diff)
+ if (MortalStrikeTimer <= diff)
{
DoCast(me->getVictim(), SPELL_MORTAL_STRIKE);
- uiMortalStrikeTimer = urand(10*IN_MILLISECONDS, 30*IN_MILLISECONDS);
- } else uiMortalStrikeTimer -= diff;
+ MortalStrikeTimer = urand(10 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
+ } else MortalStrikeTimer -= diff;
// check if creature is not outside of building
- if (uiResetTimer <= diff)
+ if (ResetTimer <= diff)
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
EnterEvadeMode();
DoScriptText(YELL_EVADE, me);
}
- uiResetTimer = 5*IN_MILLISECONDS;
- } else uiResetTimer -= diff;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ } else ResetTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
index 973e7ca5f64..94b5bc9a56c 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -46,21 +46,21 @@ public:
struct boss_vanndarAI : public ScriptedAI
{
- boss_vanndarAI(Creature* c) : ScriptedAI(c) {}
+ boss_vanndarAI(Creature* creature) : ScriptedAI(creature) {}
- uint32 uiAvatarTimer;
- uint32 uiThunderclapTimer;
- uint32 uiStormboltTimer;
- uint32 uiResetTimer;
- uint32 uiYellTimer;
+ uint32 AvatarTimer;
+ uint32 ThunderclapTimer;
+ uint32 StormboltTimer;
+ uint32 ResetTimer;
+ uint32 YellTimer;
void Reset()
{
- uiAvatarTimer = 3*IN_MILLISECONDS;
- uiThunderclapTimer = 4*IN_MILLISECONDS;
- uiStormboltTimer = 6*IN_MILLISECONDS;
- uiResetTimer = 5*IN_MILLISECONDS;
- uiYellTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS);
+ AvatarTimer = 3 * IN_MILLISECONDS;
+ ThunderclapTimer = 4 * IN_MILLISECONDS;
+ StormboltTimer = 6 * IN_MILLISECONDS;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS);
}
void EnterCombat(Unit* /*who*/)
@@ -79,40 +79,40 @@ public:
if (!UpdateVictim())
return;
- if (uiAvatarTimer <= diff)
+ if (AvatarTimer <= diff)
{
DoCast(me->getVictim(), SPELL_AVATAR);
- uiAvatarTimer = urand(15*IN_MILLISECONDS, 20*IN_MILLISECONDS);
- } else uiAvatarTimer -= diff;
+ AvatarTimer = urand(15 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
+ } else AvatarTimer -= diff;
- if (uiThunderclapTimer <= diff)
+ if (ThunderclapTimer <= diff)
{
DoCast(me->getVictim(), SPELL_THUNDERCLAP);
- uiThunderclapTimer = urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS);
- } else uiThunderclapTimer -= diff;
+ ThunderclapTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS);
+ } else ThunderclapTimer -= diff;
- if (uiStormboltTimer <= diff)
+ if (StormboltTimer <= diff)
{
DoCast(me->getVictim(), SPELL_STORMBOLT);
- uiStormboltTimer = urand(10*IN_MILLISECONDS, 25*IN_MILLISECONDS);
- } else uiStormboltTimer -= diff;
+ StormboltTimer = urand(10 * IN_MILLISECONDS, 25 * IN_MILLISECONDS);
+ } else StormboltTimer -= diff;
- if (uiYellTimer <= diff)
+ if (YellTimer <= diff)
{
DoScriptText(RAND(YELL_RANDOM1, YELL_RANDOM2, YELL_RANDOM3, YELL_RANDOM4, YELL_RANDOM5, YELL_RANDOM6, YELL_RANDOM7), me);
- uiYellTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS); //20 to 30 seconds
- } else uiYellTimer -= diff;
+ YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds
+ } else YellTimer -= diff;
// check if creature is not outside of building
- if (uiResetTimer <= diff)
+ if (ResetTimer <= diff)
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
EnterEvadeMode();
DoScriptText(YELL_EVADE, me);
}
- uiResetTimer = 5*IN_MILLISECONDS;
- } else uiResetTimer -= diff;
+ ResetTimer = 5 * IN_MILLISECONDS;
+ } else ResetTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp
index f205d1d7932..8eff3e3a042 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -15,35 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Blackrock_Depths
-SD%Complete: 95
-SDComment: Quest support: 4001, 4342, 7604, 4322. Vendor Lokhtos Darkbargainer. Need to rewrite the Jail Break support
-SDCategory: Blackrock Depths
-EndScriptData */
-
-/* ContentData
-go_shadowforge_brazier
-at_ring_of_law
-npc_grimstone
-mob_phalanx
-npc_kharan_mighthammer
-npc_lokhtos_darkbargainer
-npc_dughal_stormwing
-npc_marshal_windsor
-npc_marshal_reginald_windsor
-npc_tobias_seecher
-npc_rocknot
-EndContentData */
-
#include "ScriptPCH.h"
#include "ScriptedEscortAI.h"
#include "blackrock_depths.h"
-/*######
-+## go_shadowforge_brazier
-+######*/
-
+//go_shadowforge_brazier
class go_shadowforge_brazier : public GameObjectScript
{
public:
@@ -65,13 +41,9 @@ public:
}
return false;
}
-
};
-/*######
-## npc_grimstone
-######*/
-
+// npc_grimstone
enum eGrimstone
{
NPC_GRIMSTONE = 10096,
@@ -120,21 +92,17 @@ public:
}
return false;
}
-
};
-/*######
-## npc_grimstone
-######*/
-
+// npc_grimstone
enum GrimstoneTexts
{
- SCRIPT_TEXT1 = -1230003,
- SCRIPT_TEXT2 = -1230004,
- SCRIPT_TEXT3 = -1230005,
- SCRIPT_TEXT4 = -1230006,
- SCRIPT_TEXT5 = -1230007,
- SCRIPT_TEXT6 = -1230008
+ SCRIPT_TEXT1 = -1230003,
+ SCRIPT_TEXT2 = -1230004,
+ SCRIPT_TEXT3 = -1230005,
+ SCRIPT_TEXT4 = -1230006,
+ SCRIPT_TEXT5 = -1230007,
+ SCRIPT_TEXT6 = -1230008
};
//TODO: implement quest part of event (different end boss)
@@ -150,19 +118,19 @@ public:
struct npc_grimstoneAI : public npc_escortAI
{
- npc_grimstoneAI(Creature* c) : npc_escortAI(c)
+ npc_grimstoneAI(Creature* creature) : npc_escortAI(creature)
{
- instance = c->GetInstanceScript();
+ instance = creature->GetInstanceScript();
MobSpawnId = rand()%6;
}
InstanceScript* instance;
- uint8 EventPhase;
+ uint8 EventPhase;
uint32 Event_Timer;
- uint8 MobSpawnId;
- uint8 MobCount;
+ uint8 MobSpawnId;
+ uint8 MobCount;
uint32 MobDeath_Timer;
uint64 RingMobGUID[4];
@@ -174,16 +142,16 @@ public:
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- EventPhase = 0;
- Event_Timer = 1000;
+ EventPhase = 0;
+ Event_Timer = 1000;
- MobCount = 0;
- MobDeath_Timer = 0;
+ MobCount = 0;
+ MobDeath_Timer = 0;
for (uint8 i = 0; i < MAX_MOB_AMOUNT; ++i)
RingMobGUID[i] = 0;
- RingBossGUID = 0;
+ RingBossGUID = 0;
CanWalk = false;
}
@@ -215,24 +183,24 @@ public:
{
case 0:
DoScriptText(SCRIPT_TEXT1, me);//2
- CanWalk = false;
- Event_Timer = 5000;
+ CanWalk = false;
+ Event_Timer = 5000;
break;
case 1:
DoScriptText(SCRIPT_TEXT2, me);//4
- CanWalk = false;
- Event_Timer = 5000;
+ CanWalk = false;
+ Event_Timer = 5000;
break;
case 2:
- CanWalk = false;
+ CanWalk = false;
break;
case 3:
DoScriptText(SCRIPT_TEXT3, me);//5
break;
case 4:
DoScriptText(SCRIPT_TEXT4, me);//6
- CanWalk = false;
- Event_Timer = 5000;
+ CanWalk = false;
+ Event_Timer = 5000;
break;
case 5:
if (instance)
@@ -259,16 +227,16 @@ public:
{
if (MobDeath_Timer <= diff)
{
- MobDeath_Timer = 2500;
+ MobDeath_Timer = 2500;
if (RingBossGUID)
{
Creature* boss = Unit::GetCreature(*me, RingBossGUID);
if (boss && !boss->isAlive() && boss->isDead())
{
- RingBossGUID = 0;
- Event_Timer = 5000;
- MobDeath_Timer = 0;
+ RingBossGUID = 0;
+ Event_Timer = 5000;
+ MobDeath_Timer = 0;
return;
}
return;
@@ -279,7 +247,7 @@ public:
Creature* mob = Unit::GetCreature(*me, RingMobGUID[i]);
if (mob && !mob->isAlive() && mob->isDead())
{
- RingMobGUID[i] = 0;
+ RingMobGUID[i] = 0;
--MobCount;
//seems all are gone, so set timer to continue and discontinue this
@@ -365,18 +333,14 @@ public:
npc_escortAI::UpdateAI(diff);
}
};
-
};
-/*######
-## mob_phalanx
-######*/
-
+// mob_phalanx
enum PhalanxSpells
{
- SPELL_THUNDERCLAP = 8732,
- SPELL_FIREBALLVOLLEY = 22425,
- SPELL_MIGHTYBLOW = 14099
+ SPELL_THUNDERCLAP = 8732,
+ SPELL_FIREBALLVOLLEY = 22425,
+ SPELL_MIGHTYBLOW = 14099
};
class mob_phalanx : public CreatureScript
@@ -399,9 +363,9 @@ public:
void Reset()
{
- ThunderClap_Timer = 12000;
- FireballVolley_Timer =0;
- MightyBlow_Timer = 15000;
+ ThunderClap_Timer = 12000;
+ FireballVolley_Timer = 0;
+ MightyBlow_Timer = 15000;
}
void UpdateAI(const uint32 diff)
@@ -437,22 +401,17 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
-/*######
-## npc_kharan_mighthammer
-######*/
-
+// npc_kharan_mighthammer
enum KharamQuests
{
- QUEST_4001 = 4001,
- QUEST_4342 = 4342
+ QUEST_4001 = 4001,
+ QUEST_4342 = 4342
};
#define GOSSIP_ITEM_KHARAN_1 "I need to know where the princess are, Kharan!"
#define GOSSIP_ITEM_KHARAN_2 "All is not lost, Kharan!"
-
#define GOSSIP_ITEM_KHARAN_3 "Gor'shak is my friend, you can trust me."
#define GOSSIP_ITEM_KHARAN_4 "Not enough, you need to tell me more."
#define GOSSIP_ITEM_KHARAN_5 "So what happened?"
@@ -467,13 +426,13 @@ class npc_kharan_mighthammer : public CreatureScript
public:
npc_kharan_mighthammer() : CreatureScript("npc_kharan_mighthammer") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*Sender*/, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
+ switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
player->SEND_GOSSIP_MENU(2475, creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
@@ -534,13 +493,9 @@ public:
return true;
}
-
};
-/*######
-## npc_lokhtos_darkbargainer
-######*/
-
+// npc_lokhtos_darkbargainer
enum LokhtosItems
{
ITEM_THRORIUM_BROTHERHOOD_CONTRACT = 18628,
@@ -565,15 +520,15 @@ class npc_lokhtos_darkbargainer : public CreatureScript
public:
npc_lokhtos_darkbargainer() : CreatureScript("npc_lokhtos_darkbargainer") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*Sender*/, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
{
player->CLOSE_GOSSIP_MENU();
player->CastSpell(player, SPELL_CREATE_THORIUM_BROTHERHOOD_CONTRACT_DND, false);
}
- if (uiAction == GOSSIP_ACTION_TRADE)
+ if (action == GOSSIP_ACTION_TRADE)
player->GetSession()->SendListInventory(creature->GetGUID());
return true;
@@ -601,18 +556,15 @@ public:
return true;
}
-
};
-/*######
-## npc_dughal_stormwing
-######*/
-
+// npc_dughal_stormwing
enum DughalQuests
{
- QUEST_JAIL_BREAK = 4322
+ QUEST_JAIL_BREAK = 4322
};
+// DELETE THIS IF IT IS NOT NEEDED!
#define SAY_DUGHAL_FREE "Thank you, $N! I'm free!!!"
#define GOSSIP_DUGHAL "You're free, Dughal! Get out of here!"
@@ -633,10 +585,10 @@ public:
return dughal_stormwingAI;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 uiSender, uint32 uiAction)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 Sender, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
{
player->CLOSE_GOSSIP_MENU();
CAST_AI(npc_escort::npc_escortAI, (creature->AI()))->Start(false, true, player->GetGUID());
@@ -707,14 +659,11 @@ public:
npc_escortAI::UpdateAI(diff);
}
};
-
};
*/
-/*######
-## npc_marshal_windsor
-######*/
+// npc_marshal_windsor
#define SAY_WINDSOR_AGGRO1 "You locked up the wrong Marshal. Prepare to be destroyed!"
#define SAY_WINDSOR_AGGRO2 "I bet you're sorry now, aren't you !?!!"
#define SAY_WINDSOR_AGGRO3 "You better hold me back $N or they are going to feel some prison house beatings."
@@ -771,7 +720,6 @@ public:
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_IN_PROGRESS);
creature->setFaction(11);
}
-
}
return false;
}
@@ -875,14 +823,11 @@ public:
npc_escortAI::UpdateAI(diff);
}
};
-
};
*/
-/*######
-## npc_marshal_reginald_windsor
-######*/
+// npc_marshal_reginald_windsor
#define SAY_REGINALD_WINDSOR_0_1 "Can you feel the power, $N??? It's time to ROCK!"
#define SAY_REGINALD_WINDSOR_0_2 "Now we just have to free Tobias and we can get out of here. This way!"
#define SAY_REGINALD_WINDSOR_5_1 "Open it."
@@ -1096,13 +1041,10 @@ public:
npc_escortAI::UpdateAI(diff);
}
};
-
};
*/
-/*######
-## npc_tobias_seecher
-######*/
+// npc_tobias_seecher
#define SAY_TOBIAS_FREE "Thank you! I will run for safety immediately!"
/*
class npc_tobias_seecher : public CreatureScript
@@ -1123,10 +1065,10 @@ public:
return tobias_seecherAI;
}
- bool OnGossipSelect(Player* player, Creature* creature, uint32 uiSender, uint32 uiAction)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 Sender, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
- if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
{
player->CLOSE_GOSSIP_MENU();
CAST_AI(npc_escort::npc_escortAI, (creature->AI()))->Start(false, true, player->GetGUID());
@@ -1198,28 +1140,24 @@ public:
npc_escortAI::UpdateAI(diff);
}
};
-
};
*/
-/*######
-## npc_rocknot
-######*/
-
+// npc_rocknot
enum RocknotSays
{
- SAY_GOT_BEER = -1230000
+ SAY_GOT_BEER = -1230000
};
enum RocknotSpells
{
- SPELL_DRUNKEN_RAGE = 14872
+ SPELL_DRUNKEN_RAGE = 14872
};
enum RocknotQuests
{
- QUEST_ALE = 4295
+ QUEST_ALE = 4295
};
class npc_rocknot : public CreatureScript
@@ -1248,6 +1186,7 @@ public:
{
DoScriptText(SAY_GOT_BEER, creature);
creature->CastSpell(creature, SPELL_DRUNKEN_RAGE, false);
+
if (npc_escortAI* escortAI = CAST_AI(npc_rocknot::npc_rocknotAI, creature->AI()))
escortAI->Start(false, false);
}
@@ -1263,9 +1202,9 @@ public:
struct npc_rocknotAI : public npc_escortAI
{
- npc_rocknotAI(Creature* c) : npc_escortAI(c)
+ npc_rocknotAI(Creature* creature) : npc_escortAI(creature)
{
- instance = c->GetInstanceScript();
+ instance = creature->GetInstanceScript();
}
InstanceScript* instance;
@@ -1278,8 +1217,8 @@ public:
if (HasEscortState(STATE_ESCORT_ESCORTING))
return;
- BreakKeg_Timer = 0;
- BreakDoor_Timer = 0;
+ BreakKeg_Timer = 0;
+ BreakDoor_Timer = 0;
}
void DoGo(uint32 id, uint32 state)
@@ -1324,8 +1263,8 @@ public:
if (BreakKeg_Timer <= diff)
{
DoGo(DATA_GO_BAR_KEG, 0);
- BreakKeg_Timer = 0;
- BreakDoor_Timer = 1000;
+ BreakKeg_Timer = 0;
+ BreakDoor_Timer = 1000;
} else BreakKeg_Timer -= diff;
}
@@ -1351,13 +1290,8 @@ public:
npc_escortAI::UpdateAI(diff);
}
};
-
};
-/*######
-##
-######*/
-
void AddSC_blackrock_depths()
{
new go_shadowforge_brazier();
@@ -1366,9 +1300,11 @@ void AddSC_blackrock_depths()
new mob_phalanx();
new npc_kharan_mighthammer();
new npc_lokhtos_darkbargainer();
- //new npc_dughal_stormwing();
- //new npc_tobias_seecher();
- //new npc_marshal_windsor();
- //new npc_marshal_reginald_windsor();
new npc_rocknot();
+ // Fix us
+ /*new npc_dughal_stormwing();
+ new npc_tobias_seecher();
+ new npc_marshal_windsor();
+ new npc_marshal_reginald_windsor();
+ */
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.h b/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.h
index 2282acaa233..b18d8720c3b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.h
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_ambassador_flamelash.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_ambassador_flamelash.cpp
index ad663415cbe..2e8dc029d44 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_ambassador_flamelash.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_ambassador_flamelash.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Ambassador_Flamelash
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -42,15 +35,15 @@ public:
struct boss_ambassador_flamelashAI : public ScriptedAI
{
- boss_ambassador_flamelashAI(Creature* c) : ScriptedAI(c) {}
+ boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) {}
uint32 FireBlast_Timer;
uint32 Spirit_Timer;
void Reset()
{
- FireBlast_Timer = 2000;
- Spirit_Timer = 24000;
+ FireBlast_Timer = 2000;
+ Spirit_Timer = 24000;
}
void EnterCombat(Unit* /*who*/) {}
@@ -88,7 +81,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_ambassador_flamelash()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_anubshiah.cpp
index 1edb5d99463..b4a4c416693 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_anubshiah.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_anubshiah.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Anubshiah
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -46,7 +39,7 @@ public:
struct boss_anubshiahAI : public ScriptedAI
{
- boss_anubshiahAI(Creature* c) : ScriptedAI(c) {}
+ boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) {}
uint32 ShadowBolt_Timer;
uint32 CurseOfTongues_Timer;
@@ -56,16 +49,14 @@ public:
void Reset()
{
- ShadowBolt_Timer = 7000;
- CurseOfTongues_Timer = 24000;
- CurseOfWeakness_Timer = 12000;
- DemonArmor_Timer = 3000;
- EnvelopingWeb_Timer = 16000;
+ ShadowBolt_Timer = 7000;
+ CurseOfTongues_Timer = 24000;
+ CurseOfWeakness_Timer = 12000;
+ DemonArmor_Timer = 3000;
+ EnvelopingWeb_Timer = 16000;
}
- void EnterCombat(Unit* /*who*/)
- {
- }
+ void EnterCombat(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
@@ -113,7 +104,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_anubshiah()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
index 1d9878a331a..e894fd35bd1 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Emperor_Dagran_Thaurissan
-SD%Complete: 99
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
#include "blackrock_depths.h"
@@ -50,7 +43,7 @@ public:
struct boss_draganthaurissanAI : public ScriptedAI
{
- boss_draganthaurissanAI(Creature* c) : ScriptedAI(c)
+ boss_draganthaurissanAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
}
@@ -62,9 +55,9 @@ public:
void Reset()
{
- HandOfThaurissan_Timer = 4000;
- AvatarOfFlame_Timer = 25000;
- //Counter= 0;
+ HandOfThaurissan_Timer = 4000;
+ AvatarOfFlame_Timer = 25000;
+ //Counter = 0;
}
void EnterCombat(Unit* /*who*/)
@@ -107,7 +100,7 @@ public:
//else
//{
HandOfThaurissan_Timer = 5000;
- //Counter = 0;
+ //Counter = 0;
//}
} else HandOfThaurissan_Timer -= diff;
@@ -121,7 +114,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_draganthaurissan()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_general_angerforge.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_general_angerforge.cpp
index 9b290b2e352..69808386423 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_general_angerforge.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_general_angerforge.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_General_Angerforge
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -44,7 +37,7 @@ public:
struct boss_general_angerforgeAI : public ScriptedAI
{
- boss_general_angerforgeAI(Creature* c) : ScriptedAI(c) {}
+ boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) {}
uint32 MightyBlow_Timer;
uint32 HamString_Timer;
@@ -54,16 +47,14 @@ public:
void Reset()
{
- MightyBlow_Timer = 8000;
- HamString_Timer = 12000;
- Cleave_Timer = 16000;
- Adds_Timer = 0;
- Medics = false;
+ MightyBlow_Timer = 8000;
+ HamString_Timer = 12000;
+ Cleave_Timer = 16000;
+ Adds_Timer = 0;
+ Medics = false;
}
- void EnterCombat(Unit* /*who*/)
- {
- }
+ void EnterCombat(Unit* /*who*/) {}
void SummonAdds(Unit* victim)
{
@@ -129,7 +120,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_general_angerforge()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_gorosh_the_dervish.cpp
index c82c5f82965..883c601709e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_gorosh_the_dervish.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_gorosh_the_dervish.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Gorosh_the_Dervish
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -43,15 +36,15 @@ public:
struct boss_gorosh_the_dervishAI : public ScriptedAI
{
- boss_gorosh_the_dervishAI(Creature* c) : ScriptedAI(c) {}
+ boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) {}
uint32 WhirlWind_Timer;
uint32 MortalStrike_Timer;
void Reset()
{
- WhirlWind_Timer = 12000;
- MortalStrike_Timer = 22000;
+ WhirlWind_Timer = 12000;
+ MortalStrike_Timer = 22000;
}
void EnterCombat(Unit* /*who*/)
@@ -81,7 +74,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_gorosh_the_dervish()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_grizzle.cpp
index e8b794a2edb..7686ece3c2e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_grizzle.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_grizzle.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Grizzle
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -43,20 +36,18 @@ public:
struct boss_grizzleAI : public ScriptedAI
{
- boss_grizzleAI(Creature* c) : ScriptedAI(c) {}
+ boss_grizzleAI(Creature* creature) : ScriptedAI(creature) {}
uint32 GroundTremor_Timer;
uint32 Frenzy_Timer;
void Reset()
{
- GroundTremor_Timer = 12000;
- Frenzy_Timer =0;
+ GroundTremor_Timer = 12000;
+ Frenzy_Timer = 0;
}
- void EnterCombat(Unit* /*who*/)
- {
- }
+ void EnterCombat(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
@@ -86,7 +77,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_grizzle()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_high_interrogator_gerstahn.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
index 5b7ce8bd760..26e2bc80eb2 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_high_interrogator_gerstahn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_High_Interrogator_Gerstahn
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -45,7 +38,7 @@ public:
struct boss_high_interrogator_gerstahnAI : public ScriptedAI
{
- boss_high_interrogator_gerstahnAI(Creature* c) : ScriptedAI(c) {}
+ boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) {}
uint32 ShadowWordPain_Timer;
uint32 ManaBurn_Timer;
@@ -54,15 +47,13 @@ public:
void Reset()
{
- ShadowWordPain_Timer = 4000;
- ManaBurn_Timer = 14000;
- PsychicScream_Timer = 32000;
- ShadowShield_Timer = 8000;
+ ShadowWordPain_Timer = 4000;
+ ManaBurn_Timer = 14000;
+ PsychicScream_Timer = 32000;
+ ShadowShield_Timer = 8000;
}
- void EnterCombat(Unit* /*who*/)
- {
- }
+ void EnterCombat(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
@@ -103,7 +94,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_high_interrogator_gerstahn()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_magmus.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_magmus.cpp
index 4c6bbf33e59..141b8307b7b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_magmus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_magmus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Magmus
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -33,7 +26,7 @@ enum Spells
enum eEnums
{
- DATA_THRONE_DOOR = 24 // not id or guid of doors but number of enum in blackrock_depths.h
+ DATA_THRONE_DOOR = 24 // not id or guid of doors but number of enum in blackrock_depths.h
};
class boss_magmus : public CreatureScript
@@ -48,20 +41,18 @@ public:
struct boss_magmusAI : public ScriptedAI
{
- boss_magmusAI(Creature* c) : ScriptedAI(c) {}
+ boss_magmusAI(Creature* creature) : ScriptedAI(creature) {}
uint32 FieryBurst_Timer;
uint32 WarStomp_Timer;
void Reset()
{
- FieryBurst_Timer = 5000;
- WarStomp_Timer =0;
+ FieryBurst_Timer = 5000;
+ WarStomp_Timer = 0;
}
- void EnterCombat(Unit* /*who*/)
- {
- }
+ void EnterCombat(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
@@ -95,7 +86,6 @@ public:
instance->HandleGameObject(instance->GetData64(DATA_THRONE_DOOR), true);
}
};
-
};
void AddSC_boss_magmus()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_moira_bronzebeard.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_moira_bronzebeard.cpp
index ac05f8d86bb..72a60daea2d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_moira_bronzebeard.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_moira_bronzebeard.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Moira_Bronzbeard
-SD%Complete: 90
-SDComment: Healing of Emperor NYI
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
enum Spells
@@ -47,7 +40,7 @@ public:
struct boss_moira_bronzebeardAI : public ScriptedAI
{
- boss_moira_bronzebeardAI(Creature* c) : ScriptedAI(c) {}
+ boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) {}
uint32 Heal_Timer;
uint32 MindBlast_Timer;
@@ -56,15 +49,13 @@ public:
void Reset()
{
- Heal_Timer = 12000; //These times are probably wrong
- MindBlast_Timer = 16000;
- ShadowWordPain_Timer = 2000;
- Smite_Timer = 8000;
+ Heal_Timer = 12000; // These times are probably wrong
+ MindBlast_Timer = 16000;
+ ShadowWordPain_Timer = 2000;
+ Smite_Timer = 8000;
}
- void EnterCombat(Unit* /*who*/)
- {
- }
+ void EnterCombat(Unit* /*who*/) {}
void UpdateAI(const uint32 diff)
{
@@ -92,10 +83,8 @@ public:
DoCast(me->getVictim(), SPELL_SMITE);
Smite_Timer = 10000;
} else Smite_Timer -= diff;
-
}
};
-
};
void AddSC_boss_moira_bronzebeard()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_tomb_of_seven.cpp
index aecb3445b01..6b474166e7f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_tomb_of_seven.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/boss_tomb_of_seven.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,30 +16,23 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Tomb_Of_Seven
-SD%Complete: 90
-SDComment: Learning Smelt Dark Iron if tribute quest rewarded. Missing event.
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
#include "blackrock_depths.h"
enum Spells
{
- SPELL_SMELT_DARK_IRON = 14891,
- SPELL_LEARN_SMELT = 14894,
+ SPELL_SMELT_DARK_IRON = 14891,
+ SPELL_LEARN_SMELT = 14894,
};
enum Quests
{
- QUEST_SPECTRAL_CHALICE = 4083
+ QUEST_SPECTRAL_CHALICE = 4083
};
enum Misc
{
- DATA_SKILLPOINT_MIN = 230
+ DATA_SKILLPOINT_MIN = 230
};
#define GOSSIP_ITEM_TEACH_1 "Teach me the art of smelting dark iron"
@@ -52,10 +45,10 @@ class boss_gloomrel : public CreatureScript
public:
boss_gloomrel() : CreatureScript("boss_gloomrel") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*Sender*/, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
+ switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TEACH_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
@@ -63,7 +56,7 @@ public:
break;
case GOSSIP_ACTION_INFO_DEF+11:
player->CLOSE_GOSSIP_MENU();
- creature->CastSpell(player, SPELL_LEARN_SMELT, false);
+ player->CastSpell(player, SPELL_LEARN_SMELT, false);
break;
case GOSSIP_ACTION_INFO_DEF+2:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TEACH_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22);
@@ -92,7 +85,6 @@ public:
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
return true;
}
-
};
enum DoomrelSpells
@@ -112,10 +104,10 @@ class boss_doomrel : public CreatureScript
public:
boss_doomrel() : CreatureScript("boss_doomrel") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*Sender*/, uint32 action)
{
player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
+ switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_DOOMREL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
@@ -150,9 +142,9 @@ public:
struct boss_doomrelAI : public ScriptedAI
{
- boss_doomrelAI(Creature* c) : ScriptedAI(c)
+ boss_doomrelAI(Creature* creature) : ScriptedAI(creature)
{
- instance = c->GetInstanceScript();
+ instance = creature->GetInstanceScript();
}
InstanceScript* instance;
@@ -164,11 +156,11 @@ public:
void Reset()
{
- ShadowVolley_Timer = 10000;
- Immolate_Timer = 18000;
- CurseOfWeakness_Timer = 5000;
- DemonArmor_Timer = 16000;
- Voidwalkers = false;
+ ShadowVolley_Timer = 10000;
+ Immolate_Timer = 18000;
+ CurseOfWeakness_Timer = 5000;
+ DemonArmor_Timer = 16000;
+ Voidwalkers = false;
me->setFaction(FACTION_FRIEND);
@@ -252,7 +244,6 @@ public:
DoMeleeAttackIfReady();
}
};
-
};
void AddSC_boss_tomb_of_seven()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/instance_blackrock_depths.cpp
index 36135d6ea55..f87d87d976c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockDepths/instance_blackrock_depths.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/instance_blackrock_depths.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Blackrock_Depths
-SD%Complete: 100
-SDComment:
-SDCategory: Blackrock Depths
-EndScriptData */
-
#include "ScriptPCH.h"
#include "blackrock_depths.h"
@@ -63,7 +56,6 @@ enum eEnums
GO_GOLEM_ROOM_N = 170573, // Magmus door North
GO_GOLEM_ROOM_S = 170574, // Magmus door Soutsh
GO_THRONE_ROOM = 170575, // Throne door
-
GO_SPECTRAL_CHALICE = 164869,
GO_CHEST_SEVEN = 169243
};
@@ -82,7 +74,7 @@ public:
{
instance_blackrock_depths_InstanceMapScript(Map* map) : InstanceScript(map) {}
- uint32 m_auiEncounter[MAX_ENCOUNTER];
+ uint32 encounter[MAX_ENCOUNTER];
std::string str_data;
uint64 EmperorGUID;
@@ -121,59 +113,59 @@ public:
void Initialize()
{
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
-
- EmperorGUID = 0;
- PhalanxGUID = 0;
- MagmusGUID = 0;
- MoiraGUID = 0;
-
- GoArena1GUID = 0;
- GoArena2GUID = 0;
- GoArena3GUID = 0;
- GoArena4GUID = 0;
- GoShadowLockGUID = 0;
- GoShadowMechGUID = 0;
- GoShadowGiantGUID = 0;
- GoShadowDummyGUID = 0;
- GoBarKegGUID = 0;
- GoBarKegTrapGUID = 0;
- GoBarDoorGUID = 0;
- GoTombEnterGUID = 0;
- GoTombExitGUID = 0;
- GoLyceumGUID = 0;
- GoSFSGUID = 0;
- GoSFNGUID = 0;
- GoGolemNGUID = 0;
- GoGolemSGUID = 0;
- GoThroneGUID = 0;
- GoChestGUID = 0;
- GoSpectralChaliceGUID = 0;
-
- BarAleCount = 0;
- GhostKillCount = 0;
- TombEventStarterGUID = 0;
+ memset(&encounter, 0, sizeof(encounter));
+
+ EmperorGUID = 0;
+ PhalanxGUID = 0;
+ MagmusGUID = 0;
+ MoiraGUID = 0;
+
+ GoArena1GUID = 0;
+ GoArena2GUID = 0;
+ GoArena3GUID = 0;
+ GoArena4GUID = 0;
+ GoShadowLockGUID = 0;
+ GoShadowMechGUID = 0;
+ GoShadowGiantGUID = 0;
+ GoShadowDummyGUID = 0;
+ GoBarKegGUID = 0;
+ GoBarKegTrapGUID = 0;
+ GoBarDoorGUID = 0;
+ GoTombEnterGUID = 0;
+ GoTombExitGUID = 0;
+ GoLyceumGUID = 0;
+ GoSFSGUID = 0;
+ GoSFNGUID = 0;
+ GoGolemNGUID = 0;
+ GoGolemSGUID = 0;
+ GoThroneGUID = 0;
+ GoChestGUID = 0;
+ GoSpectralChaliceGUID = 0;
+
+ BarAleCount = 0;
+ GhostKillCount = 0;
+ TombEventStarterGUID = 0;
TombTimer = TIMER_TOMBOFTHESEVEN;
- TombEventCounter = 0;
+ TombEventCounter = 0;
for (uint8 i = 0; i < 7; ++i)
- TombBossGUIDs[i] = 0;
+ TombBossGUIDs[i] = 0;
}
void OnCreatureCreate(Creature* creature)
{
switch (creature->GetEntry())
{
- case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
- case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
- case NPC_MOIRA: MoiraGUID = creature->GetGUID(); break;
- case NPC_DOOMREL: TombBossGUIDs[0] = creature->GetGUID(); break;
- case NPC_DOPEREL: TombBossGUIDs[1] = creature->GetGUID(); break;
- case NPC_HATEREL: TombBossGUIDs[2] = creature->GetGUID(); break;
- case NPC_VILEREL: TombBossGUIDs[3] = creature->GetGUID(); break;
- case NPC_SEETHREL: TombBossGUIDs[4] = creature->GetGUID(); break;
- case NPC_GLOOMREL: TombBossGUIDs[5] = creature->GetGUID(); break;
- case NPC_ANGERREL: TombBossGUIDs[6] = creature->GetGUID(); break;
+ case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
+ case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
+ case NPC_MOIRA: MoiraGUID = creature->GetGUID(); break;
+ case NPC_DOOMREL: TombBossGUIDs[0] = creature->GetGUID(); break;
+ case NPC_DOPEREL: TombBossGUIDs[1] = creature->GetGUID(); break;
+ case NPC_HATEREL: TombBossGUIDs[2] = creature->GetGUID(); break;
+ case NPC_VILEREL: TombBossGUIDs[3] = creature->GetGUID(); break;
+ case NPC_SEETHREL: TombBossGUIDs[4] = creature->GetGUID(); break;
+ case NPC_GLOOMREL: TombBossGUIDs[5] = creature->GetGUID(); break;
+ case NPC_ANGERREL: TombBossGUIDs[6] = creature->GetGUID(); break;
case NPC_MAGMUS:
MagmusGUID = creature->GetGUID();
if (!creature->isAlive())
@@ -239,25 +231,25 @@ public:
switch (type)
{
case TYPE_RING_OF_LAW:
- m_auiEncounter[0] = data;
+ encounter[0] = data;
break;
case TYPE_VAULT:
- m_auiEncounter[1] = data;
+ encounter[1] = data;
break;
case TYPE_BAR:
if (data == SPECIAL)
++BarAleCount;
else
- m_auiEncounter[2] = data;
+ encounter[2] = data;
break;
case TYPE_TOMB_OF_SEVEN:
- m_auiEncounter[3] = data;
+ encounter[3] = data;
break;
case TYPE_LYCEUM:
- m_auiEncounter[4] = data;
+ encounter[4] = data;
break;
case TYPE_IRON_HALL:
- m_auiEncounter[5] = data;
+ encounter[5] = data;
break;
case DATA_GHOSTKILL:
GhostKillCount += data;
@@ -269,8 +261,8 @@ public:
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
- saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' '
- << m_auiEncounter[3] << ' ' << m_auiEncounter[4] << ' ' << m_auiEncounter[5] << ' ' << GhostKillCount;
+ saveStream << encounter[0] << ' ' << encounter[1] << ' ' << encounter[2] << ' '
+ << encounter[3] << ' ' << encounter[4] << ' ' << encounter[5] << ' ' << GhostKillCount;
str_data = saveStream.str();
@@ -284,20 +276,20 @@ public:
switch (type)
{
case TYPE_RING_OF_LAW:
- return m_auiEncounter[0];
+ return encounter[0];
case TYPE_VAULT:
- return m_auiEncounter[1];
+ return encounter[1];
case TYPE_BAR:
- if (m_auiEncounter[2] == IN_PROGRESS && BarAleCount == 3)
+ if (encounter[2] == IN_PROGRESS && BarAleCount == 3)
return SPECIAL;
else
- return m_auiEncounter[2];
+ return encounter[2];
case TYPE_TOMB_OF_SEVEN:
- return m_auiEncounter[3];
+ return encounter[3];
case TYPE_LYCEUM:
- return m_auiEncounter[4];
+ return encounter[4];
case TYPE_IRON_HALL:
- return m_auiEncounter[5];
+ return encounter[5];
case DATA_GHOSTKILL:
return GhostKillCount;
}
@@ -362,12 +354,12 @@ public:
OUT_LOAD_INST_DATA(in);
std::istringstream loadStream(in);
- loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
- >> m_auiEncounter[4] >> m_auiEncounter[5] >> GhostKillCount;
+ loadStream >> encounter[0] >> encounter[1] >> encounter[2] >> encounter[3]
+ >> encounter[4] >> encounter[5] >> GhostKillCount;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- m_auiEncounter[i] = NOT_STARTED;
+ if (encounter[i] == IN_PROGRESS)
+ encounter[i] = NOT_STARTED;
if (GhostKillCount > 0 && GhostKillCount < 7)
GhostKillCount = 0;//reset tomb of seven event
if (GhostKillCount >= 7)
@@ -459,7 +451,6 @@ public:
TombOfSevenEnd();
}
};
-
};
void AddSC_instance_blackrock_depths()
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h b/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
index b330e80a294..e51c6b9130d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_drakkisath.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_drakkisath.cpp
index 5c68b933568..442fd025423 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_drakkisath.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_drakkisath.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -58,10 +58,10 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_FIRE_NOVA, 6*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 8*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CONFLIGURATION, 15*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_THUNDERCLAP, 17*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FIRE_NOVA, 6 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 8 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CONFLIGURATION, 15 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_THUNDERCLAP, 17 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -85,19 +85,19 @@ public:
{
case EVENT_FIRE_NOVA:
DoCast(me->getVictim(), SPELL_FIRENOVA);
- events.ScheduleEvent(EVENT_FIRE_NOVA, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FIRE_NOVA, 10 * IN_MILLISECONDS);
break;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 8*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 8 * IN_MILLISECONDS);
break;
case EVENT_CONFLIGURATION:
DoCast(me->getVictim(), SPELL_CONFLIGURATION);
- events.ScheduleEvent(EVENT_CONFLIGURATION, 18*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CONFLIGURATION, 18 * IN_MILLISECONDS);
break;
case EVENT_THUNDERCLAP:
DoCast(me->getVictim(), SPELL_THUNDERCLAP);
- events.ScheduleEvent(EVENT_THUNDERCLAP, 20*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_THUNDERCLAP, 20 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
index b08478a1145..0edcdfece15 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -74,9 +74,9 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_SUMMON_DRAGON_PACK, 3*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SUMMON_ORC_PACK, 60*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_AGGRO, 60*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SUMMON_DRAGON_PACK, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SUMMON_ORC_PACK, 60 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_AGGRO, 60 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -87,7 +87,7 @@ public:
void SummonCreatureWithRandomTarget(uint32 creatureId, uint8 count)
{
for (uint8 n = 0; n < count; n++)
- if (Unit* Summoned = me->SummonCreature(creatureId, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 240*IN_MILLISECONDS))
+ if (Unit* Summoned = me->SummonCreature(creatureId, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 240 * IN_MILLISECONDS))
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
Summoned->AddThreat(target, 250.0f);
}
@@ -99,7 +99,7 @@ public:
if (!SummonedRend && HealthBelowPct(11))
{
- events.ScheduleEvent(EVENT_SUMMON_REND, 8*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SUMMON_REND, 8 * IN_MILLISECONDS);
SummonedRend = true;
}
@@ -118,10 +118,10 @@ public:
me->InterruptNonMeleeSpells(false);
// Gyth model
me->SetDisplayId(me->GetCreatureInfo()->Modelid1);
- me->SummonCreature(NPC_WARCHIEF_REND_BLACKHAND, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CORROSIVE_ACID, 8*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_FREEZE, 11*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_FLAME_BREATH, 4*IN_MILLISECONDS);
+ me->SummonCreature(NPC_WARCHIEF_REND_BLACKHAND, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CORROSIVE_ACID, 8 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FREEZE, 11 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FLAME_BREATH, 4 * IN_MILLISECONDS);
events.CancelEvent(EVENT_SUMMON_REND);
break;
case EVENT_AGGRO:
@@ -152,11 +152,11 @@ public:
break;
case EVENT_CORROSIVE_ACID:
DoCast(me->getVictim(), SPELL_CORROSIVE_ACID);
- events.ScheduleEvent(EVENT_CORROSIVE_ACID, 7*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CORROSIVE_ACID, 7 * IN_MILLISECONDS);
break;
case EVENT_FREEZE:
DoCast(me->getVictim(), SPELL_FREEZE);
- events.ScheduleEvent(EVENT_FREEZE, 16*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FREEZE, 16 * IN_MILLISECONDS);
break;
case EVENT_FLAME_BREATH:
DoCast(me->getVictim(), SPELL_FLAMEBREATH);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_halycon.cpp
index 5a3adfe499f..3a7461f90c4 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_halycon.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_halycon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -59,8 +59,8 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_CROWD_PUMMEL, 8*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_MIGHTY_BLOW, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CROWD_PUMMEL, 8 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MIGHTY_BLOW, 14 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -76,7 +76,7 @@ public:
//Summon Gizrul
if (!Summoned && HealthBelowPct(25))
{
- me->SummonCreature(NPC_GIZRUL_THE_SLAVENER, SummonLocation, TEMPSUMMON_TIMED_DESPAWN, 300*IN_MILLISECONDS);
+ me->SummonCreature(NPC_GIZRUL_THE_SLAVENER, SummonLocation, TEMPSUMMON_TIMED_DESPAWN, 300 * IN_MILLISECONDS);
Summoned = true;
}
@@ -91,11 +91,11 @@ public:
{
case EVENT_CROWD_PUMMEL:
DoCast(me->getVictim(), SPELL_CROWDPUMMEL);
- events.ScheduleEvent(EVENT_CROWD_PUMMEL, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CROWD_PUMMEL, 14 * IN_MILLISECONDS);
break;
case EVENT_MIGHTY_BLOW:
DoCast(me->getVictim(), SPELL_MIGHTYBLOW);
- events.ScheduleEvent(EVENT_MIGHTY_BLOW, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MIGHTY_BLOW, 10 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_highlord_omokk.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_highlord_omokk.cpp
index d1c1a2db699..6f5b9079268 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_highlord_omokk.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_highlord_omokk.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -64,13 +64,13 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_WARSTOMP, 15*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 6*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_STRIKE, 10*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_REND, 14*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SUNDER_ARMOR, 2*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 18*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SLOW, 24*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_WARSTOMP, 15 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 6 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_STRIKE, 10 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_REND, 14 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SUNDER_ARMOR, 2 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 18 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SLOW, 24 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -94,31 +94,31 @@ public:
{
case EVENT_WARSTOMP:
DoCast(me->getVictim(), SPELL_WARSTOMP);
- events.ScheduleEvent(EVENT_WARSTOMP, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_WARSTOMP, 14 * IN_MILLISECONDS);
break;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 8*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 8 * IN_MILLISECONDS);
break;
case EVENT_STRIKE:
DoCast(me->getVictim(), SPELL_STRIKE);
- events.ScheduleEvent(EVENT_STRIKE, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_STRIKE, 10 * IN_MILLISECONDS);
break;
case EVENT_REND:
DoCast(me->getVictim(), SPELL_REND);
- events.ScheduleEvent(EVENT_REND, 18*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_REND, 18 * IN_MILLISECONDS);
break;
case EVENT_SUNDER_ARMOR:
DoCast(me->getVictim(), SPELL_SUNDERARMOR);
- events.ScheduleEvent(EVENT_SUNDER_ARMOR, 25*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SUNDER_ARMOR, 25 * IN_MILLISECONDS);
break;
case EVENT_KNOCK_AWAY:
DoCast(me->getVictim(), SPELL_KNOCKAWAY);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 12*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 12 * IN_MILLISECONDS);
break;
case EVENT_SLOW:
DoCast(me->getVictim(), SPELL_SLOW);
- events.ScheduleEvent(EVENT_SLOW, 18*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SLOW, 18 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_mother_smolderweb.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_mother_smolderweb.cpp
index 3c467b1c7a8..cac07469d68 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_mother_smolderweb.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_mother_smolderweb.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -55,8 +55,8 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_CRYSTALIZE, 20*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_MOTHERS_MILK, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CRYSTALIZE, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MOTHERS_MILK, 10 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -86,11 +86,11 @@ public:
{
case EVENT_CRYSTALIZE:
DoCast(me, SPELL_CRYSTALIZE);
- events.ScheduleEvent(EVENT_CRYSTALIZE, 15*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CRYSTALIZE, 15 * IN_MILLISECONDS);
break;
case EVENT_MOTHERS_MILK:
DoCast(me, SPELL_MOTHERSMILK);
- events.ScheduleEvent(EVENT_MOTHERS_MILK, urand(5*IN_MILLISECONDS, 12500));
+ events.ScheduleEvent(EVENT_MOTHERS_MILK, urand(5 * IN_MILLISECONDS, 12500));
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_overlord_wyrmthalak.cpp
index 4f71bdef129..0975b171f4d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_overlord_wyrmthalak.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_overlord_wyrmthalak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -71,10 +71,10 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_BLAST_WAVE, 20*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_SHOUT, 2*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 6*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 12*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_BLAST_WAVE, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SHOUT, 2 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 6 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 12 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -91,9 +91,9 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
- if (Creature* warlord = me->SummonCreature(NPC_SPIRESTONE_WARLORD, SummonLocation1, TEMPSUMMON_TIMED_DESPAWN, 300*IN_MILLISECONDS))
+ if (Creature* warlord = me->SummonCreature(NPC_SPIRESTONE_WARLORD, SummonLocation1, TEMPSUMMON_TIMED_DESPAWN, 300 * IN_MILLISECONDS))
warlord->AI()->AttackStart(target);
- if (Creature* berserker = me->SummonCreature(NPC_SMOLDERTHORN_BERSERKER, SummonLocation2, TEMPSUMMON_TIMED_DESPAWN, 300*IN_MILLISECONDS))
+ if (Creature* berserker = me->SummonCreature(NPC_SMOLDERTHORN_BERSERKER, SummonLocation2, TEMPSUMMON_TIMED_DESPAWN, 300 * IN_MILLISECONDS))
berserker->AI()->AttackStart(target);
Summoned = true;
}
@@ -110,19 +110,19 @@ public:
{
case EVENT_BLAST_WAVE:
DoCast(me->getVictim(), SPELL_BLASTWAVE);
- events.ScheduleEvent(EVENT_BLAST_WAVE, 20*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_BLAST_WAVE, 20 * IN_MILLISECONDS);
break;
case EVENT_SHOUT:
DoCast(me->getVictim(), SPELL_SHOUT);
- events.ScheduleEvent(EVENT_SHOUT, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SHOUT, 10 * IN_MILLISECONDS);
break;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 7*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 7 * IN_MILLISECONDS);
break;
case EVENT_KNOCK_AWAY:
DoCast(me->getVictim(), SPELL_KNOCKAWAY);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 14 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
index c938561eb9c..96cc6e75e4e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -57,9 +57,9 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_FIRENOVA, 6*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_FLAMEBUFFET, 3*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_PYROBLAST, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FIRENOVA, 6 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FLAMEBUFFET, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_PYROBLAST, 14 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -83,16 +83,16 @@ public:
{
case EVENT_FIRENOVA:
DoCast(me->getVictim(), SPELL_FIRENOVA);
- events.ScheduleEvent(EVENT_FIRENOVA, 6*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FIRENOVA, 6 * IN_MILLISECONDS);
break;
case EVENT_FLAMEBUFFET:
DoCast(me->getVictim(), SPELL_FLAMEBUFFET);
- events.ScheduleEvent(EVENT_FLAMEBUFFET, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FLAMEBUFFET, 14 * IN_MILLISECONDS);
break;
case EVENT_PYROBLAST:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_PYROBLAST);
- events.ScheduleEvent(EVENT_PYROBLAST, 15*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_PYROBLAST, 15 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_quartermaster_zigris.cpp
index ee954d1adfa..470d41208dc 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_quartermaster_zigris.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_quartermaster_zigris.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -56,8 +56,8 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_SHOOT, 1*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_STUN_BOMB, 16*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SHOOT, 1 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_STUN_BOMB, 16 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -85,7 +85,7 @@ public:
break;
case EVENT_STUN_BOMB:
DoCast(me->getVictim(), SPELL_STUNBOMB);
- events.ScheduleEvent(EVENT_STUN_BOMB, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_STUN_BOMB, 14 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
index 634b65e0002..70b2a415a24 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -56,9 +56,9 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_WHIRLWIND, 20*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 5*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_THUNDERCLAP, 9*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 5 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_THUNDERCLAP, 9 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -82,15 +82,15 @@ public:
{
case EVENT_WHIRLWIND:
DoCast(me->getVictim(), SPELL_WHIRLWIND);
- events.ScheduleEvent(EVENT_WHIRLWIND, 18*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 18 * IN_MILLISECONDS);
break;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 10 * IN_MILLISECONDS);
break;
case EVENT_THUNDERCLAP:
DoCast(me->getVictim(), SPELL_THUNDERCLAP);
- events.ScheduleEvent(EVENT_THUNDERCLAP, 16*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_THUNDERCLAP, 16 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
index 71ce5c8d48e..20eefd5a0bc 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -57,9 +57,9 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 2*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_HEX, 8*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 2 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_HEX, 8 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -83,16 +83,16 @@ public:
{
case EVENT_CURSE_OF_BLOOD:
DoCast(me->getVictim(), SPELL_CURSEOFBLOOD);
- events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 45*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 45 * IN_MILLISECONDS);
break;
case EVENT_HEX:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_HEX);
- events.ScheduleEvent(EVENT_HEX, 15*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_HEX, 15 * IN_MILLISECONDS);
break;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 7*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 7 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_the_beast.cpp
index ea7a4b79ee2..77152277742 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_the_beast.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_the_beast.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -56,9 +56,9 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_FLAME_BREAK, 12*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_IMMOLATE, 3*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 23*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FLAME_BREAK, 12 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_IMMOLATE, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 23 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -82,16 +82,16 @@ public:
{
case EVENT_FLAME_BREAK:
DoCast(me->getVictim(), SPELL_FLAMEBREAK);
- events.ScheduleEvent(EVENT_FLAME_BREAK, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FLAME_BREAK, 10 * IN_MILLISECONDS);
break;
case EVENT_IMMOLATE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_IMMOLATE);
- events.ScheduleEvent(EVENT_IMMOLATE, 8*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_IMMOLATE, 8 * IN_MILLISECONDS);
break;
case EVENT_TERRIFYING_ROAR:
DoCast(me->getVictim(), SPELL_TERRIFYINGROAR);
- events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 20*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 20 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_warmaster_voone.cpp
index b1ae9b07630..9f06c2fbd5d 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_warmaster_voone.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_warmaster_voone.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -62,12 +62,12 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_SNAP_KICK, 8*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 14*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_UPPERCUT, 20*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_PUMMEL, 32*IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_THROW_AXE, 1*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SNAP_KICK, 8 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_UPPERCUT, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_PUMMEL, 32 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_THROW_AXE, 1 * IN_MILLISECONDS);
}
void JustDied(Unit* /*who*/)
@@ -91,27 +91,27 @@ public:
{
case EVENT_SNAP_KICK:
DoCast(me->getVictim(), SPELL_SNAPKICK);
- events.ScheduleEvent(EVENT_SNAP_KICK, 6*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SNAP_KICK, 6 * IN_MILLISECONDS);
break;
case EVENT_CLEAVE:
DoCast(me->getVictim(), SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 12*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 12 * IN_MILLISECONDS);
break;
case EVENT_UPPERCUT:
DoCast(me->getVictim(), SPELL_UPPERCUT);
- events.ScheduleEvent(EVENT_UPPERCUT, 14*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_UPPERCUT, 14 * IN_MILLISECONDS);
break;
case EVENT_MORTAL_STRIKE:
DoCast(me->getVictim(), SPELL_MORTALSTRIKE);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10 * IN_MILLISECONDS);
break;
case EVENT_PUMMEL:
DoCast(me->getVictim(), SPELL_PUMMEL);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16 * IN_MILLISECONDS);
break;
case EVENT_THROW_AXE:
DoCast(me->getVictim(), SPELL_THROWAXE);
- events.ScheduleEvent(EVENT_THROW_AXE, 8*IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_THROW_AXE, 8 * IN_MILLISECONDS);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
index d65c1c68090..ff97984fa09 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -33,7 +33,7 @@ public:
{
instance_blackrock_spireMapScript(InstanceMap* map) : InstanceScript(map) {}
- uint32 Encounter[MAX_ENCOUNTER];
+ uint32 encounter[MAX_ENCOUNTER];
std::string m_strInstData;
uint64 HighlordOmokk;
uint64 ShadowHunterVoshgajin;
@@ -53,27 +53,27 @@ public:
void Initialize()
{
SetBossNumber(MAX_ENCOUNTER);
- HighlordOmokk = 0;
- ShadowHunterVoshgajin = 0;
- WarMasterVoone = 0;
- MotherSmolderweb = 0;
- UrokDoomhowl = 0;
- QuartermasterZigris = 0;
- GizrultheSlavener = 0;
- Halycon = 0;
- OverlordWyrmthalak = 0;
- PyroguardEmberseer = 0;
- WarchiefRendBlackhand = 0;
- Gyth = 0;
- TheBeast = 0;
- GeneralDrakkisath = 0;
+ HighlordOmokk = 0;
+ ShadowHunterVoshgajin = 0;
+ WarMasterVoone = 0;
+ MotherSmolderweb = 0;
+ UrokDoomhowl = 0;
+ QuartermasterZigris = 0;
+ GizrultheSlavener = 0;
+ Halycon = 0;
+ OverlordWyrmthalak = 0;
+ PyroguardEmberseer = 0;
+ WarchiefRendBlackhand = 0;
+ Gyth = 0;
+ TheBeast = 0;
+ GeneralDrakkisath = 0;
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
- if (Encounter[i] == IN_PROGRESS)
+ if (encounter[i] == IN_PROGRESS)
return true;
}
return false;
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_broodlord_lashlayer.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_broodlord_lashlayer.cpp
index c9b5a172c65..a2e41f1af70 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_broodlord_lashlayer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_broodlord_lashlayer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_chromaggus.cpp
index 85d80bee062..50bda73cfc6 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_chromaggus.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_chromaggus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_ebonroc.cpp
index 4c57c4336d9..09dd0138db8 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_ebonroc.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_ebonroc.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_firemaw.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_firemaw.cpp
index 9d53a7a0a95..133d61422b2 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_firemaw.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_firemaw.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
index 4e44a70475f..b71249dc3a3 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_flamegor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -70,7 +70,7 @@ public:
if (ShadowFlame_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SHADOWFLAME);
- ShadowFlame_Timer = 15000 + rand()%7000;
+ ShadowFlame_Timer = urand(15000, 22000);
} else ShadowFlame_Timer -= diff;
//WingBuffet_Timer
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
index 89298862688..506189697fe 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_razorgore.cpp
index b4ccc8544a1..b643139a71e 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_razorgore.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_razorgore.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_vaelastrasz.cpp
index ba6bc4fa533..4961d253a26 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_vaelastrasz.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_vaelastrasz.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_victor_nefarius.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_victor_nefarius.cpp
index 13574a71b8b..89b34aada66 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_victor_nefarius.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_victor_nefarius.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/instance_blackwing_lair.cpp
index 7e50b507262..54c0855512f 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/instance_blackwing_lair.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/instance_blackwing_lair.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
index cef44bb446a..9830563ac87 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
index 13e2832bfde..fffd8d41264 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
index 627b0b703f8..55726fb2a8e 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
+++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
index ae0042dcfa5..76bdfe753c6 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
index 1cbe48ae5da..cd5566007ee 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h
index 495ac216612..a62cf9f9cae 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
index cf9a3ffc9c1..0bbe787827b 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
index 423b73eed49..b1fa4d54eb6 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
index 8db9221c764..66de84abbc2 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index e804d2b2b61..65b758b55e7 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
index fc2860dad5a..484515be0f8 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
index 2bcfab80056..c1fe9c9c56c 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -136,9 +136,9 @@ public:
{
uint8 r = rand()%4;
uint8 pos[3];
- pos[RED_PORTAL] = (r%2 ? (r>1 ? 2: 1): 0);
- pos[GREEN_PORTAL] = (r%2 ? 0: (r>1 ? 2: 1));
- pos[BLUE_PORTAL] = (r>1 ? 1: 2); // Blue Portal not on the left side (0)
+ pos[RED_PORTAL] = ((r % 2) ? (r > 1 ? 2 : 1) : 0);
+ pos[GREEN_PORTAL] = ((r % 2) ? 0 : (r > 1 ? 2 : 1));
+ pos[BLUE_PORTAL] = (r > 1 ? 1 : 2); // Blue Portal not on the left side (0)
for (int i=0; i<3; ++i)
if (Creature* portal = me->SummonCreature(PortalID[i], PortalCoord[pos[i]][0], PortalCoord[pos[i]][1], PortalCoord[pos[i]][2], 0, TEMPSUMMON_TIMED_DESPAWN, 60000))
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
index 63ca3e32e6e..ecb909480c5 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
index 5f8a9ad6f1c..a6d7248cc26 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
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 f97fc49eb7c..119cb7d9de6 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index ea7e3113246..15750c5b9c5 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index 8454150d830..a675c355cfc 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -824,7 +824,7 @@ public:
void Reset()
{
ChaseTimer = 30000;
- FearTimer = 25000 + rand()%10000;
+ FearTimer = urand(25000, 35000);
SwipeTimer = 5000;
HoodGUID = 0;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
index 3dd37fc66c7..8e86024f4d8 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index 6a9831655a9..056a2e95448 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h
index e9d37958944..08b9a729596 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index c64fc6f2dab..94c894f7e47 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index 719c42c0a57..b9d4f600329 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -201,7 +201,8 @@ public:
//object already removed, not exist
if (!pAdd)
{
- if (Creature* pAdd = me->SummonCreature((*itr), LackeyLocations[j][0], LackeyLocations[j][1], fZLocation, fOrientation, TEMPSUMMON_CORPSE_DESPAWN, 0))
+ pAdd = me->SummonCreature((*itr), LackeyLocations[j][0], LackeyLocations[j][1], fZLocation, fOrientation, TEMPSUMMON_CORPSE_DESPAWN, 0);
+ if (pAdd)
m_auiLackeyGUID[j] = pAdd->GetGUID();
}
++j;
@@ -466,7 +467,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
if (ResetThreatTimer <= diff)
{
DoResetThreat();
- ResetThreatTimer = 5000 + rand()%15000;
+ ResetThreatTimer = urand(5000, 20000);
} else ResetThreatTimer -= diff;
}
};
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 305ce97687a..fa97e4eefc0 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -122,13 +122,13 @@ public:
instance->SetData(DATA_SELIN_EVENT, NOT_STARTED);
} else sLog->outError(ERROR_INST_DATA);
- DrainLifeTimer = 3000 + rand()%4000;
+ DrainLifeTimer = urand(3000, 7000);
DrainManaTimer = DrainLifeTimer + 5000;
FelExplosionTimer = 2100;
if (IsHeroic())
- DrainCrystalTimer = 10000 + rand()%5000;
+ DrainCrystalTimer = urand(10000, 15000);
else
- DrainCrystalTimer = 20000 + rand()%5000;
+ DrainCrystalTimer = urand(20000, 25000);
EmpowerTimer = 10000;
IsDraining = false;
@@ -285,9 +285,9 @@ public:
{
SelectNearestCrystal();
if (IsHeroic())
- DrainCrystalTimer = 10000 + rand()%5000;
+ DrainCrystalTimer = urand(10000, 15000);
else
- DrainCrystalTimer = 20000 + rand()%5000;
+ DrainCrystalTimer = urand(20000, 25000);
} else DrainCrystalTimer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
index 906bbe6f528..5f3716d9dea 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
index 69d8ecbae62..642f7955b2e 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
index b47e9cd1666..679db023b63 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
index 105c975122d..dcea4424bf5 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_baron_geddon.cpp
index 72f89c4f47d..3959a01e4ba 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_baron_geddon.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_baron_geddon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_garr.cpp
index 028362f2199..e1bb48dfbb0 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_garr.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_garr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_gehennas.cpp
index 92b0e370f9f..9bbbb086abd 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_gehennas.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_gehennas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_golemagg.cpp
index 47f192bc55c..1ba143a8c03 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_golemagg.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_golemagg.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_lucifron.cpp
index 54bb5bc7880..5395b46fef3 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_lucifron.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_lucifron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_magmadar.cpp
index ebc6bcec24f..5551531379b 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_magmadar.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_magmadar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_majordomo_executus.cpp
index e716e4a7361..d324150c22f 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_majordomo_executus.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_majordomo_executus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_ragnaros.cpp
index 592e0054fa4..47d50925d56 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_ragnaros.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -110,7 +110,7 @@ class boss_ragnaros : public CreatureScript
void KilledUnit(Unit* /*victim*/)
{
- if (urand(0, 99 < 25))
+ if (urand(0, 99) < 25)
DoScriptText(SAY_KILL, me);
}
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_shazzrah.cpp
index 8928dca0750..97c89f12b5b 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_shazzrah.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_shazzrah.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/boss_sulfuron_harbinger.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/boss_sulfuron_harbinger.cpp
index 9126df968e2..ccefca70d67 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/boss_sulfuron_harbinger.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/boss_sulfuron_harbinger.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/instance_molten_core.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/instance_molten_core.cpp
index 3c7ec790f40..f6a6e647a1d 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/instance_molten_core.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/instance_molten_core.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.cpp b/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.cpp
index 871cef96316..eafe55d3821 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.cpp
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.h b/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.h
index 7bbae236f52..99dd74fb5fe 100644
--- a/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.h
+++ b/src/server/scripts/EasternKingdoms/MoltenCore/molten_core.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 395f4f3ace4..999f3fda2e4 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index ebd30aa2f5d..1fb8287e54d 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -248,7 +248,7 @@ public:
me->Mount(MODEL_DEATH_KNIGHT_MOUNT);
break;
case 10:
- me->Unmount();
+ me->Dismount();
break;
}
}
@@ -378,7 +378,7 @@ public:
void EnterCombat(Unit* /*who*/)
{
DoScriptText(SAY_TREE2, me);
- me->Unmount();
+ me->Dismount();
uiStage = 0;
}
@@ -482,21 +482,21 @@ public:
{
Shout();
DoCast(me, SPELL_RENEW);
- uiRenew_timer = 1000 + rand()%5000;
+ uiRenew_timer = urand(1000, 6000);
} else uiRenew_timer -= diff;
if (uiInquisitor_Penance_timer <= diff)
{
Shout();
DoCast(me->getVictim(), SPELL_INQUISITOR_PENANCE);
- uiInquisitor_Penance_timer = 2000 + rand()%5000;
+ uiInquisitor_Penance_timer = urand(2000, 7000);
} else uiInquisitor_Penance_timer -= diff;
if (uiValroth_Smite_timer <= diff)
{
Shout();
DoCast(me->getVictim(), SPELL_VALROTH_SMITE);
- uiValroth_Smite_timer = 1000 + rand()%5000;
+ uiValroth_Smite_timer = urand(1000, 6000);
} else uiValroth_Smite_timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
index aea25af87bf..81c4b1261ef 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -497,9 +497,9 @@ public:
SetEscortPaused(bOnHold);
}
- void WaypointReached(uint32 i)
+ void WaypointReached(uint32 wpId)
{
- switch (i)
+ switch (wpId)
{
case 0:
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
@@ -526,13 +526,13 @@ public:
NPCChangeTarget(uiOrbazGUID);
NPCChangeTarget(uiThassarianGUID);
- me->Unmount();
+ me->Dismount();
me->CastSpell(me, SPELL_THE_MIGHT_OF_MOGRAINE, true); // need to fix, on player only
if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID))
- temp->Unmount();
+ temp->Dismount();
if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID))
- temp->Unmount();
+ temp->Dismount();
bIsBattle = true;
break;
@@ -1173,8 +1173,8 @@ public:
temp->SetSpeed(MOVE_RUN, 3.0f); // workarounds, make Tirion still running
temp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2].x, LightofDawnLoc[2].y, LightofDawnLoc[2].z);
- if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID))
- temp->Relocate(LightofDawnLoc[28].x, LightofDawnLoc[28].y, LightofDawnLoc[28].z); // workarounds, he should kick back by Tirion, but here we relocate him
+ if (Creature* lktemp = Unit::GetCreature(*me, uiLichKingGUID))
+ lktemp->Relocate(LightofDawnLoc[28].x, LightofDawnLoc[28].y, LightofDawnLoc[28].z); // workarounds, he should kick back by Tirion, but here we relocate him
}
JumpToNextStep(1500);
break;
@@ -1352,31 +1352,31 @@ public:
if (uiAnti_magic_zone <= diff)
{
DoCast(me, SPELL_ANTI_MAGIC_ZONE1);
- uiAnti_magic_zone = 25000 + rand()%5000;
+ uiAnti_magic_zone = urand(25000, 30000);
} else uiAnti_magic_zone -= diff;
if (uiDeath_strike <= diff)
{
DoCast(me->getVictim(), SPELL_DEATH_STRIKE);
- uiDeath_strike = 5000 + rand()%5000;
+ uiDeath_strike = urand(5000, 10000);
} else uiDeath_strike -= diff;
if (uiDeath_embrace <= diff)
{
DoCast(me->getVictim(), SPELL_DEATH_EMBRACE);
- uiDeath_embrace = 5000 + rand()%5000;
+ uiDeath_embrace = urand(5000, 10000);
} else uiDeath_embrace -= diff;
if (uiIcy_touch <= diff)
{
DoCast(me->getVictim(), SPELL_ICY_TOUCH1);
- uiIcy_touch = 5000 + rand()%5000;
+ uiIcy_touch = urand(5000, 10000);
} else uiIcy_touch -= diff;
if (uiUnholy_blight <= diff)
{
DoCast(me->getVictim(), SPELL_UNHOLY_BLIGHT);
- uiUnholy_blight = 5000 + rand()%5000;
+ uiUnholy_blight = urand(5000, 10000);
} else uiUnholy_blight -= diff;
if (uiFight_speech <= diff)
@@ -1387,7 +1387,7 @@ public:
SAY_LIGHT_OF_DAWN18, SAY_LIGHT_OF_DAWN19, SAY_LIGHT_OF_DAWN20,
SAY_LIGHT_OF_DAWN21, SAY_LIGHT_OF_DAWN22, SAY_LIGHT_OF_DAWN23,
SAY_LIGHT_OF_DAWN24), me);
- uiFight_speech = 15000 + rand()%5000;
+ uiFight_speech = urand(15000, 20000);
} else uiFight_speech -= diff;
// Check spawns
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave.cpp
index a61b88a990d..febe89772fd 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/the_scarlet_enclave.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -51,7 +51,9 @@ public:
phase = 0;
me->GetPosition(x, y, z);
- z += 4; x -= 3.5; y -= 5;
+ z += 4.0f;
+ x -= 3.5f;
+ y -= 5.0f;
me->GetMotionMaster()->Clear(false);
me->SetPosition(x, y, z, 0.0f);
}
@@ -78,7 +80,9 @@ public:
break;
case 1:
player->GetClosePoint(x, y, z, me->GetObjectSize());
- z += 2.5; x -= 2; y -= 1.5;
+ z += 2.5f;
+ x -= 2.0f;
+ y -= 1.5f;
me->GetMotionMaster()->MovePoint(0, x, y, z);
me->SetTarget(player->GetGUID());
me->SetVisible(true);
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
index a5fe8a5c6db..b3102f2dde7 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -111,7 +111,7 @@ public:
if (AoESilence_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_AOESILENCE);
- AoESilence_Timer = 15000 + rand()%5000;
+ AoESilence_Timer = urand(15000, 20000);
} else AoESilence_Timer -= diff;
//ArcaneExplosion_Timer
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
index 83a5b5808f4..36beecb2029 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
index 16875dce85f..794a686a550 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -92,7 +92,7 @@ public:
if (FlameShock_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FLAMESHOCK);
- FlameShock_Timer = 10000 + rand()%5000;
+ FlameShock_Timer = urand(10000, 15000);
} else FlameShock_Timer -= diff;
//FlameSpike_Timer
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
index 9afbeaa0172..14b21504be5 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -504,15 +504,14 @@ public:
Player* SelectRandomPlayer(float range = 0.0f, bool checkLoS = true)
{
Map* map = me->GetMap();
- if (!map->IsDungeon()) return NULL;
+ if (!map->IsDungeon())
+ return NULL;
Map::PlayerList const &PlayerList = map->GetPlayers();
- Map::PlayerList::const_iterator i;
- if (PlayerList.isEmpty()) return NULL;
+ if (PlayerList.isEmpty())
+ return NULL;
std::list<Player*> temp;
- std::list<Player*>::const_iterator j;
-
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if ((me->IsWithinLOSInMap(i->getSource()) || !checkLoS) && me->getVictim() != i->getSource() &&
me->IsWithinDistInMap(i->getSource(), range) && i->getSource()->isAlive())
@@ -520,7 +519,7 @@ public:
if (!temp.empty())
{
- j = temp.begin();
+ std::list<Player*>::const_iterator j = temp.begin();
advance(j, rand()%temp.size());
return (*j);
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
index bb2fea6a1a7..d99aabd60e8 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
index 5c6b31c2ab7..327c84327c5 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
index 8b0f793d2df..b070a31d6ee 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
index 2277d867455..28c9b7ea434 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -107,7 +107,7 @@ public:
if (ShadowWordPain_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SHADOWWORDPAIN);
- ShadowWordPain_Timer = 5000 + rand()%10000;
+ ShadowWordPain_Timer = urand(5000, 15000);
} else ShadowWordPain_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
index 3b788c72cd8..7e2d3cb6788 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -102,7 +102,7 @@ public:
{
if (m_instance)
{
- if (m_instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT != NOT_STARTED))
+ if (m_instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) != NOT_STARTED)
m_instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, FAIL);
}
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
index 7ee479727ed..dc10cb4d60f 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
index ba3759e7062..f1cddb08a69 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
index 4b5cd422198..ca6bd1d185a 100644
--- a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
+++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 12dd67e009d..4ddc240a03c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -108,14 +108,14 @@ public:
if (ShadowShield_Timer <= diff)
{
DoCast(me, SPELL_SHADOWSHIELD);
- ShadowShield_Timer = 14000 + rand()%14000;
+ ShadowShield_Timer = urand(14000, 28000);
} else ShadowShield_Timer -= diff;
//Curse_Timer
if (Curse_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CURSE);
- Curse_Timer = 15000 + rand()%12000;
+ Curse_Timer = urand(15000, 27000);
} else Curse_Timer -= diff;
//Teleporting Random Target to one of the six pre boss rooms and spawn 3-4 skeletons near the gamer.
@@ -214,7 +214,7 @@ public:
break;
}
}
- Teleport_Timer = 20000 + rand()%15000;
+ Teleport_Timer = urand(20000, 35000);
} else Teleport_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
index 4c66c129893..693cad06bd5 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
index 4ea79c8332a..05d662c4fe3 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
index a5c1436153b..92f0fcd25c4 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index e7388503177..295d9440d2e 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 9dd9f1fedb5..48bf000745c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -171,7 +171,7 @@ public:
void Reset()
{
- Cleave_Timer = 2000 + rand()%6000;
+ Cleave_Timer = urand(2000, 8000);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
@@ -192,7 +192,7 @@ public:
DoCast(me->getVictim(), SPELL_CLEAVE);
//5-8 seconds
- Cleave_Timer = 5000 + rand()%3000;
+ Cleave_Timer = urand(5000, 8000);
} else Cleave_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
index 72685d29181..7c279e726a6 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
index ac9a62f2b27..5109e6e1468 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
index a575d039dfa..754640bff9e 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
index efff8042824..902838da152 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
index 052e950b4e8..13fa450f5ee 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
index 3512e4cd1cf..657b458e148 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index a96fe8b935b..86023d21eca 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index 4c0d2061639..6e8ed21e4bb 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
index d5a641fc0f6..df369bb58b6 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
index 666bc690f8d..dded75e193c 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
index 9b1ffe5e1b2..0c41239c9b4 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
index 86cd3019fd8..0c659117f5d 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
index 3cd6078eb41..a01846cb862 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
index edf291a7c0e..d84bd489dab 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
index 17ea8a04293..8a14f1e2401 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -131,7 +131,7 @@ public:
if (m_uiMindBlast_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_MINDBLAST);
- m_uiMindBlast_Timer = 15000 + rand()%5000;
+ m_uiMindBlast_Timer = urand(15000, 20000);
} else m_uiMindBlast_Timer -= uiDiff;
//CrusadersHammer
@@ -173,7 +173,7 @@ public:
if (m_uiMindBlast_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_MINDBLAST);
- m_uiMindBlast_Timer = 15000 + rand()%5000;
+ m_uiMindBlast_Timer = urand(15000, 20000);
} else m_uiMindBlast_Timer -= uiDiff;
//ShadowShock
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
index 1a4acf9be7e..48b1fc2acc7 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
index cb423d9a781..1dc22a20d08 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
index 13ce7631be5..a7c91c3636d 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
index b93d289e0cc..3393b9e5797 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
index f6d6ae377e4..869a82011ad 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
index 5d7e6c9467e..f35bcc05ec2 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
index 96e313dc6a2..405527ab383 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 618ac8b7c27..387b6d7b13c 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
index 39019c46850..5b2b2fd46c1 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
index b7707899089..b28271f5915 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
+++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
index 931fc46a85a..e804fff44f5 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
index 50eb34e6ffb..35d6766872f 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
index 91f62958be5..6b93ef03fa8 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index 75bca682660..1404fd14e91 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
index d00f2b8de48..56d7909336c 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 4de719d684e..c65ce2c8f98 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -484,15 +484,14 @@ public:
float x, y, z;
me->GetPosition(x, y, z);
- CellPair pair(Trinity::ComputeCellPair(x, y));
+ CellCoord pair(Trinity::ComputeCellCoord(x, y));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AllCreaturesOfEntryInRange check(me, entry, 100);
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
- cell.Visit(pair, cSearcher, *(me->GetMap()));
+ cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange());
for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i)
{
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index df3bb5d4525..d7c90732a80 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -612,7 +612,7 @@ public:
KalecGUID = 0;
}
- ShadowBoltTimer = 7000 + rand()%3 * 1000;
+ ShadowBoltTimer = urand(7, 10) * 1000;
AgonyCurseTimer = 20000;
CorruptionStrikeTimer = 13000;
CheckTimer = 1000;
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index b29a0c491cc..cb7f0de165d 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -662,11 +662,13 @@ public:
{
float x, y, z;
Unit* target = NULL;
- for (uint8 z = 0; z < 6; ++z)
+ for (uint8 i = 0; i < 6; ++i)
{
target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (!target || !target->HasAura(SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, 0))break;
+ if (!target || !target->HasAura(SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, 0))
+ break;
}
+
if (target)
{
target->GetPosition(x, y, z);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index fd11b4a4985..2004eec71bc 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -330,14 +330,14 @@ public:
else
{
DarkFiend = false;
- for (uint8 i = 0; i < 8; ++i)
- me->SummonCreature(CREATURE_DARK_FIENDS, DarkFiends[i][0], DarkFiends[i][1], DarkFiends[i][2], DarkFiends[i][3], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ for (uint8 j = 0; j < 8; ++j)
+ me->SummonCreature(CREATURE_DARK_FIENDS, DarkFiends[j][0], DarkFiends[j][1], DarkFiends[j][2], DarkFiends[j][3], TEMPSUMMON_CORPSE_DESPAWN, 0);
Timer[TIMER_DARKNESS] = 42000;
}
break;
case TIMER_HUMANOIDES:
- for (uint8 i = 0; i < 6; ++i)
- me->SummonCreature(uint32(Humanoides[i][0]), Humanoides[i][1], Humanoides[i][2], Humanoides[i][3], Humanoides[i][4], TEMPSUMMON_CORPSE_DESPAWN, 0);
+ for (uint8 j = 0; j < 6; ++j)
+ me->SummonCreature(uint32(Humanoides[j][0]), Humanoides[j][1], Humanoides[j][2], Humanoides[j][3], Humanoides[j][4], TEMPSUMMON_CORPSE_DESPAWN, 0);
Timer[TIMER_HUMANOIDES] = 60000;
break;
case TIMER_PHASE:
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
index a6d631a5b85..645026c343d 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp
index 59be2f2a643..e6349e3497e 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h
index efd00ca238f..ed21077cc63 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
index 74c9e6b66b4..0872ac9adca 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
index 0ec25a265fc..8a845dbb7f6 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
index 0b97274310a..60d17a7e5d2 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
index 0a80900edf4..7bcd2598271 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
+++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h
index af0e9c18311..360a80ac4f3 100644
--- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h
+++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
index ba2d638d45f..d04d7af5c80 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -189,22 +189,21 @@ class boss_akilzon : public CreatureScript
for (uint8 i = 2; i < StormCount; ++i)
bp0 *= 2;
- CellPair p(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
std::list<Unit*> tempUnitMap;
{
- Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, 999);
+ Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, SIZE_OF_GRIDS);
Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck> searcher(me, tempUnitMap, u_check);
TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
- cell.Visit(p, world_unit_searcher, *(me->GetMap()));
- cell.Visit(p, grid_unit_searcher, *(me->GetMap()));
+ cell.Visit(p, world_unit_searcher, *me->GetMap(), *me, SIZE_OF_GRIDS);
+ cell.Visit(p, grid_unit_searcher, *me->GetMap(), *me, SIZE_OF_GRIDS);
}
//dealdamege
for (std::list<Unit*>::const_iterator i = tempUnitMap.begin(); i != tempUnitMap.end(); ++i)
@@ -297,13 +296,13 @@ class boss_akilzon : public CreatureScript
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1);
if (!target) target = me->getVictim();
DoCast(target, SPELL_GUST_OF_WIND);
- GustOfWind_Timer = (20+rand()%10)*1000; //20 to 30 seconds(bosskillers)
+ GustOfWind_Timer = urand(20, 30) * 1000; //20 to 30 seconds(bosskillers)
} else GustOfWind_Timer -= diff;
if (CallLighting_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CALL_LIGHTNING);
- CallLighting_Timer = (12 + rand()%5)*1000; //totaly random timer. can't find any info on this
+ CallLighting_Timer = urand(12, 17) * 1000; //totaly random timer. can't find any info on this
} else CallLighting_Timer -= diff;
if (!isRaining && ElectricalStorm_Timer < uint32(8000 + rand() % 5000))
@@ -407,7 +406,7 @@ class mob_akilzon_eagle : public CreatureScript
void Reset()
{
- EagleSwoop_Timer = 5000 + rand()%5000;
+ EagleSwoop_Timer = urand(5000, 10000);
arrived = true;
TargetGUID = 0;
me->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
@@ -426,7 +425,7 @@ class mob_akilzon_eagle : public CreatureScript
DoCast(target, SPELL_EAGLE_SWOOP, true);
TargetGUID = 0;
me->SetSpeed(MOVE_RUN, 1.2f);
- EagleSwoop_Timer = 5000 + rand()%5000;
+ EagleSwoop_Timer = urand(5000, 10000);
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
index a3c7aae4132..db0e201298c 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -263,7 +263,7 @@ class boss_halazzi : public CreatureScript
DoCast(target, SPELL_EARTHSHOCK);
else
DoCast(target, SPELL_FLAMESHOCK);
- ShockTimer = 10000 + rand()%5000;
+ ShockTimer = urand(10000, 15000);
}
} else ShockTimer -= diff;
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
index 162c84f1fa7..5efd4af55ea 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
index d2ad81b4910..21245209e45 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -233,9 +233,8 @@ class boss_janalai : public CreatureScript
me->GetPosition(x, y, z);
{
- CellPair pair(Trinity::ComputeCellPair(x, y));
+ CellCoord pair(Trinity::ComputeCellCoord(x, y));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AllCreaturesOfEntryInRange check(me, MOB_EGG, 100);
@@ -243,7 +242,7 @@ class boss_janalai : public CreatureScript
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
- cell.Visit(pair, cSearcher, *(me->GetMap()));
+ cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange());
}
//sLog->outError("Eggs %d at middle", templist.size());
@@ -267,9 +266,8 @@ class boss_janalai : public CreatureScript
me->GetPosition(x, y, z);
{
- CellPair pair(Trinity::ComputeCellPair(x, y));
+ CellCoord pair(Trinity::ComputeCellCoord(x, y));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AllCreaturesOfEntryInRange check(me, MOB_FIRE_BOMB, 100);
@@ -277,7 +275,7 @@ class boss_janalai : public CreatureScript
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
- cell.Visit(pair, cSearcher, *(me->GetMap()));
+ cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange());
}
for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i)
{
@@ -519,9 +517,8 @@ class mob_janalai_hatcher : public CreatureScript
me->GetPosition(x, y, z);
{
- CellPair pair(Trinity::ComputeCellPair(x, y));
+ CellCoord pair(Trinity::ComputeCellCoord(x, y));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AllCreaturesOfEntryInRange check(me, 23817, 50);
@@ -529,7 +526,7 @@ class mob_janalai_hatcher : public CreatureScript
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
- cell.Visit(pair, cSearcher, *(me->GetMap()));
+ cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange());
}
//sLog->outError("Eggs %d at %d", templist.size(), side);
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
index 17968766a5f..954f232f786 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -145,10 +145,10 @@ class boss_nalorakk : public CreatureScript
if (instance)
instance->SetData(DATA_NALORAKKEVENT, NOT_STARTED);
- Surge_Timer = 15000 + rand()%5000;
- BrutalSwipe_Timer = 7000 + rand()%5000;
- Mangle_Timer = 10000 + rand()%5000;
- ShapeShift_Timer = 45000 + rand()%5000;
+ Surge_Timer = urand(15000, 20000);
+ BrutalSwipe_Timer = urand(7000, 12000);
+ Mangle_Timer = urand(10000, 15000);
+ ShapeShift_Timer = urand(45000, 50000);
Berserk_Timer = 600000;
inBearForm = false;
@@ -162,9 +162,8 @@ class boss_nalorakk : public CreatureScript
me->GetPosition(x, y, z);
{
- CellPair pair(Trinity::ComputeCellPair(x, y));
+ CellCoord pair(Trinity::ComputeCellCoord(x, y));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::AllFriendlyCreaturesInGrid check(me);
@@ -172,7 +171,7 @@ class boss_nalorakk : public CreatureScript
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid>, GridTypeMapContainer> cSearcher(searcher);
- cell.Visit(pair, cSearcher, *(me->GetMap()));
+ cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange());
}
if (templist.empty())
@@ -372,10 +371,10 @@ class boss_nalorakk : public CreatureScript
me->MonsterYell(YELL_SHIFTEDTOTROLL, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(me, SOUND_YELL_TOTROLL);
me->RemoveAurasDueToSpell(SPELL_BEARFORM);
- Surge_Timer = 15000 + rand()%5000;
- BrutalSwipe_Timer = 7000 + rand()%5000;
- Mangle_Timer = 10000 + rand()%5000;
- ShapeShift_Timer = 45000 + rand()%5000;
+ Surge_Timer = urand(15000, 20000);
+ BrutalSwipe_Timer = urand(7000, 12000);
+ Mangle_Timer = urand(10000, 15000);
+ ShapeShift_Timer = urand(45000, 50000);
inBearForm = false;
}
else
@@ -386,8 +385,8 @@ class boss_nalorakk : public CreatureScript
DoCast(me, SPELL_BEARFORM, true);
LaceratingSlash_Timer = 2000; // dur 18s
RendFlesh_Timer = 3000; // dur 5s
- DeafeningRoar_Timer = 5000 + rand()%5000; // dur 2s
- ShapeShift_Timer = 20000 + rand()%5000; // dur 30s
+ DeafeningRoar_Timer = urand(5000, 10000); // dur 2s
+ ShapeShift_Timer = urand(20000, 25000); // dur 30s
inBearForm = true;
}
} else ShapeShift_Timer -= diff;
@@ -397,7 +396,7 @@ class boss_nalorakk : public CreatureScript
if (BrutalSwipe_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_BRUTALSWIPE);
- BrutalSwipe_Timer = 7000 + rand()%5000;
+ BrutalSwipe_Timer = urand(7000, 12000);
} else BrutalSwipe_Timer -= diff;
if (Mangle_Timer <= diff)
@@ -407,7 +406,7 @@ class boss_nalorakk : public CreatureScript
DoCast(me->getVictim(), SPELL_MANGLE);
Mangle_Timer = 1000;
}
- else Mangle_Timer = 10000 + rand()%5000;
+ else Mangle_Timer = urand(10000, 15000);
} else Mangle_Timer -= diff;
if (Surge_Timer <= diff)
@@ -417,7 +416,7 @@ class boss_nalorakk : public CreatureScript
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 45, true);
if (target)
DoCast(target, SPELL_SURGE);
- Surge_Timer = 15000 + rand()%5000;
+ Surge_Timer = urand(15000, 20000);
} else Surge_Timer -= diff;
}
else
@@ -425,19 +424,19 @@ class boss_nalorakk : public CreatureScript
if (LaceratingSlash_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_LACERATINGSLASH);
- LaceratingSlash_Timer = 18000 + rand()%5000;
+ LaceratingSlash_Timer = urand(18000, 23000);
} else LaceratingSlash_Timer -= diff;
if (RendFlesh_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_RENDFLESH);
- RendFlesh_Timer = 5000 + rand()%5000;
+ RendFlesh_Timer = urand(5000, 10000);
} else RendFlesh_Timer -= diff;
if (DeafeningRoar_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_DEAFENINGROAR);
- DeafeningRoar_Timer = 15000 + rand()%5000;
+ DeafeningRoar_Timer = urand(15000, 20000);
} else DeafeningRoar_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
index ae6a25d2c17..b5130630d05 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -430,7 +430,7 @@ class boss_zuljin : public CreatureScript
if (Whirlwind_Timer <= diff)
{
DoCast(me, SPELL_WHIRLWIND);
- Whirlwind_Timer = 15000 + rand()%5000;
+ Whirlwind_Timer = urand(15000, 20000);
} else Whirlwind_Timer -= diff;
if (Grievous_Throw_Timer <= diff)
@@ -489,7 +489,7 @@ class boss_zuljin : public CreatureScript
++Claw_Counter;
if (Claw_Counter == 12)
{
- Claw_Rage_Timer = 15000 + rand()%5000;
+ Claw_Rage_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
AttackStart(Unit::GetUnit(*me, TankGUID));
TankGUID = 0;
@@ -537,7 +537,7 @@ class boss_zuljin : public CreatureScript
++Claw_Counter;
if (Claw_Counter == 9)
{
- Lynx_Rush_Timer = 15000 + rand()%5000;
+ Lynx_Rush_Timer = urand(15000, 20000);
me->SetSpeed(MOVE_RUN, 1.2f);
AttackStart(Unit::GetUnit(*me, TankGUID));
TankGUID = 0;
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
index 2785c61dec5..ac1554bd00e 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index a6eb4c91d4c..bf951dd186c 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
index 844e1c33eca..daad916c0aa 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
index 076545ae9d4..27ddc215543 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
index c515b625e6f..a944a857f74 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -66,7 +66,7 @@ class boss_gahzranka : public CreatureScript
if (Frostbreath_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FROSTBREATH);
- Frostbreath_Timer = 7000 + rand()%4000;
+ Frostbreath_Timer = urand(7000, 11000);
} else Frostbreath_Timer -= diff;
//MassiveGeyser_Timer
@@ -75,14 +75,14 @@ class boss_gahzranka : public CreatureScript
DoCast(me->getVictim(), SPELL_MASSIVEGEYSER);
DoResetThreat();
- MassiveGeyser_Timer = 22000 + rand()%10000;
+ MassiveGeyser_Timer = urand(22000, 32000);
} else MassiveGeyser_Timer -= diff;
//Slam_Timer
if (Slam_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SLAM);
- Slam_Timer = 12000 + rand()%8000;
+ Slam_Timer = urand(12000, 20000);
} else Slam_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
index e01dafd4777..68ae6dbbf0c 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -47,8 +47,8 @@ class boss_grilek : public CreatureScript
void Reset()
{
- Avartar_Timer = 15000 + rand()%10000;
- GroundTremor_Timer = 8000 + rand()%8000;
+ Avartar_Timer = urand(15000, 25000);
+ GroundTremor_Timer = urand(8000, 16000);
}
void EnterCombat(Unit* /*who*/)
@@ -75,14 +75,14 @@ class boss_grilek : public CreatureScript
if (target)
AttackStart(target);
- Avartar_Timer = 25000 + rand()%10000;
+ Avartar_Timer = urand(25000, 35000);
} else Avartar_Timer -= diff;
//GroundTremor_Timer
if (GroundTremor_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_GROUNDTREMOR);
- GroundTremor_Timer = 12000 + rand()%4000;
+ GroundTremor_Timer = urand(12000, 16000);
} else GroundTremor_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
index 77b8955158a..6a1309983c3 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -126,7 +126,7 @@ class boss_hakkar : public CreatureScript
if (CorruptedBlood_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CORRUPTEDBLOOD);
- CorruptedBlood_Timer = 30000 + rand()%15000;
+ CorruptedBlood_Timer = urand(30000, 45000);
} else CorruptedBlood_Timer -= diff;
//CauseInsanity_Timer
@@ -135,7 +135,7 @@ class boss_hakkar : public CreatureScript
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_CAUSEINSANITY);
- CauseInsanity_Timer = 35000 + rand()%8000;
+ CauseInsanity_Timer = urand(35000, 43000);
} else CauseInsanity_Timer -= diff;*/
//WillOfHakkar_Timer
@@ -144,7 +144,7 @@ class boss_hakkar : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_WILLOFHAKKAR);
- WillOfHakkar_Timer = 25000 + rand()%10000;
+ WillOfHakkar_Timer = urand(25000, 35000);
} else WillOfHakkar_Timer -= diff;
if (!Enraged && Enrage_Timer <= diff)
@@ -163,7 +163,7 @@ class boss_hakkar : public CreatureScript
if (AspectOfJeklik_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ASPECT_OF_JEKLIK);
- AspectOfJeklik_Timer = 10000 + rand()%4000;
+ AspectOfJeklik_Timer = urand(10000, 14000);
} else AspectOfJeklik_Timer -= diff;
}
}
@@ -234,7 +234,7 @@ class boss_hakkar : public CreatureScript
DoCast(me, SPELL_ASPECT_OF_ARLOKK);
DoResetThreat();
- AspectOfArlokk_Timer = 10000 + rand()%5000;
+ AspectOfArlokk_Timer = urand(10000, 15000);
} else AspectOfArlokk_Timer -= diff;
}
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
index b8f4b0a50a1..69a4f5dbab5 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -48,9 +48,9 @@ class boss_hazzarah : public CreatureScript
void Reset()
{
- ManaBurn_Timer = 4000 + rand()%6000;
- Sleep_Timer = 10000 + rand()%8000;
- Illusions_Timer = 10000 + rand()%8000;
+ ManaBurn_Timer = urand(4000, 10000);
+ Sleep_Timer = urand(10000, 18000);
+ Illusions_Timer = urand(10000, 18000);
}
void EnterCombat(Unit* /*who*/)
@@ -66,14 +66,14 @@ class boss_hazzarah : public CreatureScript
if (ManaBurn_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MANABURN);
- ManaBurn_Timer = 8000 + rand()%8000;
+ ManaBurn_Timer = urand(8000, 16000);
} else ManaBurn_Timer -= diff;
//Sleep_Timer
if (Sleep_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SLEEP);
- Sleep_Timer = 12000 + rand()%8000;
+ Sleep_Timer = urand(12000, 20000);
} else Sleep_Timer -= diff;
//Illusions_Timer
@@ -93,7 +93,7 @@ class boss_hazzarah : public CreatureScript
Illusion->AI()->AttackStart(target);
}
- Illusions_Timer = 15000 + rand()%10000;
+ Illusions_Timer = urand(15000, 25000);
} else Illusions_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
index fcb492d47f7..d2ac4f3bceb 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -119,19 +119,19 @@ class boss_jeklik : public CreatureScript
AttackStart(target);
}
- Charge_Timer = 15000 + rand()%15000;
+ Charge_Timer = urand(15000, 30000);
} else Charge_Timer -= diff;
if (SonicBurst_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SONICBURST);
- SonicBurst_Timer = 8000 + rand()%5000;
+ SonicBurst_Timer = urand(8000, 13000);
} else SonicBurst_Timer -= diff;
if (Screech_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SCREECH);
- Screech_Timer = 18000 + rand()%8000;
+ Screech_Timer = urand(18000, 26000);
} else Screech_Timer -= diff;
if (SpawnBats_Timer <= diff)
@@ -168,7 +168,7 @@ class boss_jeklik : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_SHADOW_WORD_PAIN);
- ShadowWordPain_Timer = 12000 + rand()%6000;
+ ShadowWordPain_Timer = urand(12000, 18000);
}
}ShadowWordPain_Timer -=diff;
@@ -182,14 +182,14 @@ class boss_jeklik : public CreatureScript
{
me->InterruptNonMeleeSpells(false);
DoCast(me->getVictim(), SPELL_CHAIN_MIND_FLAY);
- ChainMindFlay_Timer = 15000 + rand()%15000;
+ ChainMindFlay_Timer = urand(15000, 30000);
}ChainMindFlay_Timer -=diff;
if (GreaterHeal_Timer <= diff)
{
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_GREATERHEAL);
- GreaterHeal_Timer = 25000 + rand()%10000;
+ GreaterHeal_Timer = urand(25000, 35000);
}GreaterHeal_Timer -=diff;
if (SpawnFlyingBats_Timer <= diff)
@@ -202,7 +202,7 @@ class boss_jeklik : public CreatureScript
if (FlyingBat)
FlyingBat->AI()->AttackStart(target);
- SpawnFlyingBats_Timer = 10000 + rand()%5000;
+ SpawnFlyingBats_Timer = urand(10000, 15000);
} else SpawnFlyingBats_Timer -=diff;
}
else
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
index 7c8e53038ab..132812c932a 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -83,7 +83,7 @@ class boss_jindo : public CreatureScript
if (BrainWashTotem_Timer <= diff)
{
DoCast(me, SPELL_BRAINWASHTOTEM);
- BrainWashTotem_Timer = 18000 + rand()%8000;
+ BrainWashTotem_Timer = urand(18000, 26000);
} else BrainWashTotem_Timer -= diff;
//HealingWard_Timer
@@ -91,7 +91,7 @@ class boss_jindo : public CreatureScript
{
//DoCast(me, SPELL_POWERFULLHEALINGWARD);
me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
- HealingWard_Timer = 14000 + rand()%6000;
+ HealingWard_Timer = urand(14000, 20000);
} else HealingWard_Timer -= diff;
//Hex_Timer
@@ -102,7 +102,7 @@ class boss_jindo : public CreatureScript
if (DoGetThreat(me->getVictim()))
DoModifyThreatPercent(me->getVictim(), -80);
- Hex_Timer = 12000 + rand()%8000;
+ Hex_Timer = urand(12000, 20000);
} else Hex_Timer -= diff;
//Casting the delusion curse with a shade. So shade will attack the same target with the curse.
@@ -117,7 +117,7 @@ class boss_jindo : public CreatureScript
Shade->AI()->AttackStart(target);
}
- Delusions_Timer = 4000 + rand()%8000;
+ Delusions_Timer = urand(4000, 12000);
} else Delusions_Timer -= diff;
//Teleporting a random gamer and spawning 9 skeletons that will attack this gamer
@@ -162,7 +162,7 @@ class boss_jindo : public CreatureScript
Skeletons->AI()->AttackStart(target);
}
- Teleport_Timer = 15000 + rand()%8000;
+ Teleport_Timer = urand(15000, 23000);
} else Teleport_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
index f70c764f306..10708cd7f95 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -91,9 +91,9 @@ class boss_mandokir : public CreatureScript
MortalStrike_Timer = 1000;
Check_Timer = 1000;
- targetX = 0.0;
- targetY = 0.0;
- targetZ = 0.0;
+ targetX = 0.0f;
+ targetY = 0.0f;
+ targetZ = 0.0f;
TargetInRange = 0;
WatchTarget = 0;
@@ -149,7 +149,7 @@ class boss_mandokir : public CreatureScript
if (!CombatStart)
{
//At combat Start Mandokir is mounted so we must unmount it first
- me->Unmount();
+ me->Dismount();
//And summon his raptor
me->SummonCreature(14988, me->getVictim()->GetPositionX(), me->getVictim()->GetPositionY(), me->getVictim()->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 35000);
@@ -325,7 +325,7 @@ class mob_ohgan : public CreatureScript
if (SunderArmor_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SUNDERARMOR);
- SunderArmor_Timer = 10000 + rand()%5000;
+ SunderArmor_Timer = urand(10000, 15000);
} else SunderArmor_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
index f6704a50e6f..38d9be78f2a 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -105,13 +105,13 @@ class boss_marli : public CreatureScript
if (PoisonVolley_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_POISONVOLLEY);
- PoisonVolley_Timer = 10000 + rand()%10000;
+ PoisonVolley_Timer = urand(10000, 20000);
} else PoisonVolley_Timer -= diff;
if (!PhaseTwo && Aspect_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ASPECT_OF_MARLI);
- Aspect_Timer = 13000 + rand()%5000;
+ Aspect_Timer = urand(13000, 18000);
} else Aspect_Timer -= diff;
if (!Spawned && SpawnStartSpiders_Timer <= diff)
@@ -149,7 +149,7 @@ class boss_marli : public CreatureScript
Creature* Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
if (Spider)
Spider->AI()->AttackStart(target);
- SpawnSpider_Timer = 12000 + rand()%5000;
+ SpawnSpider_Timer = urand(12000, 17000);
} else SpawnSpider_Timer -= diff;
if (!PhaseTwo && Transform_Timer <= diff)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
index bbff6a55ffb..f988d0df77a 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -55,11 +55,11 @@ class boss_renataki : public CreatureScript
void Reset()
{
- Invisible_Timer = 8000 + rand()%10000;
+ Invisible_Timer = urand(8000, 18000);
Ambush_Timer = 3000;
Visible_Timer = 4000;
- Aggro_Timer = 15000 + rand()%10000;
- ThousandBlades_Timer = 4000 + rand()%4000;
+ Aggro_Timer = urand(15000, 25000);
+ ThousandBlades_Timer = urand(4000, 8000);
Invisible = false;
Ambushed = false;
@@ -85,7 +85,7 @@ class boss_renataki : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Invisible = true;
- Invisible_Timer = 15000 + rand()%15000;
+ Invisible_Timer = urand(15000, 30000);
} else Invisible_Timer -= diff;
if (Invisible)
@@ -135,13 +135,13 @@ class boss_renataki : public CreatureScript
if (target)
AttackStart(target);
- Aggro_Timer = 7000 + rand()%13000;
+ Aggro_Timer = urand(7000, 20000);
} else Aggro_Timer -= diff;
if (ThousandBlades_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_THOUSANDBLADES);
- ThousandBlades_Timer = 7000 + rand()%5000;
+ ThousandBlades_Timer = urand(7000, 12000);
} else ThousandBlades_Timer -= diff;
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
index 4fbb5cd1109..4185ba2f3e7 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -167,13 +167,13 @@ class boss_thekal : public CreatureScript
if (!PhaseTwo && MortalCleave_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MORTALCLEAVE);
- MortalCleave_Timer = 15000 + rand()%5000;
+ MortalCleave_Timer = urand(15000, 20000);
} else MortalCleave_Timer -= diff;
if (!PhaseTwo && Silence_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SILENCE);
- Silence_Timer = 20000 + rand()%5000;
+ Silence_Timer = urand(20000, 25000);
} else Silence_Timer -= diff;
if (!PhaseTwo && !WasDead && !HealthAbovePct(5))
@@ -226,7 +226,7 @@ class boss_thekal : public CreatureScript
AttackStart(target);
}
- Charge_Timer = 15000 + rand()%7000;
+ Charge_Timer = urand(15000, 22000);
} else Charge_Timer -= diff;
if (Frenzy_Timer <= diff)
@@ -238,13 +238,13 @@ class boss_thekal : public CreatureScript
if (ForcePunch_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SILENCE);
- ForcePunch_Timer = 16000 + rand()%5000;
+ ForcePunch_Timer = urand(16000, 21000);
} else ForcePunch_Timer -= diff;
if (SummonTigers_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SUMMONTIGERS);
- SummonTigers_Timer = 10000 + rand()%4000;
+ SummonTigers_Timer = urand(10000, 14000);
} else SummonTigers_Timer -= diff;
if (HealthBelowPct(11) && !Enraged)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
index b0bbc0c6c79..3cb0cc2120a 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
index 7288d063c21..702a69207ba 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -47,8 +47,8 @@ class boss_wushoolay : public CreatureScript
void Reset()
{
- LightningCloud_Timer = 5000 + rand()%5000;
- LightningWave_Timer = 8000 + rand()%8000;
+ LightningCloud_Timer = urand(5000, 10000);
+ LightningWave_Timer = urand(8000, 16000);
}
void EnterCombat(Unit* /*who*/)
@@ -64,7 +64,7 @@ class boss_wushoolay : public CreatureScript
if (LightningCloud_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_LIGHTNINGCLOUD);
- LightningCloud_Timer = 15000 + rand()%5000;
+ LightningCloud_Timer = urand(15000, 20000);
} else LightningCloud_Timer -= diff;
//LightningWave_Timer
@@ -74,7 +74,7 @@ class boss_wushoolay : public CreatureScript
target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target) DoCast(target, SPELL_LIGHTNINGWAVE);
- LightningWave_Timer = 12000 + rand()%4000;
+ LightningWave_Timer = urand(12000, 16000);
} else LightningWave_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
index e059b7945ee..e3dd5d5933b 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
index 53dfbd9e93d..d127680cec5 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/alterac_mountains.cpp b/src/server/scripts/EasternKingdoms/alterac_mountains.cpp
index 36daf41ec78..e4b24dc00ee 100644
--- a/src/server/scripts/EasternKingdoms/alterac_mountains.cpp
+++ b/src/server/scripts/EasternKingdoms/alterac_mountains.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/arathi_highlands.cpp
index 0ce940723cb..8b6cbf26de2 100644
--- a/src/server/scripts/EasternKingdoms/arathi_highlands.cpp
+++ b/src/server/scripts/EasternKingdoms/arathi_highlands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/blasted_lands.cpp b/src/server/scripts/EasternKingdoms/blasted_lands.cpp
index 048fd8dfd2a..1e34051db28 100644
--- a/src/server/scripts/EasternKingdoms/blasted_lands.cpp
+++ b/src/server/scripts/EasternKingdoms/blasted_lands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -72,6 +72,13 @@ public:
/*######
## npc_fallen_hero_of_horde
######*/
+
+enum HeroesOfOld
+{
+ QUEST_HEROES_OF_OLD = 2702,
+ NPC_THUND_SPLITHOOF = 7750,
+};
+
#define GOSSIP_H_F1 "Why are you here?"
#define GOSSIP_H_F2 "Continue story..."
@@ -159,6 +166,14 @@ public:
return true;
}
+ bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest)
+ {
+ if (quest->GetQuestId() == QUEST_HEROES_OF_OLD)
+ creature->SummonCreature(NPC_THUND_SPLITHOOF, -10630.3f, -2987.05f, 28.96f, 4.54f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 9000000);
+
+ return true;
+ }
+
};
void AddSC_blasted_lands()
diff --git a/src/server/scripts/EasternKingdoms/boss_kruul.cpp b/src/server/scripts/EasternKingdoms/boss_kruul.cpp
index 3167eadc5fe..126f55838b9 100644
--- a/src/server/scripts/EasternKingdoms/boss_kruul.cpp
+++ b/src/server/scripts/EasternKingdoms/boss_kruul.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/burning_steppes.cpp b/src/server/scripts/EasternKingdoms/burning_steppes.cpp
index 885cd8b00af..1d2725b10ee 100644
--- a/src/server/scripts/EasternKingdoms/burning_steppes.cpp
+++ b/src/server/scripts/EasternKingdoms/burning_steppes.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/duskwood.cpp b/src/server/scripts/EasternKingdoms/duskwood.cpp
index 7487ddbc548..872137ee937 100644
--- a/src/server/scripts/EasternKingdoms/duskwood.cpp
+++ b/src/server/scripts/EasternKingdoms/duskwood.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/eastern_plaguelands.cpp
index c30d5db0244..2b4bb61c603 100644
--- a/src/server/scripts/EasternKingdoms/eastern_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/eastern_plaguelands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/eversong_woods.cpp b/src/server/scripts/EasternKingdoms/eversong_woods.cpp
index 10b7066068b..7c09a740d26 100644
--- a/src/server/scripts/EasternKingdoms/eversong_woods.cpp
+++ b/src/server/scripts/EasternKingdoms/eversong_woods.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -35,91 +35,6 @@ EndContentData */
#include "ScriptedEscortAI.h"
/*######
-## npc_prospector_anvilward
-######*/
-
-#define GOSSIP_HELLO "I need a moment of your time, sir."
-#define GOSSIP_SELECT "Why... yes, of course. I've something to show you right inside this building, Mr. Anvilward."
-
-enum eProspectorAnvilward
-{
- SAY_ANVIL1 = -1000209,
- SAY_ANVIL2 = -1000210,
- QUEST_THE_DWARVEN_SPY = 8483,
-};
-
-class npc_prospector_anvilward : public CreatureScript
-{
-public:
- npc_prospector_anvilward() : CreatureScript("npc_prospector_anvilward") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
- {
- case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->SEND_GOSSIP_MENU(8240, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- player->CLOSE_GOSSIP_MENU();
- if (npc_escortAI* pEscortAI = CAST_AI(npc_prospector_anvilward::npc_prospector_anvilwardAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature)
- {
- if (player->GetQuestStatus(QUEST_THE_DWARVEN_SPY) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-
- player->SEND_GOSSIP_MENU(8239, creature->GetGUID());
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_prospector_anvilwardAI(creature);
- }
-
- struct npc_prospector_anvilwardAI : public npc_escortAI
- {
- // CreatureAI functions
- npc_prospector_anvilwardAI(Creature* c) : npc_escortAI(c) {}
-
- // Pure Virtual Functions
- void WaypointReached(uint32 i)
- {
- Player* player = GetPlayerForEscort();
-
- if (!player)
- return;
-
- switch (i)
- {
- case 0: DoScriptText(SAY_ANVIL1, me, player); break;
- case 5: DoScriptText(SAY_ANVIL2, me, player); break;
- case 6: me->setFaction(24); break;
- }
- }
-
- void Reset()
- {
- me->RestoreFaction();
- }
-
- void JustDied(Unit* /*killer*/)
- {
- me->RestoreFaction();
- }
- };
-
-};
-
-/*######
## Quest 9686 Second Trial
######*/
@@ -289,7 +204,7 @@ public:
if (timerJustice <= diff)
{
DoCast(me, SPELL_SEAL_OF_JUSTICE);
- timerJustice = 10000 + rand()%10000;
+ timerJustice = urand(10000, 20000);
}
else
timerJustice -= diff;
@@ -300,7 +215,7 @@ public:
if (timerJudLight <= diff)
{
DoCast(me, SPELL_JUDGEMENT_OF_LIGHT);
- timerJudLight = 10000 + rand()%10000;
+ timerJudLight = urand(10000, 20000);
}
else
timerJudLight -= diff;
@@ -311,7 +226,7 @@ public:
if (timerCommand <= diff)
{
DoCast(me, SPELL_SEAL_OF_COMMAND);
- timerCommand = 20000 + rand()%20000;
+ timerCommand = urand(20000, 40000);
}
else
timerCommand -= diff;
@@ -711,7 +626,6 @@ public:
void AddSC_eversong_woods()
{
- new npc_prospector_anvilward();
new npc_second_trial_controller();
new npc_second_trial_paladin();
new go_second_trial();
diff --git a/src/server/scripts/EasternKingdoms/ghostlands.cpp b/src/server/scripts/EasternKingdoms/ghostlands.cpp
index 655ad4514fe..a5a8bd45cfd 100644
--- a/src/server/scripts/EasternKingdoms/ghostlands.cpp
+++ b/src/server/scripts/EasternKingdoms/ghostlands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/hinterlands.cpp b/src/server/scripts/EasternKingdoms/hinterlands.cpp
index 89adfee87c4..7021deeae75 100644
--- a/src/server/scripts/EasternKingdoms/hinterlands.cpp
+++ b/src/server/scripts/EasternKingdoms/hinterlands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/ironforge.cpp b/src/server/scripts/EasternKingdoms/ironforge.cpp
index 7b37ddb8991..5a0ee3c5630 100644
--- a/src/server/scripts/EasternKingdoms/ironforge.cpp
+++ b/src/server/scripts/EasternKingdoms/ironforge.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp
index 6b16eb2937b..f2095de49c3 100644
--- a/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp
+++ b/src/server/scripts/EasternKingdoms/isle_of_queldanas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/loch_modan.cpp b/src/server/scripts/EasternKingdoms/loch_modan.cpp
index 25156201e95..9ce9de4381a 100644
--- a/src/server/scripts/EasternKingdoms/loch_modan.cpp
+++ b/src/server/scripts/EasternKingdoms/loch_modan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/redridge_mountains.cpp
index 6e5429582e7..d7b00af33e8 100644
--- a/src/server/scripts/EasternKingdoms/redridge_mountains.cpp
+++ b/src/server/scripts/EasternKingdoms/redridge_mountains.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/EasternKingdoms/searing_gorge.cpp b/src/server/scripts/EasternKingdoms/searing_gorge.cpp
index eb5b26a94a0..74172dda743 100644
--- a/src/server/scripts/EasternKingdoms/searing_gorge.cpp
+++ b/src/server/scripts/EasternKingdoms/searing_gorge.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/silvermoon_city.cpp b/src/server/scripts/EasternKingdoms/silvermoon_city.cpp
index c4e105d3bee..8d04e92b9b8 100644
--- a/src/server/scripts/EasternKingdoms/silvermoon_city.cpp
+++ b/src/server/scripts/EasternKingdoms/silvermoon_city.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/silverpine_forest.cpp
index 68ab0432bb3..e166013a4b2 100644
--- a/src/server/scripts/EasternKingdoms/silverpine_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/silverpine_forest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/stormwind_city.cpp b/src/server/scripts/EasternKingdoms/stormwind_city.cpp
index 09533ab4ccb..4d43e4adefe 100644
--- a/src/server/scripts/EasternKingdoms/stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/stormwind_city.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/stranglethorn_vale.cpp
index 4e4a077636b..a6effe29ff7 100644
--- a/src/server/scripts/EasternKingdoms/stranglethorn_vale.cpp
+++ b/src/server/scripts/EasternKingdoms/stranglethorn_vale.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp b/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp
index 71359a07afa..ef6fccd8bde 100644
--- a/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp
+++ b/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/tirisfal_glades.cpp b/src/server/scripts/EasternKingdoms/tirisfal_glades.cpp
index e6c528e4c89..6cbf28f171c 100644
--- a/src/server/scripts/EasternKingdoms/tirisfal_glades.cpp
+++ b/src/server/scripts/EasternKingdoms/tirisfal_glades.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/undercity.cpp b/src/server/scripts/EasternKingdoms/undercity.cpp
index b8f2499c4e6..f1c0fba2e29 100644
--- a/src/server/scripts/EasternKingdoms/undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/undercity.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/western_plaguelands.cpp
index 06c64b76242..a04a94f73b1 100644
--- a/src/server/scripts/EasternKingdoms/western_plaguelands.cpp
+++ b/src/server/scripts/EasternKingdoms/western_plaguelands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/westfall.cpp b/src/server/scripts/EasternKingdoms/westfall.cpp
index e82da353cd0..34cc8559a71 100644
--- a/src/server/scripts/EasternKingdoms/westfall.cpp
+++ b/src/server/scripts/EasternKingdoms/westfall.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/EasternKingdoms/wetlands.cpp b/src/server/scripts/EasternKingdoms/wetlands.cpp
index cb5fa6782ac..3b196720242 100644
--- a/src/server/scripts/EasternKingdoms/wetlands.cpp
+++ b/src/server/scripts/EasternKingdoms/wetlands.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Examples/example_commandscript.cpp b/src/server/scripts/Examples/example_commandscript.cpp
index 8513fbf8cf2..6b7a3d8def7 100644
--- a/src/server/scripts/Examples/example_commandscript.cpp
+++ b/src/server/scripts/Examples/example_commandscript.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Examples/example_creature.cpp b/src/server/scripts/Examples/example_creature.cpp
index 1a030728218..f1b336f07f9 100644
--- a/src/server/scripts/Examples/example_creature.cpp
+++ b/src/server/scripts/Examples/example_creature.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Examples/example_escort.cpp b/src/server/scripts/Examples/example_escort.cpp
index dfac4321a23..cae09266b49 100644
--- a/src/server/scripts/Examples/example_escort.cpp
+++ b/src/server/scripts/Examples/example_escort.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Examples/example_gossip_codebox.cpp b/src/server/scripts/Examples/example_gossip_codebox.cpp
index 13680a8ea9c..c288123f117 100644
--- a/src/server/scripts/Examples/example_gossip_codebox.cpp
+++ b/src/server/scripts/Examples/example_gossip_codebox.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Examples/example_misc.cpp b/src/server/scripts/Examples/example_misc.cpp
index 8619d03df30..d83a00ed82f 100644
--- a/src/server/scripts/Examples/example_misc.cpp
+++ b/src/server/scripts/Examples/example_misc.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp
index 372abc45268..b1a8f17d16a 100644
--- a/src/server/scripts/Examples/example_spell.cpp
+++ b/src/server/scripts/Examples/example_spell.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -76,6 +76,38 @@ class spell_ex_5581 : public SpellScriptLoader
delete localVariable2;
}
+ void HandleBeforeCast()
+ {
+ // this hook is executed before anything about casting the spell is done
+ // after this hook is executed all the machinery starts
+ sLog->outString("Caster just finished preparing the spell (cast bar has expired)");
+ }
+
+ void HandleOnCast()
+ {
+ // cast is validated and spell targets are selected at this moment
+ // this is a last place when the spell can be safely interrupted
+ sLog->outString("Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
+ }
+
+ void HandleAfterCast()
+ {
+ sLog->outString("All immediate actions for the spell are finished now");
+ // this is a safe for triggering additional effects for a spell without interfering
+ // with visuals or with other effects of the spell
+ //GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
+ }
+
+ SpellCastResult CheckRequirement()
+ {
+ // in this hook you can add additional requirements for spell caster (and throw a client error if reqs're not passed)
+ // in this case we're disallowing to select non-player as a target of the spell
+ //if (!GetTargetUnit() || GetTargetUnit()->ToPlayer())
+ //return SPELL_FAILED_BAD_TARGETS;
+ return SPELL_CAST_OK;
+ }
+
+
void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
sLog->outString("Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
@@ -127,7 +159,11 @@ class spell_ex_5581 : public SpellScriptLoader
// register functions used in spell script - names of these functions do not matter
void Register()
{
- // we're registering our function here
+ // we're registering our functions here
+ BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
+ OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
+ AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
+ OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// function HandleDummy will be called when spell is launched, independant from targets selected for spell, just before default effect 0 launch handler
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// function HandleDummy will be called when spell is launched at target, just before default effect 0 launch at target handler
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
index 4aa2cea958b..29029803369 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h
index 1a14ac38ea4..21768b15895 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
index 8f1d0025c5b..87e8478532d 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
index a03c0a01d41..e7822a6edb3 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
index 0a282dafac3..5823ed15ed5 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
index abfb91d5d6e..8dd4e60f281 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
index 6ea2b21fe65..6bc179bba40 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
index f4252ad3d45..a5239e5a649 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
index 3f9bca5925b..2885276f2b6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
index eabfbfc024c..7d1b292fd12 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
index 1537b6eed3b..3f39b61192a 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
index f681b245a42..12485293650 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -105,15 +105,15 @@ public:
ai->EnterEvadeMode();
ai->Spells[0].SpellId = SPELL_BLIZZARD;
- ai->Spells[0].Cooldown = 15000 + rand()%20000;
+ ai->Spells[0].Cooldown = urand(15000, 35000);
ai->Spells[0].TargetType = TARGETTYPE_RANDOM;
ai->Spells[1].SpellId = SPELL_PYROBLAST;
- ai->Spells[1].Cooldown = 5500 + rand()%4000;
+ ai->Spells[1].Cooldown = urand(5500, 9500);
ai->Spells[1].TargetType = TARGETTYPE_RANDOM;
ai->Spells[2].SpellId = SPELL_SUMMON_ELEMENTALS;
- ai->Spells[2].Cooldown = 15000 + rand()%30000;
+ ai->Spells[2].Cooldown = urand(15000, 45000);
ai->Spells[2].TargetType = TARGETTYPE_SELF;
return ai;
@@ -187,11 +187,11 @@ public:
ai->EnterEvadeMode();
ai->Spells[0].SpellId = SPELL_CHAIN_LIGHTNING;
- ai->Spells[0].Cooldown = 3000 + rand()%5000;
+ ai->Spells[0].Cooldown = urand(3000, 8000);
ai->Spells[0].TargetType = TARGETTYPE_VICTIM;
ai->Spells[1].SpellId = SPELL_SUMMON_DIRE_WOLF;
- ai->Spells[1].Cooldown = 6000 + rand()%35000;
+ ai->Spells[1].Cooldown = urand(6000, 41000);
ai->Spells[1].TargetType = TARGETTYPE_RANDOM;
return ai;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h
index 278bf9f68cf..e045d3cbf05 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
index 6186369a3a0..0caec3c7069 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -459,7 +459,9 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
creature = me->SummonCreature(entry, SpawnPointSpecial[SPAWN_NEAR_TOWER][0]+irand(-20, 20), SpawnPointSpecial[SPAWN_NEAR_TOWER][1]+irand(-20, 20), SpawnPointSpecial[SPAWN_NEAR_TOWER][2]+irand(-10, 10), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
if (creature)
CAST_AI(hyjal_trashAI, creature->AI())->useFlyPath = true;
- }else{//summon at gate
+ }
+ else
+ {//summon at gate
creature = me->SummonCreature(entry, SpawnPointSpecial[SPAWN_GARG_GATE][0]+irand(-10, 10), SpawnPointSpecial[SPAWN_GARG_GATE][1]+irand(-10, 10), SpawnPointSpecial[SPAWN_GARG_GATE][2]+irand(-10, 10), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
}
break;
@@ -910,6 +912,7 @@ void hyjalAI::UpdateAI(const uint32 diff)
DoMeleeAttackIfReady();
}
+
void hyjalAI::JustDied(Unit* /*killer*/)
{
if (IsDummy)return;
@@ -932,23 +935,20 @@ void hyjalAI::JustDied(Unit* /*killer*/)
instance->SetData(DATA_RESET_RAIDDAMAGE, 0);//reset damage on die
}
}
+
void hyjalAI::HideNearPos(float x, float y)
{
- CellPair pair(Trinity::ComputeCellPair(x, y));
+ CellCoord pair(Trinity::ComputeCellCoord(x, y));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
// First get all creatures.
std::list<Creature*> creatures;
Trinity::AllFriendlyCreaturesInGrid creature_check(me);
Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
- TypeContainerVisitor
- <Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid>,
- GridTypeMapContainer> creature_visitor(creature_searcher);
- // Get Creatures
- cell.Visit(pair, creature_visitor, *(me->GetMap()));
+ TypeContainerVisitor <Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid>, GridTypeMapContainer> creature_visitor(creature_searcher);
+ cell.Visit(pair, creature_visitor, *(me->GetMap()), *me, me->GetGridActivationRange());
if (!creatures.empty())
{
@@ -959,18 +959,19 @@ void hyjalAI::HideNearPos(float x, float y)
}
}
}
+
void hyjalAI::RespawnNearPos(float x, float y)
{
- CellPair p(Trinity::ComputeCellPair(x, y));
+ CellCoord p(Trinity::ComputeCellCoord(x, y));
Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
Trinity::RespawnDo u_do;
Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(me, u_do);
TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::RespawnDo>, GridTypeMapContainer > obj_worker(worker);
- cell.Visit(p, obj_worker, *me->GetMap());
+ cell.Visit(p, obj_worker, *me->GetMap(), *me, me->GetGridActivationRange());
}
+
void hyjalAI::WaypointReached(uint32 i)
{
if (i == 1 || (i == 0 && me->GetEntry() == THRALL))
@@ -992,9 +993,8 @@ void hyjalAI::WaypointReached(uint32 i)
}
//do some talking
//all alive guards walk near here
- CellPair pair(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord pair(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
// First get all creatures.
@@ -1005,7 +1005,7 @@ void hyjalAI::WaypointReached(uint32 i)
<Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid>,
GridTypeMapContainer> creature_visitor(creature_searcher);
- cell.Visit(pair, creature_visitor, *(me->GetMap()));
+ cell.Visit(pair, creature_visitor, *(me->GetMap()), *me, me->GetGridActivationRange());
if (!creatures.empty())
{
@@ -1034,9 +1034,8 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
{
if (TeleportTimer <= diff)
{
- CellPair pair(Trinity::ComputeCellPair(me->GetPositionX(), me->GetPositionY()));
+ CellCoord pair(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(pair);
- cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
std::list<Creature*> creatures;
@@ -1046,7 +1045,7 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
<Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid>,
GridTypeMapContainer> creature_visitor(creature_searcher);
- cell.Visit(pair, creature_visitor, *(me->GetMap()));
+ cell.Visit(pair, creature_visitor, *(me->GetMap()), *me, me->GetGridActivationRange());
if (!creatures.empty())
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
index 9f37df3063f..d91c2ead123 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
index 748d0dfa071..6466780f024 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h
index e2017b1f260..047c0dc308e 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
index 0e5233d6620..b87379d599f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -205,9 +205,9 @@ public:
{
if (i->getSource())
{
- WorldPacket data(SMSG_MESSAGECHAT, 200);
- unit->BuildMonsterChat(&data, CHAT_MSG_MONSTER_YELL, YELL_EFFORTS, 0, YELL_EFFORTS_NAME, i->getSource()->GetGUID());
- i->getSource()->GetSession()->SendPacket(&data);
+ WorldPacket packet(SMSG_MESSAGECHAT, 200);
+ unit->BuildMonsterChat(&packet, CHAT_MSG_MONSTER_YELL, YELL_EFFORTS, 0, YELL_EFFORTS_NAME, i->getSource()->GetGUID());
+ i->getSource()->GetSession()->SendPacket(&packet);
WorldPacket data2(SMSG_PLAY_SOUND, 4);
data2 << 10986;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
index 8354f1d873c..35c1848456b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp
index 0b8faa71299..7947c9be48d 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
index 1a43472365a..b61838a253a 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -34,7 +34,8 @@ enum Spells
H_SPELL_MIND_BLAST = 58850,
SPELL_SLEEP = 52721, //Puts an enemy to sleep for up to 10 sec. Any damage caused will awaken the target.
H_SPELL_SLEEP = 58849,
- SPELL_VAMPIRIC_TOUCH = 52723 //Heals the caster for half the damage dealt by a melee attack.
+ SPELL_VAMPIRIC_TOUCH = 52723, //Heals the caster for half the damage dealt by a melee attack.
+ SPELL_KILL_CREDIT = 58630 // Non-existing spell as encounter credit, created in spell_dbc
};
enum Yells
@@ -237,9 +238,8 @@ public:
{
instance->SetData(DATA_MAL_GANIS_EVENT, DONE);
- // give achievement credit to players. criteria use spell 58630 which doesn't exist.
- if (instance)
- instance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 58630);
+ // give achievement credit and LFG rewards to players. criteria use spell 58630 which doesn't exist, but it was created in spell_dbc
+ DoCast(me, SPELL_KILL_CREDIT);
}
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
index 4c00dd5bb2b..c36b98ed510 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
index 246e4bee24e..7a5e0d06158 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
index 02f9435db49..ad0a36da84e 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -579,13 +579,16 @@ public:
{
//After reset
case 0:
- if (Unit* pJaina = GetClosestCreatureWithEntry(me, NPC_JAINA, 50.0f))
- uiJainaGUID = pJaina->GetGUID();
- else if (Unit* pJaina = me->SummonCreature(NPC_JAINA, 1895.48f, 1292.66f, 143.706f, 0.023475f, TEMPSUMMON_DEAD_DESPAWN, 180000))
+ {
+ Unit* pJaina = GetClosestCreatureWithEntry(me, NPC_JAINA, 50.0f);
+ if (!pJaina)
+ pJaina = me->SummonCreature(NPC_JAINA, 1895.48f, 1292.66f, 143.706f, 0.023475f, TEMPSUMMON_DEAD_DESPAWN, 180000);
+ if (pJaina)
uiJainaGUID = pJaina->GetGUID();
bStepping = false;
JumpToNextStep(0);
break;
+ }
//After waypoint 0
case 1:
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
@@ -829,9 +832,10 @@ public:
case 37:
if (Creature* pMalganis = Unit::GetCreature(*me, uiMalganisGUID))
{
- if (Creature* pZombie = GetClosestCreatureWithEntry(pMalganis, NPC_CITY_MAN, 100.0f))
- pZombie->UpdateEntry(NPC_ZOMBIE, 0);
- else if (Creature* pZombie = GetClosestCreatureWithEntry(pMalganis, NPC_CITY_MAN2, 100.0f))
+ Creature* pZombie = GetClosestCreatureWithEntry(pMalganis, NPC_CITY_MAN, 100.0f);
+ if (!pZombie)
+ pZombie = GetClosestCreatureWithEntry(pMalganis, NPC_CITY_MAN2, 100.0f);
+ if (pZombie)
pZombie->UpdateEntry(NPC_ZOMBIE, 0);
else //There's no one else to transform
uiStep++;
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h
index ed0f237d600..86014940b91 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
index 168d78baa87..9a91e1e232b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_aeonus.cpp
index 30f3c4c056c..b895b56379c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_aeonus.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_aeonus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_chrono_lord_deja.cpp
index aa775e0947d..99e43495c96 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_chrono_lord_deja.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_chrono_lord_deja.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_temporus.cpp
index 9e62244498f..9b272491717 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_temporus.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/boss_temporus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp
index 653781a1d3f..4ff34fc3349 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.h b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.h
index a22f83ae0ed..dc208d8ab09 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/instance_dark_portal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/instance_dark_portal.cpp
index 659a22178f9..dabf3db13cb 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/instance_dark_portal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/instance_dark_portal.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
index f09308a6724..89877f2cc7b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -68,9 +68,9 @@ public:
void Reset()
{
- Holy_Light_Timer = 20000 + rand()%10000;
+ Holy_Light_Timer = urand(20000, 30000);
Cleanse_Timer = 10000;
- HammerOfJustice_Timer = 20000 + rand()%15000;
+ HammerOfJustice_Timer = urand(20000, 35000);
HolyShield_Timer = 240000;
DevotionAura_Timer = 3000;
Consecration_Timer = 8000;
@@ -134,14 +134,14 @@ public:
if (DevotionAura_Timer <= diff)
{
DoCast(me, SPELL_DEVOTION_AURA);
- DevotionAura_Timer = 45000 + rand()%10000;
+ DevotionAura_Timer = urand(45000, 55000);
} else DevotionAura_Timer -= diff;
//Consecration
if (Consecration_Timer <= diff)
{
//DoCast(me->getVictim(), SPELL_CONSECRATION);
- Consecration_Timer = 5000 + rand()%5000;
+ Consecration_Timer = urand(5000, 10000);
} else Consecration_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
index 5b201e50bcb..8307eb44013 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -68,8 +68,8 @@ public:
void Reset()
{
- SandBreath_Timer = 8000 + rand()%8000;
- ImpendingDeath_Timer = 25000 + rand()%5000;
+ SandBreath_Timer = urand(8000, 16000);
+ ImpendingDeath_Timer = urand(25000, 30000);
WingBuffet_Timer = 35000;
Mda_Timer = 40000;
}
@@ -108,7 +108,7 @@ public:
DoScriptText(RAND(SAY_BREATH1, SAY_BREATH2), me);
- SandBreath_Timer = 10000 + rand()%10000;
+ SandBreath_Timer = urand(10000, 20000);
} else SandBreath_Timer -= diff;
if (ImpendingDeath_Timer <= diff)
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
index 28f095dbaf8..1f0ba93645f 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
index cdcbbf04c60..b179a15e878 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index 1f0342b3804..b2c4911a20c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -498,7 +498,7 @@ public:
}
void DoUnmount()
{
- me->Unmount();
+ me->Dismount();
me->SetSpeed(MOVE_RUN, SPEED_RUN);
}
void EnterCombat(Unit* /*who*/)
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h
index a4f3a9a86d2..2a7b4703f14 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
index 8b6b1bc26dc..0010db68673 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
index 1f9dbf75dcf..fdb5207acd5 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
index 9fc4f76d8e5..2d4c817ffe2 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
index caa2327511c..cb2c7b320e0 100644
--- a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
+++ b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
index c76cc790274..3b42fc3ed7b 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
index a727164564a..1c599ce7c6f 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h b/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h
index bd163b2d484..eaf6cac43af 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
index 7ade38dba8e..d0da864809c 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -61,7 +61,7 @@ public:
{
AmnenarsWrath_Timer = 8000;
FrostBolt_Timer = 1000;
- FrostNova_Timer = 10000 + rand()%5000;
+ FrostNova_Timer = urand(10000, 15000);
Spectrals30 = false;
Spectrals60 = false;
Hp = false;
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
index 764b9a1523f..8b138468f4c 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
index 9ad593da2ed..ac9bf524e7a 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
index 8b801c7d5e9..fde1e7b277d 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
index b747fa31f36..98395305d57 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
index 496d7d3f3dd..1bc0a3b7a19 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h
index 4f54324536b..abc1afb58d8 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
index a85dfaa219d..d729764ae01 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
index e49099238ae..459dc87a9b8 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
index 7b084a3b5fc..b295780cfc9 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
index 030da10e515..3dc7660985f 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 9e6d0d58392..91c0110abd5 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
index 09972388212..ea137026ec2 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
index 58080d766f5..d4549242a4c 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
index 8386a91a075..14d129a7468 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
index 1a9d3f7a557..eaeec50ef7b 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -65,8 +65,8 @@ public:
void Reset()
{
- Cleave_Timer = 4000 + rand()%4000;
- ToxicVolley_Timer = 6000 + rand()%6000;
+ Cleave_Timer = urand(4000, 8000);
+ ToxicVolley_Timer = urand(6000, 12000);
Check_Timer = 2000;
VemDead = false;
@@ -98,14 +98,14 @@ public:
if (Cleave_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
- Cleave_Timer = 5000 + rand()%7000;
+ Cleave_Timer = urand(5000, 12000);
} else Cleave_Timer -= diff;
//ToxicVolley_Timer
if (ToxicVolley_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_TOXIC_VOLLEY);
- ToxicVolley_Timer = 10000 + rand()%5000;
+ ToxicVolley_Timer = urand(10000, 15000);
} else ToxicVolley_Timer -= diff;
if (!HealthAbovePct(5) && !Death)
@@ -161,8 +161,8 @@ public:
void Reset()
{
- Charge_Timer = 15000 + rand()%12000;
- KnockBack_Timer = 8000 + rand()%12000;
+ Charge_Timer = urand(15000, 27000);
+ KnockBack_Timer = urand(8000, 20000);
Enrage_Timer = 120000;
Enraged = false;
@@ -202,7 +202,7 @@ public:
AttackStart(target);
}
- Charge_Timer = 8000 + rand()%8000;
+ Charge_Timer = urand(8000, 16000);
} else Charge_Timer -= diff;
//KnockBack_Timer
@@ -211,7 +211,7 @@ public:
DoCast(me->getVictim(), SPELL_KNOCKBACK);
if (DoGetThreat(me->getVictim()))
DoModifyThreatPercent(me->getVictim(), -80);
- KnockBack_Timer = 15000 + rand()%10000;
+ KnockBack_Timer = urand(15000, 25000);
} else KnockBack_Timer -= diff;
//Enrage_Timer
@@ -254,8 +254,8 @@ public:
void Reset()
{
- Heal_Timer = 25000 + rand()%15000;
- Fear_Timer = 12000 + rand()%12000;
+ Heal_Timer = urand(25000, 40000);
+ Fear_Timer = urand(12000, 24000);
Check_Timer = 2000;
VemDead = false;
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index 4cc1069b838..a6409ca056f 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -680,12 +680,8 @@ public:
//Place all units in threat list on outside of stomach
Stomach_Map.clear();
- std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
- for (; i != me->getThreatManager().getThreatList().end(); ++i)
- {
- //Outside stomach
- Stomach_Map[(*i)->getUnitGuid()] = false;
- }
+ for (std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin(); i != me->getThreatManager().getThreatList().end(); ++i)
+ Stomach_Map[(*i)->getUnitGuid()] = false; //Outside stomach
//Spawn 2 flesh tentacles
FleshTentaclesKilled = 0;
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
index 9d83bfea866..9ccff0bff48 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -63,9 +63,9 @@ public:
void Reset()
{
- MortalWound_Timer = 10000 + rand()%5000;
- SpawnHatchlings_Timer = 6000 + rand()%6000;
- SpawnSpawns_Timer = 15000 + rand()%30000;
+ MortalWound_Timer = urand(10000, 15000);
+ SpawnHatchlings_Timer = urand(6000, 12000);
+ SpawnSpawns_Timer = urand(15000, 45000);
}
void SummonSpawn(Unit* victim)
@@ -106,7 +106,7 @@ public:
if (MortalWound_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MORTAL_WOUND);
- MortalWound_Timer = 10000 + rand()%10000;
+ MortalWound_Timer = urand(10000, 20000);
} else MortalWound_Timer -= diff;
//Summon 1-3 Spawns of Fankriss at random time.
@@ -127,7 +127,7 @@ public:
SummonSpawn(SelectTarget(SELECT_TARGET_RANDOM, 0));
break;
}
- SpawnSpawns_Timer = 30000 + rand()%30000;
+ SpawnSpawns_Timer = urand(30000, 60000);
} else SpawnSpawns_Timer -= diff;
// Teleporting Random Target to one of the three tunnels and spawn 4 hatchlings near the gamer.
@@ -194,7 +194,7 @@ public:
break;
}
}
- SpawnHatchlings_Timer = 45000 + rand()%15000;
+ SpawnHatchlings_Timer = urand(45000, 60000);
} else SpawnHatchlings_Timer -= diff;
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
index f8cafea0ef2..c0ccd55f219 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -61,11 +61,11 @@ public:
void Reset()
{
- Frenzy_Timer = 25000 + rand()%10000;
- Wyvern_Timer = 18000 + rand()%10000;
+ Frenzy_Timer = urand(25000, 35000);
+ Wyvern_Timer = urand(18000, 28000);
Spit_Timer = 8000;
PoisonBolt_Timer = 4000;
- NoxiousPoison_Timer = 10000 + rand()%10000;
+ NoxiousPoison_Timer = urand(10000, 20000);
FrenzyBack_Timer = 15000;
Frenzy = false;
@@ -89,7 +89,7 @@ public:
DoScriptText(EMOTE_GENERIC_FRENZY_KILL, me);
Frenzy = true;
PoisonBolt_Timer = 3000;
- Frenzy_Timer = 25000 + rand()%10000;
+ Frenzy_Timer = urand(25000, 35000);
} else Frenzy_Timer -= diff;
// Wyvern Timer
@@ -97,21 +97,21 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_WYVERNSTING);
- Wyvern_Timer = 15000 + rand()%17000;
+ Wyvern_Timer = urand(15000, 32000);
} else Wyvern_Timer -= diff;
//Spit Timer
if (Spit_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ACIDSPIT);
- Spit_Timer = 5000 + rand()%5000;
+ Spit_Timer = urand(5000, 10000);
} else Spit_Timer -= diff;
//NoxiousPoison_Timer
if (NoxiousPoison_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_NOXIOUSPOISON);
- NoxiousPoison_Timer = 12000 + rand()%12000;
+ NoxiousPoison_Timer = urand(12000, 24000);
} else NoxiousPoison_Timer -= diff;
//PoisonBolt only if frenzy or berserk
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
index 01d26ed7726..b0e5112aa6b 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -59,12 +59,12 @@ public:
void Reset()
{
- Sweep_Timer = 5000 + rand()%5000;
- SandBlast_Timer = 20000 + rand()%15000;
- Submerge_Timer = 90000 + rand()%60000;
- Back_Timer = 30000 + rand()%15000;
- ChangeTarget_Timer = 5000 + rand()%3000;
- Spawn_Timer = 10000 + rand()%10000;
+ Sweep_Timer = urand(5000, 10000);
+ SandBlast_Timer = urand(20000, 35000);
+ Submerge_Timer = urand(90000, 150000);
+ Back_Timer = urand(30000, 45000);
+ ChangeTarget_Timer = urand(5000, 8000);
+ Spawn_Timer = urand(10000, 20000);
Enrage = false;
Submerged = false;
@@ -85,14 +85,14 @@ public:
if (!Submerged && Sweep_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SWEEP);
- Sweep_Timer = 15000 + rand()%15000;
+ Sweep_Timer = urand(15000, 30000);
} else Sweep_Timer -= diff;
//SandBlast_Timer
if (!Submerged && SandBlast_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SANDBLAST);
- SandBlast_Timer = 20000 + rand()%15000;
+ SandBlast_Timer = urand(20000, 35000);
} else SandBlast_Timer -= diff;
//Submerge_Timer
@@ -105,7 +105,7 @@ public:
DoCast(me, SPELL_DIRTMOUND_PASSIVE);
Submerged = true;
- Back_Timer = 30000 + rand()%15000;
+ Back_Timer = urand(30000, 45000);
} else Submerge_Timer -= diff;
//ChangeTarget_Timer
@@ -117,7 +117,7 @@ public:
if (target)
DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
- ChangeTarget_Timer = 10000 + rand()%10000;
+ ChangeTarget_Timer = urand(10000, 20000);
} else ChangeTarget_Timer -= diff;
//Back_Timer
@@ -129,7 +129,7 @@ public:
DoCast(me->getVictim(), SPELL_GROUND_RUPTURE);
Submerged = false;
- Submerge_Timer = 60000 + rand()%60000;
+ Submerge_Timer = urand(60000, 120000);
} else Back_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
index fb16d2b7319..4d5aff16770 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -66,9 +66,9 @@ public:
void Reset()
{
WhirlWind_Timer = 30000;
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
WhirlWindEnd_Timer = 15000;
- AggroReset_Timer = 45000 + rand()%10000;
+ AggroReset_Timer = urand(45000, 55000);
AggroResetEnd_Timer = 5000;
EnrageHard_Timer = 10*60000;
@@ -111,13 +111,13 @@ public:
me->TauntApply(target);
AttackStart(target);
}
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
} else WhirlWindRandom_Timer -= diff;
if (WhirlWindEnd_Timer <= diff)
{
WhirlWind = false;
- WhirlWind_Timer = 25000 + rand()%15000;
+ WhirlWind_Timer = urand(25000, 40000);
} else WhirlWindEnd_Timer -= diff;
}
@@ -140,7 +140,7 @@ public:
AttackStart(target);
}
AggroReset = true;
- AggroReset_Timer = 2000 + rand()%3000;
+ AggroReset_Timer = urand(2000, 5000);
} else AggroReset_Timer -= diff;
if (AggroReset)
@@ -149,7 +149,7 @@ public:
{
AggroReset = false;
AggroResetEnd_Timer = 5000;
- AggroReset_Timer = 35000 + rand()%10000;
+ AggroReset_Timer = urand(35000, 45000);
} else AggroResetEnd_Timer -= diff;
}
@@ -207,9 +207,9 @@ public:
void Reset()
{
WhirlWind_Timer = 30000;
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
WhirlWindEnd_Timer = 15000;
- AggroReset_Timer = 45000 + rand()%10000;
+ AggroReset_Timer = urand(45000, 55000);
AggroResetEnd_Timer = 5000;
KnockBack_Timer = 10000;
@@ -231,7 +231,7 @@ public:
{
DoCast(me, SPELL_WHIRLWINDADD);
WhirlWind = true;
- WhirlWind_Timer = 25000 + rand()%15000;
+ WhirlWind_Timer = urand(25000, 40000);
WhirlWindEnd_Timer = 15000;
} else WhirlWind_Timer -= diff;
@@ -247,7 +247,7 @@ public:
AttackStart(target);
}
- WhirlWindRandom_Timer = 3000 + rand()%4000;
+ WhirlWindRandom_Timer = urand(3000, 7000);
} else WhirlWindRandom_Timer -= diff;
if (WhirlWindEnd_Timer <= diff)
@@ -269,13 +269,13 @@ public:
}
AggroReset = true;
- AggroReset_Timer = 2000 + rand()%3000;
+ AggroReset_Timer = urand(2000, 5000);
} else AggroReset_Timer -= diff;
if (KnockBack_Timer <= diff)
{
DoCast(me, SPELL_WHIRLWINDADD);
- KnockBack_Timer = 10000 + rand()%10000;
+ KnockBack_Timer = urand(10000, 20000);
} else KnockBack_Timer -= diff;
}
@@ -285,7 +285,7 @@ public:
{
AggroReset = false;
AggroResetEnd_Timer = 5000;
- AggroReset_Timer = 30000 + rand()%10000;
+ AggroReset_Timer = urand(30000, 40000);
} else AggroResetEnd_Timer -= diff;
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
index 0ba6bdb1154..d56608ba7f1 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -82,10 +82,10 @@ public:
void Reset()
{
- ArcaneExplosion_Timer = 6000 + rand()%6000;
+ ArcaneExplosion_Timer = urand(6000, 12000);
EarthShock_Timer = 2000;
FullFillment_Timer = 15000;
- Blink_Timer = 8000 + rand()%12000;
+ Blink_Timer = urand(8000, 20000);
Invisible_Timer = 500;
Images75 = false;
@@ -128,7 +128,7 @@ public:
if (ArcaneExplosion_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_EXPLOSION);
- ArcaneExplosion_Timer = 8000 + rand()%10000;
+ ArcaneExplosion_Timer = urand(8000, 18000);
} else ArcaneExplosion_Timer -= diff;
//If we are within range melee the target
@@ -171,7 +171,7 @@ public:
}
DoStopAttack();
- Blink_Timer= 20000 + rand()%20000;
+ Blink_Timer= urand(20000, 40000);
} else Blink_Timer -= diff;
int procent = (int) (me->GetHealthPct() + 0.5f);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
index 29b92957ace..a60c33a4feb 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -88,7 +88,7 @@ struct boss_twinemperorsAI : public ScriptedAI
AfterTeleport = false;
tspellcasted = false;
AfterTeleportTimer = 0;
- Abuse_Bug_Timer = 10000 + rand()%7000;
+ Abuse_Bug_Timer = urand(10000, 17000);
BugsTimer = 2000;
me->ClearUnitState(UNIT_STAT_STUNNED);
DontYellWhenDead = false;
@@ -347,7 +347,7 @@ struct boss_twinemperorsAI : public ScriptedAI
if (c)
{
CastSpellOnBug(c);
- Abuse_Bug_Timer = 10000 + rand()%7000;
+ Abuse_Bug_Timer = urand(10000, 17000);
}
else
{
@@ -407,9 +407,9 @@ public:
void Reset()
{
TwinReset();
- UpperCut_Timer = 14000 + rand()%15000;
- UnbalancingStrike_Timer = 8000 + rand()%10000;
- Scarabs_Timer = 7000 + rand()%7000;
+ UpperCut_Timer = urand(14000, 29000);
+ UnbalancingStrike_Timer = urand(8000, 18000);
+ Scarabs_Timer = urand(7000, 14000);
//Added. Can be removed if its included in DB.
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
@@ -495,9 +495,9 @@ public:
{
TwinReset();
ShadowBolt_Timer = 0;
- Blizzard_Timer = 15000 + rand()%5000;
+ Blizzard_Timer = urand(15000, 20000);
ArcaneBurst_Timer = 1000;
- Scorpions_Timer = 7000 + rand()%7000;
+ Scorpions_Timer = urand(7000, 14000);
//Added. Can be removed if its included in DB.
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
index dd63128ddfc..7b30200b0b3 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
index 3b0d38fe2d4..38ea8e8748b 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
index 13b4acbca3e..45e9797328e 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h
index 571a7be973f..13c3d56d14c 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
index 36864245305..e61e20c35bc 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
index cf72c0305c6..1155d353371 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h
index f6cf41ff30f..a39de54ee06 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h
+++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
index d48a8fee197..33a2ce73e21 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
index 97ad7cea315..dd90eaa0e7f 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/ashenvale.cpp b/src/server/scripts/Kalimdor/ashenvale.cpp
index a33ed68879f..e27d7287179 100644
--- a/src/server/scripts/Kalimdor/ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/ashenvale.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/azshara.cpp b/src/server/scripts/Kalimdor/azshara.cpp
index 6fbc424f3d4..2e621c4a3ba 100644
--- a/src/server/scripts/Kalimdor/azshara.cpp
+++ b/src/server/scripts/Kalimdor/azshara.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/azuremyst_isle.cpp b/src/server/scripts/Kalimdor/azuremyst_isle.cpp
index 57ff1448a7e..09f4b9415a9 100644
--- a/src/server/scripts/Kalimdor/azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/azuremyst_isle.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -243,7 +243,7 @@ public:
void Reset()
{
Dynamite_Timer = 8000;
- Emote_Timer = 120000 + rand()%30000;
+ Emote_Timer = urand(120000, 150000);
me->setFaction(NormFaction);
me->SetUInt32Value(UNIT_NPC_FLAGS, NpcFlags);
@@ -264,7 +264,7 @@ public:
{
DoScriptText(SAY_TEXT, me);
DoScriptText(SAY_EMOTE, me);
- Emote_Timer = 120000 + rand()%30000;
+ Emote_Timer = urand(120000, 150000);
} else Emote_Timer -= diff;
}
else if (IsTreeEvent)
diff --git a/src/server/scripts/Kalimdor/bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/bloodmyst_isle.cpp
index cf08c4bfef0..c114c02b16d 100644
--- a/src/server/scripts/Kalimdor/bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/bloodmyst_isle.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp
index 6bbc29dcc56..4c415014eef 100644
--- a/src/server/scripts/Kalimdor/boss_azuregos.cpp
+++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -62,11 +62,11 @@ public:
void Reset()
{
MarkOfFrost_Timer = 35000;
- ManaStorm_Timer = 5000 + rand()%12000;
- Chill_Timer = 10000 + rand()%20000;
- Breath_Timer = 2000 + rand()%6000;
+ ManaStorm_Timer = urand(5000, 17000);
+ Chill_Timer = urand(10000, 30000);
+ Breath_Timer = urand(2000, 8000);
Teleport_Timer = 30000;
- Reflect_Timer = 15000 + rand()%15000;
+ Reflect_Timer = urand(15000, 30000);
Cleave_Timer = 7000;
Enrage_Timer = 0;
Enraged = false;
@@ -109,14 +109,14 @@ public:
if (Chill_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CHILL);
- Chill_Timer = 13000 + rand()%12000;
+ Chill_Timer = urand(13000, 25000);
} else Chill_Timer -= diff;
//Breath_Timer
if (Breath_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FROSTBREATH);
- Breath_Timer = 10000 + rand()%5000;
+ Breath_Timer = urand(10000, 15000);
} else Breath_Timer -= diff;
//ManaStorm_Timer
@@ -124,14 +124,14 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_MANASTORM);
- ManaStorm_Timer = 7500 + rand()%5000;
+ ManaStorm_Timer = urand(7500, 12500);
} else ManaStorm_Timer -= diff;
//Reflect_Timer
if (Reflect_Timer <= diff)
{
DoCast(me, SPELL_REFLECT);
- Reflect_Timer = 20000 + rand()%15000;
+ Reflect_Timer = urand(20000, 35000);
} else Reflect_Timer -= diff;
//Cleave_Timer
diff --git a/src/server/scripts/Kalimdor/darkshore.cpp b/src/server/scripts/Kalimdor/darkshore.cpp
index a6450fab6ea..a2c10b94ff9 100644
--- a/src/server/scripts/Kalimdor/darkshore.cpp
+++ b/src/server/scripts/Kalimdor/darkshore.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/desolace.cpp b/src/server/scripts/Kalimdor/desolace.cpp
index 71372f1d9e4..421a1d7b38a 100644
--- a/src/server/scripts/Kalimdor/desolace.cpp
+++ b/src/server/scripts/Kalimdor/desolace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -25,6 +25,9 @@ EndScriptData */
/* ContentData
npc_aged_dying_ancient_kodo
+go_iruxos
+npc_dalinda_malem
+go_demon_portal
EndContentData */
#include "ScriptPCH.h"
@@ -168,22 +171,28 @@ public:
};
/*######
-## go_iruxos. Quest 5381
+## go_iruxos
+## Hand of Iruxos
######*/
+enum
+{
+ QUEST_HAND_IRUXOS = 5381,
+ NPC_DEMON_SPIRIT = 11876,
+};
+
class go_iruxos : public GameObjectScript
{
-public:
- go_iruxos() : GameObjectScript("go_iruxos") { }
+ public:
+ go_iruxos() : GameObjectScript("go_iruxos") { }
- bool OnGossipHello(Player* player, GameObject* /*pGO*/)
- {
- if (player->GetQuestStatus(5381) == QUEST_STATUS_INCOMPLETE)
- player->SummonCreature(11876, player->GetInnPosX(), player->GetInnPosY(), player->GetInnPosZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_SPIRIT, 25.0f, true))
+ player->SummonCreature(NPC_DEMON_SPIRIT, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
return true;
- }
-
+ }
};
/*######
@@ -254,7 +263,34 @@ public:
DoMeleeAttackIfReady();
}
};
+};
+
+/*######
+## go_demon_portal
+######*/
+enum DemonPortal
+{
+ NPC_DEMON_GUARDIAN = 11937,
+
+ QUEST_PORTAL_OF_THE_LEGION = 5581,
+};
+
+class go_demon_portal : public GameObjectScript
+{
+ public:
+ go_demon_portal() : GameObjectScript("go_demon_portal") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (player->GetQuestStatus(QUEST_PORTAL_OF_THE_LEGION) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_GUARDIAN, 5.0f, true))
+ {
+ if (Creature* guardian = player->SummonCreature(NPC_DEMON_GUARDIAN, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0))
+ guardian->AI()->AttackStart(player);
+ }
+
+ return true;
+ }
};
void AddSC_desolace()
@@ -262,4 +298,5 @@ void AddSC_desolace()
new npc_aged_dying_ancient_kodo();
new go_iruxos();
new npc_dalinda();
+ new go_demon_portal();
}
diff --git a/src/server/scripts/Kalimdor/durotar.cpp b/src/server/scripts/Kalimdor/durotar.cpp
index 1f64353901c..8cf72b3538d 100644
--- a/src/server/scripts/Kalimdor/durotar.cpp
+++ b/src/server/scripts/Kalimdor/durotar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -400,7 +400,7 @@ class npc_troll_volunteer : public CreatureScript
DoCast(me, SPELL_TURNIN);
DoCast(me, SPELL_QUEST_CREDIT);
me->RemoveAurasDueToSpell(SPELL_MOUNTING_CHECK);
- me->Unmount();
+ me->Dismount();
Talk(SAY_VOLUNTEER_END);
me->GetMotionMaster()->MovePoint(POINT_URUZIN, caster->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ());
}
@@ -447,7 +447,7 @@ class spell_mount_check : public SpellScriptLoader
target->Mount(mountid);
}
else if (!owner->IsMounted() && target->IsMounted())
- target->Unmount();
+ target->Dismount();
target->SetSpeed(MOVE_RUN, owner->GetSpeedRate(MOVE_RUN));
target->SetSpeed(MOVE_WALK, owner->GetSpeedRate(MOVE_WALK));
diff --git a/src/server/scripts/Kalimdor/dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/dustwallow_marsh.cpp
index 5b1c285d7b3..0ead5d95447 100644
--- a/src/server/scripts/Kalimdor/dustwallow_marsh.cpp
+++ b/src/server/scripts/Kalimdor/dustwallow_marsh.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/felwood.cpp b/src/server/scripts/Kalimdor/felwood.cpp
index b4cc9972b69..91d8a875f17 100644
--- a/src/server/scripts/Kalimdor/felwood.cpp
+++ b/src/server/scripts/Kalimdor/felwood.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/feralas.cpp b/src/server/scripts/Kalimdor/feralas.cpp
index ff7ae84c892..37a0e4e8f88 100644
--- a/src/server/scripts/Kalimdor/feralas.cpp
+++ b/src/server/scripts/Kalimdor/feralas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/moonglade.cpp b/src/server/scripts/Kalimdor/moonglade.cpp
index b8b8b31ba2c..595a72ec2bf 100644
--- a/src/server/scripts/Kalimdor/moonglade.cpp
+++ b/src/server/scripts/Kalimdor/moonglade.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/mulgore.cpp b/src/server/scripts/Kalimdor/mulgore.cpp
index 4cea827e5e7..01cca58359e 100644
--- a/src/server/scripts/Kalimdor/mulgore.cpp
+++ b/src/server/scripts/Kalimdor/mulgore.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/orgrimmar.cpp b/src/server/scripts/Kalimdor/orgrimmar.cpp
index 96bc2b009ba..629abb84fc1 100644
--- a/src/server/scripts/Kalimdor/orgrimmar.cpp
+++ b/src/server/scripts/Kalimdor/orgrimmar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/silithus.cpp b/src/server/scripts/Kalimdor/silithus.cpp
index 4fbcef167cc..e6322591bf3 100644
--- a/src/server/scripts/Kalimdor/silithus.cpp
+++ b/src/server/scripts/Kalimdor/silithus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/stonetalon_mountains.cpp
index ff6127f336e..3dd0d1cbf02 100644
--- a/src/server/scripts/Kalimdor/stonetalon_mountains.cpp
+++ b/src/server/scripts/Kalimdor/stonetalon_mountains.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/tanaris.cpp b/src/server/scripts/Kalimdor/tanaris.cpp
index fa5f6850689..394a32e5cb6 100644
--- a/src/server/scripts/Kalimdor/tanaris.cpp
+++ b/src/server/scripts/Kalimdor/tanaris.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/teldrassil.cpp b/src/server/scripts/Kalimdor/teldrassil.cpp
index dc4fab4066e..d7cac99c374 100644
--- a/src/server/scripts/Kalimdor/teldrassil.cpp
+++ b/src/server/scripts/Kalimdor/teldrassil.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/the_barrens.cpp b/src/server/scripts/Kalimdor/the_barrens.cpp
index 25954d2bf52..6f2ddb1febb 100644
--- a/src/server/scripts/Kalimdor/the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/the_barrens.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/thousand_needles.cpp b/src/server/scripts/Kalimdor/thousand_needles.cpp
index 041f477a0b2..2349b4493ce 100644
--- a/src/server/scripts/Kalimdor/thousand_needles.cpp
+++ b/src/server/scripts/Kalimdor/thousand_needles.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/thunder_bluff.cpp b/src/server/scripts/Kalimdor/thunder_bluff.cpp
index 36c81eecb9c..67a876c40b2 100644
--- a/src/server/scripts/Kalimdor/thunder_bluff.cpp
+++ b/src/server/scripts/Kalimdor/thunder_bluff.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/ungoro_crater.cpp b/src/server/scripts/Kalimdor/ungoro_crater.cpp
index 15d900ef45d..0e2a1b2c4d9 100644
--- a/src/server/scripts/Kalimdor/ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/ungoro_crater.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Kalimdor/winterspring.cpp b/src/server/scripts/Kalimdor/winterspring.cpp
index 897be7bbfa7..00bb250d64d 100644
--- a/src/server/scripts/Kalimdor/winterspring.cpp
+++ b/src/server/scripts/Kalimdor/winterspring.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
index e19054d2f46..92d5c782e27 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
index cde97f8d37b..b16ad9934d8 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
index a2371fa0121..85abaa46a5d 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
index bc4d4ba5eea..bf22c7a5d30 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
index b2975797a02..4e1b9da0adb 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index 9a7dc2f2cc9..1e3a9a7a177 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
index 5ba11dd5353..3ae78d4053b 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
index fa199651950..6e865860403 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 545dc79453d..cf9c7fd0f3d 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -91,49 +91,50 @@ public:
struct boss_anub_arakAI : public ScriptedAI
{
- boss_anub_arakAI(Creature* c) : ScriptedAI(c), lSummons(me)
+ boss_anub_arakAI(Creature* creature) : ScriptedAI(creature), Summons(me)
{
- instance = c->GetInstanceScript();
+ instance = creature->GetInstanceScript();
}
InstanceScript* instance;
- bool bChanneling;
- bool bGuardianSummoned;
- bool bVenomancerSummoned;
- bool bDatterSummoned;
- uint8 uiPhase;
- uint32 uiUndergroundPhase;
- uint32 uiCarrionBeetlesTimer;
- uint32 uiLeechingSwarmTimer;
- uint32 uiPoundTimer;
- uint32 uiSubmergeTimer;
- uint32 uiUndergroundTimer;
- uint32 uiVenomancerTimer;
- uint32 uiDatterTimer;
-
- uint32 uiImpaleTimer;
- uint32 uiImpalePhase;
- uint64 uiImpaleTarget;
-
- SummonList lSummons;
+ bool Channeling;
+ bool GuardianSummoned;
+ bool VenomancerSummoned;
+ bool DatterSummoned;
+ uint8 Phase;
+ uint32 UndergroundPhase;
+ uint32 CarrionBeetlesTimer;
+ uint32 LeechingSwarmTimer;
+ uint32 PoundTimer;
+ uint32 SubmergeTimer;
+ uint32 UndergroundTimer;
+ uint32 VenomancerTimer;
+ uint32 DatterTimer;
+ uint32 DelayTimer;
+
+ uint32 ImpaleTimer;
+ uint32 ImpalePhase;
+ uint64 ImpaleTarget;
+
+ SummonList Summons;
void Reset()
{
- uiCarrionBeetlesTimer = 8*IN_MILLISECONDS;
- uiLeechingSwarmTimer = 20*IN_MILLISECONDS;
- uiImpaleTimer = 9*IN_MILLISECONDS;
- uiPoundTimer = 15*IN_MILLISECONDS;
+ CarrionBeetlesTimer = 8*IN_MILLISECONDS;
+ LeechingSwarmTimer = 20*IN_MILLISECONDS;
+ ImpaleTimer = 9*IN_MILLISECONDS;
+ PoundTimer = 15*IN_MILLISECONDS;
- uiPhase = PHASE_MELEE;
- uiUndergroundPhase = 0;
- bChanneling = false;
- uiImpalePhase = IMPALE_PHASE_TARGET;
+ Phase = PHASE_MELEE;
+ UndergroundPhase = 0;
+ Channeling = false;
+ ImpalePhase = IMPALE_PHASE_TARGET;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAura(SPELL_SUBMERGE);
- lSummons.DespawnAll();
+ Summons.DespawnAll();
if (instance)
{
@@ -147,13 +148,13 @@ public:
Position targetPos;
target->GetPosition(&targetPos);
- if (TempSummon* pImpaleTarget = me->SummonCreature(CREATURE_IMPALE_TARGET, targetPos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 6*IN_MILLISECONDS))
+ if (TempSummon* impaleTarget = me->SummonCreature(CREATURE_IMPALE_TARGET, targetPos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 6*IN_MILLISECONDS))
{
- uiImpaleTarget = pImpaleTarget->GetGUID();
- pImpaleTarget->SetReactState(REACT_PASSIVE);
- pImpaleTarget->SetDisplayId(DISPLAY_INVISIBLE);
- pImpaleTarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE|UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
- return pImpaleTarget;
+ ImpaleTarget = impaleTarget->GetGUID();
+ impaleTarget->SetReactState(REACT_PASSIVE);
+ impaleTarget->SetDisplayId(DISPLAY_INVISIBLE);
+ impaleTarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE|UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ return impaleTarget;
}
return NULL;
@@ -162,11 +163,15 @@ public:
void EnterCombat(Unit* /*who*/)
{
DoScriptText(SAY_AGGRO, me);
+ DelayTimer = 0;
if (instance)
- {
- instance->SetData(DATA_ANUBARAK_EVENT, IN_PROGRESS);
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- }
+ }
+
+ void DelayEventStart()
+ {
+ if (instance)
+ instance->SetData(DATA_ANUBARAK_EVENT, IN_PROGRESS);
}
void UpdateAI(const uint32 diff)
@@ -174,41 +179,45 @@ public:
if (!UpdateVictim())
return;
- switch (uiPhase)
+ if (DelayTimer && DelayTimer > 5000)
+ DelayEventStart();
+ else DelayTimer+=diff;
+
+ switch (Phase)
{
case PHASE_UNDERGROUND:
- if (uiImpaleTimer <= diff)
+ if (ImpaleTimer <= diff)
{
- switch (uiImpalePhase)
+ switch (ImpalePhase)
{
case IMPALE_PHASE_TARGET:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
- if (Creature* pImpaleTarget = DoSummonImpaleTarget(target))
- pImpaleTarget->CastSpell(pImpaleTarget, SPELL_IMPALE_SHAKEGROUND, true);
- uiImpaleTimer = 3*IN_MILLISECONDS;
- uiImpalePhase = IMPALE_PHASE_ATTACK;
+ if (Creature* impaleTarget = DoSummonImpaleTarget(target))
+ impaleTarget->CastSpell(impaleTarget, SPELL_IMPALE_SHAKEGROUND, true);
+ ImpaleTimer = 3*IN_MILLISECONDS;
+ ImpalePhase = IMPALE_PHASE_ATTACK;
}
break;
case IMPALE_PHASE_ATTACK:
- if (Creature* pImpaleTarget = Unit::GetCreature(*me, uiImpaleTarget))
+ if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget))
{
- pImpaleTarget->CastSpell(pImpaleTarget, SPELL_IMPALE_SPIKE, false);
- pImpaleTarget->RemoveAurasDueToSpell(SPELL_IMPALE_SHAKEGROUND);
+ impaleTarget->CastSpell(impaleTarget, SPELL_IMPALE_SPIKE, false);
+ impaleTarget->RemoveAurasDueToSpell(SPELL_IMPALE_SHAKEGROUND);
}
- uiImpalePhase = IMPALE_PHASE_DMG;
- uiImpaleTimer = 1*IN_MILLISECONDS;
+ ImpalePhase = IMPALE_PHASE_DMG;
+ ImpaleTimer = 1*IN_MILLISECONDS;
break;
case IMPALE_PHASE_DMG:
- if (Creature* pImpaleTarget = Unit::GetCreature(*me, uiImpaleTarget))
- me->CastSpell(pImpaleTarget, DUNGEON_MODE(SPELL_IMPALE_DMG, SPELL_IMPALE_DMG_H), true);
- uiImpalePhase = IMPALE_PHASE_TARGET;
- uiImpaleTimer = 9*IN_MILLISECONDS;
+ if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget))
+ me->CastSpell(impaleTarget, DUNGEON_MODE(SPELL_IMPALE_DMG, SPELL_IMPALE_DMG_H), true);
+ ImpalePhase = IMPALE_PHASE_TARGET;
+ ImpaleTimer = 9*IN_MILLISECONDS;
break;
}
- } else uiImpaleTimer -= diff;
+ } else ImpaleTimer -= diff;
- if (!bGuardianSummoned)
+ if (!GuardianSummoned)
{
for (uint8 i = 0; i < 2; ++i)
{
@@ -218,14 +227,14 @@ public:
DoZoneInCombat(Guardian);
}
}
- bGuardianSummoned = true;
+ GuardianSummoned = true;
}
- if (!bVenomancerSummoned)
+ if (!VenomancerSummoned)
{
- if (uiVenomancerTimer <= diff)
+ if (VenomancerTimer <= diff)
{
- if (uiUndergroundPhase > 1)
+ if (UndergroundPhase > 1)
{
for (uint8 i = 0; i < 2; ++i)
{
@@ -235,16 +244,16 @@ public:
DoZoneInCombat(Venomancer);
}
}
- bVenomancerSummoned = true;
+ VenomancerSummoned = true;
}
- } else uiVenomancerTimer -= diff;
+ } else VenomancerTimer -= diff;
}
- if (!bDatterSummoned)
+ if (!DatterSummoned)
{
- if (uiDatterTimer <= diff)
+ if (DatterTimer <= diff)
{
- if (uiUndergroundPhase > 2)
+ if (UndergroundPhase > 2)
{
for (uint8 i = 0; i < 2; ++i)
{
@@ -254,71 +263,74 @@ public:
DoZoneInCombat(Datter);
}
}
- bDatterSummoned = true;
+ DatterSummoned = true;
}
- } else uiDatterTimer -= diff;
+ } else DatterTimer -= diff;
+
+ if(me->HasAura(SPELL_LEECHING_SWARM))
+ me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM);
}
- if (uiUndergroundTimer <= diff)
+ if (UndergroundTimer <= diff)
{
me->RemoveAura(SPELL_SUBMERGE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
- uiPhase = PHASE_MELEE;
- } else uiUndergroundTimer -= diff;
+ Phase = PHASE_MELEE;
+ } else UndergroundTimer -= diff;
break;
case PHASE_MELEE:
- if (((uiUndergroundPhase == 0 && HealthBelowPct(75))
- || (uiUndergroundPhase == 1 && HealthBelowPct(50))
- || (uiUndergroundPhase == 2 && HealthBelowPct(25)))
+ if (((UndergroundPhase == 0 && HealthBelowPct(75))
+ || (UndergroundPhase == 1 && HealthBelowPct(50))
+ || (UndergroundPhase == 2 && HealthBelowPct(25)))
&& !me->HasUnitState(UNIT_STAT_CASTING))
{
- bGuardianSummoned = false;
- bVenomancerSummoned = false;
- bDatterSummoned = false;
+ GuardianSummoned = false;
+ VenomancerSummoned = false;
+ DatterSummoned = false;
- uiUndergroundTimer = 40*IN_MILLISECONDS;
- uiVenomancerTimer = 25*IN_MILLISECONDS;
- uiDatterTimer = 32*IN_MILLISECONDS;
+ UndergroundTimer = 40*IN_MILLISECONDS;
+ VenomancerTimer = 25*IN_MILLISECONDS;
+ DatterTimer = 32*IN_MILLISECONDS;
- uiImpalePhase = 0;
- uiImpaleTimer = 9*IN_MILLISECONDS;
+ ImpalePhase = 0;
+ ImpaleTimer = 9*IN_MILLISECONDS;
DoCast(me, SPELL_SUBMERGE, false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
- uiPhase = PHASE_UNDERGROUND;
- ++uiUndergroundPhase;
+ Phase = PHASE_UNDERGROUND;
+ ++UndergroundPhase;
}
- if (bChanneling == true)
+ if (Channeling == true)
{
for (uint8 i = 0; i < 8; ++i)
DoCast(me->getVictim(), SPELL_SUMMON_CARRION_BEETLES, true);
- bChanneling = false;
+ Channeling = false;
}
- else if (uiCarrionBeetlesTimer <= diff)
+ else if (CarrionBeetlesTimer <= diff)
{
- bChanneling = true;
+ Channeling = true;
DoCastVictim(SPELL_CARRION_BEETLES);
- uiCarrionBeetlesTimer = 25*IN_MILLISECONDS;
- } else uiCarrionBeetlesTimer -= diff;
+ CarrionBeetlesTimer = 25*IN_MILLISECONDS;
+ } else CarrionBeetlesTimer -= diff;
- if (uiLeechingSwarmTimer <= diff)
+ if (LeechingSwarmTimer <= diff)
{
DoCast(me, SPELL_LEECHING_SWARM, true);
- uiLeechingSwarmTimer = 19*IN_MILLISECONDS;
- } else uiLeechingSwarmTimer -= diff;
+ LeechingSwarmTimer = 19*IN_MILLISECONDS;
+ } else LeechingSwarmTimer -= diff;
- if (uiPoundTimer <= diff)
+ if (PoundTimer <= diff)
{
if (Unit* target = me->getVictim())
{
if (Creature* pImpaleTarget = DoSummonImpaleTarget(target))
me->CastSpell(pImpaleTarget, DUNGEON_MODE(SPELL_POUND, SPELL_POUND_H), false);
}
- uiPoundTimer = 16500;
- } else uiPoundTimer -= diff;
+ PoundTimer = 16500;
+ } else PoundTimer -= diff;
DoMeleeAttackIfReady();
break;
@@ -328,7 +340,7 @@ public:
void JustDied(Unit* /*killer*/)
{
DoScriptText(SAY_DEATH, me);
- lSummons.DespawnAll();
+ Summons.DespawnAll();
if (instance)
instance->SetData(DATA_ANUBARAK_EVENT, DONE);
}
@@ -342,7 +354,7 @@ public:
void JustSummoned(Creature* summon)
{
- lSummons.Summon(summon);
+ Summons.Summon(summon);
}
};
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index dea3d6eaede..da629fd45e9 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -118,7 +118,7 @@ public:
return;
float x=0.0f, y=0.0f, z=0.0f;
- me->GetRespawnCoord(x, y, z);
+ me->GetRespawnPosition(x, y, z);
if (uiCheckDistanceTimer <= uiDiff)
uiCheckDistanceTimer = 5*IN_MILLISECONDS;
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
index 6a734035005..878e1f7555f 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
index 6b8299e6c4b..e00db5d6494 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt
index 63e714d17aa..53b47884e57 100644
--- a/src/server/scripts/Northrend/CMakeLists.txt
+++ b/src/server/scripts/Northrend/CMakeLists.txt
@@ -18,23 +18,23 @@ set(scripts_STAT_SRCS
Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
- Northrend/Ulduar/ulduar/boss_general_vezax.cpp
- Northrend/Ulduar/ulduar/ulduar_teleporter.cpp
- Northrend/Ulduar/ulduar/boss_thorim.cpp
- Northrend/Ulduar/ulduar/boss_ignis.cpp
- Northrend/Ulduar/ulduar/boss_algalon.cpp
- Northrend/Ulduar/ulduar/instance_ulduar.cpp
- Northrend/Ulduar/ulduar/boss_auriaya.cpp
- Northrend/Ulduar/ulduar/boss_yoggsaron.cpp
- Northrend/Ulduar/ulduar/boss_hodir.cpp
- Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp
- Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
- Northrend/Ulduar/ulduar/boss_xt002.cpp
- Northrend/Ulduar/ulduar/boss_mimiron.cpp
- Northrend/Ulduar/ulduar/ulduar.h
- Northrend/Ulduar/ulduar/boss_freya.cpp
- Northrend/Ulduar/ulduar/boss_razorscale.cpp
- Northrend/Ulduar/ulduar/boss_kologarn.cpp
+ Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+ Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp
+ Northrend/Ulduar/Ulduar/boss_thorim.cpp
+ Northrend/Ulduar/Ulduar/boss_ignis.cpp
+ Northrend/Ulduar/Ulduar/boss_algalon.cpp
+ Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+ Northrend/Ulduar/Ulduar/boss_auriaya.cpp
+ Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
+ Northrend/Ulduar/Ulduar/boss_hodir.cpp
+ Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
+ Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+ Northrend/Ulduar/Ulduar/boss_xt002.cpp
+ Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+ Northrend/Ulduar/Ulduar/ulduar.h
+ Northrend/Ulduar/Ulduar/boss_freya.cpp
+ Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+ Northrend/Ulduar/Ulduar/boss_kologarn.cpp
Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
Northrend/Ulduar/HallsOfStone/halls_of_stone.h
Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
@@ -142,13 +142,13 @@ set(scripts_STAT_SRCS
Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
- Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp
- Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp
- Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
- Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
- Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp
- Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp
- Northrend/AzjolNerub/ahnkahet/ahnkahet.h
+ Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp
+ Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+ Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
+ Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+ Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
+ Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp
+ Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
Northrend/VioletHold/boss_zuramat.cpp
Northrend/VioletHold/instance_violet_hold.cpp
Northrend/VioletHold/boss_lavanthor.cpp
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index 187d82887e7..d01e2663b12 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp
index fa685421141..91d67697ebb 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h
index b70dfe6bdc3..a363758f953 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
index f602f41ce11..61d74c431fe 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index 107aed734e1..3b3b1fb9f47 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
index 733af8553e0..724fd4ef011 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
index abfaaa0229d..0fb51df7ed9 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
index dc41dcaaf11..cfbbb79c5f6 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
index 52a4c67e544..02ade2ff3e7 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
index e46dc3d741a..d5695a0f39d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
index fd84c1eec8a..153e128e58d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -54,8 +54,10 @@ enum eSpells
SPELL_BLACK_KNIGHT_RES = 67693,
- SPELL_LEAP = 67749,
- SPELL_LEAP_H = 67880
+ SPELL_LEAP = 67749,
+ SPELL_LEAP_H = 67880,
+
+ SPELL_KILL_CREDIT = 68663
};
enum eModels
@@ -288,6 +290,8 @@ public:
void JustDied(Unit* /*killer*/)
{
+ DoCast(me, SPELL_KILL_CREDIT);
+
if (instance)
instance->SetData(BOSS_BLACK_KNIGHT, DONE);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index 2fbe381fed5..ebdc55c51b7 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -839,7 +839,8 @@ public:
if (target && me->IsInRange(target, 5.0f, 30.0f, false))
{
DoCast(target, SPELL_MULTI_SHOT);
- } else
+ }
+ else
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
if (me->GetMap()->IsDungeon() && !players.isEmpty())
@@ -849,7 +850,7 @@ public:
Player* player = itr->getSource();
if (player && !player->isGameMaster() && me->IsInRange(player, 5.0f, 30.0f, false))
{
- DoCast(target, SPELL_MULTI_SHOT);
+ DoCast(player, SPELL_MULTI_SHOT);
break;
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
index 1f3db4c4976..9ccd136731a 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
index 2688005ee22..c17ea7411a0 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -221,10 +221,9 @@ public:
{
uiVehicle1GUID = pBoss->GetGUID();
uint64 uiGrandChampionBoss1 = 0;
- if (Creature* pBoss = Unit::GetCreature(*me, uiVehicle1GUID))
- if (Vehicle* pVehicle = pBoss->GetVehicleKit())
- if (Unit* unit = pVehicle->GetPassenger(0))
- uiGrandChampionBoss1 = unit->GetGUID();
+ if (Vehicle* pVehicle = pBoss->GetVehicleKit())
+ if (Unit* unit = pVehicle->GetPassenger(0))
+ uiGrandChampionBoss1 = unit->GetGUID();
if (instance)
{
instance->SetData64(DATA_GRAND_CHAMPION_VEHICLE_1, uiVehicle1GUID);
@@ -237,10 +236,9 @@ public:
{
uiVehicle2GUID = pBoss->GetGUID();
uint64 uiGrandChampionBoss2 = 0;
- if (Creature* pBoss = Unit::GetCreature(*me, uiVehicle2GUID))
- if (Vehicle* pVehicle = pBoss->GetVehicleKit())
- if (Unit* unit = pVehicle->GetPassenger(0))
- uiGrandChampionBoss2 = unit->GetGUID();
+ if (Vehicle* pVehicle = pBoss->GetVehicleKit())
+ if (Unit* unit = pVehicle->GetPassenger(0))
+ uiGrandChampionBoss2 = unit->GetGUID();
if (instance)
{
instance->SetData64(DATA_GRAND_CHAMPION_VEHICLE_2, uiVehicle2GUID);
@@ -253,10 +251,9 @@ public:
{
uiVehicle3GUID = pBoss->GetGUID();
uint64 uiGrandChampionBoss3 = 0;
- if (Creature* pBoss = Unit::GetCreature(*me, uiVehicle3GUID))
- if (Vehicle* pVehicle = pBoss->GetVehicleKit())
- if (Unit* unit = pVehicle->GetPassenger(0))
- uiGrandChampionBoss3 = unit->GetGUID();
+ if (Vehicle* pVehicle = pBoss->GetVehicleKit())
+ if (Unit* unit = pVehicle->GetPassenger(0))
+ uiGrandChampionBoss3 = unit->GetGUID();
if (instance)
{
instance->SetData64(DATA_GRAND_CHAMPION_VEHICLE_3, uiVehicle3GUID);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h
index d8ce6b9dca7..cb3a43acdd0 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 1ca1c69831c..e6678be3a2b 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2010 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -284,7 +284,7 @@ public:
if (m_uiPenetratingColdTimer <= uiDiff)
{
- me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5));
+ me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 5));
m_uiPenetratingColdTimer = 20*IN_MILLISECONDS;
} else m_uiPenetratingColdTimer -= uiDiff;
@@ -577,7 +577,7 @@ public:
me->SetReactState(REACT_PASSIVE);
me->SetFlying(true);
me->SetDisplayId(25144);
- me->SetSpeed(MOVE_RUN, 0.5, false);
+ me->SetSpeed(MOVE_RUN, 0.5f, false);
me->GetMotionMaster()->MoveRandom(20.0f);
DoCast(SPELL_FROST_SPHERE);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index 7be6775f705..45fdbdd5616 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index ec573f75bc6..fc01ad2efea 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2010 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -490,11 +490,14 @@ public:
void UpdateAI(const uint32 uiDiff)
{
- if (!UpdateVictim())
- return;
-
if (m_instance && m_instance->GetData(TYPE_JARAXXUS) != IN_PROGRESS)
+ {
me->DespawnOrUnsummon();
+ return;
+ }
+
+ if (!UpdateVictim())
+ return;
if (m_uiShivanSlashTimer <= uiDiff)
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index d4514dd547e..029a7c3c351 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2010 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -348,10 +348,10 @@ public:
m_bTargetDied = true;
me->GetMotionMaster()->MoveJump(gormok->GetPositionX(), gormok->GetPositionY(), gormok->GetPositionZ(), 15.0f, 15.0f);
}
- else if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ else if (Unit* target2 = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
- m_uiTargetGUID = target->GetGUID();
- me->GetMotionMaster()->MoveJump(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 15.0f, 15.0f);
+ m_uiTargetGUID = target2->GetGUID();
+ me->GetMotionMaster()->MoveJump(target2->GetPositionX(), target2->GetPositionY(), target2->GetPositionZ(), 15.0f, 15.0f);
}
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 495faf6f855..960b685f700 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2010 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
index 99a6abb91a9..03de3d374ef 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
index 76295f403fa..7412d75c97b 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
index 48616d8e6e4..e96ef4ff366 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index e877126364e..54e234a6d87 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
index e552341fd1e..97f2ee4e9a1 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -237,7 +237,8 @@ public:
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
if (Player* player = i->getSource())
player->DeMorph();
- instance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, SPELL_ACHIEVEMENT_CHECK);
+
+ DoCast(me, SPELL_ACHIEVEMENT_CHECK);
instance->SetData(DATA_THARON_JA_EVENT, DONE);
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index fdd27c73171..9fc964000e3 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
index 816ff0dfba0..46d6414978f 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
+++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
index 865f98a0203..8e5e7c3e185 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index eacb800f15a..bc06a92ef07 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -215,7 +215,6 @@ class mob_corrupted_soul_fragment : public CreatureScript
if (Creature* bronjahm = ObjectAccessor::GetCreature(*me, BronjahmGUID))
me->CastSpell(bronjahm, SPELL_CONSUME_SOUL, true);
- summ->GetMotionMaster()->MoveIdle();
summ->UnSummon();
}
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
index adbe59555b6..8180a686e0e 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -114,6 +114,8 @@ struct outroPosition
{ { 0, 0 }, { 0.0f, 0.0f, 0.0f, 0.0f } }
};
+Position const CrucibleSummonPos = {5672.294f,2520.686f, 713.4386f, 0.9599311f};
+
#define DATA_THREE_FACED 1
class boss_devourer_of_souls : public CreatureScript
@@ -154,6 +156,8 @@ class boss_devourer_of_souls : public CreatureScript
{
DoScriptText(RAND(SAY_FACE_ANGER_AGGRO, SAY_FACE_DESIRE_AGGRO), me);
+ if (!me->FindNearestCreature(NPC_CRUCIBLE_OF_SOULS, 60)) // Prevent double spawn
+ instance->instance->SummonCreature(NPC_CRUCIBLE_OF_SOULS, CrucibleSummonPos);
events.ScheduleEvent(EVENT_PHANTOM_BLAST, 5000);
events.ScheduleEvent(EVENT_MIRRORED_SOUL, 8000);
events.ScheduleEvent(EVENT_WELL_OF_SOULS, 30000);
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
index f6062951228..c6d00a95de3 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h
index 85062cc2901..ca68314df18 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -46,5 +46,6 @@ enum Creatures
NPC_CHAMPION_3_HORDE = 37588,
NPC_CHAMPION_1_ALLIANCE = 37496,
NPC_CHAMPION_2_ALLIANCE = 37497,
+ NPC_CRUCIBLE_OF_SOULS = 37094,
};
#endif
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
index 0425a34d8dc..bad4b8e38b2 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
index 2eab25c51c1..673362f59a0 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
index eb8b0d06146..b074c309cb3 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index cd9037d6489..e1ae8374278 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
index 2aab61b006c..1557fd1a56b 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index 655856208cc..3c4d05854bb 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
index 4c74488b6a6..26ece7db662 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -270,7 +270,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader
{
for (std::list<GameObject*>::const_iterator itr = blockList.begin(); itr != blockList.end(); ++itr)
{
- if ((*itr)->isVisibleForInState(target))
+ if (!(*itr)->IsInvisibleDueToDespawn())
{
if ((*itr)->IsInBetween(caster, target, 4.0f))
{
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 33ce2ac71fd..8bcd0b8b8e2 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
index 7a6aefe90fb..d6b2c2e3a97 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp
index 29a89328336..24529801564 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
index 034bfafe8b0..91be62a33e7 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h
index e4282dfa5fa..728e0ccd955 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
index 57c14993e2d..9abcc669f09 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
index 1b40dab2aad..c665d3cdf5a 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
index ea1ac951eb6..46070090063 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index 07ade9c0201..1085e993322 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
index 7e417a840f2..5071802f897 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -52,6 +52,7 @@ enum Creatures
enum ConstrictorSpells
{
SPELL_GRIP_OF_SLAD_RAN = 55093,
+ SPELL_SNAKE_WRAP = 55126,
SPELL_VENOMOUS_BITE = 54987,
H_SPELL_VENOMOUS_BITE = 58996
};
@@ -65,6 +66,8 @@ static Position SpawnLoc[]=
{1716.76f, 635.159f, 129.282f, 0.191986f}
};
+#define DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES 1
+
class boss_slad_ran : public CreatureScript
{
public:
@@ -89,6 +92,7 @@ public:
uint8 uiPhase;
+ std::set<uint64> lWrappedPlayers;
SummonList lSummons;
InstanceScript* instance;
@@ -100,6 +104,7 @@ public:
uiVenomBoltTimer = 15*IN_MILLISECONDS;
uiSpawnTimer = 5*IN_MILLISECONDS;
uiPhase = 0;
+ lWrappedPlayers.clear();
lSummons.DespawnAll();
@@ -171,6 +176,7 @@ public:
void JustDied(Unit* /*killer*/)
{
DoScriptText(SAY_DEATH, me);
+ lSummons.DespawnAll();
if (instance)
instance->SetData(DATA_SLAD_RAN_EVENT, DONE);
@@ -186,6 +192,17 @@ public:
summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
lSummons.Summon(summoned);
}
+
+ void SetGUID(uint64 guid, int32 type)
+ {
+ if (type == DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES)
+ lWrappedPlayers.insert(guid);
+ }
+
+ bool WasWrapped(uint64 guid)
+ {
+ return lWrappedPlayers.count(guid);
+ }
};
};
@@ -215,10 +232,26 @@ public:
{
if (!UpdateVictim())
return;
+
if (uiGripOfSladRanTimer <= diff)
{
- DoCast(me->getVictim(), SPELL_GRIP_OF_SLAD_RAN);
- uiGripOfSladRanTimer = 5*IN_MILLISECONDS;
+ Unit* target = me->getVictim();
+
+ DoCast(target, SPELL_GRIP_OF_SLAD_RAN);
+ uiGripOfSladRanTimer = urand(3, 6)*IN_MILLISECONDS;
+
+ Aura* grip = target->GetAura(SPELL_GRIP_OF_SLAD_RAN, me->GetGUID());
+ if (grip && grip->GetStackAmount() == 5)
+ {
+ target->RemoveAurasDueToSpell(SPELL_GRIP_OF_SLAD_RAN, me->GetGUID());
+ target->CastSpell(target, SPELL_SNAKE_WRAP, true);
+
+ if (TempSummon* _me = me->ToTempSummon())
+ if (Creature* sladran = _me->GetSummoner()->ToCreature())
+ sladran->AI()->SetGUID(target->GetGUID() ,DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES);
+
+ me->DespawnOrUnsummon();
+ }
} else uiGripOfSladRanTimer -= diff;
}
@@ -265,9 +298,28 @@ public:
};
+class achievement_snakes_whyd_it_have_to_be_snakes : public AchievementCriteriaScript
+{
+ public:
+ achievement_snakes_whyd_it_have_to_be_snakes() : AchievementCriteriaScript("achievement_snakes_whyd_it_have_to_be_snakes")
+ {
+ }
+
+ bool OnCheck(Player* player, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (boss_slad_ran::boss_slad_ranAI* sladRanAI = CAST_AI(boss_slad_ran::boss_slad_ranAI, target->GetAI()))
+ return !sladRanAI->WasWrapped(player->GetGUID());
+ return false;
+ }
+};
+
void AddSC_boss_slad_ran()
{
new boss_slad_ran();
new mob_slad_ran_constrictor();
new mob_slad_ran_viper();
-}
+ new achievement_snakes_whyd_it_have_to_be_snakes();
+} \ No newline at end of file
diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h
index 08cdd24c724..4c1c04c5559 100644
--- a/src/server/scripts/Northrend/Gundrak/gundrak.h
+++ b/src/server/scripts/Northrend/Gundrak/gundrak.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index d4c55d80dc0..c0fc722385b 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index b351d7de9d7..3b15bba5c5d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -239,25 +239,6 @@ class boss_blood_council_controller : public CreatureScript
_invocationOrder[1] = InvocationData(instance->GetData64(DATA_PRINCE_KELESETH_GUID), SPELL_INVOCATION_OF_BLOOD_KELESETH, EMOTE_KELESETH_INVOCATION, 71080);
_invocationOrder[2] = InvocationData(instance->GetData64(DATA_PRINCE_TALDARAM_GUID), SPELL_INVOCATION_OF_BLOOD_TALDARAM, EMOTE_TALDARAM_INVOCATION, 71081);
}
-
- if (IsHeroic())
- {
- Map::PlayerList const &PlList = me->GetMap()->GetPlayers();
- if (PlList.isEmpty())
- return;
-
- for (Map::PlayerList::const_iterator i = PlList.begin(); i != PlList.end(); ++i)
- {
- if (Player* player = i->getSource())
- {
- if (player->isGameMaster())
- continue;
-
- if (player->isAlive())
- player->AddAura(SPELL_SHADOW_PRISON_DUMMY, player);
- }
- }
- }
}
void SetData(uint32 /*type*/, uint32 data)
@@ -297,8 +278,6 @@ class boss_blood_council_controller : public CreatureScript
killer->Kill(prince);
}
}
-
- instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SHADOW_PRISON_DUMMY);
}
void UpdateAI(uint32 const diff)
@@ -409,8 +388,6 @@ class boss_prince_keleseth_icc : public CreatureScript
me->SetHealth(_spawnHealth);
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
me->SetReactState(REACT_DEFENSIVE);
- if (IsHeroic())
- DoCast(me, SPELL_SHADOW_PRISON);
}
void EnterCombat(Unit* /*who*/)
@@ -421,6 +398,12 @@ class boss_prince_keleseth_icc : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 600000);
events.ScheduleEvent(EVENT_SHADOW_RESONANCE, urand(10000, 15000));
events.ScheduleEvent(EVENT_SHADOW_LANCE, 2000);
+
+ if (IsHeroic())
+ {
+ me->AddAura(SPELL_SHADOW_PRISON, me);
+ DoCast(me, SPELL_SHADOW_PRISON_DUMMY);
+ }
}
void JustDied(Unit* /*killer*/)
@@ -629,8 +612,6 @@ class boss_prince_taldaram_icc : public CreatureScript
me->SetHealth(_spawnHealth);
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
me->SetReactState(REACT_DEFENSIVE);
- if (IsHeroic())
- DoCast(me, SPELL_SHADOW_PRISON);
}
void MoveInLineOfSight(Unit* /*who*/)
@@ -645,6 +626,8 @@ class boss_prince_taldaram_icc : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 600000);
events.ScheduleEvent(EVENT_GLITTERING_SPARKS, urand(12000, 15000));
events.ScheduleEvent(EVENT_CONJURE_FLAME, 20000);
+ if (IsHeroic())
+ me->AddAura(SPELL_SHADOW_PRISON, me);
}
void JustDied(Unit* /*killer*/)
@@ -852,8 +835,6 @@ class boss_prince_valanar_icc : public CreatureScript
me->SetHealth(me->GetMaxHealth());
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
me->SetReactState(REACT_DEFENSIVE);
- if (IsHeroic())
- DoCast(me, SPELL_SHADOW_PRISON);
}
void MoveInLineOfSight(Unit* /*who*/)
@@ -868,6 +849,8 @@ class boss_prince_valanar_icc : public CreatureScript
events.ScheduleEvent(EVENT_BERSERK, 600000);
events.ScheduleEvent(EVENT_KINETIC_BOMB, urand(18000, 24000));
events.ScheduleEvent(EVENT_SHOCK_VORTEX, urand(15000, 20000));
+ if (IsHeroic())
+ me->AddAura(SPELL_SHADOW_PRISON, me);
}
void JustDied(Unit* /*killer*/)
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 559c9ae6aa9..d775e5778f7 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
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 4703e827522..8396b6e6c85 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index b117dadf045..f90bc5d445e 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -291,6 +291,10 @@ class npc_stinky_icc : public CreatureScript
_events.Reset();
_events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000));
_events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(3000, 7000));
+ }
+
+ void EnterCombat(Unit* /*target*/)
+ {
DoCast(me, SPELL_PLAGUE_STENCH);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 9e4079a7a15..af9bc3f43a3 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -375,7 +375,7 @@ class boss_lady_deathwhisper : public CreatureScript
{
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
- events.ScheduleEvent(EVENT_P2_SUMMON_WAVE, urand(30000, 60000), 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_P2_SUMMON_WAVE, 45000, 0, PHASE_TWO);
}
}
}
@@ -438,7 +438,7 @@ class boss_lady_deathwhisper : public CreatureScript
case EVENT_DEATH_AND_DECAY:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
DoCast(target, SPELL_DEATH_AND_DECAY);
- events.ScheduleEvent(EVENT_DEATH_AND_DECAY, urand(10000, 12000));
+ events.ScheduleEvent(EVENT_DEATH_AND_DECAY, urand(22000, 30000));
break;
case EVENT_DOMINATE_MIND_H:
Talk(SAY_DOMINATE_MIND);
@@ -449,7 +449,7 @@ class boss_lady_deathwhisper : public CreatureScript
break;
case EVENT_P1_SUMMON_WAVE:
SummonWaveP1();
- events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, 60000, 0, PHASE_ONE);
+ events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, IsHeroic() ? 45000 : 60000, 0, PHASE_ONE);
break;
case EVENT_P1_SHADOW_BOLT:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
@@ -485,7 +485,7 @@ class boss_lady_deathwhisper : public CreatureScript
break;
case EVENT_P2_SUMMON_WAVE:
SummonWaveP2();
- events.ScheduleEvent(EVENT_P2_SUMMON_WAVE, 60000, 0, PHASE_TWO);
+ events.ScheduleEvent(EVENT_P2_SUMMON_WAVE, 45000, 0, PHASE_TWO);
break;
case EVENT_BERSERK:
DoCast(me, SPELL_BERSERK);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index a52965f925f..04ae6f933d8 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index d5186833364..0d3640504c1 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -815,38 +815,45 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
}
};
+class ExactDistanceCheck
+{
+ public:
+ ExactDistanceCheck(Unit* source, float dist) : _source(source), _dist(dist) {}
+
+ bool operator()(Unit* unit)
+ {
+ return _source->GetExactDist2d(unit) > _dist;
+ }
+
+ private:
+ Unit* _source;
+ float _dist;
+};
+
class spell_putricide_slime_puddle : public SpellScriptLoader
{
public:
spell_putricide_slime_puddle() : SpellScriptLoader("spell_putricide_slime_puddle") { }
- class spell_putricide_slime_puddle_AuraScript : public AuraScript
+ class spell_putricide_slime_puddle_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_putricide_slime_puddle_AuraScript);
+ PrepareSpellScript(spell_putricide_slime_puddle_SpellScript);
- void HandleTriggerSpell(AuraEffect const* aurEff)
+ void ScaleRange(std::list<Unit*>& targets)
{
- PreventDefaultAction();
- if (Unit* caster = GetCaster())
- {
- int32 radiusMod = 4;
- if (Aura* size = caster->GetAura(70347))
- radiusMod += size->GetStackAmount();
-
- uint32 triggerSpellId = GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell;
- caster->CastCustomSpell(triggerSpellId, SPELLVALUE_RADIUS_MOD, radiusMod * 100, caster, true);
- }
+ targets.remove_if(ExactDistanceCheck(GetCaster(), 2.5f * GetCaster()->GetFloatValue(OBJECT_FIELD_SCALE_X)));
}
void Register()
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_putricide_slime_puddle_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_putricide_slime_puddle_SpellScript::ScaleRange, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_putricide_slime_puddle_SpellScript::ScaleRange, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY);
}
};
- AuraScript* GetAuraScript() const
+ SpellScript* GetSpellScript() const
{
- return new spell_putricide_slime_puddle_AuraScript();
+ return new spell_putricide_slime_puddle_SpellScript();
}
};
@@ -1051,7 +1058,6 @@ class spell_putricide_unbound_plague : public SpellScriptLoader
return;
uint32 plagueId = sSpellMgr->GetSpellIdForDifficulty(SPELL_UNBOUND_PLAGUE, GetCaster());
- uint32 searcherId = sSpellMgr->GetSpellIdForDifficulty(SPELL_UNBOUND_PLAGUE_SEARCHER, GetCaster());
if (!GetHitUnit()->HasAura(plagueId))
{
@@ -1061,10 +1067,10 @@ class spell_putricide_unbound_plague : public SpellScriptLoader
{
if (Aura* newPlague = professor->AddAura(plagueId, GetHitUnit()))
{
- newPlague->SetMaxDuration(oldPlague->GetDuration());
+ newPlague->SetMaxDuration(oldPlague->GetMaxDuration());
newPlague->SetDuration(oldPlague->GetDuration());
oldPlague->Remove();
- GetCaster()->RemoveAurasDueToSpell(searcherId);
+ GetCaster()->RemoveAurasDueToSpell(SPELL_UNBOUND_PLAGUE_SEARCHER);
GetCaster()->CastSpell(GetCaster(), SPELL_PLAGUE_SICKNESS, true);
GetCaster()->CastSpell(GetCaster(), SPELL_UNBOUND_PLAGUE_PROTECTION, true);
professor->CastSpell(GetHitUnit(), SPELL_UNBOUND_PLAGUE_SEARCHER, true);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 58ae5f48797..a4cd96aa9f6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index dca53f1a5e7..25610341a2f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -242,6 +242,9 @@ class boss_sindragosa : public CreatureScript
{
if (action == ACTION_START_FROSTWYRM)
{
+ if (TempSummon* summon = me->ToTempSummon())
+ summon->SetTempSummonType(TEMPSUMMON_DEAD_DESPAWN);
+
instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, 255);
if (me->isDead())
return;
@@ -338,7 +341,7 @@ class boss_sindragosa : public CreatureScript
{
if (uint32 spellId = sSpellMgr->GetSpellIdForDifficulty(_isThirdPhase ? SPELL_FROST_BREATH_P2 : SPELL_FROST_BREATH_P1, me))
{
- if (player->GetQuestStatus(QUEST_FROST_INFUSION) != QUEST_STATUS_REWARDED && spellId == spell->Id)
+ if (player->GetQuestStatus(QUEST_FROST_INFUSION) == QUEST_STATUS_INCOMPLETE && spellId == spell->Id)
{
if (Item* shadowsEdge = player->GetWeaponForAttack(BASE_ATTACK, true))
{
@@ -968,10 +971,10 @@ class spell_sindragosa_s_fury : public SpellScriptLoader
{
PreventHitDefaultEffect(effIndex);
- if (!GetHitUnit()->isAlive())
+ if (!GetHitUnit()->isAlive() || !_targetCount)
return;
- float resistance = float(GetHitUnit()->GetResistance(GetFirstSchoolInMask(SpellSchoolMask(GetSpellInfo()->SchoolMask))));
+ float resistance = float(GetHitUnit()->GetResistance(SpellSchoolMask(GetSpellInfo()->SchoolMask)));
uint32 minResistFactor = uint32((resistance / (resistance + 510.0f))* 10.0f) * 2;
uint32 randomResist = urand(0, (9 - minResistFactor) * 100)/100 + minResistFactor;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 1688624be91..1fbdb7f4677 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -1227,7 +1227,7 @@ class npc_tirion_fordring_tft : public CreatureScript
SetEquipmentSlots(true); // remove glow on ashbringer
}
- void sGossipSelect(Player* player, uint32 sender, uint32 action)
+ void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action)
{
if (me->GetCreatureInfo()->GossipMenuId == sender && !action)
{
@@ -1335,7 +1335,7 @@ class npc_shambling_horror_icc : public CreatureScript
void DamageTaken(Unit* /*attacker*/, uint32& damage)
{
- if (IsHeroic() && me->HealthBelowPctDamaged(20, damage))
+ if (!_frenzied && IsHeroic() && me->HealthBelowPctDamaged(20, damage))
{
_frenzied = true;
DoCast(me, SPELL_FRENZY, true);
@@ -1407,14 +1407,14 @@ class npc_raging_spirit : public CreatureScript
DoCast(me, SPELL_BOSS_HITTIN_YA, true);
}
- void IsSummonedBy(Unit* summoner)
+ void IsSummonedBy(Unit* /*summoner*/)
{
// player is the spellcaster so register summon manually
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING)))
lichKing->AI()->JustSummoned(me);
}
- void JustDied(Unit* killer)
+ void JustDied(Unit* /*killer*/)
{
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING)))
lichKing->AI()->SummonedCreatureDespawn(me);
@@ -1931,7 +1931,7 @@ class npc_spirit_bomb : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner)
+ void IsSummonedBy(Unit* /*summoner*/)
{
float destX, destY, destZ;
me->GetPosition(destX, destY);
@@ -1954,7 +1954,7 @@ class npc_spirit_bomb : public CreatureScript
{
}
- void UpdateAI(uint32 const diff)
+ void UpdateAI(uint32 const /*diff*/)
{
UpdateVictim();
// no melee attacks
@@ -1983,7 +1983,7 @@ class npc_broken_frostmourne : public CreatureScript
_events.Reset();
}
- void IsSummonedBy(Unit* summoner)
+ void IsSummonedBy(Unit* /*summoner*/)
{
_events.SetPhase(PHASE_OUTRO);
_events.ScheduleEvent(EVENT_OUTRO_KNOCK_BACK, 3000, 0, PHASE_OUTRO);
@@ -2087,7 +2087,6 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* newCaster = GetTarget();
switch (GetTargetApplication()->GetRemoveMode())
{
case AURA_REMOVE_BY_ENEMY_SPELL:
@@ -2250,7 +2249,7 @@ class spell_the_lich_king_shadow_trap_visual : public SpellScriptLoader
{
PrepareAuraScript(spell_the_lich_king_shadow_trap_visual_AuraScript);
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes mode)
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_TRAP_AURA, TRIGGERED_NONE);
@@ -2633,7 +2632,7 @@ class spell_the_lich_king_cast_back_to_caster : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_cast_back_to_caster_SpellScript);
- void HandleScript(SpellEffIndex effIndex)
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 5f62c2b5424..96072ad0e83 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index ece966fcda5..085aea139a3 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
index 1242e90c2f3..0266db5f26b 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index a7235e34f3a..2a61d00d119 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -335,8 +335,12 @@ class instance_icecrown_citadel : public InstanceMapScript
return entry;
}
- void OnCreatureDeath(Creature* creature)
+ void OnUnitDeath(Unit* unit)
{
+ Creature* creature = unit->ToCreature();
+ if (!creature)
+ return;
+
switch (creature->GetEntry())
{
case NPC_YMIRJAR_BATTLE_MAIDEN:
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index c2107e88b2e..942cfd7c5a8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -111,7 +111,7 @@ public:
{
_EnterCombat();
DoScriptText(SAY_AGGRO, me);
- events.ScheduleEvent(EVENT_IMPALE, 10000 + rand()%10000);
+ events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
events.ScheduleEvent(EVENT_LOCUST, 90000);
events.ScheduleEvent(EVENT_BERSERK, 600000);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
index 97594c168ef..95f07ac212a 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 0462f669d88..2964cb5a699 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
index 1849849d907..0ef4e3d74c2 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index bbf5b669494..4c0efc4ac98 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 3badccd3a80..e353a71b0b9 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
index bb8a0909df4..7a2d3ec55ab 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 9c3c9156d63..f70f36e77a3 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -683,7 +683,7 @@ public:
// Note: summon must be done by trigger and not by KT.
// Otherwise, they attack immediately as KT is in combat.
- for (uint8 i = 0; i <= MAX_ABOMINATIONS; ++i)
+ for (uint8 i = 0; i < MAX_ABOMINATIONS; ++i)
{
if (Creature* sum = trigger->SummonCreature(NPC_ABOMINATION, PosAbominations[i]))
{
@@ -692,7 +692,7 @@ public:
sum->SetReactState(REACT_DEFENSIVE);
}
}
- for (uint8 i = 0; i <= MAX_WASTES; ++i)
+ for (uint8 i = 0; i < MAX_WASTES; ++i)
{
if (Creature* sum = trigger->SummonCreature(NPC_WASTE, PosWastes[i]))
{
@@ -701,7 +701,7 @@ public:
sum->SetReactState(REACT_DEFENSIVE);
}
}
- for (uint8 i = 0; i <= MAX_WEAVERS; ++i)
+ for (uint8 i = 0; i < MAX_WEAVERS; ++i)
{
if (Creature* sum = trigger->SummonCreature(NPC_WEAVER, PosWeavers[i]))
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
index 6db29be8fbd..4c2348d30c9 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index e98b004f9e9..0163101b8ed 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 04627981ef3..7143b940916 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -107,7 +107,7 @@ public:
events.ScheduleEvent(EVENT_CURSE, 10000+rand()%15000);
events.ScheduleEvent(EVENT_WARRIOR, 30000);
if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL)
- events.ScheduleEvent(EVENT_BLINK, 20000 + rand()%20000);
+ events.ScheduleEvent(EVENT_BLINK, urand(20000, 40000));
}
}
@@ -153,7 +153,7 @@ public:
{
case EVENT_CURSE:
DoCastAOE(SPELL_CURSE_PLAGUEBRINGER);
- events.ScheduleEvent(EVENT_CURSE, 50000 + rand()%10000);
+ events.ScheduleEvent(EVENT_CURSE, urand(50000, 60000));
return;
case EVENT_WARRIOR:
DoScriptText(SAY_SUMMON, me);
@@ -173,7 +173,7 @@ public:
me->RemoveAllAuras();
me->NearTeleportTo(TELE_X, TELE_Y, TELE_Z, TELE_O);
events.Reset();
- events.ScheduleEvent(EVENT_WAVE, 2000 + rand()%3000);
+ events.ScheduleEvent(EVENT_WAVE, urand(2000, 5000));
waveCount = 0;
return;
case EVENT_WAVE:
@@ -188,7 +188,7 @@ public:
SummonUndead(MOB_GUARDIAN, RAID_MODE(5, 10));break;
}
++waveCount;
- events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, 30000 + rand()%15000);
+ events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, urand(30000, 45000));
return;
case EVENT_GROUND:
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
index 10f1b809694..a9ed499c5e5 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -91,7 +91,7 @@ public:
_EnterCombat();
Enraged = false;
DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2), me);
- events.ScheduleEvent(EVENT_HATEFUL, 1200);
+ events.ScheduleEvent(EVENT_HATEFUL, 1000);
events.ScheduleEvent(EVENT_BERSERK, 360000);
if (instance)
@@ -131,7 +131,7 @@ public:
DoCast(pMostHPTarget, RAID_MODE(SPELL_HATEFUL_STRIKE, H_SPELL_HATEFUL_STRIKE), true);
- events.ScheduleEvent(EVENT_HATEFUL, 1200);
+ events.ScheduleEvent(EVENT_HATEFUL, 1000);
break;
}
case EVENT_BERSERK:
@@ -140,7 +140,7 @@ public:
events.ScheduleEvent(EVENT_SLIME, 2000);
break;
case EVENT_SLIME:
- DoCast(me->getVictim(), SPELL_SLIME_BOLT);
+ DoCast(me->getVictim(), SPELL_SLIME_BOLT, true);
events.ScheduleEvent(EVENT_SLIME, 2000);
break;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
index 7adc17cc852..b27ab3730da 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index d620289a72f..16b1e7ac996 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -271,14 +271,18 @@ public:
break;
}
case EVENT_FLIGHT:
- phase = PHASE_FLIGHT;
- events.SetPhase(PHASE_FLIGHT);
- me->SetReactState(REACT_PASSIVE);
- me->AttackStop();
- float x, y, z, o;
- me->GetHomePosition(x, y, z, o);
- me->GetMotionMaster()->MovePoint(1, x, y, z);
- return;
+ if (HealthAbovePct(10))
+ {
+ phase = PHASE_FLIGHT;
+ events.SetPhase(PHASE_FLIGHT);
+ me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
+ float x, y, z, o;
+ me->GetHomePosition(x, y, z, o);
+ me->GetMotionMaster()->MovePoint(1, x, y, z);
+ return;
+ }
+ break;
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index c2099b1346b..b0138fb1a5e 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 077aa708e14..32cb279ce5f 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -121,24 +121,24 @@ public:
LoadMinionData(minionData);
}
- std::set<uint64> HeiganEruptionGUID[4];
- uint64 GothikGateGUID;
- uint64 HorsemenChestGUID;
- uint64 SapphironGUID;
- uint64 uiFaerlina;
- uint64 uiThane;
- uint64 uiLady;
- uint64 uiBaron;
- uint64 uiSir;
-
- uint64 uiThaddius;
- uint64 uiHeigan;
- uint64 uiFeugen;
- uint64 uiStalagg;
-
- uint64 uiKelthuzad;
- uint64 uiKelthuzadTrigger;
- uint64 uiPortals[4];
+ std::set<uint64> heiganEruptionGUID[4];
+ uint64 gothikGateGUID;
+ uint64 horsemenChestGUID;
+ uint64 sapphironGUID;
+ uint64 faerlinaGUID;
+ uint64 thaneGUID;
+ uint64 ladyGUID;
+ uint64 baronGUID;
+ uint64 sirGUID;
+
+ uint64 thaddiusGUID;
+ uint64 heiganGUID;
+ uint64 feugenGUID;
+ uint64 stalaggGUID;
+
+ uint64 kelthuzadGUID;
+ uint64 kelthuzadTriggerGUID;
+ uint64 portalsGUID[4];
uint32 AbominationCount;
@@ -147,41 +147,46 @@ public:
time_t minHorsemenDiedTime;
time_t maxHorsemenDiedTime;
+ uint32 playerDied;
+
void Initialize()
{
- GothikGateGUID = 0;
- HorsemenChestGUID = 0;
- SapphironGUID = 0;
- uiFaerlina = 0;
- uiThane = 0;
- uiLady = 0;
- uiBaron = 0;
- uiSir = 0;
- uiThaddius = 0;
- uiHeigan = 0;
- uiFeugen = 0;
- uiStalagg = 0;
- uiKelthuzad = 0;
- uiKelthuzadTrigger = 0;
-
- memset(uiPortals, 0, sizeof(uiPortals));
+ gothikGateGUID = 0;
+ horsemenChestGUID = 0;
+ sapphironGUID = 0;
+ faerlinaGUID = 0;
+ thaneGUID = 0;
+ ladyGUID = 0;
+ baronGUID = 0;
+ sirGUID = 0;
+ thaddiusGUID = 0;
+ heiganGUID = 0;
+ feugenGUID = 0;
+ stalaggGUID = 0;
+ kelthuzadGUID = 0;
+ kelthuzadTriggerGUID = 0;
+
+ playerDied = 0;
+ gothikDoorState = GO_STATE_ACTIVE;
+
+ memset(portalsGUID, 0, sizeof(portalsGUID));
}
void OnCreatureCreate(Creature* creature)
{
switch (creature->GetEntry())
{
- case 15989: SapphironGUID = creature->GetGUID(); return;
- case 15953: uiFaerlina = creature->GetGUID(); return;
- case 16064: uiThane = creature->GetGUID(); return;
- case 16065: uiLady = creature->GetGUID(); return;
- case 30549: uiBaron = creature->GetGUID(); return;
- case 16063: uiSir = creature->GetGUID(); return;
- case 15928: uiThaddius = creature->GetGUID(); return;
- case 15936: uiHeigan = creature->GetGUID(); return;
- case 15930: uiFeugen = creature->GetGUID(); return;
- case 15929: uiStalagg = creature->GetGUID(); return;
- case 15990: uiKelthuzad = creature->GetGUID(); return;
+ case 15989: sapphironGUID = creature->GetGUID(); return;
+ case 15953: faerlinaGUID = creature->GetGUID(); return;
+ case 16064: thaneGUID = creature->GetGUID(); return;
+ case 16065: ladyGUID = creature->GetGUID(); return;
+ case 30549: baronGUID = creature->GetGUID(); return;
+ case 16063: sirGUID = creature->GetGUID(); return;
+ case 15928: thaddiusGUID = creature->GetGUID(); return;
+ case 15936: heiganGUID = creature->GetGUID(); return;
+ case 15930: feugenGUID = creature->GetGUID(); return;
+ case 15929: stalaggGUID = creature->GetGUID(); return;
+ case 15990: kelthuzadGUID = creature->GetGUID(); return;
}
AddMinion(creature, true);
@@ -197,7 +202,7 @@ public:
if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287)
{
uint32 section = GetEruptionSection(go->GetPositionX(), go->GetPositionY());
- HeiganEruptionGUID[section].insert(go->GetGUID());
+ heiganEruptionGUID[section].insert(go->GetGUID());
return;
}
@@ -205,29 +210,29 @@ public:
switch (go->GetEntry())
{
case GO_GOTHIK_GATE:
- GothikGateGUID = go->GetGUID();
+ gothikGateGUID = go->GetGUID();
go->SetGoState(gothikDoorState);
break;
case GO_HORSEMEN_CHEST:
- HorsemenChestGUID = go->GetGUID();
+ horsemenChestGUID = go->GetGUID();
break;
case GO_HORSEMEN_CHEST_HERO:
- HorsemenChestGUID = go->GetGUID();
+ horsemenChestGUID = go->GetGUID();
break;
case GO_KELTHUZAD_PORTAL01:
- uiPortals[0] = go->GetGUID();
+ portalsGUID[0] = go->GetGUID();
break;
case GO_KELTHUZAD_PORTAL02:
- uiPortals[1] = go->GetGUID();
+ portalsGUID[1] = go->GetGUID();
break;
case GO_KELTHUZAD_PORTAL03:
- uiPortals[2] = go->GetGUID();
+ portalsGUID[2] = go->GetGUID();
break;
case GO_KELTHUZAD_PORTAL04:
- uiPortals[3] = go->GetGUID();
+ portalsGUID[3] = go->GetGUID();
break;
case GO_KELTHUZAD_TRIGGER:
- uiKelthuzadTrigger = go->GetGUID();
+ kelthuzadTriggerGUID = go->GetGUID();
break;
default:
break;
@@ -242,16 +247,16 @@ public:
{
uint32 section = GetEruptionSection(go->GetPositionX(), go->GetPositionY());
- HeiganEruptionGUID[section].erase(go->GetGUID());
+ heiganEruptionGUID[section].erase(go->GetGUID());
return;
}
switch (go->GetEntry())
{
case GO_BIRTH:
- if (SapphironGUID)
+ if (sapphironGUID)
{
- if (Creature* pSapphiron = instance->GetCreature(SapphironGUID))
+ if (Creature* pSapphiron = instance->GetCreature(sapphironGUID))
pSapphiron->AI()->DoAction(DATA_SAPPHIRON_BIRTH);
return;
}
@@ -263,6 +268,15 @@ public:
AddDoor(go, false);
}
+ void OnUnitDeath(Unit* unit)
+ {
+ if (unit->GetTypeId() == TYPEID_PLAYER && IsEncounterInProgress())
+ {
+ playerDied = 1;
+ SaveToDB();
+ }
+ }
+
void SetData(uint32 id, uint32 value)
{
switch (id)
@@ -271,11 +285,10 @@ public:
HeiganErupt(value);
break;
case DATA_GOTHIK_GATE:
- if (GameObject* gothikGate = instance->GetGameObject(GothikGateGUID))
+ if (GameObject* gothikGate = instance->GetGameObject(gothikGateGUID))
gothikGate->SetGoState(GOState(value));
gothikDoorState = GOState(value);
break;
-
case DATA_HORSEMEN0:
case DATA_HORSEMEN1:
case DATA_HORSEMEN2:
@@ -319,35 +332,35 @@ public:
switch (id)
{
case DATA_FAERLINA:
- return uiFaerlina;
+ return faerlinaGUID;
case DATA_THANE:
- return uiThane;
+ return thaneGUID;
case DATA_LADY:
- return uiLady;
+ return ladyGUID;
case DATA_BARON:
- return uiBaron;
+ return baronGUID;
case DATA_SIR:
- return uiSir;
+ return sirGUID;
case DATA_THADDIUS:
- return uiThaddius;
+ return thaddiusGUID;
case DATA_HEIGAN:
- return uiHeigan;
+ return heiganGUID;
case DATA_FEUGEN:
- return uiFeugen;
+ return feugenGUID;
case DATA_STALAGG:
- return uiStalagg;
+ return stalaggGUID;
case DATA_KELTHUZAD:
- return uiKelthuzad;
+ return kelthuzadGUID;
case DATA_KELTHUZAD_PORTAL01:
- return uiPortals[0];
+ return portalsGUID[0];
case DATA_KELTHUZAD_PORTAL02:
- return uiPortals[1];
+ return portalsGUID[1];
case DATA_KELTHUZAD_PORTAL03:
- return uiPortals[2];
+ return portalsGUID[2];
case DATA_KELTHUZAD_PORTAL04:
- return uiPortals[3];
+ return portalsGUID[3];
case DATA_KELTHUZAD_TRIGGER:
- return uiKelthuzadTrigger;
+ return kelthuzadTriggerGUID;
}
return 0;
}
@@ -359,7 +372,7 @@ public:
if (id == BOSS_HORSEMEN && state == DONE)
{
- if (GameObject* pHorsemenChest = instance->GetGameObject(HorsemenChestGUID))
+ if (GameObject* pHorsemenChest = instance->GetGameObject(horsemenChestGUID))
pHorsemenChest->SetRespawnTime(pHorsemenChest->GetRespawnDelay());
}
@@ -373,7 +386,7 @@ public:
if (i == section)
continue;
- for (std::set<uint64>::const_iterator itr = HeiganEruptionGUID[i].begin(); itr != HeiganEruptionGUID[i].end(); ++itr)
+ for (std::set<uint64>::const_iterator itr = heiganEruptionGUID[i].begin(); itr != heiganEruptionGUID[i].end(); ++itr)
{
if (GameObject* pHeiganEruption = instance->GetGameObject(*itr))
{
@@ -384,6 +397,21 @@ public:
}
}
+ // This Function is called in CheckAchievementCriteriaMeet and CheckAchievementCriteriaMeet is called before SetBossState(bossId, DONE),
+ // so to check if all bosses are done the checker must exclude 1 boss, the last done, if there is at most 1 encouter in progress when is
+ // called this function then all bosses are done. The one boss that check is the boss that calls this function, so it is dead.
+ bool AreAllEncoutersDone()
+ {
+ uint32 numBossAlive = 0;
+ for (uint32 i = 0; i < MAX_BOSS_NUMBER; ++i)
+ if (GetBossState(i) != DONE)
+ numBossAlive++;
+
+ if (numBossAlive > 1)
+ return false;
+ return true;
+ }
+
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscvalue1 = 0*/)
{
switch (criteria_id)
@@ -396,12 +424,22 @@ public:
if (Difficulty(instance->GetSpawnMode()) == RAID_DIFFICULTY_25MAN_NORMAL && (maxHorsemenDiedTime - minHorsemenDiedTime) < 15)
return true;
return false;
- case 13233: // Criteria for achievement 2186: The Immortal (25-man)
- // TODO.
- break;
- case 13237: // Criteria for achievement 2187: The Undying (10-man)
- // TODO.
- break;
+ // Difficulty checks are done on DB.
+ // Criteria for achievement 2186: The Immortal (25-man)
+ case 13233: // The Four Horsemen
+ case 13234: // Maexxna
+ case 13235: // Thaddius
+ case 13236: // Loatheb
+ case 7616: // Kel'Thuzad
+ // Criteria for achievement 2187: The Undying (10-man)
+ case 13237: // The Four Horsemen
+ case 13238: // Maexxna
+ case 13239: // Loatheb
+ case 13240: // Thaddius
+ case 7617: // Kel'Thuzad
+ if (AreAllEncoutersDone() && !playerDied)
+ return true;
+ return false;
}
return false;
}
@@ -409,16 +447,22 @@ public:
std::string GetSaveData()
{
std::ostringstream saveStream;
- saveStream << GetBossSaveData() << ' ' << gothikDoorState;
+ saveStream << GetBossSaveData() << gothikDoorState << ' ' << playerDied;
return saveStream.str();
}
void Load(const char * data)
{
std::istringstream loadStream(LoadBossState(data));
- uint32 buff;
+ uint32 temp, buff, buff2;
+
+ for (uint32 i = 0; i < MAX_BOSS_NUMBER; ++i)
+ loadStream >> temp;
+
loadStream >> buff;
gothikDoorState = GOState(buff);
+ loadStream >> buff2;
+ playerDied = buff2;
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index bb25ad691e0..43393aff844 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 282e6b3eb98..8e995a9b260 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -240,6 +240,8 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
_cannotMove = true;
+
+ me->SetFlying(true);
}
uint32 GetData(uint32 data)
@@ -351,6 +353,8 @@ public:
_EnterCombat();
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->SetFlying(false);
+
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Talk(SAY_AGGRO_P_ONE);
@@ -404,6 +408,7 @@ public:
void PrepareForVortex()
{
me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->SetFlying(true);
me->GetMotionMaster()->MovementExpired();
me->GetMotionMaster()->MovePoint(MOVE_VORTEX, MalygosPositions[1].GetPositionX(), MalygosPositions[1].GetPositionY(), MalygosPositions[1].GetPositionZ());
@@ -439,6 +444,7 @@ public:
me->SetInCombatWithZone();
break;
case MOVE_CENTER_PLATFORM:
+ // Malygos is already flying here, there is no need to set it again.
_cannotMove = false;
// malygos will move into center of platform and then he does not chase dragons, he just turns to his current target.
me->GetMotionMaster()->MoveIdle();
@@ -451,22 +457,21 @@ public:
SetPhase(PHASE_TWO, true);
me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->SetFlying(true);
me->GetMotionMaster()->MoveIdle();
me->GetMotionMaster()->MovePoint(MOVE_DEEP_BREATH_ROTATION, MalygosPhaseTwoWaypoints[0]);
- Creature* summon = me->SummonCreature(NPC_HOVER_DISK_CASTER, HoverDiskWaypoints[MAX_HOVER_DISK_WAYPOINTS-1]);
- if (summon && summon->IsAIEnabled)
- summon->AI()->DoAction(ACTION_HOVER_DISK_START_WP_2);
- summon = me->SummonCreature(NPC_HOVER_DISK_CASTER, HoverDiskWaypoints[0]);
- if (summon && summon->IsAIEnabled)
- summon->AI()->DoAction(ACTION_HOVER_DISK_START_WP_1);
-
for (uint8 i = 0; i < 2; i++)
{
+ // Starting position. One starts from the first waypoint and another from the last.
+ uint8 pos = !i ? MAX_HOVER_DISK_WAYPOINTS-1 : 0;
+ if (Creature* summon = me->SummonCreature(NPC_HOVER_DISK_CASTER, HoverDiskWaypoints[pos]))
+ if (summon->IsAIEnabled)
+ summon->AI()->DoAction(ACTION_HOVER_DISK_START_WP_1+i);
+
// not sure about its position.
- summon = me->SummonCreature(NPC_HOVER_DISK_MELEE, HoverDiskWaypoints[0]);
- if (summon)
+ if (Creature* summon = me->SummonCreature(NPC_HOVER_DISK_MELEE, HoverDiskWaypoints[0]))
summon->SetInCombatWithZone();
}
}
@@ -695,6 +700,7 @@ class spell_malygos_vortex_visual : public SpellScriptLoader
malygos->SetInCombatWithZone();
malygos->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ malygos->SetFlying(false);
malygos->GetMotionMaster()->MoveChase(caster->getVictim());
malygos->RemoveAura(SPELL_VORTEX_1);
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
index cc74ce9b8bc..b16cbffcd1c 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
index 4d4b8e90e7b..fcb54985357 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
index 0568bb13a8e..5e87ffb8973 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index caf6b64eea7..6a57444893f 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
index a8edd40d6b5..03f467ce180 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
index afbe3a123a8..4453ec94494 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/commander_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/commander_kolurg.cpp
index 0d537955ec5..6d07ac960b5 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/commander_kolurg.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/commander_kolurg.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp
index 1804c75987f..71a153c802a 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/commander_stoutbeard.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
index cb81c5d54fe..5af982bb694 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
index 58efd78dcee..cb88be89afd 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
+++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
index bb62b921289..fe00f5b97d8 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
index df606f61d57..b86e04f55bb 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
index 16c258af756..aef959aad70 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -289,6 +289,7 @@ public:
void JustDied(Unit* /*killer*/)
{
_JustDied();
+ DoCast(me, SPELL_DEATH_SPELL, true); // we cast the spell as triggered or the summon effect does not occur
}
void LeaveCombat()
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
index f3384b7ec15..28b606c19e1 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -144,8 +144,8 @@ public:
void JustDied(Unit* /*killer*/)
{
_JustDied();
-
Talk(SAY_DEATH);
+ DoCast(me, SPELL_DEATH_SPELL, true); // we cast the spell as triggered or the summon effect does not occur
}
private:
bool firstCoreEnergize;
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
index e6b3416b89c..46498a69c6f 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -58,8 +58,12 @@ public:
gameObjectList.clear();
}
- void OnCreatureDeath(Creature* creature)
+ void OnUnitDeath(Unit* unit)
{
+ Creature* creature = unit->ToCreature();
+ if (!creature)
+ return;
+
if (creature->GetEntry() != NPC_CENTRIFUGE_CONSTRUCT)
return;
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index f8839aa0028..c687aad8bd2 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -50,6 +50,12 @@ enum Drakes
NPC_ETERNOS = 27659
};
+enum Says
+{
+ SAY_VAROS = 0,
+ SAY_UROM = 1
+};
+
class npc_oculus_drake : public CreatureScript
{
public:
@@ -174,7 +180,38 @@ public:
};
+class npc_image_belgaristrasz : public CreatureScript
+{
+public:
+ npc_image_belgaristrasz() : CreatureScript("npc_image_belgaristrasz") { }
+
+ struct npc_image_belgaristraszAI : public ScriptedAI
+ {
+ npc_image_belgaristraszAI(Creature* creature) : ScriptedAI(creature) {}
+
+ void IsSummonedBy(Unit* summoner)
+ {
+ if (summoner->GetEntry() == NPC_VAROS)
+ {
+ Talk(SAY_VAROS);
+ me->DespawnOrUnsummon(60000);
+ }
+ if (summoner->GetEntry() == NPC_UROM)
+ {
+ Talk(SAY_UROM);
+ me->DespawnOrUnsummon(60000);
+ }
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_image_belgaristraszAI(creature);
+ }
+};
+
void AddSC_oculus()
{
new npc_oculus_drake();
+ new npc_image_belgaristrasz();
}
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h
index e04f2c8aab9..81d1e9f9ea8 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -71,6 +71,7 @@ enum OculusWorldStates
enum OculusSpells
{
- SPELL_CENTRIFUGE_SHIELD = 50053
+ SPELL_CENTRIFUGE_SHIELD = 50053,
+ SPELL_DEATH_SPELL = 50415
};
#endif
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
index 8c97766f787..e96801f3ecb 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -131,7 +131,7 @@ public:
m_uiChargingStatus = 0;
m_uiCharge_Timer = 1000;
- m_uiChangeStance_Timer = 20000 + rand()%5000;
+ m_uiChangeStance_Timer = urand(20000, 25000);
m_uiReflection_Timer = 8000;
m_uiKnockAway_Timer = 20000;
@@ -252,7 +252,7 @@ public:
break;
}
- m_uiChangeStance_Timer = 20000 + rand()%5000;
+ m_uiChangeStance_Timer = urand(20000, 25000);
return;
}
else
@@ -265,7 +265,7 @@ public:
if (m_uiReflection_Timer <= uiDiff)
{
DoCast(me, SPELL_SPELL_REFLECTION);
- m_uiReflection_Timer = 8000 + rand()%1000;
+ m_uiReflection_Timer = urand(8000, 9000);
}
else
m_uiReflection_Timer -= uiDiff;
@@ -273,7 +273,7 @@ public:
if (m_uiKnockAway_Timer <= uiDiff)
{
DoCast(me, SPELL_KNOCK_AWAY);
- m_uiKnockAway_Timer = 20000 + rand()%1000;
+ m_uiKnockAway_Timer = urand(20000, 21000);
}
else
m_uiKnockAway_Timer -= uiDiff;
@@ -281,7 +281,7 @@ public:
if (m_uiPummel_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_PUMMEL);
- m_uiPummel_Timer = 10000 + rand()%1000;
+ m_uiPummel_Timer = urand(10000, 11000);
}
else
m_uiPummel_Timer -= uiDiff;
@@ -289,7 +289,7 @@ public:
if (m_uiIronform_Timer <= uiDiff)
{
DoCast(me, SPELL_IRONFORM);
- m_uiIronform_Timer = 25000 + rand()%1000;
+ m_uiIronform_Timer = urand(25000, 26000);
}
else
m_uiIronform_Timer -= uiDiff;
@@ -302,7 +302,7 @@ public:
{
//not much point is this, better random target and more often?
DoCast(me->getVictim(), SPELL_INTERCEPT);
- m_uiIntercept_Timer = 45000 + rand()%1000;
+ m_uiIntercept_Timer = urand(45000, 46000);
}
else
m_uiIntercept_Timer -= uiDiff;
@@ -310,7 +310,7 @@ public:
if (m_uiWhirlwind_Timer <= uiDiff)
{
DoCast(me, SPELL_WHIRLWIND);
- m_uiWhirlwind_Timer = 10000 + rand()%1000;
+ m_uiWhirlwind_Timer = urand(10000, 11000);
}
else
m_uiWhirlwind_Timer -= uiDiff;
@@ -318,7 +318,7 @@ public:
if (m_uiCleave_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_CLEAVE);
- m_uiCleave_Timer = 8000 + rand()%1000;
+ m_uiCleave_Timer = urand(8000, 9000);
}
else
m_uiCleave_Timer -= uiDiff;
@@ -330,7 +330,7 @@ public:
if (m_uiMortalStrike_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_MORTAL_STRIKE);
- m_uiMortalStrike_Timer = 20000 + rand()%1000;
+ m_uiMortalStrike_Timer = urand(20000, 21000);
}
else
m_uiMortalStrike_Timer -= uiDiff;
@@ -338,7 +338,7 @@ public:
if (m_uiSlam_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_SLAM);
- m_uiSlam_Timer = 15000 + rand()%1000;
+ m_uiSlam_Timer = urand(15000, 16000);
}
else
m_uiSlam_Timer -= uiDiff;
@@ -381,8 +381,8 @@ public:
void Reset()
{
- m_uiArcWeld_Timer = 20000 + rand()%1000;
- m_uiRenewSteel_Timer = 10000 + rand()%1000;
+ m_uiArcWeld_Timer = urand(20000, 21000);
+ m_uiRenewSteel_Timer = urand(10000, 11000);
}
void EnterCombat(Unit* who)
@@ -406,7 +406,7 @@ public:
if (m_uiArcWeld_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_ARC_WELD);
- m_uiArcWeld_Timer = 20000 + rand()%1000;
+ m_uiArcWeld_Timer = urand(20000, 21000);
}
else
m_uiArcWeld_Timer -= uiDiff;
@@ -421,7 +421,7 @@ public:
DoCast(pBjarngrim, SPELL_RENEW_STEEL_N);
}
}
- m_uiRenewSteel_Timer = 10000 + rand()%4000;
+ m_uiRenewSteel_Timer = urand(10000, 14000);
}
else
m_uiRenewSteel_Timer -= uiDiff;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
index e7f8ad4e5e8..016c4d27cfa 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
index a5ea1868686..171215c605a 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -183,7 +183,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_ARC_LIGHTNING);
- m_uiArcLightning_Timer = 15000 + rand()%1000;
+ m_uiArcLightning_Timer = urand(15000, 16000);
}
else
m_uiArcLightning_Timer -= uiDiff;
@@ -196,7 +196,7 @@ public:
m_bIsAura = false;
m_uiResumePulsingShockwave_Timer = DUNGEON_MODE(5000, 4000); // Pause Pulsing Shockwave aura
- m_uiLightningNova_Timer = 20000 + rand()%1000;
+ m_uiLightningNova_Timer = urand(20000, 21000);
}
else
m_uiLightningNova_Timer -= uiDiff;
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index 719d74a3bde..194c2a36862 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
index 598af7efc98..d5bca9c257d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
index c5c7f9546ba..f25be6dae0d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
index 375862c141c..4ee71367b55 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -80,10 +80,10 @@ public:
{
bIsSlam = false;
- uiBoulderTossTimer = 3000 + rand()%6000;
- uiGroundSpikeTimer = 9000 + rand()%5000;
- uiGroundSlamTimer = 15000 + rand()%3000;
- uiStompTimer = 20000 + rand()%9000;
+ uiBoulderTossTimer = urand(3000, 9000);
+ uiGroundSpikeTimer = urand(9000, 14000);
+ uiGroundSlamTimer = urand(15000, 18000);
+ uiStompTimer = urand(20000, 29000);
uiShatterTimer = 0;
if (instance)
@@ -107,20 +107,20 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_BOULDER_TOSS);
- uiBoulderTossTimer = 9000 + rand()%6000;
+ uiBoulderTossTimer = urand(9000, 15000);
} else uiBoulderTossTimer -= diff;
if (uiGroundSpikeTimer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_GROUND_SPIKE);
- uiGroundSpikeTimer = 12000 + rand()%5000;
+ uiGroundSpikeTimer = urand(12000, 17000);
} else uiGroundSpikeTimer -= diff;
if (uiStompTimer <= diff)
{
DoCast(me, SPELL_STOMP);
- uiStompTimer = 20000 + rand()%9000;
+ uiStompTimer = urand(20000, 29000);
} else uiStompTimer -= diff;
if (uiGroundSlamTimer <= diff)
@@ -128,7 +128,7 @@ public:
DoCast(me, SPELL_GROUND_SLAM);
bIsSlam = true;
uiShatterTimer = 10000;
- uiGroundSlamTimer = 15000 + rand()%3000;
+ uiGroundSlamTimer = urand(15000, 18000);
} else uiGroundSlamTimer -= diff;
if (bIsSlam)
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
index 4ab09dbf67a..cd4d7ae94a1 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -79,10 +79,10 @@ public:
void Reset()
{
- PartingSorrowTimer = 25000 + rand()%5000;
+ PartingSorrowTimer = urand(25000, 30000);
StormOfGriefTimer = 10000;
ShockOfSorrowTimer = 20000+rand()%5000;
- PillarOfWoeTimer = 5000 + rand()%10000;
+ PillarOfWoeTimer = urand(5000, 15000);
if (instance)
{
@@ -124,14 +124,14 @@ public:
if (target)
DoCast(target, SPELL_PARTING_SORROW);
- PartingSorrowTimer = 30000 + rand()%10000;
+ PartingSorrowTimer = urand(30000, 40000);
} else PartingSorrowTimer -= diff;
}
if (StormOfGriefTimer <= diff)
{
DoCast(me->getVictim(), SPELL_STORM_OF_GRIEF_N, true);
- StormOfGriefTimer = 15000 + rand()%5000;
+ StormOfGriefTimer = urand(15000, 20000);
} else StormOfGriefTimer -= diff;
if (ShockOfSorrowTimer <= diff)
@@ -139,7 +139,7 @@ public:
DoResetThreat();
DoScriptText(SAY_STUN, me);
DoCast(me, SPELL_SHOCK_OF_SORROW_N);
- ShockOfSorrowTimer = 20000 + rand()%10000;
+ ShockOfSorrowTimer = urand(20000, 30000);
} else ShockOfSorrowTimer -= diff;
if (PillarOfWoeTimer <= diff)
@@ -151,7 +151,7 @@ public:
else
DoCast(me->getVictim(), SPELL_PILLAR_OF_WOE_N);
- PillarOfWoeTimer = 5000 + rand()%20000;
+ PillarOfWoeTimer = urand(5000, 25000);
} else PillarOfWoeTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index 41dcd77d4bc..2c7026207e5 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -115,10 +115,10 @@ public:
bIsFrenzy = false;
uiEncounterTimer = 0;
- uiChainLightningTimer = 3000 + rand()%5000;
- uiLightningShieldTimer = 20000 + rand()%5000;
- uiStaticChargeTimer = 20000 + rand()%5000;
- uiLightningRingTimer = 30000 + rand()%5000;
+ uiChainLightningTimer = urand(3000, 8000);
+ uiLightningShieldTimer = urand(20000, 25000);
+ uiStaticChargeTimer = urand(20000, 25000);
+ uiLightningRingTimer = urand(30000, 35000);
uiSummonTimer = 5000;
uiFrenzyTimer = 300000; //5 minutes
abuseTheOoze = 0;
@@ -158,7 +158,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_CHAIN_LIGHTING);
- uiChainLightningTimer = 10000 + rand()%5000;
+ uiChainLightningTimer = urand(10000, 15000);
} else uiChainLightningTimer -= diff;
if (uiLightningShieldTimer <= diff)
@@ -170,7 +170,7 @@ public:
if (uiStaticChargeTimer <= diff)
{
DoCast(me->getVictim(), SPELL_STATIC_CHARGE);
- uiStaticChargeTimer = 20000 + rand()%5000;
+ uiStaticChargeTimer = urand(20000, 25000);
} uiStaticChargeTimer -= diff;
if (uiLightningRingTimer <= diff)
@@ -178,7 +178,7 @@ public:
if (me->IsNonMeleeSpellCasted(false))
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_LIGHTING_RING);
- uiLightningRingTimer = 30000 + rand()%5000;
+ uiLightningRingTimer = urand(30000, 35000);
} else uiLightningRingTimer -= diff;
if (uiSummonTimer <= diff)
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index ec1464a5d6f..1c8d9380a2b 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -239,7 +239,7 @@ public:
summon->CastSpell(target, DUNGEON_MODE(SPELL_DARK_MATTER, H_SPELL_DARK_MATTER), true);
}
}
- uiMarnakEncounterTimer = 30000 + rand()%1000;
+ uiMarnakEncounterTimer = urand(30000, 31000);
} else uiMarnakEncounterTimer -= diff;
}
if (bAbedneumActivated)
@@ -255,7 +255,7 @@ public:
summon->CastSpell(target, DUNGEON_MODE(SPELL_SEARING_GAZE, H_SPELL_SEARING_GAZE), true);
}
}
- uiAbedneumEncounterTimer = 30000 + rand()%1000;
+ uiAbedneumEncounterTimer = urand(30000, 31000);
} else uiAbedneumEncounterTimer -= diff;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h
index 37ef4e458b4..a6f1eb86178 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
index ffd3706a7e5..ee5cb87dd85 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp
index 3888cc43bc9..e54d8a898de 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_algalon.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -143,7 +143,7 @@ public:
uiPhase_timer = 0;
Ascend_Timer = 480000; //8 minutes
- QuantumStrike_Timer = 4000 + rand()%10000;
+ QuantumStrike_Timer = urand(4000, 14000);
Berserk_Timer = 360000; //6 minutes
CollapsingStar_Timer = urand(15000, 20000); //Spawns between 15 to 20 seconds
BigBang_Timer = 90000;
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
index 2e2ca25385c..68435fffb1b 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_assembly_of_iron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -56,8 +56,9 @@ enum AssemblySpells
SPELL_CHAIN_LIGHTNING = 61879,
SPELL_OVERLOAD = 61869,
SPELL_LIGHTNING_WHIRL = 61915,
- SPELL_LIGHTNING_TENDRILS = 61887,
- SPELL_LIGHTNING_TENDRILS_SELF_VISUAL = 61883,
+ SPELL_LIGHTNING_TENDRILS_10M = 61887,
+ SPELL_LIGHTNING_TENDRILS_25M = 63486,
+ SPELL_LIGHTNING_TENDRILS_VISUAL = 61883,
SPELL_STORMSHIELD = 64187,
};
@@ -215,7 +216,6 @@ class boss_steelbreaker : public CreatureScript
{
_Reset();
phase = 0;
- me->ResetLootMode();
me->RemoveAllAuras();
RespawnEncounter(instance, me);
}
@@ -342,7 +342,6 @@ class boss_runemaster_molgeim : public CreatureScript
{
_Reset();
phase = 0;
- me->ResetLootMode();
me->RemoveAllAuras();
RespawnEncounter(instance, me);
}
@@ -575,9 +574,10 @@ class boss_stormcaller_brundir : public CreatureScript
{
_Reset();
phase = 0;
- me->ResetLootMode();
me->RemoveAllAuras();
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false); // Should be interruptable unless overridden by spell (Overload)
+ me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default
RespawnEncounter(instance, me);
}
@@ -609,6 +609,7 @@ class boss_stormcaller_brundir : public CreatureScript
{
DoCast(me, SPELL_STORMSHIELD);
events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, urand(50000, 60000));
+ me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true); // Apply immumity to stuns
}
break;
@@ -677,10 +678,10 @@ class boss_stormcaller_brundir : public CreatureScript
break;
case EVENT_LIGHTNING_TENDRILS:
DoScriptText(SAY_BRUNDIR_FLIGHT, me);
- DoCast(SPELL_LIGHTNING_TENDRILS);
+ DoCast(RAID_MODE(SPELL_LIGHTNING_TENDRILS_10M, SPELL_LIGHTNING_TENDRILS_25M));
+ DoCast(SPELL_LIGHTNING_TENDRILS_VISUAL);
me->AttackStop();
- me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
- DoCast(SPELL_LIGHTNING_TENDRILS_SELF_VISUAL);
+ //me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
me->GetMotionMaster()->Initialize();
me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), FINAL_FLIGHT_Z);
events.DelayEvents(35000);
@@ -707,11 +708,12 @@ class boss_stormcaller_brundir : public CreatureScript
events.ScheduleEvent(EVENT_GROUND, 2500);
break;
case EVENT_GROUND:
- me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
- me->RemoveAurasDueToSpell(SPELL_LIGHTNING_TENDRILS);
- me->RemoveAurasDueToSpell(SPELL_LIGHTNING_TENDRILS_SELF_VISUAL);
+ //me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
+ me->RemoveAurasDueToSpell(RAID_MODE(SPELL_LIGHTNING_TENDRILS_10M, SPELL_LIGHTNING_TENDRILS_25M));
+ me->RemoveAurasDueToSpell(SPELL_LIGHTNING_TENDRILS_VISUAL);
DoStartMovement(me->getVictim());
events.CancelEvent(EVENT_GROUND);
+ me->getThreatManager().resetAllAggro();
break;
case EVENT_MOVE_POSITION:
if (me->IsWithinMeleeRange(me->getVictim()))
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
index bcc417c50cd..10ff3db96c7 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index 81450fe8b5f..d96790c3e37 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -1680,7 +1680,8 @@ class spell_pursue : public SpellScriptLoader
void FilterTargetsSubsequently(std::list<Unit*>& targets)
{
targets.clear();
- targets.push_back(_target);
+ if(_target)
+ targets.push_back(_target);
}
void HandleScript(SpellEffIndex /*eff*/)
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index f5a87431550..f62c2d6c596 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -282,7 +282,6 @@ class boss_freya : public CreatureScript
uint32 deforestation[6][2];
uint32 elementalTimer[2];
uint32 diffTimer;
- uint32 waveTime;
uint8 trioWaveCount;
uint8 trioWaveController;
uint8 waveCount;
@@ -291,14 +290,12 @@ class boss_freya : public CreatureScript
bool checkElementalAlive[2];
bool trioDefeated[2];
- bool waveInProgress;
bool random[3];
void Reset()
{
_Reset();
summons.clear();
- waveTime = 0;
trioWaveCount = 0;
trioWaveController = 0;
waveCount = 0;
@@ -315,7 +312,6 @@ class boss_freya : public CreatureScript
checkElementalAlive[n] = true;
trioDefeated[n] = false;
}
- waveInProgress = false;
for (uint8 n = 0; n < 3; ++n)
random[n] = false;
}
@@ -325,35 +321,12 @@ class boss_freya : public CreatureScript
DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me);
}
- void DamageTaken(Unit* /*who*/, uint32& damage)
+ void DamageTaken(Unit* who, uint32& damage)
{
if (damage >= me->GetHealth())
{
damage = 0;
- DoScriptText(SAY_DEATH, me);
- me->SetReactState(REACT_PASSIVE);
- _JustDied();
- me->RemoveAllAuras();
- me->AttackStop();
- me->setFaction(35);
- me->DeleteThreatList();
- me->CombatStop(true);
- me->DespawnOrUnsummon(7500);
- me->CastSpell(me, SPELL_KNOCK_ON_WOOD_CREDIT, true);
-
- Creature* Elder[3];
- for (uint8 n = 0; n < 3; ++n)
- {
- Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRIGHTLEAF + n));
- if (Elder[n] && Elder[n]->isAlive())
- {
- Elder[n]->RemoveAllAuras();
- Elder[n]->AttackStop();
- Elder[n]->CombatStop(true);
- Elder[n]->DeleteThreatList();
- Elder[n]->GetAI()->DoAction(ACTION_ELDER_FREYA_KILLED);
- }
- }
+ JustDied(who);
}
}
@@ -462,10 +435,8 @@ class boss_freya : public CreatureScript
events.ScheduleEvent(EVENT_UNSTABLE_ENERGY, urand(15000, 20000));
break;
case EVENT_WAVE:
- waveTime = 0;
- waveInProgress = true;
SpawnWave();
- if (waveCount < 6)
+ if (waveCount <= 6) // If set to 6 The Bombs appear during the Final Add wave
events.ScheduleEvent(EVENT_WAVE, WAVE_TIME);
else
events.ScheduleEvent(EVENT_NATURE_BOMB, urand(10000, 20000));
@@ -497,9 +468,6 @@ class boss_freya : public CreatureScript
diffTimer += diff; // For getting time difference for Deforestation achievement
- if (waveInProgress)
- waveTime += diff; // Time from the last wave
-
// Elementals must be killed within 12 seconds of each other, or they will all revive and heal
Creature* Elemental[3][2];
for (uint8 i = 0; i < 2; ++i)
@@ -543,7 +511,6 @@ class boss_freya : public CreatureScript
trioDefeated[i] = true;
Elemental[n][i]->CastSpell(me, SPELL_REMOVE_10STACK, true);
}
- TimeCheck();
}
}
}
@@ -559,7 +526,7 @@ class boss_freya : public CreatureScript
{
uint8 n = 0;
- // Handling recieved data
+ // Handling received data
for (uint8 i = 0; i < 5; ++i) // We have created "instances" for keeping informations about last 6 death lashers - needed because of respawning
{
deforestation[i][0] = deforestation[(i + 1)][0]; // Time
@@ -623,7 +590,7 @@ class boss_freya : public CreatureScript
waveCount++;
}
- void JustDied(Unit* who)
+ void JustDied(Unit* /*who*/)
{
//! Freya's chest is dynamically spawned on death by different spells.
const uint32 summonSpell[2][4] =
@@ -633,9 +600,32 @@ class boss_freya : public CreatureScript
/* 25N */ {62952, 62954, 62956, 62958}
};
- who->CastSpell((Unit*)NULL, summonSpell[me->GetMap()->GetDifficulty()][elderCount], true);
+ me->CastSpell((Unit*)NULL, summonSpell[me->GetMap()->GetDifficulty()][elderCount], true);
+ DoScriptText(SAY_DEATH, me);
+ me->SetReactState(REACT_PASSIVE);
_JustDied();
+ me->RemoveAllAuras();
+ me->AttackStop();
+ me->setFaction(35);
+ me->DeleteThreatList();
+ me->CombatStop(true);
+ me->DespawnOrUnsummon(7500);
+ me->CastSpell(me, SPELL_KNOCK_ON_WOOD_CREDIT, true);
+
+ Creature* Elder[3];
+ for (uint8 n = 0; n < 3; ++n)
+ {
+ Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_BRIGHTLEAF + n));
+ if (Elder[n] && Elder[n]->isAlive())
+ {
+ Elder[n]->RemoveAllAuras();
+ Elder[n]->AttackStop();
+ Elder[n]->CombatStop(true);
+ Elder[n]->DeleteThreatList();
+ Elder[n]->GetAI()->DoAction(ACTION_ELDER_FREYA_KILLED);
+ }
+ }
}
void JustSummoned(Creature* summoned)
@@ -653,6 +643,7 @@ class boss_freya : public CreatureScript
break;
case NPC_DETONATING_LASHER:
case NPC_ANCIENT_CONSERVATOR:
+ default:
summons.push_back(summoned->GetGUID());
break;
}
@@ -675,29 +666,14 @@ class boss_freya : public CreatureScript
summoned->CastSpell(who, SPELL_DETONATE, true);
summoned->ForcedDespawn(5000);
summons.remove(summoned->GetGUID());
- TimeCheck();
break;
case NPC_ANCIENT_CONSERVATOR:
summoned->CastSpell(me, SPELL_REMOVE_25STACK, true);
summoned->ForcedDespawn(5000);
summons.remove(summoned->GetGUID());
- TimeCheck();
break;
}
}
-
- void TimeCheck()
- {
- if (waveCount >= 6)
- return;
-
- waveInProgress = false;
- uint32 timeDifference = WAVE_TIME - waveTime;
- if (timeDifference <= TIME_DIFFERENCE)
- events.RescheduleEvent(EVENT_WAVE, timeDifference);
- else
- events.RescheduleEvent(EVENT_WAVE, TIME_DIFFERENCE);
- }
};
CreatureAI* GetAI(Creature* creature) const
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index 7d00c0e59fc..0013a970380 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index bb21da94bc5..918a401143a 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index b8876ae577a..e72cf395a0d 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 5da1c485986..1fd8430abd8 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 11b7c54975e..98b3a6b658b 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 0e3a8926203..6b170bab6d8 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index f993c419b8c..72741ee0679 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index ae803b24642..8f09ab26a0a 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
index e4b21e1f66e..3f01f21b189 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_yoggsaron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 3c5697a7995..e12393f047f 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -358,8 +358,12 @@ class instance_ulduar : public InstanceMapScript
}
}
- void OnCreatureDeath(Creature* creature)
+ void OnUnitDeath(Unit* unit)
{
+ Creature* creature = unit->ToCreature();
+ if (!creature)
+ return;
+
switch (creature->GetEntry())
{
case NPC_CORRUPTED_SERVITOR:
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index f11212d535e..a31954b8a16 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp
index 05b1e395d1e..29eb5ad3367 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar_teleporter.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 55211f3f047..ea84502c16d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -130,7 +130,7 @@ public:
me->SetHealth(0);
me->InterruptNonMeleeSpells(true);
me->RemoveAllAuras();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->GetMotionMaster()->MovementExpired(false);
me->GetMotionMaster()->MoveIdle();
me->SetStandState(UNIT_STAND_STATE_DEAD);
@@ -152,7 +152,7 @@ public:
{
bIsUndead = true;
bEventInProgress = false;
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->UpdateEntry(MOB_INGVAR_UNDEAD);
me->SetInCombatWith(me->getVictim());
me->GetMotionMaster()->MoveChase(me->getVictim());
@@ -173,7 +173,11 @@ public:
DoScriptText(YELL_DEAD_2, me);
if (instance)
+ {
+ // Ingvar has MOB_INGVAR_UNDEAD id in this moment, so we have to update encounter state for his original id
+ instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, MOB_INGVAR_HUMAN, me);
instance->SetData(DATA_INGVAR_EVENT, DONE);
+ }
}
void KilledUnit(Unit* /*victim*/)
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index 0a3f2dc3078..dc93917f2e5 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
index e828d81e05a..333278daa10 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
index 488c38f5a6e..6ecc1883afc 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
index 45ceb85a640..d660b1516b3 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h
index 275ffa659e8..971dab98f4d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
index 9fa9c7c9d4f..0a778f852a0 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index 7b459e7410d..1bedd7e19e9 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -218,7 +218,7 @@ public:
void JustReachedHome()
{
me->SetFlying(false);
- me->Unmount();
+ me->Dismount();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
if (Unit::GetCreature((*me), m_uiGraufGUID) == NULL)
me->SummonCreature(CREATURE_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
@@ -285,7 +285,7 @@ public:
{
Phase = SKADI;
me->SetFlying(false);
- me->Unmount();
+ me->Dismount();
if (Creature* pGrauf = me->SummonCreature(CREATURE_GRAUF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3*IN_MILLISECONDS))
{
pGrauf->GetMotionMaster()->MoveFall(0);
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 1b70de6244e..01cd36266d0 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -48,7 +48,7 @@ enum Yells
};
enum Creatures
{
- CREATURE_ARTHAS = 24266, // Image of Arthas
+ CREATURE_ARTHAS = 29280, // Image of Arthas
CREATURE_SVALA_SORROWGRAVE = 26668, // Svala after transformation
CREATURE_SVALA = 29281, // Svala before transformation
CREATURE_RITUAL_CHANNELER = 27281
@@ -136,7 +136,6 @@ public:
if (Creature* pArthas = me->SummonCreature(CREATURE_ARTHAS, ArthasPos, TEMPSUMMON_MANUAL_DESPAWN))
{
pArthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- pArthas->SetFloatValue(OBJECT_FIELD_SCALE_X, 5);
uiArthasGUID = pArthas->GetGUID();
}
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index 911be1815b3..29d6278124f 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_pinnacle.cpp
index 5dbd431fe21..c5bc235da1f 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_pinnacle.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_pinnacle.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
index 76dfd0ebec4..7d10483ca1d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
index 66487c6f6f9..1cc681b0133 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
index bb9302c911d..973e7a2844c 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
index 3c752ae6ae0..a545a6ae14c 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
index 41e80b1b777..4b92b54b0d3 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
index 8d668011f9a..ec0de41ed6d 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h
index 04f50d3adeb..9242a5df1eb 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h
+++ b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
index 25233eb92ef..74fc2505969 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
index 584e5b8979a..148ae2b6c4b 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 622fc2355fa..5b36481eca8 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
index 648c4a71762..21e4df37d8e 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index 42ce12ec903..08bc24329ca 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index d61b81e6ba7..095d63f2dff 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index d0f29422912..dc477855ff8 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 4df44f1c851..3db63e5057b 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 801ab408685..617ce9655a7 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h
index ff663efe275..2a0032bac95 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.h
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp
index 9c40fbb3f82..b6e01d3188e 100644
--- a/src/server/scripts/Northrend/borean_tundra.cpp
+++ b/src/server/scripts/Northrend/borean_tundra.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -2125,7 +2125,7 @@ public:
{
Quest const* qInfo = sObjectMgr->GetQuestTemplate(QUEST_YOU_RE_NOT_SO_BIG_NOW);
if (qInfo)
- CAST_PLR(killer)->KilledMonsterCredit(qInfo->ReqCreatureOrGOId[0], 0);
+ CAST_PLR(killer)->KilledMonsterCredit(qInfo->RequiredNpcOrGo[0], 0);
}
}
};
diff --git a/src/server/scripts/Northrend/crystalsong_forest.cpp b/src/server/scripts/Northrend/crystalsong_forest.cpp
index 22b72586e37..d48903696ec 100644
--- a/src/server/scripts/Northrend/crystalsong_forest.cpp
+++ b/src/server/scripts/Northrend/crystalsong_forest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/dalaran.cpp b/src/server/scripts/Northrend/dalaran.cpp
index be9e9308f4f..57007a93fa7 100644
--- a/src/server/scripts/Northrend/dalaran.cpp
+++ b/src/server/scripts/Northrend/dalaran.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -70,8 +70,9 @@ public:
return;
Player* player = who->GetCharmerOrOwnerPlayerOrPlayerItself();
-
- if (!player || player->isGameMaster() || player->IsBeingTeleported())
+
+ // If player has Disguise aura for quest A Meeting With The Magister or An Audience With The Arcanist, do not teleport it away but let it pass
+ if (!player || player->isGameMaster() || player->IsBeingTeleported() || player->HasAura(70973) || player->HasAura(70971))
return;
switch (me->GetEntry())
diff --git a/src/server/scripts/Northrend/dragonblight.cpp b/src/server/scripts/Northrend/dragonblight.cpp
index 7606ecd81c1..0c1837ec37d 100644
--- a/src/server/scripts/Northrend/dragonblight.cpp
+++ b/src/server/scripts/Northrend/dragonblight.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/grizzly_hills.cpp b/src/server/scripts/Northrend/grizzly_hills.cpp
index 6ed452857aa..de0c6a909ad 100644
--- a/src/server/scripts/Northrend/grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/grizzly_hills.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/howling_fjord.cpp b/src/server/scripts/Northrend/howling_fjord.cpp
index f76ac69ab7a..3c44fa0eb44 100644
--- a/src/server/scripts/Northrend/howling_fjord.cpp
+++ b/src/server/scripts/Northrend/howling_fjord.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/icecrown.cpp b/src/server/scripts/Northrend/icecrown.cpp
index 27054b5755a..28384455616 100644
--- a/src/server/scripts/Northrend/icecrown.cpp
+++ b/src/server/scripts/Northrend/icecrown.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp
index 269ff05090e..6d76e348980 100644
--- a/src/server/scripts/Northrend/isle_of_conquest.cpp
+++ b/src/server/scripts/Northrend/isle_of_conquest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/sholazar_basin.cpp b/src/server/scripts/Northrend/sholazar_basin.cpp
index b3f1fb1b8b0..c7153eb4006 100644
--- a/src/server/scripts/Northrend/sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/sholazar_basin.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -98,8 +98,7 @@ public:
me->SetUnitMovementFlags(MOVEMENTFLAG_JUMPING);
break;
case 28:
- if (Player* player = GetPlayerForEscort())
- player->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me);
+ player->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me);
// me->RestoreFaction();
DoScriptText(SAY_END_IRO, me);
SetRun(false);
diff --git a/src/server/scripts/Northrend/storm_peaks.cpp b/src/server/scripts/Northrend/storm_peaks.cpp
index 687f7945e4c..7bd59b92b7f 100644
--- a/src/server/scripts/Northrend/storm_peaks.cpp
+++ b/src/server/scripts/Northrend/storm_peaks.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Northrend/zuldrak.cpp b/src/server/scripts/Northrend/zuldrak.cpp
index 5dab265617e..2b73d57365a 100644
--- a/src/server/scripts/Northrend/zuldrak.cpp
+++ b/src/server/scripts/Northrend/zuldrak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -1219,9 +1219,9 @@ public:
{
if (uiMissleTimer <= uiDiff)
{
- DoCast(me, uiSpell); // this spell is not supported ... YET!
+ if (uiSpell) // Sometimes it is 0, why?
+ DoCast(me, uiSpell); // this spell (what spell) is not supported ... YET!
uiMissleTimer = urand(2000, 7000);
-
} else uiMissleTimer -= uiDiff;
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
index b78811ce6a0..6eb306b52af 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h
index 01da001a990..e019ba7ed7b 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
index a868e46b890..06c1813d1dc 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
index 9f494b748be..59bce7be298 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
index c081f0970f2..f912f25d87f 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -384,7 +384,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO
int32 count = 10;
uint32 itemid = 24538;
// bomb id count
- uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemid, count, &noSpaceForCount);
+ InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemid, count, &noSpaceForCount);
if (msg != EQUIP_ERR_OK) // convert to possible store amount
count -= noSpaceForCount;
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
index 3a322bbaba0..ace68034dfc 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
index 23477741ba1..a69dd3ed874 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -166,11 +166,15 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId)
if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY))
{
delete go;
+ return true;
}
- else
+
+ go->SetRespawnTime(0);
+
+ if (!map->AddToMap(go))
{
- go->SetRespawnTime(0);
- map->AddToMap(go);
+ delete go;
+ return true;
}
}
}
@@ -189,17 +193,22 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId)
Map* map = player->GetMap();
if (!map)
{
- delete go;
- return true;
- }
+ delete go;
+ return true;
+ }
+
if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY))
{
delete go;
+ return true;
}
- else
+
+ go->SetRespawnTime(0);
+
+ if (!map->AddToMap(go))
{
- go->SetRespawnTime(0);
- map->AddToMap(go);
+ delete go;
+ return true;
}
}
}
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
index fe696dea7e4..c4975d142f0 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
index 56895951665..ec0c10f4afe 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
index 642f45090a9..dfab6d12cb8 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
index 7d15f1edc40..5b3468de203 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
index 048ba04dc57..2a11139a701 100755
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
index 7b0c8fc017e..ef160a3a5c5 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -193,7 +193,7 @@ public:
void MoveInLineOfSight(Unit* who)
{
- if (!HasTaunted && me->IsWithinDistInMap(who, 150.0))
+ if (!HasTaunted && me->IsWithinDistInMap(who, 150.0f))
{
DoScriptText(SAY_INTRO, me);
HasTaunted = true;
@@ -340,7 +340,7 @@ public:
if (Mortal_Strike_timer <= diff)
{
DoCast(me->getVictim(), SPELL_AV_MORTAL_STRIKE);
- Mortal_Strike_timer = 10000 + rand()%20 * 1000;
+ Mortal_Strike_timer = urand(10, 30) * 1000;
} else Mortal_Strike_timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
index ab1057f042a..a8d1f22bd00 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
index 829f681982f..81211b6e3d9 100644
--- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -162,20 +162,20 @@ public:
me->InterruptNonMeleeSpells(true);
DoCast(me, SPELL_FROSTNOVA);
- FrostNova_Timer = 17500 + rand()%7500;
+ FrostNova_Timer = urand(17500, 25000);
CanBlink = true;
} else FrostNova_Timer -= diff;
if (Frostbolt_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FROSTBOLT);
- Frostbolt_Timer = 4500 + rand()%1500;
+ Frostbolt_Timer = urand(4500, 6000);
} else Frostbolt_Timer -= diff;
if (FireBall_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_FIREBALL);
- FireBall_Timer = 4500 + rand()%1500;
+ FireBall_Timer = urand(4500, 6000);
} else FireBall_Timer -= diff;
if (CanBlink)
@@ -191,7 +191,7 @@ public:
me->GetMotionMaster()->MovementExpired();
DoCast(me, SPELL_BLINK);
- Blink_Timer = 1000 + rand()%1500;
+ Blink_Timer = urand(1000, 2500);
CanBlink = false;
} else Blink_Timer -= diff;
}
@@ -290,7 +290,7 @@ public:
if (ArcaneBolt_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_BOLT);
- ArcaneBolt_Timer = 2000 + rand()%2500;
+ ArcaneBolt_Timer = urand(2000, 4500);
} else ArcaneBolt_Timer -= diff;
if (Apprentice_Timer <= diff)
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp
index ca8557b22af..d9ba99fcf24 100644
--- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
index 43171eda1af..2fd7498ea82 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -157,7 +157,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_FLAME_SHOCK);
- flameshock_timer = 10000 + rand()%5000;
+ flameshock_timer = urand(10000, 15000);
} else flameshock_timer -= diff;
if (arcaneshock_timer <= diff)
@@ -165,7 +165,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_ARCANE_SHOCK);
- arcaneshock_timer = 10000 + rand()%5000;
+ arcaneshock_timer = urand(10000, 15000);
} else arcaneshock_timer -= diff;
if (frostshock_timer <= diff)
@@ -173,7 +173,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_FROST_SHOCK);
- frostshock_timer = 10000 + rand()%5000;
+ frostshock_timer = urand(10000, 15000);
} else frostshock_timer -= diff;
if (shadowshock_timer <= diff)
@@ -181,7 +181,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_SHADOW_SHOCK);
- shadowshock_timer = 10000 + rand()%5000;
+ shadowshock_timer = urand(10000, 15000);
} else shadowshock_timer -= diff;
if (chainlightning_timer <= diff)
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
index ffe3e6081e7..c3c53416a9b 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
index eaa64cd9e16..02c5a035375 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h
index 1972809ee15..706862ac301 100644
--- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h
+++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
index 8f1453e51ee..d3ea73c5ba0 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -74,8 +74,8 @@ public:
void Reset()
{
EventCheck_Timer = 5000;
- CorrosiveAcid_Timer = 5000 + rand()%5000;
- Fear_Timer = 25000 + rand()%5000;
+ CorrosiveAcid_Timer = urand(5000, 10000);
+ Fear_Timer = urand(25000, 30000);
Enrage_Timer = 180000;
Intro = false;
IsBanished = true;
@@ -182,13 +182,13 @@ public:
if (CorrosiveAcid_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_CORROSIVE_ACID);
- CorrosiveAcid_Timer = 15000 + rand()%10000;
+ CorrosiveAcid_Timer = urand(15000, 25000);
} else CorrosiveAcid_Timer -= diff;
if (Fear_Timer <= diff)
{
DoCast(me, SPELL_FEAR);
- Fear_Timer = 20000 + rand()%15000;
+ Fear_Timer = urand(20000, 35000);
} else Fear_Timer -= diff;
if (IsHeroic())
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index 1987c1bb01a..f7032d78bb6 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -152,14 +152,14 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_CHARGE);
- Charge_Timer = 15000 + rand()%10000;
+ Charge_Timer = urand(15000, 25000);
} else Charge_Timer -= diff;
//Knockback_Timer
if (Knockback_Timer <= diff)
{
DoCast(me, SPELL_WAR_STOMP);
- Knockback_Timer = 18000 + rand()%6000;
+ Knockback_Timer = urand(18000, 24000);
} else Knockback_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
index 6d3a5f181d4..81a7750d512 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -165,7 +165,7 @@ public:
void Reset()
{
- ShadowBoltVolley_Timer = 7000 + rand()%7000;
+ ShadowBoltVolley_Timer = urand(7000, 14000);
DrawShadows_Timer = 45000;
summonTraveler_Timer = 90000;
banish_Timer = 17000;
@@ -269,7 +269,7 @@ public:
if (ShadowBoltVolley_Timer <= diff)
{
DoCast(me, SPELL_SHADOWBOLT_VOLLEY);
- ShadowBoltVolley_Timer = 15000 + rand()%15000;
+ ShadowBoltVolley_Timer = urand(15000, 30000);
} else ShadowBoltVolley_Timer -= diff;
if (IsHeroic() && banish_Timer <= diff)
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
index bd6539335c8..5fd908c44e8 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -64,9 +64,9 @@ public:
void Reset()
{
SonicBoom_Timer = 30000;
- MurmursTouch_Timer = 8000 + rand()%12000;
+ MurmursTouch_Timer = urand(8000, 20000);
Resonance_Timer = 5000;
- MagneticPull_Timer = 15000 + rand()%15000;
+ MagneticPull_Timer = urand(15000, 30000);
ThunderingStorm_Timer = 15000;
SonicShock_Timer = 10000;
SonicBoom = false;
@@ -133,7 +133,7 @@ public:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true))
DoCast(target, SPELL_MURMURS_TOUCH);
- MurmursTouch_Timer = 25000 + rand()%10000;
+ MurmursTouch_Timer = urand(25000, 35000);
} else MurmursTouch_Timer -= diff;
// Resonance
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
index 4c6aaadfec6..1a9155dacb2 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
index 0f746555c98..0dfe9d01de5 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
index 5e126d4c6f7..a934d5587c2 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h
index c1aa8fa1b83..813070d837c 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.h
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
index 8f37778b948..3227e685fc4 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index aec9ffcf5cc..b23b7bcd1ac 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -66,69 +66,71 @@ const char* SAY_KILL2 = "This is too easy!";
#define SAY_ENRAGE "You've wasted too much time mortals, now you shall fall!"
#define SOUND_ENRAGE 11474
-/************** Spells *************/
+enum Spells
// Normal Form
-#define SPELL_SHEAR 37335 // 41032 is bugged, cannot be block/dodge/parry// Reduces Max. Health by 60% for 7 seconds. Can stack 19 times. 1.5f second cast
-#define SPELL_FLAME_CRASH 40832 // Summons an invis/unselect passive mob that has an aura of flame in a circle around him.
-#define SPELL_DRAW_SOUL 40904 // 5k Shadow Damage in front of him. Heals Illidan for 100k health (script effect)
-#define SPELL_PARASITIC_SHADOWFIEND 41917 // DoT of 3k Shadow every 2 seconds. Lasts 10 seconds. (Script effect: Summon 2 parasites once the debuff has ticked off)
-#define SPELL_PARASITIC_SHADOWFIEND2 41914 // Used by Parasitic
-#define SPELL_SUMMON_PARASITICS 41915 // Summons 2 Parasitic Shadowfiends on the target. It's supposed to be cast as soon as the Parasitic Shadowfiend debuff is gone, but the spells aren't linked :(
-#define SPELL_AGONIZING_FLAMES 40932 // 4k fire damage initial to target and anyone w/i 5 yards. PHASE 3 ONLY
-#define SPELL_ENRAGE 40683 // Increases damage by 50% and attack speed by 30%. 20 seconds, PHASE 5 ONLY
+{
+ SPELL_SHEAR = 37335, // 41032 is bugged, cannot be block/dodge/parry// Reduces Max. Health by 60% for 7 seconds. Can stack 19 times. 1.5f second cast
+ SPELL_FLAME_CRASH = 40832,
+ SPELL_DRAW_SOUL = 40904,
+ SPELL_PARASITIC_SHADOWFIEND = 41917,
+ SPELL_PARASITIC_SHADOWFIEND2 = 41914,
+ SPELL_SUMMON_PARASITICS = 41915,
+ SPELL_AGONIZING_FLAMES = 40932,
+ SPELL_ENRAGE = 40683,
// Flying (Phase 2)
-#define SPELL_THROW_GLAIVE 39635 // Throws a glaive on the ground
-#define SPELL_THROW_GLAIVE2 39849 // Animation for the above spell
-#define SPELL_GLAIVE_RETURNS 39873 // Glaive flies back to Illidan
-#define SPELL_FIREBALL 40598 // 2.5fk-3.5fk damage in 10 yard radius. 2 second cast time.
-#define SPELL_DARK_BARRAGE 40585 // 10 second channeled spell, 3k shadow damage per second.
+ SPELL_THROW_GLAIVE = 39635,
+ SPELL_THROW_GLAIVE2 = 39849, // Animation for the spell above
+ SPELL_GLAIVE_RETURNS = 39873,
+ SPELL_FIREBALL = 40598,
+ SPELL_DARK_BARRAGE = 40585,
// Demon Form
-#define SPELL_DEMON_TRANSFORM_1 40511 // First phase of animations for transforming into Dark Illidan (fall to ground)
-#define SPELL_DEMON_TRANSFORM_2 40398 // Second phase of animations (kneel)
-#define SPELL_DEMON_TRANSFORM_3 40510 // Final phase of animations (stand up and roar)
-#define SPELL_DEMON_FORM 40506 // Transforms into Demon Illidan. Has an Aura of Dread on him.
-#define SPELL_SHADOW_BLAST 41078 // 8k - 11k Shadow Damage. Targets highest threat. Has a splash effect, damaging anyone in 20 yards of the target.
-#define SPELL_FLAME_BURST 41126 // Hurls fire at entire raid for ~3.5fk damage every 10 seconds. Resistable. (Does not work: Script effect)
-#define SPELL_FLAME_BURST_EFFECT 41131 // The actual damage. Have each player cast it on itself (workaround)
+ SPELL_DEMON_TRANSFORM_1 = 40511,
+ SPELL_DEMON_TRANSFORM_2 = 40398,
+ SPELL_DEMON_TRANSFORM_3 = 40510,
+ SPELL_DEMON_FORM = 40506,
+ SPELL_SHADOW_BLAST = 41078,
+ SPELL_FLAME_BURST = 41126,
+ SPELL_FLAME_BURST_EFFECT = 41131, // The actual damage. Have each player cast it on itself (workaround)
// Other Illidan spells
-#define SPELL_KNEEL 39656 // Before beginning encounter, this is how he appears (talking to skully).
-#define SPELL_SHADOW_PRISON 40647 // Illidan casts this spell to immobilize entire raid when he summons Maiev.
-#define SPELL_DEATH 41220 // This spell doesn't do anything except stun Illidan and set him on his knees.
-#define SPELL_BERSERK 45078 // Damage increased by 500%, attack speed by 150%
-#define SPELL_DUAL_WIELD 42459
-//Phase Normal spells
-#define SPELL_FLAME_CRASH_EFFECT 40836 // Firey blue ring of circle that the other flame crash summons
-#define SPELL_SUMMON_SHADOWDEMON 41117 // Summon four shadowfiends
-#define SPELL_SHADOWFIEND_PASSIVE 41913 // Passive aura for shadowfiends
-#define SPELL_SHADOW_DEMON_PASSIVE 41079 // Adds the "shadowform" aura to Shadow Demons.
-#define SPELL_CONSUME_SOUL 41080 // Once the Shadow Demons reach their target, they use this to kill them
-#define SPELL_PARALYZE 41083 // Shadow Demons cast this on their target
-#define SPELL_PURPLE_BEAM 39123 // Purple Beam connecting Shadow Demon to their target
-//Phase Flight spells
-#define SPELL_AZZINOTH_CHANNEL 39857 // Glaives cast it on Flames. Not sure if this is the right spell.
-#define SPELL_EYE_BLAST_TRIGGER 40017 // This summons Demon Form every few seconds and deals ~20k damage in its radius
-#define SPELL_EYE_BLAST 39908 // This does the blue flamey animation.
-#define SPELL_BLAZE_EFFECT 40610 // Green flame on the ground, triggers damage (5k) every few seconds
-#define SPELL_BLAZE_SUMMON 40637 // Summons the Blaze creature
-#define SPELL_DEMON_FIRE 40029 // Blue fire trail left by Eye Blast. Deals 2k per second if players stand on it.
-#define SPELL_FLAME_BLAST 40631 // Flames of Azzinoth use this. Frontal cone AoE 7k-9k damage.
-#define SPELL_CHARGE 41581 //40602 // Flames of Azzinoth charges whoever is too far from them. They enrage after this. For simplicity, we'll use the same enrage as Illidan.
-#define SPELL_FLAME_ENRAGE 45078
-//Akama spells
-#define SPELL_AKAMA_DOOR_CHANNEL 41268 // Akama's channel spell on the door before the Temple Summit
-#define SPELL_DEATHSWORN_DOOR_CHANNEL 41269 // Olum and Udalo's channel spell on the door before the Temple Summit
-#define SPELL_AKAMA_DOOR_FAIL 41271 // Not sure where this is really used...
-#define SPELL_HEALING_POTION 40535 // Akama uses this to heal himself to full.
-#define SPELL_CHAIN_LIGHTNING 40536 // 6938 to 8062 for 5 targets
-//Maiev spells
-#define SPELL_CAGE_TRAP_DUMMY 40761 // Put this in DB for cage trap GO.
-#define SPELL_CAGED 40695 // Caged Trap triggers will cast this on Illidan if he is within 3 yards
-#define SPELL_CAGE_TRAP_SUMMON 40694 // Summons a Cage Trap GO (bugged) on the ground along with a Cage Trap Disturb Trigger mob (working)
-#define SPELL_CAGE_TRAP_BEAM 40713 // 8 Triggers on the ground in an octagon cast spells like this on Illidan 'caging him'
-#define SPELL_TELEPORT_VISUAL 41232 // Teleport visual for Maiev
-#define SPELL_SHADOW_STRIKE 40685 // 4375 to 5625 every 3 seconds for 12 seconds
-#define SPELL_THROW_DAGGER 41152 // 5400 to 6600 damage, need dagger
-#define SPELL_FAN_BLADES 39954 // bugged visual
+ SPELL_KNEEL = 39656, // Before beginning encounter, this is how he appears (talking to skully).
+ SPELL_SHADOW_PRISON = 40647,
+ SPELL_DEATH = 41220,
+ SPELL_BERSERK = 45078,
+ SPELL_DUAL_WIELD = 42459,
+// Phase Normal spells
+ SPELL_FLAME_CRASH_EFFECT = 40836,
+ SPELL_SUMMON_SHADOWDEMON = 41117,
+ SPELL_SHADOWFIEND_PASSIVE = 41913,
+ SPELL_SHADOW_DEMON_PASSIVE = 41079,
+ SPELL_CONSUME_SOUL = 41080,
+ SPELL_PARALYZE = 41083,
+ SPELL_PURPLE_BEAM = 39123,
+// Phase Flight spells
+ SPELL_AZZINOTH_CHANNEL = 39857, // Glaives cast it on Flames. Not sure if this is the right spell.
+ SPELL_EYE_BLAST_TRIGGER = 40017,
+ SPELL_EYE_BLAST = 39908,
+ SPELL_BLAZE_EFFECT = 40610,
+ SPELL_BLAZE_SUMMON = 40637,
+ SPELL_DEMON_FIRE = 40029,
+ SPELL_FLAME_BLAST = 40631,
+ SPELL_CHARGE = 41581,
+ SPELL_FLAME_ENRAGE = 45078,
+// Akama spells
+ SPELL_AKAMA_DOOR_CHANNEL = 41268,
+ SPELL_DEATHSWORN_DOOR_CHANNEL = 41269,
+ SPELL_AKAMA_DOOR_FAIL = 41271, // Not sure where this is really used...
+ SPELL_HEALING_POTION = 40535,
+ SPELL_CHAIN_LIGHTNING = 40536,
+// Maiev spells
+ SPELL_CAGE_TRAP_DUMMY = 40761, // Put this in DB for cage trap GO.
+ SPELL_CAGED = 40695,
+ SPELL_CAGE_TRAP_SUMMON = 40694, // Summons a Cage Trap GO (bugged) on the ground along with a Cage Trap Disturb Trigger mob (working)
+ SPELL_CAGE_TRAP_BEAM = 40713,
+ SPELL_TELEPORT_VISUAL = 41232,
+ SPELL_SHADOW_STRIKE = 40685,
+ SPELL_THROW_DAGGER = 41152,
+ SPELL_FAN_BLADES = 39954, // bugged visual
+};
// Other defines
#define CENTER_X 676.740f
@@ -174,7 +176,7 @@ enum PhaseIllidan
PHASE_FLIGHT_SEQUENCE = 7,
PHASE_TRANSFORM_SEQUENCE = 8,
PHASE_ILLIDAN_MAX = 9,
-};//Maiev uses the same phase
+}; // Maiev uses the same phase
enum PhaseAkama
{
@@ -191,7 +193,7 @@ enum EventIllidan
{
EVENT_NULL = 0,
EVENT_BERSERK = 1,
- //normal phase
+ // normal phase
EVENT_TAUNT = 2,
EVENT_SHEAR = 3,
EVENT_FLAME_CRASH = 4,
@@ -201,17 +203,17 @@ enum EventIllidan
EVENT_AGONIZING_FLAMES = 8,
EVENT_TRANSFORM_NORMAL = 9,
EVENT_ENRAGE = 10,
- //flight phase
+ // flight phase
EVENT_FIREBALL = 2,
EVENT_DARK_BARRAGE = 3,
EVENT_EYE_BLAST = 4,
EVENT_MOVE_POINT = 5,
- //demon phase
+ // demon phase
EVENT_SHADOW_BLAST = 2,
EVENT_FLAME_BURST = 3,
EVENT_SHADOWDEMON = 4,
EVENT_TRANSFORM_DEMON = 5,
- //sequence phase
+ // sequence phase
EVENT_TALK_SEQUENCE = 2,
EVENT_FLIGHT_SEQUENCE = 2,
EVENT_TRANSFORM_SEQUENCE = 2,
@@ -249,6 +251,7 @@ struct Yells
};
static const Yells Conversation[22] =
+
{
{11463, "Akama... your duplicity is hardly surprising. I should have slaughtered you and your malformed brethren long ago.", ILLIDAN_STORMRAGE, 8000, 0, true},
{0, "", ILLIDAN_STORMRAGE, 5000, 396, true},
@@ -259,19 +262,20 @@ static const Yells Conversation[22] =
{0, "", AKAMA, 2000, 15, true},
{11466, "You are not prepared!", ILLIDAN_STORMRAGE, 3000, 406, true},
{0, "", EMPTY, 1000, 0, true},
- {0, "", EMPTY, 0, 0, false}, //9
+ {0, "", EMPTY, 0, 0, false}, // 9
{11476, "Is this it, mortals? Is this all the fury you can muster?", ILLIDAN_STORMRAGE, 8000, 0, true},
{11491, "Their fury pales before mine, Illidan. We have some unsettled business between us.", MAIEV_SHADOWSONG, 8000, 5, true},
{11477, "Maiev... How is this even possible?", ILLIDAN_STORMRAGE, 5000, 1, true},
{11492, "Ah... my long hunt is finally over. Today, Justice will be done!", MAIEV_SHADOWSONG, 8000, 15, true},
- {11470, "Feel the hatred of ten thousand years!", ILLIDAN_STORMRAGE, 1000, 0, false}, //14
- {11496, "Ahh... It is finished. You are beaten.", MAIEV_SHADOWSONG, 6000, 0, true}, //15
+ {11470, "Feel the hatred of ten thousand years!", ILLIDAN_STORMRAGE, 1000, 0, false}, // 14
+ {11496, "Ahh... It is finished. You are beaten.", MAIEV_SHADOWSONG, 6000, 0, true}, // 15
+
{11478, "You have won... Maiev...but the huntress... is nothing...without the hunt... you... are nothing... without me..", ILLIDAN_STORMRAGE, 30000, 65, true}, // Emote dead for now. Kill him later
{11497, "He is right. I feel nothing... I am nothing... Farewell, champions.", MAIEV_SHADOWSONG, 9000, 0, true},
{11498, "", MAIEV_SHADOWSONG, 5000, 0, true},
- {11498, "", EMPTY, 1000, 0, true}, //19 Maiev disappear
+ {11498, "", EMPTY, 1000, 0, true}, // 19 Maiev disappear
{11387, "The Light will fill these dismal halls once again. I swear it.", AKAMA, 8000, 0, true},
- {0, "", EMPTY, 1000, 0, false}//21
+ {0, "", EMPTY, 1000, 0, false} // 21
};
static const Yells RandomTaunts[4]=
@@ -306,14 +310,14 @@ static const Locations HoverPosition[4]=
static const Locations GlaivePosition[4]=
{
{695.105f, 305.303f, 354.256f},
- {659.338f, 305.303f, 354.256f}, //the distance between two glaives is 36
+ {659.338f, 305.303f, 354.256f}, // the distance between two glaives is 36
{700.105f, 305.303f, 354.256f},
{664.338f, 305.303f, 354.256f}
};
static const Locations EyeBlast[2]=
{
- {677.0f, 350.0f, 354.0f}, //start point, pass through glaive point
+ {677.0f, 350.0f, 354.0f}, // start point, pass through glaive point
{677.0f, 260.0f, 354.0f}
};
@@ -350,7 +354,7 @@ static const Animation DemonTransformation[10]=
{
{SPELL_DEMON_TRANSFORM_1, 0, 1000, 0, 0, 6, true},
{SPELL_DEMON_TRANSFORM_2, SPELL_DEMON_TRANSFORM_1, 4000, 0, 0, 6, true},
- {0, 0, 3000, 1073741824, 21322, 6, false}, //stunned, cannot cast demon form
+ {0, 0, 3000, 1073741824, 21322, 6, false}, // stunned, cannot cast demon form
{SPELL_DEMON_TRANSFORM_3, SPELL_DEMON_TRANSFORM_2, 3500, 0, 0, 6, false},
{SPELL_DEMON_FORM, SPELL_DEMON_TRANSFORM_3, 0, 0, 0, 4, false},
{SPELL_DEMON_TRANSFORM_1, 0, 1000, 0, 0, 6, false},
@@ -360,8 +364,8 @@ static const Animation DemonTransformation[10]=
{0, SPELL_DEMON_TRANSFORM_3, 0, 0, 0, 8, true}
};
-#define EMOTE_SETS_GAZE_ON "sets its gaze on $N!"
-#define EMOTE_UNABLE_TO_SUMMON "is unable to summon Maiev Shadowsong and enter Phase 4. Resetting Encounter."
+#define EMOTE_SETS_GAZE_ON "%s sets its gaze on $N!"
+#define EMOTE_UNABLE_TO_SUMMON "%s is unable to summon Maiev Shadowsong and enter Phase 4. Resetting Encounter."
class mob_flame_of_azzinoth : public CreatureScript
{
@@ -435,10 +439,10 @@ public:
if (FlameBlastTimer <= diff)
{
- DoCast(me->getVictim(), SPELL_BLAZE_SUMMON, true); //appear at victim
+ DoCast(me->getVictim(), SPELL_BLAZE_SUMMON, true); // appear at victim
DoCast(me->getVictim(), SPELL_FLAME_BLAST);
- FlameBlastTimer = 15000; //10000 is official-like?
- DoZoneInCombat(); //in case someone is revived
+ FlameBlastTimer = 15000; // 10000 is official-like?
+ DoZoneInCombat(); // in case someone is revived
} else FlameBlastTimer -= diff;
if (CheckTimer <= diff)
@@ -515,7 +519,7 @@ public:
void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/)
{
- if (FlightCount == 7) //change hover point
+ if (FlightCount == 7) // change hover point
{
if (me->getVictim())
{
@@ -642,7 +646,7 @@ public:
case PHASE_NORMAL_MAIEV:
AttackStart(me->getVictim());
Timer[EVENT_TAUNT] = 32000;
- Timer[EVENT_SHEAR] = 10000 + rand()%15 * 1000;
+ Timer[EVENT_SHEAR] = urand(10, 25) * 1000;
Timer[EVENT_FLAME_CRASH] = 20000;
Timer[EVENT_PARASITIC_SHADOWFIEND] = 25000;
Timer[EVENT_PARASITE_CHECK] = 0;
@@ -653,14 +657,14 @@ public:
Timer[EVENT_TRANSFORM_NORMAL] = 60000;
if (NextPhase == PHASE_NORMAL_2)
break;
- Timer[EVENT_ENRAGE] = 30000 + rand()%10 * 1000;
+ Timer[EVENT_ENRAGE] = urand(30, 40) * 1000;
break;
case PHASE_FLIGHT:
Timer[EVENT_FIREBALL] = 1000;
if (!(rand()%4))
Timer[EVENT_DARK_BARRAGE] = 10000;
- Timer[EVENT_EYE_BLAST] = 10000 + rand()%15 * 1000;
- Timer[EVENT_MOVE_POINT] = 20000 + rand()%20 * 1000;
+ Timer[EVENT_EYE_BLAST] = urand(10, 25) * 1000;
+ Timer[EVENT_MOVE_POINT] = urand(20, 40) * 1000;
break;
case PHASE_DEMON:
Timer[EVENT_SHADOW_BLAST] = 1000;
@@ -678,7 +682,7 @@ public:
me->AttackStop();
break;
case PHASE_FLIGHT_SEQUENCE:
- if (Phase == PHASE_NORMAL) //lift off
+ if (Phase == PHASE_NORMAL) // lift off
{
FlightCount = 1;
Timer[EVENT_FLIGHT_SEQUENCE] = 1;
@@ -688,7 +692,7 @@ public:
me->GetMotionMaster()->Clear(false);
me->AttackStop();
}
- else //land
+ else // land
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
break;
case PHASE_TRANSFORM_SEQUENCE:
@@ -749,7 +753,7 @@ public:
Trigger->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
Trigger->GetMotionMaster()->MovePoint(0, final.x, final.y, final.z);
- //Trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ // Trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetTarget(Trigger->GetGUID());
DoCast(Trigger, SPELL_EYE_BLAST);
}
@@ -792,7 +796,7 @@ public:
{
switch (FlightCount)
{
- case 1://lift off
+ case 1: // lift off
me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
me->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
me->StopMoving();
@@ -800,11 +804,11 @@ public:
DoPlaySoundToSet(me, SOUND_TAKEOFF);
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
break;
- case 2://move to center
- me->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); //+5, for SPELL_THROW_GLAIVE bug
+ case 2: // move to center
+ me->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); // +5, for SPELL_THROW_GLAIVE bug
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
break;
- case 3://throw one glaive
+ case 3: // throw one glaive
{
uint8 i=1;
Creature* Glaive = me->SummonCreature(BLADE_OF_AZZINOTH, GlaivePosition[i].x, GlaivePosition[i].y, GlaivePosition[i].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
@@ -819,7 +823,7 @@ public:
}
Timer[EVENT_FLIGHT_SEQUENCE] = 700;
break;
- case 4://throw another
+ case 4: // throw another
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
{
uint8 i=0;
@@ -835,19 +839,19 @@ public:
}
Timer[EVENT_FLIGHT_SEQUENCE] = 5000;
break;
- case 5://summon flames
+ case 5: // summon flames
SummonFlamesOfAzzinoth();
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
break;
- case 6://fly to hover point
+ case 6: // fly to hover point
me->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
break;
- case 7://return to center
+ case 7: // return to center
me->GetMotionMaster()->MovePoint(0, CENTER_X, CENTER_Y, CENTER_Z);
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
break;
- case 8://glaive return
+ case 8: // glaive return
for (uint8 i = 0; i < 2; ++i)
{
if (GlaiveGUID[i])
@@ -862,7 +866,7 @@ public:
}
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
break;
- case 9://land
+ case 9: // land
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
me->StopMoving();
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
@@ -880,7 +884,7 @@ public:
}
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
break;
- case 10://attack
+ case 10: // attack
DoResetThreat();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
@@ -1001,12 +1005,12 @@ public:
{
switch (Event)
{
- //PHASE_NORMAL
+ // PHASE_NORMAL
case EVENT_BERSERK:
me->MonsterYell(SAY_ENRAGE, LANG_UNIVERSAL, 0);
DoPlaySoundToSet(me, SOUND_ENRAGE);
DoCast(me, SPELL_BERSERK, true);
- Timer[EVENT_BERSERK] = 5000;//The buff actually lasts forever.
+ Timer[EVENT_BERSERK] = 5000; // The buff actually lasts forever.
break;
case EVENT_TAUNT:
@@ -1018,25 +1022,25 @@ public:
if (soundid)
DoPlaySoundToSet(me, soundid);
}
- Timer[EVENT_TAUNT] = 25000 + rand()%10000;
+ Timer[EVENT_TAUNT] = urand(25000, 35000);
break;
case EVENT_SHEAR:
// no longer exists in 3.0f.2
- //DoCast(me->getVictim(), SPELL_SHEAR);
+ // DoCast(me->getVictim(), SPELL_SHEAR);
Timer[EVENT_SHEAR] = 25000 + (rand()%16 * 1000);
break;
case EVENT_FLAME_CRASH:
DoCast(me->getVictim(), SPELL_FLAME_CRASH);
- Timer[EVENT_FLAME_CRASH] = 30000 + rand()%10000;
+ Timer[EVENT_FLAME_CRASH] = urand(30000, 40000);
break;
case EVENT_PARASITIC_SHADOWFIEND:
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true))
DoCast(target, SPELL_PARASITIC_SHADOWFIEND, true);
- Timer[EVENT_PARASITIC_SHADOWFIEND] = 35000 + rand()%10000;
+ Timer[EVENT_PARASITIC_SHADOWFIEND] = urand(35000, 45000);
}
break;
@@ -1046,10 +1050,10 @@ public:
case EVENT_DRAW_SOUL:
DoCast(me->getVictim(), SPELL_DRAW_SOUL);
- Timer[EVENT_DRAW_SOUL] = 50000 + rand()%10000;
+ Timer[EVENT_DRAW_SOUL] = urand(50000, 60000);
break;
- //PHASE_NORMAL_2
+ // PHASE_NORMAL_2
case EVENT_AGONIZING_FLAMES:
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_AGONIZING_FLAMES);
Timer[EVENT_AGONIZING_FLAMES] = 0;
@@ -1059,7 +1063,7 @@ public:
EnterPhase(PHASE_TRANSFORM_SEQUENCE);
break;
- //PHASE_NORMAL_MAIEV
+ // PHASE_NORMAL_MAIEV
case EVENT_ENRAGE:
DoCast(me, SPELL_ENRAGE);
Timer[EVENT_ENRAGE] = 0;
@@ -1092,7 +1096,7 @@ public:
case EVENT_MOVE_POINT:
Phase = PHASE_FLIGHT_SEQUENCE;
- Timer[EVENT_FLIGHT_SEQUENCE] = 0;//do not start Event when changing hover point
+ Timer[EVENT_FLIGHT_SEQUENCE] = 0; // do not start Event when changing hover point
HoverPoint += (rand()%3 + 1);
if (HoverPoint > 3)
HoverPoint -= 4;
@@ -1168,7 +1172,7 @@ public:
Phase = PHASE_NORMAL_MAIEV;
IllidanGUID = 0;
Timer[EVENT_MAIEV_STEALTH] = 0;
- Timer[EVENT_MAIEV_TAUNT] = 22000 + rand()%21 * 1000;
+ Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000;
Timer[EVENT_MAIEV_SHADOW_STRIKE] = 30000;
SetEquipmentSlots(false, 44850, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 45738);
@@ -1204,7 +1208,7 @@ public:
{
GETUNIT(Illidan, IllidanGUID);
if (Illidan && me->IsWithinDistInMap(Illidan, 25))
- BlinkToPlayer();//Do not let dread aura hurt her.
+ BlinkToPlayer();// Do not let dread aura hurt her.
AttackStartNoMove(who);
}
else
@@ -1217,7 +1221,7 @@ public:
EnterPhase(PhaseIllidan(param));
}
- void EnterPhase(PhaseIllidan NextPhase)//This is in fact Illidan's phase.
+ void EnterPhase(PhaseIllidan NextPhase) // This is in fact Illidan's phase.
{
switch (NextPhase)
{
@@ -1317,7 +1321,7 @@ public:
if (MaievTaunts[random].text.size())
me->MonsterYell(MaievTaunts[random].text.c_str(), LANG_UNIVERSAL, 0);
DoPlaySoundToSet(me, sound);
- Timer[EVENT_MAIEV_TAUNT] = 22000 + rand()%21 * 1000;
+ Timer[EVENT_MAIEV_TAUNT] = urand(22, 43) * 1000;
}
break;
case EVENT_MAIEV_SHADOW_STRIKE:
@@ -1350,7 +1354,7 @@ public:
if (GETCRE(Illidan, IllidanGUID))
CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, Illidan->AI())->DeleteFromThreatList(me->GetGUID());
me->AttackStop();
- Timer[EVENT_MAIEV_STEALTH] = 60000; //reappear after 1 minute
+ Timer[EVENT_MAIEV_STEALTH] = 60000; // reappear after 1 minute
MaxTimer = 1;
}
@@ -1403,17 +1407,18 @@ public:
DoorGUID[0] = instance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_R);
DoorGUID[1] = instance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_L);
- if (JustCreated)//close all doors at create
+ if (JustCreated) // close all doors at create
{
instance->HandleGameObject(GateGUID, false);
for (uint8 i = 0; i < 2; ++i)
instance->HandleGameObject(DoorGUID[i], false);
- //JustCreated = false;
- }else
- {//open all doors, raid wiped
+ }
+ else // open all doors, raid wiped
+ {
instance->HandleGameObject(GateGUID, true);
- WalkCount = 1;//skip first wp
+ WalkCount = 1; // skip first wp
+
for (uint8 i = 0; i < 2; ++i)
instance->HandleGameObject(DoorGUID[i], true);
}
@@ -1513,7 +1518,7 @@ public:
if (GETGO(Gate, GateGUID))
Gate->GetPosition(x, y, z);
else
- return;//if door not spawned, don't crash server
+ return; // if door not spawned, don't crash server
if (Creature* Channel = me->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
{
@@ -1581,11 +1586,11 @@ public:
me->AddThreat(Illidan, 10000000.0f);
me->GetMotionMaster()->MoveChase(Illidan);
}
- Timer = 30000; //chain lightning
+ Timer = 30000; // chain lightning
break;
case PHASE_FIGHT_MINIONS:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- Timer = 10000 + rand()%6000;//summon minion
+ Timer = urand(10000, 16000); // summon minion
break;
case PHASE_RETURN:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -1655,7 +1660,7 @@ public:
Spirit[1]->CastSpell(Channel, SPELL_DEATHSWORN_DOOR_CHANNEL, false);
Timer = 5000;
break;
- case 3: //open the gate
+ case 3: // open the gate
me->InterruptNonMeleeSpells(true);
Spirit[0]->InterruptNonMeleeSpells(true);
Spirit[1]->InterruptNonMeleeSpells(true);
@@ -1767,7 +1772,7 @@ public:
float x, y, z;
me->GetPosition(x, y, z);
Creature* Elite = me->SummonCreature(ILLIDARI_ELITE, x+rand()%10, y+rand()%10, z, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
- //Creature* Elite = me->SummonCreature(ILLIDARI_ELITE, x, y, z, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
+ // Creature* Elite = me->SummonCreature(ILLIDARI_ELITE, x, y, z, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
if (Elite)
{
Elite->AI()->AttackStart(me);
@@ -1775,7 +1780,7 @@ public:
AttackStart(Elite);
me->AddThreat(Elite, 1000000.0f);
}
- Timer = 10000 + rand()%6000;
+ Timer = urand(10000, 16000);
GETUNIT(Illidan, IllidanGUID);
if (Illidan && Illidan->HealthBelowPct(10))
EnterPhase(PHASE_RETURN);
@@ -1975,10 +1980,11 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence()
me->GetPosition(x, y, z);
x += 10; y += 10;
Akama->GetMotionMaster()->Clear(false);
- //Akama->GetMotionMaster()->MoveIdle();
+ // Akama->GetMotionMaster()->MoveIdle();
Akama->SetPosition(x, y, z, 0.0f);
- Akama->SendMonsterMove(x, y, z, 0, MOVEMENTFLAG_NONE, 0);//Illidan must not die until Akama arrives.
+ Akama->SendMonsterMove(x, y, z, 0, MOVEMENTFLAG_NONE, 0); // Illidan must not die until Akama arrives.
Akama->GetMotionMaster()->MoveChase(me);
+
}
}
break;
@@ -2051,7 +2057,8 @@ public:
DespawnTimer = 5000;
if (who->HasAura(SPELL_ENRAGE))
who->RemoveAurasDueToSpell(SPELL_ENRAGE); // Dispel his enrage
- //if (GameObject* CageTrap = instance->instance->GetGameObject(instance->GetData64(CageTrapGUID)))
+ // if (GameObject* CageTrap = instance->instance->GetGameObject(instance->GetData64(CageTrapGUID)))
+
// CageTrap->SetLootState(GO_JUST_DEACTIVATED);
}
}
@@ -2067,13 +2074,13 @@ public:
else DespawnTimer -= diff;
}
- //if (IllidanGUID && !SummonedBeams)
- //{
+ // if (IllidanGUID && !SummonedBeams)
+ // {
// if (Unit* Illidan = Unit::GetUnit(*me, IllidanGUID)
// {
- // //TODO: Find proper spells and properly apply 'caged' Illidan effect
+ // // TODO: Find proper spells and properly apply 'caged' Illidan effect
// }
- //}
+ // }
}
};
@@ -2166,7 +2173,7 @@ public:
void SpellHit(Unit* /*caster*/, const SpellInfo* spell)
{
if (spell->Id == SPELL_THROW_GLAIVE2 || spell->Id == SPELL_THROW_GLAIVE)
- me->SetDisplayId(21431);//appear when hit by Illidan's glaive
+ me->SetDisplayId(21431);// appear when hit by Illidan's glaive
}
};
@@ -2214,9 +2221,9 @@ public:
if (!me->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND)
&& !me->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2))
{
- if (Creature* illidan = Unit::GetCreature((*me), IllidanGUID))//summon only in 1. phase
+ if (Creature* illidan = Unit::GetCreature((*me), IllidanGUID))// summon only in 1. phase
if (CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Phase == PHASE_NORMAL)
- me->CastSpell(me->getVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); //do not stack
+ me->CastSpell(me->getVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); // do not stack
}
me->AttackerStateUpdate(me->getVictim());
me->resetAttackTimer();
diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
index a69ed1f7e7d..3c7f0d3b89c 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -128,7 +128,7 @@ public:
FatalAttractionExplodeTimer = 70000;
ShriekTimer = 30000;
SaberTimer = 35000;
- RandomYellTimer = 70000 + rand()%41 * 1000;
+ RandomYellTimer = urand(70, 111) * 1000;
EnrageTimer = 600000;
ExplosionCount = 0;
@@ -237,7 +237,7 @@ public:
DoScriptText(RAND(SAY_SPELL2, SAY_SPELL3), me);
FatalAttractionExplodeTimer = 2000;
- FatalAttractionTimer = 40000 + rand()%31 * 1000;
+ FatalAttractionTimer = urand(40, 71) * 1000;
} else FatalAttractionTimer -= diff;
if (FatalAttractionExplodeTimer <= diff)
@@ -293,7 +293,7 @@ public:
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_TAUNT1, SAY_TAUNT2, SAY_TAUNT3), me);
- RandomYellTimer = 60000 + rand()%91 * 1000;
+ RandomYellTimer = urand(60, 151) * 1000;
} else RandomYellTimer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index 1519713183d..b0c29afda34 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -582,7 +582,7 @@ public:
{
me->InterruptNonMeleeSpells(false);
DoCast(me->getVictim(), SPELL_DEADEN);
- DeadenTimer = 25000 + rand()%10000;
+ DeadenTimer = urand(25000, 35000);
if (!(rand()%2))
{
DoScriptText(DESI_SAY_SPEC, me);
@@ -676,7 +676,7 @@ public:
if (SoulScreamTimer <= diff)
{
DoCast(me->getVictim(), SPELL_SOUL_SCREAM);
- SoulScreamTimer = 9000 + rand()%2000;
+ SoulScreamTimer = urand(9000, 11000);
if (!(rand()%3))
{
DoScriptText(ANGER_SAY_SPEC, me);
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index ce1f8739493..5ca3189ebca 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -641,7 +641,7 @@ public:
void EnterCombat(Unit* /*who*/) {}
- void BeginEvent(Player* pl)
+ void BeginEvent(Player* player)
{
if (!instance)
return;
@@ -662,7 +662,7 @@ public:
me->CombatStart(Shade);
Shade->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
Shade->SetTarget(me->GetGUID());
- if (pl) Shade->AddThreat(pl, 1.0f);
+ if (player) Shade->AddThreat(player, 1.0f);
DoZoneInCombat(Shade);
EventBegun = true;
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
index 6941a175698..5a02ffc891f 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index 074bb16e7a0..15c7cdb187d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -246,7 +246,7 @@ public:
if (instance)
instance->SetData(DATA_TERONGOREFIENDEVENT, NOT_STARTED);
- IncinerateTimer = 20000 + rand()%11000;
+ IncinerateTimer = urand(20000, 31000);
SummonDoomBlossomTimer = 12000;
EnrageTimer = 600000;
CrushingShadowsTimer = 22000;
@@ -460,7 +460,7 @@ public:
{
DoScriptText(RAND(SAY_SPECIAL1, SAY_SPECIAL2), me);
DoCast(target, SPELL_INCINERATE);
- IncinerateTimer = 20000 + rand()%31 * 1000;
+ IncinerateTimer = urand(20, 51) * 1000;
}
} else IncinerateTimer -= diff;
@@ -469,7 +469,7 @@ public:
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
if (target && target->isAlive())
DoCast(target, SPELL_CRUSHING_SHADOWS);
- CrushingShadowsTimer = 10000 + rand()%16 * 1000;
+ CrushingShadowsTimer = urand(10, 26) * 1000;
} else CrushingShadowsTimer -= diff;
/*** NOTE FOR FUTURE DEV: UNCOMMENT BELOW ONLY IF MIND CONTROL IS FULLY IMPLEMENTED **/
@@ -492,7 +492,7 @@ public:
if (RandomYellTimer <= diff)
{
DoScriptText(RAND(SAY_SPELL1, SAY_SPELL2), me);
- RandomYellTimer = 50000 + rand()%51 * 1000;
+ RandomYellTimer = urand(50, 101) * 1000;
} else RandomYellTimer -= diff;
if (!me->HasAura(SPELL_BERSERK))
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index 1f603699060..47f82447a80 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -94,7 +94,7 @@ public:
void KilledUnit(Unit* /*victim*/)
{
- DoScriptText(rand()%2 ? SAY_SLAY1 : SAY_SLAY2, me);
+ DoScriptText(urand(0, 1) ? SAY_SLAY1 : SAY_SLAY2, me);
events.DelayEvents(5000, GCD_YELL);
}
@@ -175,7 +175,7 @@ public:
SpineTargetGUID = target->GetGUID();
//must let target summon, otherwise you cannot click the spine
target->SummonGameObject(GOBJECT_SPINE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 30);
- DoScriptText(rand()%2 ? SAY_NEEDLE1 : SAY_NEEDLE2, me);
+ DoScriptText(urand(0, 1) ? SAY_NEEDLE1 : SAY_NEEDLE2, me);
events.DelayEvents(1500, GCD_CAST);
events.DelayEvents(15000, GCD_YELL);
}
diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
index f7e98444be8..b0c6dcdda41 100644
--- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -613,8 +613,8 @@ public:
void Reset()
{
- BlizzardTimer = 30000 + rand()%61 * 1000;
- FlamestrikeTimer = 30000 + rand()%61 * 1000;
+ BlizzardTimer = urand(30, 91) * 1000;
+ FlamestrikeTimer = urand(30, 91) * 1000;
ArcaneBoltTimer = 10000;
DampenMagicTimer = 2000;
ArcaneExplosionTimer = 14000;
@@ -673,7 +673,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_BLIZZARD);
- BlizzardTimer = 45000 + rand()%46 * 1000;
+ BlizzardTimer = urand(45, 91) * 1000;
FlamestrikeTimer += 10000;
Cooldown = 1000;
}
@@ -684,7 +684,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_FLAMESTRIKE);
- FlamestrikeTimer = 55000 + rand()%46 * 1000;
+ FlamestrikeTimer = urand(55, 101) * 1000;
BlizzardTimer += 10000;
Cooldown = 2000;
}
@@ -756,7 +756,7 @@ public:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_DIVINE_WRATH);
- DivineWrathTimer = 40000 + rand()%41 * 1000;
+ DivineWrathTimer = urand(40, 81) * 1000;
}
} else DivineWrathTimer -= diff;
@@ -799,7 +799,7 @@ public:
EnvenomTargetGUID = 0;
DeadlyPoisonTimer = 20000;
- VanishTimer = 60000 + rand()%61 * 1000;
+ VanishTimer = urand(60, 121) * 1000;
AppearEnvenomTimer = 150000;
HasVanished = false;
@@ -827,7 +827,7 @@ public:
if (DeadlyPoisonTimer <= diff)
{
DoCast(me->getVictim(), SPELL_DEADLY_POISON);
- DeadlyPoisonTimer = 15000 + rand()%31 * 1000;
+ DeadlyPoisonTimer = urand(15, 46) * 1000;
} else DeadlyPoisonTimer -= diff;
if (AppearEnvenomTimer <= diff) // Cast Envenom. This is cast 4 seconds after Vanish is over
diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
index 3663372d751..d4184a0b145 100644
--- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
index 3f6afc9c76e..9edc7179d5e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
index a5e0f60fb6c..6f020c16402 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index fcb4b58a1ad..33ce04e45e3 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index 65cb0173cd7..5111a8eaa8e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -691,8 +691,8 @@ public:
void Reset()
{
- Mindblast_Timer = 3000 + rand()%5000;
- Earthshock_Timer = 5000 + rand()%5000;
+ Mindblast_Timer = urand(3000, 8000);
+ Earthshock_Timer = urand(5000, 10000);
if (instance)
{
@@ -764,7 +764,7 @@ public:
if (target)DoCast(target, SPELL_MINDBLAST);
- Mindblast_Timer = 10000 + rand()%5000;
+ Mindblast_Timer = urand(10000, 15000);
} else Mindblast_Timer -= diff;
if (Earthshock_Timer <= diff)
@@ -787,7 +787,7 @@ public:
}
}
}
- Earthshock_Timer = 8000 + rand()%7000;
+ Earthshock_Timer = urand(8000, 15000);
} else Earthshock_Timer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index f69aa1f0757..3c06efefb08 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -234,7 +234,7 @@ public:
{
me->MonsterTextEmote(EMOTE_SPOUT, 0, true);
me->SetReactState(REACT_PASSIVE);
- me->GetMotionMaster()->MoveRotate(20000, rand()%2 ? ROTATE_DIRECTION_LEFT : ROTATE_DIRECTION_RIGHT);
+ me->GetMotionMaster()->MoveRotate(20000, urand(0, 1) ? ROTATE_DIRECTION_LEFT : ROTATE_DIRECTION_RIGHT);
SpoutTimer = 45000;
WhirlTimer = 20000;//whirl directly after spout
RotTimer = 20000;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
index 745aa162139..eeef50e3f9c 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
index 7a8973c4f0a..6c4019c7989 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h
index dd7405c7b26..786db3cb86b 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp
index 4ca3ef7891d..c3203621dbb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
index 5be2c99f362..ce73e467c0c 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
index 36161d05473..bfbeff81d3e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
index 9719a1e19db..51032fd70ed 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h
index 9eccbb60c68..b2b25d960ed 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
index e570537c71c..aebd71bbd47 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_the_black_stalker.cpp
index c00a365057a..fb3be660b5e 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_the_black_stalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_the_black_stalker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index 7cdfdc383bd..33196b1213a 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -213,7 +213,7 @@ public:
if (m_uiReverberation_Timer <= uiDiff)
{
DoCast(me->getVictim(), SPELL_REVERBERATION, true);
- m_uiReverberation_Timer = 15000 + rand()%10000;
+ m_uiReverberation_Timer = urand(15000, 25000);
}
else
m_uiReverberation_Timer -= uiDiff;
diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
index de3b93d029d..4636334e668 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -524,7 +524,7 @@ public:
if (target)
DoCast(target, SPELL_GREATER_POLYMORPH);
- GreaterPolymorph_Timer = 15000 + rand()%5000;
+ GreaterPolymorph_Timer = urand(15000, 20000);
} else GreaterPolymorph_Timer -= diff;
//LightningBolt_Timer
@@ -581,8 +581,8 @@ public:
void Reset()
{
GreaterPowerWordShield_Timer = 5000;
- Heal_Timer = 25000 + rand()%15000;
- PrayerofHealing_Timer = 45000 + rand()%10000;
+ Heal_Timer = urand(25000, 40000);
+ PrayerofHealing_Timer = urand(45000, 55000);
//reset encounter
if (instance)
@@ -648,14 +648,14 @@ public:
if (Heal_Timer <= diff)
{
DoCast(me, SPELL_HEAL);
- Heal_Timer = 15000 + rand()%25000;
+ Heal_Timer = urand(15000, 40000);
} else Heal_Timer -= diff;
//PrayerofHealing_Timer
if (PrayerofHealing_Timer <= diff)
{
DoCast(me, SPELL_PRAYER_OH);
- PrayerofHealing_Timer = 35000 + rand()%15000;
+ PrayerofHealing_Timer = urand(35000, 50000);
} else PrayerofHealing_Timer -= diff;
DoMeleeAttackIfReady();
diff --git a/src/server/scripts/Outland/GruulsLair/gruuls_lair.h b/src/server/scripts/Outland/GruulsLair/gruuls_lair.h
index fd78dd945a8..163ab97ed5f 100644
--- a/src/server/scripts/Outland/GruulsLair/gruuls_lair.h
+++ b/src/server/scripts/Outland/GruulsLair/gruuls_lair.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
index 1666e9adb9c..bd4f91e8e39 100644
--- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
+++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
index 892b74ff341..e34e86c16a7 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index 75de303a3d8..7fa417cacb2 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
index 4bc273ece8f..b847500fc36 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
index 49054f51241..f056ccd40ee 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
index 7754cb1339d..d9f6b7e303e 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp
index 0a60a1584dc..a6adb6b952e 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
index 1fd1094494d..71e773042b7 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
index f01f01b5bf8..b2f8af2c80d 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h
index e34e466368d..571071c724a 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
index b25b3806823..3dab24eab1b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 6918a076f6e..1679efb5525 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -424,7 +424,7 @@ class boss_magtheridon : public CreatureScript
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
}
- Blaze_Timer = 20000 + rand()%20000;
+ Blaze_Timer = urand(20000, 40000);
}
else
Blaze_Timer -= diff;
@@ -497,10 +497,10 @@ class mob_hellfire_channeler : public CreatureScript
void Reset()
{
- ShadowBoltVolley_Timer = 8000 + rand()%2000;
+ ShadowBoltVolley_Timer = urand(8000, 10000);
DarkMending_Timer = 10000;
- Fear_Timer = 15000 + rand()%5000;
- Infernal_Timer = 10000 + rand()%40000;
+ Fear_Timer = urand(15000, 20000);
+ Infernal_Timer = urand(10000, 50000);
Check_Timer = 5000;
}
@@ -547,7 +547,7 @@ class mob_hellfire_channeler : public CreatureScript
if (ShadowBoltVolley_Timer <= diff)
{
DoCast(me, SPELL_SHADOW_BOLT_VOLLEY);
- ShadowBoltVolley_Timer = 10000 + rand()%10000;
+ ShadowBoltVolley_Timer = urand(10000, 20000);
}
else
ShadowBoltVolley_Timer -= diff;
@@ -565,7 +565,7 @@ class mob_hellfire_channeler : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
DoCast(target, SPELL_FEAR);
- Fear_Timer = 25000 + rand()%15000;
+ Fear_Timer = urand(25000, 40000);
}
else
Fear_Timer -= diff;
@@ -574,7 +574,7 @@ class mob_hellfire_channeler : public CreatureScript
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCast(target, SPELL_BURNING_ABYSSAL, true);
- Infernal_Timer = 30000 + rand()%10000;
+ Infernal_Timer = urand(30000, 40000);
}
else
Infernal_Timer -= diff;
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
index 7461bb5ceee..9d52a0a3e87 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h
index f98eb09d86e..6a232264ba2 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
index 4c051f46945..970c089918e 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
index 3f542ce76e4..5e8ed53fa4b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
index 4f837870612..3f07552441b 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -303,9 +303,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript
if (resetcheck_timer <= diff)
{
- uint32 tempx, tempy;
- tempx = uint32(me->GetPositionX());
- tempy = uint32(me->GetPositionY());
+ uint32 tempx = uint32(me->GetPositionX());
if (tempx > 255 || tempx < 205)
{
EnterEvadeMode();
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
index e8f7844bfc5..cc36bf9a385 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h
index ad3ec3b3171..60140704012 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index dcbc2832f27..fcfe6c0ea16 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index 6fac13aa8ad..218c5a122f1 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index d987601c5bd..974d81ef914 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
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 e2a2176de5f..576d0a8bbf2 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp
index f5a7bad0d8e..1ec4a6e55ec 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
index 71a38340a3d..421f9f2f545 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h
index 7aac0bc0b45..9a2bd3425b6 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h
+++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
index 2f14edef145..4d579ac8c16 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
index df7f95abe2a..b8b0ffd4d2e 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -102,7 +102,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript
if (Shadow_Power_Timer <= diff)
{
DoCast(me, SPELL_SHADOW_POWER);
- Shadow_Power_Timer = 20000 + rand()%8000;
+ Shadow_Power_Timer = urand(20000, 28000);
}
else
Shadow_Power_Timer -= diff;
@@ -128,7 +128,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript
if (Stream_of_Machine_Fluid_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_STREAM_OF_MACHINE_FLUID);
- Stream_of_Machine_Fluid_Timer = 35000 + rand()%15000;
+ Stream_of_Machine_Fluid_Timer = urand(35000, 50000);
}
else
Stream_of_Machine_Fluid_Timer -= diff;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
index 05bf711432d..7e435187be9 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -76,10 +76,10 @@ class boss_nethermancer_sepethrea : public CreatureScript
void Reset()
{
- frost_attack_Timer = 7000 + rand()%3000;
- arcane_blast_Timer = 12000 + rand()%6000;
- dragons_breath_Timer = 18000 + rand()%4000;
- knockback_Timer = 22000 + rand()%6000;
+ frost_attack_Timer = urand(7000, 10000);
+ arcane_blast_Timer = urand(12000, 18000);
+ dragons_breath_Timer = urand(18000, 22000);
+ knockback_Timer = urand(22000, 28000);
solarburn_Timer = 30000;
if (instance)
@@ -119,7 +119,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
{
DoCast(me->getVictim(), SPELL_FROST_ATTACK);
- frost_attack_Timer = 7000 + rand()%3000;
+ frost_attack_Timer = urand(7000, 10000);
}
else
frost_attack_Timer -= diff;
@@ -141,7 +141,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
return;
DoScriptText(RAND(SAY_DRAGONS_BREATH_1, SAY_DRAGONS_BREATH_2), me);
}
- dragons_breath_Timer = 12000 + rand()%10000;
+ dragons_breath_Timer = urand(12000, 22000);
}
else
dragons_breath_Timer -= diff;
@@ -150,7 +150,7 @@ class boss_nethermancer_sepethrea : public CreatureScript
if (knockback_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_KNOCKBACK);
- knockback_Timer = 15000 + rand()%10000;
+ knockback_Timer = urand(15000, 25000);
}
else
knockback_Timer -= diff;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
index 54ecbdd621a..cdc3b799b2c 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -83,10 +83,10 @@ class boss_pathaleon_the_calculator : public CreatureScript
void Reset()
{
Summon_Timer = 30000;
- ManaTap_Timer = 12000 + rand()%8000;
- ArcaneTorrent_Timer = 16000 + rand()%9000;
- Domination_Timer = 25000 + rand()%15000;
- ArcaneExplosion_Timer = 8000 + rand()%5000;
+ ManaTap_Timer = urand(12000, 20000);
+ ArcaneTorrent_Timer = urand(16000, 25000);
+ Domination_Timer = urand(25000, 40000);
+ ArcaneExplosion_Timer = urand(8000, 13000);
Enraged = false;
@@ -135,7 +135,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
Wraith->AI()->AttackStart(target);
}
DoScriptText(SAY_SUMMON, me);
- Summon_Timer = 30000 + rand()%15000;
+ Summon_Timer = urand(30000, 45000);
}
else
Summon_Timer -= diff;
@@ -143,7 +143,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
if (ManaTap_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_MANA_TAP);
- ManaTap_Timer = 14000 + rand()%8000;
+ ManaTap_Timer = urand(14000, 22000);
}
else
ManaTap_Timer -= diff;
@@ -151,7 +151,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
if (ArcaneTorrent_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_ARCANE_TORRENT);
- ArcaneTorrent_Timer = 12000 + rand()%6000;
+ ArcaneTorrent_Timer = urand(12000, 18000);
}
else
ArcaneTorrent_Timer -= diff;
@@ -163,7 +163,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
DoScriptText(RAND(SAY_DOMINATION_1, SAY_DOMINATION_2), me);
DoCast(target, SPELL_DOMINATION);
}
- Domination_Timer = 25000 + rand()%5000;
+ Domination_Timer = urand(25000, 30000);
}
else
Domination_Timer -= diff;
@@ -174,7 +174,7 @@ class boss_pathaleon_the_calculator : public CreatureScript
if (ArcaneExplosion_Timer <= diff)
{
DoCast(me->getVictim(), H_SPELL_ARCANE_EXPLOSION);
- ArcaneExplosion_Timer = 10000 + rand()%4000;
+ ArcaneExplosion_Timer = urand(10000, 14000);
}
else
ArcaneExplosion_Timer -= diff;
@@ -218,7 +218,7 @@ class mob_nether_wraith : public CreatureScript
void Reset()
{
- ArcaneMissiles_Timer = 1000 + rand()%3000;
+ ArcaneMissiles_Timer = urand(1000, 4000);
Detonation_Timer = 20000;
Die_Timer = 2200;
Detonation = false;
@@ -237,7 +237,7 @@ class mob_nether_wraith : public CreatureScript
DoCast(target, SPELL_ARCANE_MISSILES);
else
DoCast(me->getVictim(), SPELL_ARCANE_MISSILES);
- ArcaneMissiles_Timer = 5000 + rand()%5000;
+ ArcaneMissiles_Timer = urand(5000, 10000);
}
else
ArcaneMissiles_Timer -=diff;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
index ef48ebbcf11..9db2b660d2a 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h
index d2fbfc326f4..1ad436892bb 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index d811390e3d0..78acd88c894 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h
index c25ec2600c2..8b897b1b96e 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
index d2375f377c4..327ca289553 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
index 0988f6ffeb9..6a27d295ebc 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
index 64fea1c41e5..ccac73c5dc6 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
index 43078c48537..488ddba40cf 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
index 2bf4abbcb96..7e9960225bb 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -152,9 +152,9 @@ class boss_warp_splinter : public CreatureScript
void Reset()
{
- War_Stomp_Timer = 25000 + rand()%15000;
+ War_Stomp_Timer = urand(25000, 40000);
Summon_Treants_Timer = 45000;
- Arcane_Volley_Timer = 8000 + rand()%12000;
+ Arcane_Volley_Timer = urand(8000, 20000);
me->SetSpeed(MOVE_RUN, 0.7f, true);
}
@@ -199,7 +199,7 @@ class boss_warp_splinter : public CreatureScript
if (War_Stomp_Timer <= diff)
{
DoCast(me->getVictim(), WAR_STOMP);
- War_Stomp_Timer = 25000 + rand()%15000;
+ War_Stomp_Timer = urand(25000, 40000);
}
else
War_Stomp_Timer -= diff;
@@ -208,7 +208,7 @@ class boss_warp_splinter : public CreatureScript
if (Arcane_Volley_Timer <= diff)
{
DoCast(me->getVictim(), DUNGEON_MODE(ARCANE_VOLLEY, ARCANE_VOLLEY_H));
- Arcane_Volley_Timer = 20000 + rand()%15000;
+ Arcane_Volley_Timer = urand(20000, 35000);
}
else
Arcane_Volley_Timer -= diff;
diff --git a/src/server/scripts/Outland/blades_edge_mountains.cpp b/src/server/scripts/Outland/blades_edge_mountains.cpp
index f94a7d2725c..d78d4afbfb8 100644
--- a/src/server/scripts/Outland/blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/blades_edge_mountains.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@ npc_daranelle
npc_overseer_nuaar
npc_saikkal_the_elder
go_legion_obelisk
+go_thunderspike
EndContentData */
#include "ScriptPCH.h"
@@ -537,9 +538,30 @@ public:
};
/*######
-## AddSC
+## go_thunderspike
######*/
+enum TheThunderspike
+{
+ NPC_GOR_GRIMGUT = 21319,
+ QUEST_THUNDERSPIKE = 10526,
+};
+
+class go_thunderspike : public GameObjectScript
+{
+ public:
+ go_thunderspike() : GameObjectScript("go_thunderspike") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (player->GetQuestStatus(QUEST_THUNDERSPIKE) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_GOR_GRIMGUT, 25.0f, true))
+ if (Creature* gorGrimgut = go->SummonCreature(NPC_GOR_GRIMGUT, -2413.4f, 6914.48f, 25.01f, 3.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000))
+ gorGrimgut->AI()->AttackStart(player);
+
+ return true;
+ }
+};
+
void AddSC_blades_edge_mountains()
{
new mobs_bladespire_ogre();
@@ -550,4 +572,5 @@ void AddSC_blades_edge_mountains()
new go_legion_obelisk();
new npc_bloodmaul_brutebane();
new npc_ogre_brute();
+ new go_thunderspike();
}
diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
index 2f725e78666..4a83181159c 100644
--- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
+++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp
index 5cb84eb1303..883601632b8 100644
--- a/src/server/scripts/Outland/boss_doomwalker.cpp
+++ b/src/server/scripts/Outland/boss_doomwalker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/hellfire_peninsula.cpp b/src/server/scripts/Outland/hellfire_peninsula.cpp
index e28e1c3c685..7d4de409b8b 100644
--- a/src/server/scripts/Outland/hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/hellfire_peninsula.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/nagrand.cpp b/src/server/scripts/Outland/nagrand.cpp
index b639050320c..c27ad8e7948 100644
--- a/src/server/scripts/Outland/nagrand.cpp
+++ b/src/server/scripts/Outland/nagrand.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -19,330 +19,20 @@
/* ScriptData
SDName: Nagrand
SD%Complete: 90
-SDComment: Quest support: 9849, 9868, 9918, 9874, 9991, 10107, 10108, 10044, 10172, 10646, 10085, 10987. TextId's unknown for altruis_the_sufferer and greatmother_geyah (npc_text)
+SDComment: Quest support: 9868, 9874, 10044, 10172, 10085. TextId's unknown for altruis_the_sufferer and greatmother_geyah (npc_text)
SDCategory: Nagrand
EndScriptData */
/* ContentData
-mob_shattered_rumbler
-mob_lump
-npc_altruis_the_sufferer
npc_greatmother_geyah
-npc_lantresor_of_the_blade
npc_maghar_captive
npc_creditmarker_visit_with_ancestors
-mob_sparrowhawk
EndContentData */
#include "ScriptPCH.h"
#include "ScriptedEscortAI.h"
/*######
-## mob_shattered_rumbler - this should be done with ACID
-######*/
-
-class mob_shattered_rumbler : public CreatureScript
-{
-public:
- mob_shattered_rumbler() : CreatureScript("mob_shattered_rumbler") { }
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new mob_shattered_rumblerAI (creature);
- }
-
- struct mob_shattered_rumblerAI : public ScriptedAI
- {
- bool Spawn;
-
- mob_shattered_rumblerAI(Creature* c) : ScriptedAI(c) {}
-
- void Reset()
- {
- Spawn = false;
- }
-
- void EnterCombat(Unit* /*who*/) {}
-
- void SpellHit(Unit* Hitter, const SpellInfo* Spellkind)
- {
- if (Spellkind->Id == 32001 && !Spawn)
- {
- float x = me->GetPositionX();
- float y = me->GetPositionY();
- float z = me->GetPositionZ();
-
- Hitter->SummonCreature(18181, x+(0.7f * (rand()%30)), y+(rand()%5), z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
- Hitter->SummonCreature(18181, x+(rand()%5), y-(rand()%5), z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
- Hitter->SummonCreature(18181, x-(rand()%5), y+(0.5f *(rand()%60)), z, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
- me->setDeathState(CORPSE);
- Spawn = true;
- }
- return;
- }
- };
-
-};
-
-/*######
-## mob_lump
-######*/
-
-#define SPELL_VISUAL_SLEEP 16093
-#define SPELL_SPEAR_THROW 32248
-
-#define LUMP_SAY0 -1000190
-#define LUMP_SAY1 -1000191
-
-#define LUMP_DEFEAT -1000192
-
-#define GOSSIP_HL "I need answers, ogre!"
-#define GOSSIP_SL1 "Why are Boulderfist out this far? You know that this is Kurenai territory."
-#define GOSSIP_SL2 "And you think you can just eat anything you want? You're obviously trying to eat the Broken of Telaar."
-#define GOSSIP_SL3 "This means war, Lump! War I say!"
-
-class mob_lump : public CreatureScript
-{
-public:
- mob_lump() : CreatureScript("mob_lump") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
- {
- case GOSSIP_ACTION_INFO_DEF:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SL1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(9353, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SL2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- player->SEND_GOSSIP_MENU(9354, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SL3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
- player->SEND_GOSSIP_MENU(9355, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- player->SEND_GOSSIP_MENU(9356, creature->GetGUID());
- player->TalkedToCreature(18354, creature->GetGUID());
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature)
- {
- if (player->GetQuestStatus(9918) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
-
- player->SEND_GOSSIP_MENU(9352, creature->GetGUID());
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new mob_lumpAI(creature);
- }
-
- struct mob_lumpAI : public ScriptedAI
- {
- mob_lumpAI(Creature* c) : ScriptedAI(c)
- {
- bReset = false;
- }
-
- uint32 Reset_Timer;
- uint32 Spear_Throw_Timer;
- bool bReset;
-
- void Reset()
- {
- Reset_Timer = 60000;
- Spear_Throw_Timer = 2000;
-
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
-
- void AttackedBy(Unit* pAttacker)
- {
- if (me->getVictim())
- return;
-
- if (me->IsFriendlyTo(pAttacker))
- return;
-
- AttackStart(pAttacker);
- }
-
- void DamageTaken(Unit* done_by, uint32 & damage)
- {
- if (done_by->GetTypeId() == TYPEID_PLAYER && me->HealthBelowPctDamaged(30, damage))
- {
- if (!bReset && CAST_PLR(done_by)->GetQuestStatus(9918) == QUEST_STATUS_INCOMPLETE)
- {
- //Take 0 damage
- damage = 0;
-
- CAST_PLR(done_by)->AttackStop();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveAllAuras();
- me->DeleteThreatList();
- me->CombatStop(true);
- me->setFaction(1080); //friendly
- me->SetStandState(UNIT_STAND_STATE_SIT);
- DoScriptText(LUMP_DEFEAT, me);
-
- bReset = true;
- }
- }
- }
-
- void EnterCombat(Unit* /*who*/)
- {
- if (me->HasAura(SPELL_VISUAL_SLEEP))
- me->RemoveAura(SPELL_VISUAL_SLEEP);
-
- if (!me->IsStandState())
- me->SetStandState(UNIT_STAND_STATE_STAND);
-
- DoScriptText(RAND(LUMP_SAY0, LUMP_SAY1), me);
- }
-
- void UpdateAI(const uint32 diff)
- {
- //check if we waiting for a reset
- if (bReset)
- {
- if (Reset_Timer <= diff)
- {
- EnterEvadeMode();
- bReset = false;
- me->setFaction(1711); //hostile
- return;
- }
- else Reset_Timer -= diff;
- }
-
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- //Spear_Throw_Timer
- if (Spear_Throw_Timer <= diff)
- {
- DoCast(me->getVictim(), SPELL_SPEAR_THROW);
- Spear_Throw_Timer = 20000;
- } else Spear_Throw_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
- };
-
-};
-
-/*######
-## npc_altruis_the_sufferer
-######*/
-
-#define GOSSIP_HATS1 "I see twisted steel and smell sundered earth."
-#define GOSSIP_HATS2 "Well...?"
-#define GOSSIP_HATS3 "[PH] Story about Illidan's Pupil"
-
-#define GOSSIP_SATS1 "Legion?"
-#define GOSSIP_SATS2 "And now?"
-#define GOSSIP_SATS3 "How do you see them now?"
-#define GOSSIP_SATS4 "Forge camps?"
-#define GOSSIP_SATS5 "Ok."
-#define GOSSIP_SATS6 "[PH] Story done"
-
-class npc_altruis_the_sufferer : public CreatureScript
-{
-public:
- npc_altruis_the_sufferer() : CreatureScript("npc_altruis_the_sufferer") { }
-
- bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* /*quest*/)
- {
- if (!player->GetQuestRewardStatus(9991)) //Survey the Land, q-id 9991
- {
- player->CLOSE_GOSSIP_MENU();
- player->ActivateTaxiPathTo(532); //TaxiPath 532
- }
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
- {
- case GOSSIP_ACTION_INFO_DEF+10:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SATS1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
- player->SEND_GOSSIP_MENU(9420, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+11:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SATS2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
- player->SEND_GOSSIP_MENU(9421, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+12:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SATS3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13);
- player->SEND_GOSSIP_MENU(9422, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+13:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SATS4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
- player->SEND_GOSSIP_MENU(9423, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+14:
- player->SEND_GOSSIP_MENU(9424, creature->GetGUID());
- break;
-
- case GOSSIP_ACTION_INFO_DEF+20:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SATS5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 21);
- player->SEND_GOSSIP_MENU(9427, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+21:
- player->CLOSE_GOSSIP_MENU();
- player->AreaExploredOrEventHappens(9991);
- break;
-
- case GOSSIP_ACTION_INFO_DEF+30:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SATS6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 31);
- player->SEND_GOSSIP_MENU(384, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+31:
- player->CLOSE_GOSSIP_MENU();
- player->AreaExploredOrEventHappens(10646);
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature)
- {
- if (creature->isQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- //gossip before obtaining Survey the Land
- if (player->GetQuestStatus(9991) == QUEST_STATUS_NONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HATS1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+10);
-
- //gossip when Survey the Land is incomplete (technically, after the flight)
- if (player->GetQuestStatus(9991) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HATS2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+20);
-
- //wowwiki.com/Varedis
- if (player->GetQuestStatus(10646) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HATS3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+30);
-
- player->SEND_GOSSIP_MENU(9419, creature->GetGUID());
-
- return true;
- }
-
-};
-
-/*######
## npc_greatmother_geyah
######*/
@@ -453,83 +143,6 @@ public:
};
-/*######
-## npc_lantresor_of_the_blade
-######*/
-
-#define GOSSIP_HLB "I have killed many of your ogres, Lantresor. I have no fear."
-#define GOSSIP_SLB1 "Should I know? You look like an orc to me."
-#define GOSSIP_SLB2 "And the other half?"
-#define GOSSIP_SLB3 "I have heard of your kind, but I never thought to see the day when I would meet a half-breed."
-#define GOSSIP_SLB4 "My apologies. I did not mean to offend. I am here on behalf of my people."
-#define GOSSIP_SLB5 "My people ask that you pull back your Boulderfist ogres and cease all attacks on our territories. In return, we will also pull back our forces."
-#define GOSSIP_SLB6 "We will fight you until the end, then, Lantresor. We will not stand idly by as you pillage our towns and kill our people."
-#define GOSSIP_SLB7 "What do I need to do?"
-
-class npc_lantresor_of_the_blade : public CreatureScript
-{
-public:
- npc_lantresor_of_the_blade() : CreatureScript("npc_lantresor_of_the_blade") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
- {
- player->PlayerTalkClass->ClearMenus();
- switch (uiAction)
- {
- case GOSSIP_ACTION_INFO_DEF:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(9362, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- player->SEND_GOSSIP_MENU(9363, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
- player->SEND_GOSSIP_MENU(9364, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
- player->SEND_GOSSIP_MENU(9365, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+4:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
- player->SEND_GOSSIP_MENU(9366, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+5:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
- player->SEND_GOSSIP_MENU(9367, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+6:
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SLB7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
- player->SEND_GOSSIP_MENU(9368, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+7:
- player->SEND_GOSSIP_MENU(9369, creature->GetGUID());
- if (player->GetQuestStatus(10107) == QUEST_STATUS_INCOMPLETE)
- player->AreaExploredOrEventHappens(10107);
- if (player->GetQuestStatus(10108) == QUEST_STATUS_INCOMPLETE)
- player->AreaExploredOrEventHappens(10108);
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature)
- {
- if (creature->isQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(10107) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10108) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HLB, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
-
- player->SEND_GOSSIP_MENU(9361, creature->GetGUID());
-
- return true;
- }
-
-};
-
/*#####
## npc_maghar_captive
#####*/
@@ -747,113 +360,9 @@ public:
};
/*######
-## mob_sparrowhawk
+## go_corkis_prison and npc_corki
######*/
-#define SPELL_SPARROWHAWK_NET 39810
-#define SPELL_ITEM_CAPTIVE_SPARROWHAWK 39812
-
-class mob_sparrowhawk : public CreatureScript
-{
-public:
- mob_sparrowhawk() : CreatureScript("mob_sparrowhawk") { }
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new mob_sparrowhawkAI (creature);
- }
-
- struct mob_sparrowhawkAI : public ScriptedAI
- {
-
- mob_sparrowhawkAI(Creature* c) : ScriptedAI(c) {}
-
- uint32 Check_Timer;
- uint64 PlayerGUID;
- bool fleeing;
-
- void Reset()
- {
- me->RemoveAurasDueToSpell(SPELL_SPARROWHAWK_NET);
- Check_Timer = 1000;
- PlayerGUID = 0;
- fleeing = false;
- }
- void AttackStart(Unit* who)
- {
- if (PlayerGUID)
- return;
-
- ScriptedAI::AttackStart(who);
- }
-
- void EnterCombat(Unit* /*who*/) {}
-
- void MoveInLineOfSight(Unit* who)
- {
- if (!who || PlayerGUID)
- return;
-
- if (!PlayerGUID && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 30) && CAST_PLR(who)->GetQuestStatus(10987) == QUEST_STATUS_INCOMPLETE)
- {
- PlayerGUID = who->GetGUID();
- return;
- }
-
- ScriptedAI::MoveInLineOfSight(who);
- }
-
- void UpdateAI(const uint32 diff)
- {
- if (Check_Timer <= diff)
- {
- if (PlayerGUID)
- {
- if (fleeing && me->GetMotionMaster()->GetCurrentMovementGeneratorType() != FLEEING_MOTION_TYPE)
- fleeing = false;
-
- Player* player = Unit::GetPlayer(*me, PlayerGUID);
- if (player && me->IsWithinDistInMap(player, 30))
- {
- if (!fleeing)
- {
- me->DeleteThreatList();
- me->GetMotionMaster()->MoveFleeing(player);
- fleeing = true;
- }
- }
- else if (fleeing)
- {
- me->GetMotionMaster()->MovementExpired(false);
- PlayerGUID = 0;
- fleeing = false;
- }
- }
- Check_Timer = 1000;
- } else Check_Timer -= diff;
-
- if (PlayerGUID)
- return;
-
- ScriptedAI::UpdateAI(diff);
- }
-
- void SpellHit(Unit* caster, const SpellInfo* spell)
- {
- if (caster->GetTypeId() == TYPEID_PLAYER)
- {
- if (spell->Id == SPELL_SPARROWHAWK_NET && CAST_PLR(caster)->GetQuestStatus(10987) == QUEST_STATUS_INCOMPLETE)
- {
- DoCast(caster, SPELL_ITEM_CAPTIVE_SPARROWHAWK, true);
- me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
- }
- }
- return;
- }
- };
-};
-
enum CorkiData
{
// first quest
@@ -916,10 +425,6 @@ public:
}
};
-/*######
-## npc_corki
-######*/
-
class npc_corki : public CreatureScript
{
public:
@@ -970,16 +475,237 @@ public:
};
};
+/*#####
+## npc_kurenai_captive
+#####*/
+
+enum KurenaiCaptive
+{
+ SAY_KUR_START = 0,
+ SAY_KUR_NO_ESCAPE = 1,
+ SAY_KUR_MORE = 2,
+ SAY_KUR_MORE_TWO = 3,
+ SAY_KUR_LIGHTNING = 4,
+ SAY_KUR_SHOCK = 5,
+ SAY_KUR_COMPLETE = 6,
+
+ SPELL_KUR_CHAIN_LIGHTNING = 16006,
+ SPELL_KUR_EARTHBIND_TOTEM = 15786,
+ SPELL_KUR_FROST_SHOCK = 12548,
+ SPELL_KUR_HEALING_WAVE = 12491,
+
+ QUEST_TOTEM_KARDASH_A = 9879,
+
+ NPC_KUR_MURK_RAIDER = 18203,
+ NPC_KUR_MURK_BRUTE = 18211,
+ NPC_KUR_MURK_SCAVENGER = 18207,
+ NPC_KUR_MURK_PUTRIFIER = 18202,
+};
+
+static float kurenaiAmbushA[]= {-1568.805786f, 8533.873047f, 1.958f};
+static float kurenaiAmbushB[]= {-1491.554321f, 8506.483398f, 1.248f};
+
+class npc_kurenai_captive : public CreatureScript
+{
+public:
+ npc_kurenai_captive() : CreatureScript("npc_kurenai_captive") { }
+
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest)
+ {
+ if (quest->GetQuestId() == QUEST_TOTEM_KARDASH_A)
+ {
+ if (npc_kurenai_captiveAI* EscortAI = dynamic_cast<npc_kurenai_captiveAI*>(creature->AI()))
+ {
+ creature->SetStandState(UNIT_STAND_STATE_STAND);
+ EscortAI->Start(true, false, player->GetGUID(), quest);
+ DoScriptText(SAY_KUR_START, creature);
+
+ creature->SummonCreature(NPC_KUR_MURK_RAIDER, kurenaiAmbushA[0]+2.5f, kurenaiAmbushA[1]-2.5f, kurenaiAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ creature->SummonCreature(NPC_KUR_MURK_BRUTE, kurenaiAmbushA[0]-2.5f, kurenaiAmbushA[1]+2.5f, kurenaiAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ creature->SummonCreature(NPC_KUR_MURK_SCAVENGER, kurenaiAmbushA[0], kurenaiAmbushA[1], kurenaiAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ }
+ }
+ return true;
+ }
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_kurenai_captiveAI(creature);
+ }
+
+ struct npc_kurenai_captiveAI : public npc_escortAI
+ {
+ npc_kurenai_captiveAI(Creature* creature) : npc_escortAI(creature) { }
+
+ uint32 ChainLightningTimer;
+ uint32 HealTimer;
+ uint32 FrostShockTimer;
+
+ void Reset()
+ {
+ ChainLightningTimer = 1000;
+ HealTimer = 0;
+ FrostShockTimer = 6000;
+ }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ DoCast(me, SPELL_KUR_EARTHBIND_TOTEM, false);
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ if (!HasEscortState(STATE_ESCORT_ESCORTING))
+ return;
+
+ if (Player* player = GetPlayerForEscort())
+ {
+ if (player->GetQuestStatus(QUEST_TOTEM_KARDASH_A) != QUEST_STATUS_COMPLETE)
+ player->FailQuest(QUEST_TOTEM_KARDASH_A);
+ }
+ }
+
+ void WaypointReached(uint32 PointId)
+ {
+ switch(PointId)
+ {
+ case 3:
+ {
+ Talk(SAY_KUR_MORE);
+
+ if (me->SummonCreature(NPC_KUR_MURK_PUTRIFIER, kurenaiAmbushB[0], kurenaiAmbushB[1], kurenaiAmbushB[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000))
+ Talk(SAY_KUR_MORE_TWO);
+
+ me->SummonCreature(NPC_KUR_MURK_PUTRIFIER, kurenaiAmbushB[0]-2.5f, kurenaiAmbushB[1]-2.5f, kurenaiAmbushB[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ me->SummonCreature(NPC_KUR_MURK_SCAVENGER, kurenaiAmbushB[0]+2.5f, kurenaiAmbushB[1]+2.5f, kurenaiAmbushB[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ me->SummonCreature(NPC_KUR_MURK_SCAVENGER, kurenaiAmbushB[0]+2.5f, kurenaiAmbushB[1]-2.5f, kurenaiAmbushB[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ break;
+ }
+ case 7:
+ {
+ Talk(SAY_KUR_COMPLETE);
+
+ if (Player* player = GetPlayerForEscort())
+ player->GroupEventHappens(QUEST_TOTEM_KARDASH_A, me);
+
+ SetRun();
+ break;
+ }
+ }
+ }
+
+ void JustSummoned(Creature* summoned)
+ {
+ if (summoned->GetEntry() == NPC_KUR_MURK_BRUTE)
+ Talk(SAY_KUR_NO_ESCAPE);
+
+ // This function is for when we summoned enemies to fight - so that does NOT mean we should make our totem count in this!
+ if (summoned->isTotem())
+ return;
+
+ summoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
+ summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
+ summoned->AI()->AttackStart(me);
+ }
+
+ void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell)
+ {
+ if (spell->Id == SPELL_KUR_CHAIN_LIGHTNING)
+ {
+ if (rand()%30)
+ return;
+
+ Talk(SAY_KUR_LIGHTNING);
+ }
+
+ if (spell->Id == SPELL_KUR_FROST_SHOCK)
+ {
+ if (rand()%30)
+ return;
+
+ Talk(SAY_KUR_SHOCK);
+ }
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (me->HasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ if (ChainLightningTimer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_KUR_CHAIN_LIGHTNING);
+ ChainLightningTimer = urand(7000,14000);
+ } else ChainLightningTimer -= diff;
+
+ if (HealthBelowPct(30))
+ {
+ if (HealTimer <= diff)
+ {
+ DoCast(me, SPELL_KUR_HEALING_WAVE);
+ HealTimer = 5000;
+ } else HealTimer -= diff;
+ }
+
+ if (FrostShockTimer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_KUR_FROST_SHOCK);
+ FrostShockTimer = urand(7500,15000);
+ } else FrostShockTimer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+};
+
+/*######
+## go_warmaul_prison
+######*/
+
+enum FindingTheSurvivorsData
+{
+ QUEST_FINDING_THE_SURVIVORS = 9948,
+ NPC_MAGHAR_PRISONER = 18428,
+
+ SAY_FREE = 0,
+};
+
+class go_warmaul_prison : public GameObjectScript
+{
+ public:
+ go_warmaul_prison() : GameObjectScript("go_warmaul_prison") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (player->GetQuestStatus(QUEST_FINDING_THE_SURVIVORS) != QUEST_STATUS_INCOMPLETE)
+ return false;
+
+ if (Creature* prisoner = go->FindNearestCreature(NPC_MAGHAR_PRISONER, 5.0f))
+ {
+ if (prisoner)
+ {
+ go->UseDoorOrButton();
+ if (player)
+ player->KilledMonsterCredit(NPC_MAGHAR_PRISONER, 0);
+
+ prisoner->AI()->Talk(SAY_FREE, player->GetGUID());
+ prisoner->ForcedDespawn(6000);
+ }
+ }
+ return true;
+ }
+};
+
void AddSC_nagrand()
{
- new mob_shattered_rumbler();
- new mob_lump();
- new npc_altruis_the_sufferer();
new npc_greatmother_geyah();
- new npc_lantresor_of_the_blade();
new npc_maghar_captive();
new npc_creditmarker_visit_with_ancestors();
- new mob_sparrowhawk();
new npc_corki();
new go_corkis_prison();
+ new npc_kurenai_captive();
+ new go_warmaul_prison();
}
diff --git a/src/server/scripts/Outland/netherstorm.cpp b/src/server/scripts/Outland/netherstorm.cpp
index 5f2626c0039..efebf7dfe94 100644
--- a/src/server/scripts/Outland/netherstorm.cpp
+++ b/src/server/scripts/Outland/netherstorm.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@ go_manaforge_control_console
npc_commander_dawnforge
npc_bessy
npc_maxx_a_million
+go_captain_tyralius_prison
EndContentData */
#include "ScriptPCH.h"
@@ -1046,6 +1047,36 @@ public:
}
};
+/*######
+## go_captain_tyralius_prison
+######*/
+
+enum CaptainTyralius
+{
+ NPC_CAPTAIN_TYRALIUS = 20787,
+ SAY_FREE = 0,
+};
+
+class go_captain_tyralius_prison : public GameObjectScript
+{
+ public:
+ go_captain_tyralius_prison() : GameObjectScript("go_captain_tyralius_prison") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (Creature* tyralius = go->FindNearestCreature(NPC_CAPTAIN_TYRALIUS, 1.0f))
+ {
+ go->UseDoorOrButton();
+
+ player->KilledMonsterCredit(NPC_CAPTAIN_TYRALIUS, 0);
+
+ tyralius->AI()->Talk(SAY_FREE);
+ tyralius->ForcedDespawn(8000);
+ }
+ return true;
+ }
+};
+
void AddSC_netherstorm()
{
new go_manaforge_control_console();
@@ -1056,4 +1087,5 @@ void AddSC_netherstorm()
new mob_phase_hunter();
new npc_bessy();
new npc_maxx_a_million_escort();
+ new go_captain_tyralius_prison();
}
diff --git a/src/server/scripts/Outland/shadowmoon_valley.cpp b/src/server/scripts/Outland/shadowmoon_valley.cpp
index 31aea5ea576..e4c4e020b0f 100644
--- a/src/server/scripts/Outland/shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/shadowmoon_valley.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -635,26 +635,31 @@ public:
# npc_karynaku
####*/
-enum eKarynaku
+enum Karynaku
{
QUEST_ALLY_OF_NETHER = 10870,
+ QUEST_ZUHULED_THE_WACK = 10866,
- TAXI_PATH_ID = 649
+ NPC_ZUHULED_THE_WACKED = 11980,
+
+ TAXI_PATH_ID = 649,
};
class npc_karynaku : public CreatureScript
{
-public:
- npc_karynaku() : CreatureScript("npc_karynaku") { }
+ public:
+ npc_karynaku() : CreatureScript("npc_karynaku") { }
- bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* quest)
- {
- if (quest->GetQuestId() == QUEST_ALLY_OF_NETHER)
- player->ActivateTaxiPathTo(TAXI_PATH_ID); //player->ActivateTaxiPathTo(649);
+ bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest)
+ {
+ if (quest->GetQuestId() == QUEST_ALLY_OF_NETHER)
+ player->ActivateTaxiPathTo(TAXI_PATH_ID);
- return true;
- }
+ if (quest->GetQuestId() == QUEST_ZUHULED_THE_WACK)
+ creature->SummonCreature(NPC_ZUHULED_THE_WACKED, -4204.94f, 316.397f, 122.508f, 1.309f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300000);
+ return true;
+ }
};
/*####
@@ -998,8 +1003,7 @@ public:
case 50:
DoScriptText(SAY_WIL_END, me, player);
- if (Player* player = GetPlayerForEscort())
- player->GroupEventHappens(QUEST_ESCAPE_COILSCAR, me);
+ player->GroupEventHappens(QUEST_ESCAPE_COILSCAR, me);
break;
}
}
diff --git a/src/server/scripts/Outland/shattrath_city.cpp b/src/server/scripts/Outland/shattrath_city.cpp
index f2aa9fe5786..ed68f55aeb5 100644
--- a/src/server/scripts/Outland/shattrath_city.cpp
+++ b/src/server/scripts/Outland/shattrath_city.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -369,7 +369,7 @@ public:
{
if (CAST_PLR(who)->GetQuestStatus(10211) == QUEST_STATUS_INCOMPLETE)
{
- float Radius = 10.0;
+ float Radius = 10.0f;
if (me->IsWithinDistInMap(who, Radius))
{
Start(false, false, who->GetGUID());
diff --git a/src/server/scripts/Outland/terokkar_forest.cpp b/src/server/scripts/Outland/terokkar_forest.cpp
index 91fae26ec74..043b74b6924 100644
--- a/src/server/scripts/Outland/terokkar_forest.cpp
+++ b/src/server/scripts/Outland/terokkar_forest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Outland/zangarmarsh.cpp b/src/server/scripts/Outland/zangarmarsh.cpp
index 9aecbeb67be..fc7a3f4d667 100644
--- a/src/server/scripts/Outland/zangarmarsh.cpp
+++ b/src/server/scripts/Outland/zangarmarsh.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index 86b92eebfe3..f62d62c671a 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp
index 17849027dd4..130f61565f7 100644
--- a/src/server/scripts/Spells/spell_druid.cpp
+++ b/src/server/scripts/Spells/spell_druid.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index f0b48a5ad90..38e5771ccca 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -26,6 +26,8 @@
#include "SpellAuraEffects.h"
#include "SkillDiscovery.h"
#include "GridNotifiers.h"
+#include "Group.h"
+#include "LFGMgr.h"
class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader
{
@@ -564,6 +566,9 @@ class spell_creature_permanent_feign_death : public SpellScriptLoader
Unit* target = GetTarget();
target->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+
+ if (target->GetTypeId() == TYPEID_UNIT)
+ target->ToCreature()->SetReactState(REACT_PASSIVE);
}
void Register()
@@ -1359,6 +1364,113 @@ public:
}
};
+enum DamageReductionAura
+{
+ SPELL_BLESSING_OF_SANCTUARY = 20911,
+ SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899,
+ SPELL_RENEWED_HOPE = 63944,
+ SPELL_VIGILANCE = 50720,
+ SPELL_DAMAGE_REDUCTION_AURA = 68066,
+};
+
+class spell_gen_damage_reduction_aura : public SpellScriptLoader
+{
+public:
+ spell_gen_damage_reduction_aura() : SpellScriptLoader("spell_gen_damage_reduction_aura") { }
+
+ class spell_gen_damage_reduction_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_damage_reduction_AuraScript);
+
+ bool Validate(SpellInfo const* /*SpellEntry*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA))
+ return false;
+ return true;
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true);
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (!target->HasAura(SPELL_DAMAGE_REDUCTION_AURA))
+ return;
+
+ if (target->HasAura(SPELL_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_RENEWED_HOPE) ||
+ target->HasAura(SPELL_VIGILANCE))
+ return;
+
+ target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA);
+ }
+
+ void Register()
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_gen_damage_reduction_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_damage_reduction_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ }
+
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_gen_damage_reduction_AuraScript();
+ }
+};
+
+class spell_gen_luck_of_the_draw : public SpellScriptLoader
+{
+ public:
+ spell_gen_luck_of_the_draw() : SpellScriptLoader("spell_gen_luck_of_the_draw") { }
+
+ class spell_gen_luck_of_the_draw_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_luck_of_the_draw_AuraScript);
+
+ // cheap hax to make it have update calls
+ void CalcPeriodic(AuraEffect const* /*effect*/, bool& isPeriodic, int32& amplitude)
+ {
+ isPeriodic = true;
+ amplitude = 5 * IN_MILLISECONDS;
+ }
+
+ void Update(AuraEffect* /*effect*/)
+ {
+ if (GetUnitOwner()->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ LFGDungeonEntry const* randomDungeon = sLFGDungeonStore.LookupEntry(*(sLFGMgr->GetSelectedDungeons(GetUnitOwner()->GetGUID()).begin()));
+ Group* group = GetUnitOwner()->ToPlayer()->GetGroup();
+ Map const* map = GetUnitOwner()->GetMap();
+ if (group && group->isLFGGroup())
+ if (uint32 dungeonId = sLFGMgr->GetDungeon(group->GetGUID(), true))
+ if (LFGDungeonEntry const* dungeon = sLFGDungeonStore.LookupEntry(dungeonId))
+ if (dungeon->map == map->GetId() && dungeon->difficulty == map->GetDifficulty())
+ if (randomDungeon && randomDungeon->type == LFG_TYPE_RANDOM)
+ return; // in correct dungeon
+
+ Remove(AURA_REMOVE_BY_DEFAULT);
+ }
+
+ void Register()
+ {
+ DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_gen_luck_of_the_draw_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
+ OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_luck_of_the_draw_AuraScript::Update, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_gen_luck_of_the_draw_AuraScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -1390,4 +1502,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_launch();
new spell_gen_vehicle_scaling();
new spell_gen_oracle_wolvar_reputation();
+ new spell_gen_damage_reduction_aura();
+ new spell_gen_luck_of_the_draw();
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 1318a9aa333..8a3424ab1e7 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 2346a30640c..5a0ffbd2c90 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 339f6ed8eca..b0b619c8b08 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp
index f55d765c44b..39360e04aa1 100644
--- a/src/server/scripts/Spells/spell_paladin.cpp
+++ b/src/server/scripts/Spells/spell_paladin.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 07b8a79691a..ee5f6a6d772 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 6ae9577070e..d266b42f50a 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -899,7 +899,6 @@ class spell_q9874_liquid_fire : public SpellScriptLoader
};
};
-
enum SalvagingLifesStength
{
NPC_SHARD_KILL_CREDIT = 29303,
@@ -950,6 +949,7 @@ enum eBattleStandard
{
NPC_KING_OF_THE_MOUNTAINT_KC = 31766,
};
+
class spell_q13280_13283_plant_battle_standard: public SpellScriptLoader
{
public:
@@ -978,6 +978,102 @@ public:
}
};
+enum ChumTheWaterSummons
+{
+ SUMMON_ANGRY_KVALDIR = 66737,
+ SUMMON_NORTH_SEA_MAKO = 66738,
+ SUMMON_NORTH_SEA_THRESHER = 66739,
+ SUMMON_NORTH_SEA_BLUE_SHARK = 66740
+};
+
+class spell_q14112_14145_chum_the_water: public SpellScriptLoader
+{
+public:
+ spell_q14112_14145_chum_the_water() : SpellScriptLoader("spell_q14112_14145_chum_the_water") { }
+
+ class spell_q14112_14145_chum_the_water_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q14112_14145_chum_the_water_SpellScript);
+
+ bool Validate(SpellInfo const* /*spellEntry*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SUMMON_ANGRY_KVALDIR))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_MAKO))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_THRESHER))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_BLUE_SHARK))
+ return false;
+ return true;
+ }
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ caster->CastSpell(caster, RAND(SUMMON_ANGRY_KVALDIR, SUMMON_NORTH_SEA_MAKO, SUMMON_NORTH_SEA_THRESHER, SUMMON_NORTH_SEA_BLUE_SHARK));
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q14112_14145_chum_the_water_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_q14112_14145_chum_the_water_SpellScript();
+ }
+};
+
+// http://old01.wowhead.com/quest=9452 - Red Snapper - Very Tasty!
+enum RedSnapperVeryTasty
+{
+ SPELL_CAST_NET = 29866,
+ ITEM_RED_SNAPPER = 23614,
+ NPC_ANGRY_MURLOC = 17102,
+};
+
+class spell_q9452_cast_net: public SpellScriptLoader
+{
+ public:
+ spell_q9452_cast_net() : SpellScriptLoader("spell_q9452_cast_net") { }
+
+ class spell_q9452_cast_net_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q9452_cast_net_SpellScript)
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+
+ if (!caster)
+ return;
+
+ switch (urand(0, 2))
+ {
+ case 0: case 1:
+ caster->AddItem(ITEM_RED_SNAPPER, 1);
+ break;
+ case 2:
+ if (Creature* murloc = caster->SummonCreature(NPC_ANGRY_MURLOC, caster->GetPositionX()+5, caster->GetPositionY(), caster->GetPositionZ(), 0.0f, TEMPSUMMON_MANUAL_DESPAWN, 120000))
+ murloc->AI()->AttackStart(caster);
+ break;
+ }
+ }
+
+ void Register()
+ {
+ OnEffectHit += SpellEffectFn(spell_q9452_cast_net_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_q9452_cast_net_SpellScript();
+ }
+};
+
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -1001,4 +1097,6 @@ void AddSC_quest_spell_scripts()
new spell_q9874_liquid_fire();
new spell_q12805_lifeblood_dummy();
new spell_q13280_13283_plant_battle_standard();
+ new spell_q14112_14145_chum_the_water();
+ new spell_q9452_cast_net();
}
diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp
index e9caa40255e..c88d7b891d6 100644
--- a/src/server/scripts/Spells/spell_rogue.cpp
+++ b/src/server/scripts/Spells/spell_rogue.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
index 76dac9b59f1..b0116d6d33d 100644
--- a/src/server/scripts/Spells/spell_shaman.cpp
+++ b/src/server/scripts/Spells/spell_shaman.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -26,16 +26,16 @@
enum ShamanSpells
{
- SHAMAN_SPELL_GLYPH_OF_MANA_TIDE = 55441,
- SHAMAN_SPELL_MANA_TIDE_TOTEM = 39609,
- SHAMAN_SPELL_FIRE_NOVA_R1 = 1535,
- SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1 = 8349,
- SHAMAN_SPELL_SATED = 57724,
- SHAMAN_SPELL_EXHAUSTION = 57723,
-
- //For Earthen Power
- SHAMAN_TOTEM_SPELL_EARTHBIND_TOTEM = 6474, //Spell casted by totem
- SHAMAN_TOTEM_SPELL_EARTHEN_POWER = 59566, //Spell witch remove snare effect
+ SHAMAN_SPELL_GLYPH_OF_MANA_TIDE = 55441,
+ SHAMAN_SPELL_MANA_TIDE_TOTEM = 39609,
+ SHAMAN_SPELL_FIRE_NOVA_R1 = 1535,
+ SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1 = 8349,
+ SHAMAN_SPELL_SATED = 57724,
+ SHAMAN_SPELL_EXHAUSTION = 57723,
+
+ // For Earthen Power
+ SHAMAN_TOTEM_SPELL_EARTHBIND_TOTEM = 6474,
+ SHAMAN_TOTEM_SPELL_EARTHEN_POWER = 59566,
};
// 51474 - Astral shift
@@ -125,7 +125,7 @@ class spell_sha_fire_nova : public SpellScriptLoader
{
Creature* totem = caster->GetMap()->GetCreature(caster->m_SummonSlot[1]);
if (totem && totem->isTotem())
- totem->CastSpell(totem, spellId, true);
+ caster->CastSpell(totem, spellId, true);
}
}
@@ -215,9 +215,11 @@ class spell_sha_earthbind_totem : public SpellScriptLoader
{
Unit* target = GetTarget();
if (Unit* caster = aurEff->GetBase()->GetCaster())
- if (AuraEffect* aur = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, 2289, 0))
- if (roll_chance_i(aur->GetBaseAmount()))
- target->CastSpell(target, SHAMAN_TOTEM_SPELL_EARTHEN_POWER, true, NULL, aurEff);
+ if (TempSummon* summon = caster->ToTempSummon())
+ if (Unit* owner = summon->GetOwner())
+ if (AuraEffect* aur = owner->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, 2289, 0))
+ if (roll_chance_i(aur->GetBaseAmount()) && target->HasAuraWithMechanic(1 << MECHANIC_SNARE))
+ caster->CastSpell(caster, SHAMAN_TOTEM_SPELL_EARTHEN_POWER, true, NULL, aurEff);
}
void Register()
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 17035c2a3d2..51b2de5d0f3 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp
index be6e1c49ee7..f39ad3d1426 100644
--- a/src/server/scripts/Spells/spell_warrior.cpp
+++ b/src/server/scripts/Spells/spell_warrior.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -89,8 +89,68 @@ class spell_warr_improved_spell_reflection : public SpellScriptLoader
}
};
+enum DamageReductionAura
+{
+ SPELL_BLESSING_OF_SANCTUARY = 20911,
+ SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899,
+ SPELL_RENEWED_HOPE = 63944,
+ SPELL_DAMAGE_REDUCTION_AURA = 68066,
+};
+
+class spell_warr_vigilance : public SpellScriptLoader
+{
+public:
+ spell_warr_vigilance() : SpellScriptLoader("spell_warr_vigilance") { }
+
+ class spell_warr_vigilance_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_warr_vigilance_AuraScript);
+
+ bool Validate(SpellInfo const* /*SpellEntry*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA))
+ return false;
+ return true;
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true);
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+
+ if (!target->HasAura(SPELL_DAMAGE_REDUCTION_AURA))
+ return;
+
+ if (target->HasAura(SPELL_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_RENEWED_HOPE))
+ return;
+
+ target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA);
+ }
+
+ void Register()
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ }
+
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_warr_vigilance_AuraScript();
+ }
+};
+
void AddSC_warrior_spell_scripts()
{
new spell_warr_last_stand();
new spell_warr_improved_spell_reflection();
+ new spell_warr_vigilance();
}
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index 2dbbd949526..8ce06685893 100755
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -24,24 +24,6 @@
#include "BattlegroundAV.h"
#include "Vehicle.h"
-class achievement_storm_glory : public AchievementCriteriaScript
-{
- public:
- achievement_storm_glory() : AchievementCriteriaScript("achievement_storm_glory") { }
-
- bool OnCheck(Player* source, Unit* /*target*/)
- {
- if (source->GetBattlegroundTypeId() != BATTLEGROUND_EY)
- return false;
-
- Battleground* pEotS = source->GetBattleground();
- if (!pEotS)
- return false;
-
- return pEotS->IsAllNodesConrolledByTeam(source->GetTeam());
- }
-};
-
class achievement_resilient_victory : public AchievementCriteriaScript
{
public:
@@ -93,11 +75,14 @@ class achievement_save_the_day : public AchievementCriteriaScript
if (Player const* player = target->ToPlayer())
{
- if (source->GetBattlegroundTypeId() != BATTLEGROUND_WS || !source->GetBattleground())
+ Battleground* bg = source->GetBattleground();
+ if (!bg)
+ return false;
+
+ if (bg->GetTypeID(true) != BATTLEGROUND_WS)
return false;
- BattlegroundWS* pWSG = static_cast<BattlegroundWS*>(source->GetBattleground());
- if (pWSG->GetFlagState(player->GetTeam()) == BG_WS_FLAG_STATE_ON_BASE)
+ if (static_cast<BattlegroundWS*>(bg)->GetFlagState(player->GetTeam()) == BG_WS_FLAG_STATE_ON_BASE)
return true;
}
return false;
@@ -219,7 +204,7 @@ class achievement_everything_counts : public AchievementCriteriaScript
if (!bg)
return false;
- if (source->GetBattlegroundTypeId() != BATTLEGROUND_AV)
+ if (bg->GetTypeID(true) != BATTLEGROUND_AV)
return false;
if (static_cast<BattlegroundAV*>(bg)->IsBothMinesControlledByTeam(source->GetTeam()))
@@ -240,7 +225,7 @@ class achievement_bg_av_perfection : public AchievementCriteriaScript
if (!bg)
return false;
- if (source->GetBattlegroundTypeId() != BATTLEGROUND_AV)
+ if (bg->GetTypeID(true) != BATTLEGROUND_AV)
return false;
if (static_cast<BattlegroundAV*>(bg)->IsAllTowersControlledAndCaptainAlive(source->GetTeam()))
@@ -302,7 +287,6 @@ class achievement_bg_sa_defense_of_ancients : public AchievementCriteriaScript
void AddSC_achievement_scripts()
{
- new achievement_storm_glory();
new achievement_resilient_victory();
new achievement_bg_control_all_nodes();
new achievement_save_the_day();
diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp
index a9ed794ab45..8f86f760775 100644
--- a/src/server/scripts/World/areatrigger_scripts.cpp
+++ b/src/server/scripts/World/areatrigger_scripts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -24,62 +24,19 @@ SDCategory: Areatrigger
EndScriptData */
/* ContentData
-at_aldurthar_gate q13315/q13351
at_coilfang_waterfall 4591
at_legion_teleporter 4560 Teleporter TO Invasion Point: Cataclysm
-at_ravenholdt
-at_warsong_slaughterhouse
-at_warsong_grainery
-at_torp_farm
-at_warsong_farms q11686
at_stormwright_shelf q12741
at_last_rites q12019
at_sholazar_waygate q12548
+at_nats_landing q11209
+at_bring_your_orphan_to q910 q910 q1800 q1479 q1687 q1558 q10951 q10952
+at_brewfest
EndContentData */
#include "ScriptPCH.h"
/*######
-## AreaTrigger_at_aldurthar_gate
-######*/
-
-enum eAldurtharGate
-{
- TRIGGER_SOUTH = 5284,
-
- TRIGGER_CENTRAL = 5285,
- TRIGGER_NORTH = 5286,
- TRIGGER_NORTHWEST = 5287,
-
- NPC_SOUTH_GATE = 32195,
- NPC_CENTRAL_GATE = 32196,
- NPC_NORTH_GATE = 32197,
- NPC_NORTHWEST_GATE = 32199
-};
-
-class AreaTrigger_at_aldurthar_gate : public AreaTriggerScript
-{
- public:
-
- AreaTrigger_at_aldurthar_gate()
- : AreaTriggerScript("at_aldurthar_gate")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
- {
- switch (trigger->id)
- {
- case TRIGGER_SOUTH: player->KilledMonsterCredit(NPC_SOUTH_GATE, 0); break;
- case TRIGGER_CENTRAL: player->KilledMonsterCredit(NPC_CENTRAL_GATE, 0); break;
- case TRIGGER_NORTH: player->KilledMonsterCredit(NPC_NORTH_GATE, 0); break;
- case TRIGGER_NORTHWEST: player->KilledMonsterCredit(NPC_NORTHWEST_GATE, 0); break;
- }
- return true;
- }
-};
-
-/*######
## at_coilfang_waterfall
######*/
@@ -151,71 +108,6 @@ class AreaTrigger_at_legion_teleporter : public AreaTriggerScript
}
};
-enum eRavenholdt
-{
- QUEST_MANOR_RAVENHOLDT = 6681,
- NPC_RAVENHOLDT = 13936
-};
-
-class AreaTrigger_at_ravenholdt : public AreaTriggerScript
-{
- public:
-
- AreaTrigger_at_ravenholdt()
- : AreaTriggerScript("at_ravenholdt")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
- {
- if (player->GetQuestStatus(QUEST_MANOR_RAVENHOLDT) == QUEST_STATUS_INCOMPLETE)
- player->KilledMonsterCredit(NPC_RAVENHOLDT, 0);
-
- return false;
- }
-};
-
-/*######
-## at_warsong_farms
-######*/
-
-enum eWarsongFarms
-{
- QUEST_THE_WARSONG_FARMS = 11686,
-
- NPC_CREDIT_SLAUGHTERHOUSE = 25672,
- NPC_CREDIT_GRAINERY = 25669,
- NPC_CREDIT_TORP_FARM = 25671,
-
- AT_SLAUGHTERHOUSE = 4873,
- AT_GRAINERY = 4871,
- AT_TORP_FARM = 4872
-};
-
-class AreaTrigger_at_warsong_farms : public AreaTriggerScript
-{
- public:
-
- AreaTrigger_at_warsong_farms()
- : AreaTriggerScript("at_warsong_farms")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
- {
- if (!player->isDead() && player->GetQuestStatus(QUEST_THE_WARSONG_FARMS) == QUEST_STATUS_INCOMPLETE)
- {
- switch (trigger->id)
- {
- case AT_SLAUGHTERHOUSE: player->KilledMonsterCredit(NPC_CREDIT_SLAUGHTERHOUSE, 0); break;
- case AT_GRAINERY: player->KilledMonsterCredit(NPC_CREDIT_GRAINERY, 0); break;
- case AT_TORP_FARM: player->KilledMonsterCredit(NPC_CREDIT_TORP_FARM, 0); break;
- }
- }
- return true;
- }
-};
-
/*######
## at_stormwright_shelf
######*/
@@ -368,15 +260,175 @@ class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript
}
};
+/*######
+## at_nats_landing
+######*/
+
+enum NatsLanding
+{
+ QUEST_NATS_BARGAIN = 11209,
+ SPELL_FISH_PASTE = 42644,
+ NPC_LURKING_SHARK = 23928
+};
+
+class AreaTrigger_at_nats_landing : public AreaTriggerScript
+{
+ public:
+ AreaTrigger_at_nats_landing() : AreaTriggerScript("at_nats_landing") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/)
+ {
+ if (!player->isAlive() || !player->HasAura(SPELL_FISH_PASTE))
+ return false;
+
+ if (player->GetQuestStatus(QUEST_NATS_BARGAIN) == QUEST_STATUS_INCOMPLETE)
+ {
+ if (!player->FindNearestCreature(NPC_LURKING_SHARK, 20.0f))
+ {
+ if (Creature* shark = player->SummonCreature(NPC_LURKING_SHARK, -4246.243f, -3922.356f, -7.488f, 5.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 100000))
+ shark->AI()->AttackStart(player);
+
+ return false;
+ }
+ }
+ return true;
+ }
+};
+
+/*######
+## at_bring_your_orphan_to
+######*/
+
+enum BringYourOrphanTo
+{
+ QUEST_DOWN_AT_THE_DOCKS = 910,
+ QUEST_GATEWAY_TO_THE_FRONTIER = 911,
+ QUEST_LORDAERON_THRONE_ROOM = 1800,
+ QUEST_BOUGHT_OF_ETERNALS = 1479,
+ QUEST_SPOOKY_LIGHTHOUSE = 1687,
+ QUEST_STONEWROUGHT_DAM = 1558,
+ QUEST_DARK_PORTAL_H = 10951,
+ QUEST_DARK_PORTAL_A = 10952,
+
+ AT_DOWN_AT_THE_DOCKS = 3551,
+ AT_GATEWAY_TO_THE_FRONTIER = 3549,
+ AT_LORDAERON_THRONE_ROOM = 3547,
+ AT_BOUGHT_OF_ETERNALS = 3546,
+ AT_SPOOKY_LIGHTHOUSE = 3552,
+ AT_STONEWROUGHT_DAM = 3548,
+ AT_DARK_PORTAL = 4356,
+
+ AURA_ORPHAN_OUT = 58818,
+};
+
+class AreaTrigger_at_bring_your_orphan_to : public AreaTriggerScript
+{
+ public:
+ AreaTrigger_at_bring_your_orphan_to() : AreaTriggerScript("at_bring_your_orphan_to") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
+ {
+ uint32 questId = 0;
+
+ if (player->isDead() || !player->HasAura(AURA_ORPHAN_OUT))
+ return false;
+
+ switch (trigger->id)
+ {
+ case AT_DOWN_AT_THE_DOCKS:
+ questId = QUEST_DOWN_AT_THE_DOCKS;
+ break;
+ case AT_GATEWAY_TO_THE_FRONTIER:
+ questId = QUEST_GATEWAY_TO_THE_FRONTIER;
+ break;
+ case AT_LORDAERON_THRONE_ROOM:
+ questId = QUEST_LORDAERON_THRONE_ROOM;
+ break;
+ case AT_BOUGHT_OF_ETERNALS:
+ questId = QUEST_BOUGHT_OF_ETERNALS;
+ break;
+ case AT_SPOOKY_LIGHTHOUSE:
+ questId = QUEST_SPOOKY_LIGHTHOUSE;
+ break;
+ case AT_STONEWROUGHT_DAM:
+ questId = QUEST_STONEWROUGHT_DAM;
+ break;
+ case AT_DARK_PORTAL:
+ questId = player->GetTeam() == ALLIANCE ? QUEST_DARK_PORTAL_A : QUEST_DARK_PORTAL_H;
+ break;
+ }
+
+ if (questId && player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
+ player->AreaExploredOrEventHappens(questId);
+
+ return true;
+ }
+};
+
+/*######
+## at_brewfest
+######*/
+
+enum Brewfest
+{
+ NPC_TAPPER_SWINDLEKEG = 24711,
+ NPC_IPFELKOFER_IRONKEG = 24710,
+
+ AT_BREWFEST_DUROTAR = 4829,
+ AT_BREWFEST_DUN_MOROGH = 4820,
+
+ SAY_WELCOME = 4,
+
+ AREATRIGGER_TALK_COOLDOWN = 5, // in seconds
+};
+
+class AreaTrigger_at_brewfest : public AreaTriggerScript
+{
+ public:
+ AreaTrigger_at_brewfest() : AreaTriggerScript("at_brewfest")
+ {
+ // Initialize for cooldown
+ _triggerTimes[AT_BREWFEST_DUROTAR] = _triggerTimes[AT_BREWFEST_DUN_MOROGH] = 0;
+ }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
+ {
+ uint32 triggerId = trigger->id;
+ // Second trigger happened too early after first, skip for now
+ if (sWorld->GetGameTime() - _triggerTimes[triggerId] < AREATRIGGER_TALK_COOLDOWN)
+ return false;
+
+ switch (triggerId)
+ {
+ case AT_BREWFEST_DUROTAR:
+ if (Creature* tapper = player->FindNearestCreature(NPC_TAPPER_SWINDLEKEG, 20.0f))
+ tapper->AI()->Talk(SAY_WELCOME, player->GetGUID());
+ break;
+ case AT_BREWFEST_DUN_MOROGH:
+ if (Creature* ipfelkofer = player->FindNearestCreature(NPC_IPFELKOFER_IRONKEG, 20.0f))
+ ipfelkofer->AI()->Talk(SAY_WELCOME, player->GetGUID());
+ break;
+ default:
+ break;
+ }
+
+ _triggerTimes[triggerId] = sWorld->GetGameTime();
+ return false;
+ }
+
+ private:
+ std::map<uint32, time_t> _triggerTimes;
+};
+
void AddSC_areatrigger_scripts()
{
- new AreaTrigger_at_aldurthar_gate();
new AreaTrigger_at_coilfang_waterfall();
new AreaTrigger_at_legion_teleporter();
- new AreaTrigger_at_ravenholdt();
- new AreaTrigger_at_warsong_farms();
new AreaTrigger_at_stormwright_shelf();
new AreaTrigger_at_scent_larkorwi();
new AreaTrigger_at_last_rites();
new AreaTrigger_at_sholazar_waygate();
+ new AreaTrigger_at_nats_landing();
+ new AreaTrigger_at_bring_your_orphan_to();
+ new AreaTrigger_at_brewfest();
}
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index e5c584df6e1..9deecea01ba 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+* Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp
index 0592a452211..2a5d814bfde 100755
--- a/src/server/scripts/World/chat_log.cpp
+++ b/src/server/scripts/World/chat_log.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index cdeac03d76e..fff01c83d07 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -16,13 +16,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: GO_Scripts
-SD%Complete: 100
-SDComment: Quest support: 4285, 4287, 4288(crystal pylons), 4296, 6481, 10990, 10991, 10992, Field_Repair_Bot->Teaches spell 22704. Barov_journal->Teaches spell 26089, 12843, 12982, 2936. Soulwell
-SDCategory: Game Objects
-EndScriptData */
-
/* ContentData
go_cat_figurine (the "trap" version of GO, two different exist)
go_northern_crystal_pylon
@@ -47,6 +40,16 @@ go_jotunheim_cage
go_table_theka
go_soulwell
go_bashir_crystalforge
+go_ethereal_teleport_pad
+go_soulwell
+go_dragonflayer_cage
+go_tadpole_cage
+go_black_cage
+go_amberpine_outhouse
+go_hive_pod
+go_gjalerbron_cage
+go_large_gjalerbron_cage
+go_veil_skith_cage
EndContentData */
#include "ScriptPCH.h"
@@ -165,7 +168,7 @@ public:
bool OnGossipHello(Player* player, GameObject* /*pGO*/)
{
- if (player->HasSkill(SKILL_ENGINERING) && player->GetBaseSkillValue(SKILL_ENGINERING) >= 300 && !player->HasSpell(22704))
+ if (player->HasSkill(SKILL_ENGINEERING) && player->GetBaseSkillValue(SKILL_ENGINEERING) >= 300 && !player->HasSpell(22704))
{
player->CastSpell(player, 22864, false);
}
@@ -922,6 +925,32 @@ public:
};
/*######
+## go_ethereal_teleport_pad
+######*/
+
+enum eEtherealTeleportPad
+{
+ NPC_IMAGE_WIND_TRADER = 20518,
+ ITEM_TELEPORTER_POWER_PACK = 28969,
+};
+
+class go_ethereal_teleport_pad : public GameObjectScript
+{
+public:
+ go_ethereal_teleport_pad() : GameObjectScript("go_ethereal_teleport_pad") { }
+
+ bool OnGossipHello(Player* player, GameObject* pGO)
+ {
+ if (!player->HasItemCount(ITEM_TELEPORTER_POWER_PACK, 1))
+ return false;
+
+ pGO->SummonCreature(NPC_IMAGE_WIND_TRADER, pGO->GetPositionX(), pGO->GetPositionY(), pGO->GetPositionZ(), pGO->GetAngle(player), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
+
+ return true;
+ }
+};
+
+/*######
## go_soulwell
######*/
@@ -1009,7 +1038,7 @@ public:
if (qInfo)
{
//TODO: prisoner should help player for a short period of time
- player->KilledMonsterCredit(qInfo->ReqCreatureOrGOId[0], 0);
+ player->KilledMonsterCredit(qInfo->RequiredNpcOrGo[0], 0);
pPrisoner->DisappearAndDie();
}
return true;
@@ -1152,6 +1181,7 @@ public:
/*######
## Quest 1126: Hive in the Tower
+## go_hive_pod
######*/
enum eHives
@@ -1176,14 +1206,115 @@ public:
class go_massive_seaforium_charge : public GameObjectScript
{
-public:
- go_massive_seaforium_charge() : GameObjectScript("go_massive_seaforium_charge") { }
+ public:
+ go_massive_seaforium_charge() : GameObjectScript("go_massive_seaforium_charge") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go)
- {
- go->SetLootState(GO_JUST_DEACTIVATED);
- return true;
- }
+ bool OnGossipHello(Player* /*player*/, GameObject* go)
+ {
+ go->SetLootState(GO_JUST_DEACTIVATED);
+ return true;
+ }
+};
+
+/*######
+## go_gjalerbron_cage
+######*/
+
+enum OfKeysAndCages
+{
+ QUEST_ALLIANCE_OF_KEYS_AND_CAGES = 11231,
+ QUEST_HORDE_OF_KEYS_AND_CAGES = 11265,
+ NPC_GJALERBRON_PRISONER = 24035,
+ SAY_FREE = 0,
+};
+
+class go_gjalerbron_cage : public GameObjectScript
+{
+ public:
+ go_gjalerbron_cage() : GameObjectScript("go_gjalerbron_cage") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if ((player->GetTeamId() == TEAM_ALLIANCE && player->GetQuestStatus(QUEST_ALLIANCE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE) ||
+ (player->GetTeamId() == TEAM_HORDE && player->GetQuestStatus(QUEST_HORDE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE))
+ {
+ if (Creature* prisoner = go->FindNearestCreature(NPC_GJALERBRON_PRISONER, 5.0f))
+ {
+ go->UseDoorOrButton();
+
+ if (player)
+ player->KilledMonsterCredit(NPC_GJALERBRON_PRISONER, 0);
+
+ prisoner->AI()->Talk(SAY_FREE);
+ prisoner->ForcedDespawn(6000);
+ }
+ }
+ return true;
+ }
+};
+
+/*########
+## go_large_gjalerbron_cage
+#####*/
+
+class go_large_gjalerbron_cage : public GameObjectScript
+{
+ public:
+ go_large_gjalerbron_cage() : GameObjectScript("go_large_gjalerbron_cage") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if ((player->GetTeamId() == TEAM_ALLIANCE && player->GetQuestStatus(QUEST_ALLIANCE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE) ||
+ (player->GetTeamId() == TEAM_HORDE && player->GetQuestStatus(QUEST_HORDE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE))
+ {
+ std::list<Creature*> prisonerList;
+ GetCreatureListWithEntryInGrid(prisonerList, go, NPC_GJALERBRON_PRISONER, INTERACTION_DISTANCE);
+ for (std::list<Creature*>::const_iterator itr = prisonerList.begin(); itr != prisonerList.end(); ++itr)
+ {
+ go->UseDoorOrButton();
+ player->KilledMonsterCredit(NPC_GJALERBRON_PRISONER, (*itr)->GetGUID());
+ (*itr)->ForcedDespawn(6000);
+ (*itr)->AI()->Talk(SAY_FREE);
+ }
+ }
+ return false;
+ }
+};
+
+/*########
+#### go_veil_skith_cage
+#####*/
+
+enum MissingFriends
+{
+ QUEST_MISSING_FRIENDS = 10852,
+ NPC_CAPTIVE_CHILD = 22314,
+ SAY_FREE_0 = 0,
+};
+
+class go_veil_skith_cage : public GameObjectScript
+{
+ public:
+ go_veil_skith_cage() : GameObjectScript("go_veil_skith_cage") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (player->GetQuestStatus(QUEST_MISSING_FRIENDS) == QUEST_STATUS_INCOMPLETE)
+ {
+ std::list<Creature*> childrenList;
+ GetCreatureListWithEntryInGrid(childrenList, go, NPC_CAPTIVE_CHILD, INTERACTION_DISTANCE);
+ for (std::list<Creature*>::const_iterator itr = childrenList.begin(); itr != childrenList.end(); ++itr)
+ {
+ go->UseDoorOrButton();
+ player->KilledMonsterCredit(NPC_CAPTIVE_CHILD, (*itr)->GetGUID());
+ (*itr)->ForcedDespawn(5000);
+ (*itr)->GetMotionMaster()->MovePoint(1, go->GetPositionX()+5, go->GetPositionY(), go->GetPositionZ());
+ (*itr)->AI()->Talk(SAY_FREE_0);
+ (*itr)->GetMotionMaster()->Clear();
+ }
+ }
+ return false;
+ }
};
void AddSC_go_scripts()
@@ -1217,6 +1348,7 @@ void AddSC_go_scripts()
new go_jotunheim_cage;
new go_table_theka;
new go_inconspicuous_landmark;
+ new go_ethereal_teleport_pad;
new go_soulwell;
new go_tadpole_cage;
new go_dragonflayer_cage;
@@ -1224,4 +1356,7 @@ void AddSC_go_scripts()
new go_amberpine_outhouse;
new go_hive_pod;
new go_massive_seaforium_charge;
+ new go_gjalerbron_cage;
+ new go_large_gjalerbron_cage;
+ new go_veil_skith_cage;
}
diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp
index f869138d58f..d562542a7d7 100644
--- a/src/server/scripts/World/guards.cpp
+++ b/src/server/scripts/World/guards.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp
index 4099c03384c..521e38a7061 100644
--- a/src/server/scripts/World/item_scripts.cpp
+++ b/src/server/scripts/World/item_scripts.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -24,7 +24,6 @@ SDCategory: Items
EndScriptData */
/* ContentData
-item_draenei_fishing_net(i23654) Hacklike implements chance to spawn item or creature
item_nether_wraith_beacon(i31742) Summons creatures for quest Becoming a Spellfire Tailor (q10832)
item_flying_machine(i34060, i34061) Engineering crafted flying machines
item_gor_dreks_ointment(i30175) Protecting Our Own(q10488)
@@ -81,45 +80,6 @@ public:
};
/*#####
-# item_draenei_fishing_net
-#####*/
-
-class item_draenei_fishing_net : public ItemScript
-{
-public:
- item_draenei_fishing_net() : ItemScript("item_draenei_fishing_net") { }
-
- //This is just a hack and should be removed from here.
- //Creature/Item are in fact created before spell are sucessfully casted, without any checks at all to ensure proper/expected behavior.
- bool OnUse(Player* player, Item* /*pItem*/, SpellCastTargets const& /*targets*/)
- {
- if (player->GetQuestStatus(9452) == QUEST_STATUS_INCOMPLETE)
- {
- if (urand(0, 99) < 35)
- {
- Creature* Murloc = player->SummonCreature(17102, player->GetPositionX(), player->GetPositionY()+20, player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
- if (Murloc)
- Murloc->AI()->AttackStart(player);
- }
- else
- {
- ItemPosCountVec dest;
- uint32 itemId = 23614;
- InventoryResult msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, 1);
- if (msg == EQUIP_ERR_OK)
- {
- if (Item* item = player->StoreNewItem(dest, itemId, true))
- player->SendNewItem(item, 1, false, true);
- }
- else
- player->SendEquipError(msg, NULL, NULL, itemId);
- }
- }
- return false;
- }
-};
-
-/*#####
# item_nether_wraith_beacon
#####*/
@@ -452,7 +412,6 @@ public:
void AddSC_item_scripts()
{
new item_only_for_flight();
- new item_draenei_fishing_net();
new item_nether_wraith_beacon();
new item_gor_dreks_ointment();
new item_incendiary_explosives();
diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp
index 92909f3885a..3a61b9f9e18 100644
--- a/src/server/scripts/World/mob_generic_creature.cpp
+++ b/src/server/scripts/World/mob_generic_creature.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/World/npc_innkeeper.cpp b/src/server/scripts/World/npc_innkeeper.cpp
index 55f6eaac687..334eb48cb05 100644
--- a/src/server/scripts/World/npc_innkeeper.cpp
+++ b/src/server/scripts/World/npc_innkeeper.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp
index 149e1e455aa..336e232236d 100644
--- a/src/server/scripts/World/npc_professions.cpp
+++ b/src/server/scripts/World/npc_professions.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -774,7 +774,7 @@ public:
{
bool res = false;
npcTextId = textId;
- if (player->GetBaseSkillValue(SKILL_ENGINERING) >= skillValue && player->HasSpell(reqSpellId))
+ if (player->GetBaseSkillValue(SKILL_ENGINEERING) >= skillValue && player->HasSpell(reqSpellId))
{
if (!player->HasSpell(spellId))
res = true;
@@ -790,7 +790,7 @@ public:
std::string gossipItem;
bool canLearn = false;
- if (player->HasSkill(SKILL_ENGINERING))
+ if (player->HasSkill(SKILL_ENGINEERING))
{
switch (creature->GetEntry())
{
diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp
index ff83b0c1ec5..aff326e152d 100644
--- a/src/server/scripts/World/npc_taxi.cpp
+++ b/src/server/scripts/World/npc_taxi.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index a5e5b467fc7..21e4fe6a3a0 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -1623,46 +1623,44 @@ public:
## npc_winter_reveler
####*/
+enum WinterReveler
+{
+ SPELL_MISTLETOE_DEBUFF = 26218,
+ SPELL_CREATE_MISTLETOE = 26206,
+ SPELL_CREATE_HOLLY = 26207,
+ SPELL_CREATE_SNOWFLAKES = 45036,
+};
+
class npc_winter_reveler : public CreatureScript
{
-public:
- npc_winter_reveler() : CreatureScript("npc_winter_reveler") { }
+ public:
+ npc_winter_reveler() : CreatureScript("npc_winter_reveler") { }
- struct npc_winter_revelerAI : public ScriptedAI
- {
- npc_winter_revelerAI(Creature* c) : ScriptedAI(c) {}
- void ReceiveEmote(Player* player, uint32 emote)
+ struct npc_winter_revelerAI : public ScriptedAI
{
- if (!IsHolidayActive(HOLIDAY_FEAST_OF_WINTER_VEIL))
- return;
- //TODO: check auralist.
- if (player->HasAura(26218))
- return;
+ npc_winter_revelerAI(Creature* c) : ScriptedAI(c) {}
- if (emote == TEXT_EMOTE_KISS)
+ void ReceiveEmote(Player* player, uint32 emote)
{
- me->CastSpell(me, 26218, false);
- player->CastSpell(player, 26218, false);
- switch (urand(0, 2))
+ if (player->HasAura(SPELL_MISTLETOE_DEBUFF))
+ return;
+
+ if (!IsHolidayActive(HOLIDAY_FEAST_OF_WINTER_VEIL))
+ return;
+
+ if (emote == TEXT_EMOTE_KISS)
{
- case 0:
- me->CastSpell(player, 26207, false);
- break;
- case 1:
- me->CastSpell(player, 26206, false);
- break;
- case 2:
- me->CastSpell(player, 45036, false);
- break;
+ uint32 spellId = RAND<uint32>(SPELL_CREATE_MISTLETOE, SPELL_CREATE_HOLLY, SPELL_CREATE_SNOWFLAKES);
+ me->CastSpell(player, spellId, false);
+ me->CastSpell(player, SPELL_MISTLETOE_DEBUFF, false);
}
}
- }
- };
+ };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_winter_revelerAI(creature);
- }
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_winter_revelerAI(creature);
+ }
};
/*####
@@ -1678,8 +1676,6 @@ public:
#define C_VIPER 19921
-#define RAND 5
-
class npc_snake_trap : public CreatureScript
{
public:
@@ -1726,7 +1722,7 @@ public:
float attackRadius = me->GetAttackDistance(who);
if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who))
{
- if (!(rand() % RAND))
+ if (!(rand() % 5))
{
me->setAttackTimer(BASE_ATTACK, (rand() % 10) * 100);
SpellTimer = (rand() % 10) * 100;
@@ -2030,6 +2026,16 @@ public:
{
DoCast(me, 59907, false); // Spell for Lightwell Charges
}
+
+ void EnterEvadeMode()
+ {
+ if (!me->isAlive())
+ return;
+
+ me->DeleteThreatList();
+ me->CombatStop(true);
+ me->ResetPlayerDamageReq();
+ }
};
CreatureAI* GetAI(Creature* creature) const
@@ -2164,6 +2170,121 @@ public:
};
/*######
+# npc_fire_elemental
+######*/
+#define SPELL_FIRENOVA 12470
+#define SPELL_FIRESHIELD 13376
+#define SPELL_FIREBLAST 57984
+
+class npc_fire_elemental : public CreatureScript
+{
+public:
+ npc_fire_elemental() : CreatureScript("npc_fire_elemental") { }
+
+ struct npc_fire_elementalAI : public ScriptedAI
+ {
+ npc_fire_elementalAI(Creature* creature) : ScriptedAI(creature) {}
+
+ uint32 FireNova_Timer;
+ uint32 FireShield_Timer;
+ uint32 FireBlast_Timer;
+
+ void Reset()
+ {
+ FireNova_Timer = 5000 + rand() % 15000; // 5-20 sec cd
+ FireBlast_Timer = 5000 + rand() % 15000; // 5-20 sec cd
+ FireShield_Timer = 0;
+ me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (me->HasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ if (FireShield_Timer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_FIRESHIELD);
+ FireShield_Timer = 2 * IN_MILLISECONDS;
+ }
+ else
+ FireShield_Timer -= diff;
+
+ if (FireBlast_Timer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_FIREBLAST);
+ FireBlast_Timer = 5000 + rand() % 15000; // 5-20 sec cd
+ }
+ else
+ FireBlast_Timer -= diff;
+
+ if (FireNova_Timer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_FIRENOVA);
+ FireNova_Timer = 5000 + rand() % 15000; // 5-20 sec cd
+ }
+ else
+ FireNova_Timer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature* creature) const
+ {
+ return new npc_fire_elementalAI(creature);
+ }
+};
+
+/*######
+# npc_earth_elemental
+######*/
+#define SPELL_ANGEREDEARTH 36213
+
+class npc_earth_elemental : public CreatureScript
+{
+public:
+ npc_earth_elemental() : CreatureScript("npc_earth_elemental") { }
+
+ struct npc_earth_elementalAI : public ScriptedAI
+ {
+ npc_earth_elementalAI(Creature* creature) : ScriptedAI(creature) {}
+
+ uint32 AngeredEarth_Timer;
+
+ void Reset()
+ {
+ AngeredEarth_Timer = 0;
+ me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (AngeredEarth_Timer <= diff)
+ {
+ DoCast(me->getVictim(), SPELL_ANGEREDEARTH);
+ AngeredEarth_Timer = 5000 + rand() % 15000; // 5-20 sec cd
+ }
+ else
+ AngeredEarth_Timer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI *GetAI(Creature* creature) const
+ {
+ return new npc_earth_elementalAI(creature);
+ }
+};
+
+/*######
# npc_wormhole
######*/
@@ -2673,5 +2794,7 @@ void AddSC_npcs_special()
new npc_locksmith;
new npc_tabard_vendor;
new npc_experience;
+ new npc_fire_elemental;
+ new npc_earth_elemental;
}
diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt
index e5df566462f..3ec35b5394a 100644
--- a/src/server/shared/CMakeLists.txt
+++ b/src/server/shared/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/shared/Common.cpp b/src/server/shared/Common.cpp
index 68b5a62b963..88e7d5a76fc 100755
--- a/src/server/shared/Common.cpp
+++ b/src/server/shared/Common.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h
index ffecf020d24..57809cca255 100755
--- a/src/server/shared/Common.h
+++ b/src/server/shared/Common.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -146,12 +146,12 @@ inline float finiteAlways(float f) { return finite(f) ? f : 0.0f; }
enum TimeConstants
{
- MINUTE = 60,
- HOUR = MINUTE*60,
- DAY = HOUR*24,
- WEEK = DAY*7,
- MONTH = DAY*30,
- YEAR = MONTH*12,
+ MINUTE = 60,
+ HOUR = MINUTE*60,
+ DAY = HOUR*24,
+ WEEK = DAY*7,
+ MONTH = DAY*30,
+ YEAR = MONTH*12,
IN_MILLISECONDS = 1000
};
@@ -203,4 +203,17 @@ typedef std::vector<std::string> StringVector;
#endif
#define MAX_QUERY_LEN 32*1024
+
+#define TRINITY_GUARD(MUTEX, LOCK) \
+ ACE_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \
+ if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false);
+
+# define TRINITY_WRITE_GUARD(MUTEX, LOCK) \
+ ACE_Write_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \
+ if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false);
+
+# define TRINITY_READ_GUARD(MUTEX, LOCK) \
+ ACE_Read_Guard< MUTEX > TRINITY_GUARD_OBJECT (LOCK); \
+ if (TRINITY_GUARD_OBJECT.locked() == 0) ASSERT(false);
+
#endif
diff --git a/src/server/shared/CompilerDefs.h b/src/server/shared/CompilerDefs.h
index 377556a8948..f7e3d0b4979 100755
--- a/src/server/shared/CompilerDefs.h
+++ b/src/server/shared/CompilerDefs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Configuration/Config.cpp b/src/server/shared/Configuration/Config.cpp
index d5a3a7e46bc..b82d86cc5d0 100755
--- a/src/server/shared/Configuration/Config.cpp
+++ b/src/server/shared/Configuration/Config.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Configuration/Config.h b/src/server/shared/Configuration/Config.h
index 46d019fd800..a870379881b 100755
--- a/src/server/shared/Configuration/Config.h
+++ b/src/server/shared/Configuration/Config.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Cryptography/ARC4.cpp b/src/server/shared/Cryptography/ARC4.cpp
index b1a6da31334..52a60573eca 100755
--- a/src/server/shared/Cryptography/ARC4.cpp
+++ b/src/server/shared/Cryptography/ARC4.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Cryptography/ARC4.h b/src/server/shared/Cryptography/ARC4.h
index 777dbb8cb99..541135e52f2 100755
--- a/src/server/shared/Cryptography/ARC4.h
+++ b/src/server/shared/Cryptography/ARC4.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -19,7 +19,7 @@
#ifndef _AUTH_SARC4_H
#define _AUTH_SARC4_H
-#include "Common.h"
+#include "Define.h"
#include <openssl/evp.h>
class ARC4
diff --git a/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp b/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp
index 146f4e992b7..5b4ffabd4f6 100755
--- a/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp
+++ b/src/server/shared/Cryptography/Authentication/AuthCrypt.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -18,12 +18,11 @@
#include "AuthCrypt.h"
#include "Cryptography/HMACSHA1.h"
-#include "Logging/Log.h"
#include "Cryptography/BigNumber.h"
AuthCrypt::AuthCrypt() : _clientDecrypt(SHA_DIGEST_LENGTH), _serverEncrypt(SHA_DIGEST_LENGTH)
+ , _initialized(false)
{
- _initialized = false;
}
AuthCrypt::~AuthCrypt()
diff --git a/src/server/shared/Cryptography/Authentication/AuthCrypt.h b/src/server/shared/Cryptography/Authentication/AuthCrypt.h
index 0304ef6b69e..7081b4973d4 100755
--- a/src/server/shared/Cryptography/Authentication/AuthCrypt.h
+++ b/src/server/shared/Cryptography/Authentication/AuthCrypt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -19,7 +19,6 @@
#ifndef _AUTHCRYPT_H
#define _AUTHCRYPT_H
-#include <Common.h>
#include "Cryptography/ARC4.h"
class BigNumber;
diff --git a/src/server/shared/Cryptography/BigNumber.cpp b/src/server/shared/Cryptography/BigNumber.cpp
index 6149a680594..f55e87c99fc 100755
--- a/src/server/shared/Cryptography/BigNumber.cpp
+++ b/src/server/shared/Cryptography/BigNumber.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -18,31 +18,30 @@
#include "Cryptography/BigNumber.h"
#include <openssl/bn.h>
+#include <openssl/crypto.h>
#include <algorithm>
BigNumber::BigNumber()
-{
- _bn = BN_new();
- _array = NULL;
-}
+ : _bn(BN_new())
+ , _array(NULL)
+{ }
BigNumber::BigNumber(const BigNumber &bn)
-{
- _bn = BN_dup(bn._bn);
- _array = NULL;
-}
+ : _bn(BN_dup(bn._bn))
+ , _array(NULL)
+{ }
BigNumber::BigNumber(uint32 val)
+ : _bn(BN_new())
+ , _array(NULL)
{
- _bn = BN_new();
BN_set_word(_bn, val);
- _array = NULL;
}
BigNumber::~BigNumber()
{
BN_free(_bn);
- if (_array) delete[] _array;
+ delete[] _array;
}
void BigNumber::SetDword(uint32 val)
@@ -76,6 +75,8 @@ void BigNumber::SetRand(int numbits)
BigNumber BigNumber::operator=(const BigNumber &bn)
{
+ if (this == &bn)
+ return *this;
BN_copy(_bn, bn._bn);
return *this;
}
diff --git a/src/server/shared/Cryptography/BigNumber.h b/src/server/shared/Cryptography/BigNumber.h
index 485d4ced470..7196aae6579 100755
--- a/src/server/shared/Cryptography/BigNumber.h
+++ b/src/server/shared/Cryptography/BigNumber.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -19,7 +19,7 @@
#ifndef _AUTH_BIGNUMBER_H
#define _AUTH_BIGNUMBER_H
-#include "Common.h"
+#include "Define.h"
struct bignum_st;
diff --git a/src/server/shared/Cryptography/HMACSHA1.cpp b/src/server/shared/Cryptography/HMACSHA1.cpp
index 5bb837b1544..3f21aa4582d 100755
--- a/src/server/shared/Cryptography/HMACSHA1.cpp
+++ b/src/server/shared/Cryptography/HMACSHA1.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Cryptography/HMACSHA1.h b/src/server/shared/Cryptography/HMACSHA1.h
index 180ac6f4262..bd0418b600e 100755
--- a/src/server/shared/Cryptography/HMACSHA1.h
+++ b/src/server/shared/Cryptography/HMACSHA1.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -19,7 +19,8 @@
#ifndef _AUTH_HMAC_H
#define _AUTH_HMAC_H
-#include "Common.h"
+#include "Define.h"
+#include <string>
#include <openssl/hmac.h>
#include <openssl/sha.h>
diff --git a/src/server/shared/Cryptography/SHA1.cpp b/src/server/shared/Cryptography/SHA1.cpp
index c60b8bfb70a..2af8e4d4cbe 100755
--- a/src/server/shared/Cryptography/SHA1.cpp
+++ b/src/server/shared/Cryptography/SHA1.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Cryptography/SHA1.h b/src/server/shared/Cryptography/SHA1.h
index 27e2d3290d0..b5bf97fd7d9 100755
--- a/src/server/shared/Cryptography/SHA1.h
+++ b/src/server/shared/Cryptography/SHA1.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -19,9 +19,9 @@
#ifndef _AUTH_SHA1_H
#define _AUTH_SHA1_H
-#include "Common.h"
+#include "Define.h"
+#include <string>
#include <openssl/sha.h>
-#include <openssl/crypto.h>
class BigNumber;
diff --git a/src/server/shared/DataStores/DBCFileLoader.cpp b/src/server/shared/DataStores/DBCFileLoader.cpp
index 998724f84ce..f909c8566bb 100755
--- a/src/server/shared/DataStores/DBCFileLoader.cpp
+++ b/src/server/shared/DataStores/DBCFileLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/DataStores/DBCFileLoader.h b/src/server/shared/DataStores/DBCFileLoader.h
index b2d99e9302f..a43807a3b59 100755
--- a/src/server/shared/DataStores/DBCFileLoader.h
+++ b/src/server/shared/DataStores/DBCFileLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h
index b580048ed45..c5b8b6f5a21 100755
--- a/src/server/shared/DataStores/DBCStore.h
+++ b/src/server/shared/DataStores/DBCStore.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Database/AdhocStatement.cpp b/src/server/shared/Database/AdhocStatement.cpp
index 603c159162a..9e795ae853a 100755
--- a/src/server/shared/Database/AdhocStatement.cpp
+++ b/src/server/shared/Database/AdhocStatement.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/AdhocStatement.h b/src/server/shared/Database/AdhocStatement.h
index 1a76956809b..e17a85e7466 100755
--- a/src/server/shared/Database/AdhocStatement.h
+++ b/src/server/shared/Database/AdhocStatement.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/DatabaseEnv.h b/src/server/shared/Database/DatabaseEnv.h
index 5e8ddfe4cde..13b900d8392 100755
--- a/src/server/shared/Database/DatabaseEnv.h
+++ b/src/server/shared/Database/DatabaseEnv.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Database/DatabaseWorker.cpp b/src/server/shared/Database/DatabaseWorker.cpp
index 209ca35abae..662c879ad5e 100644
--- a/src/server/shared/Database/DatabaseWorker.cpp
+++ b/src/server/shared/Database/DatabaseWorker.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/DatabaseWorker.h b/src/server/shared/Database/DatabaseWorker.h
index f2249fa750c..c01a9c1bc3c 100755
--- a/src/server/shared/Database/DatabaseWorker.h
+++ b/src/server/shared/Database/DatabaseWorker.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index adf5902a591..b91972e5b0c 100755
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -92,7 +92,7 @@ class DatabaseWorkerPool
++m_connectionCount[IDX_SYNCH];
}
- sLog->outSQLDriver("Databasepool opened succesfuly. %u total connections running.", (m_connectionCount[IDX_SYNCH] + m_connectionCount[IDX_ASYNC]));
+ sLog->outSQLDriver("Databasepool opened successfully. %u total connections running.", (m_connectionCount[IDX_SYNCH] + m_connectionCount[IDX_ASYNC]));
return res;
}
@@ -158,6 +158,7 @@ class DatabaseWorkerPool
}
//! Enqueues a one-way SQL operation in prepared statement format that will be executed asynchronously.
+ //! Statement must be prepared with CONNECTION_ASYNC flag.
void Execute(PreparedStatement* stmt)
{
PreparedStatementTask* task = new PreparedStatementTask(stmt);
@@ -195,6 +196,7 @@ class DatabaseWorkerPool
}
//! Directly executes a one-way SQL operation in prepared statement format, that will block the calling thread until finished.
+ //! Statement must be prepared with the CONNECTION_SYNCH flag.
void DirectExecute(PreparedStatement* stmt)
{
T* t = GetFreeConnection();
@@ -203,7 +205,7 @@ class DatabaseWorkerPool
}
/**
- Syncrhonous query (with resultset) methods.
+ Synchronous query (with resultset) methods.
*/
//! Directly executes an SQL query in string format that will block the calling thread until finished.
@@ -256,6 +258,7 @@ class DatabaseWorkerPool
//! Directly executes an SQL query in prepared format that will block the calling thread until finished.
//! Returns reference counted auto pointer, no need for manual memory management in upper level code.
+ //! Statement must be prepared with CONNECTION_SYNCH flag.
PreparedQueryResult Query(PreparedStatement* stmt)
{
T* t = GetFreeConnection();
@@ -297,6 +300,7 @@ class DatabaseWorkerPool
//! Enqueues a query in prepared format that will set the value of the PreparedQueryResultFuture return object as soon as the query is executed.
//! The return value is then processed in ProcessQueryCallback methods.
+ //! Statement must be prepared with CONNECTION_ASYNC flag.
PreparedQueryResultFuture AsyncQuery(PreparedStatement* stmt)
{
PreparedQueryResultFuture res;
@@ -308,6 +312,7 @@ class DatabaseWorkerPool
//! Enqueues a vector of SQL operations (can be both adhoc and prepared) that will set the value of the QueryResultHolderFuture
//! return object as soon as the query is executed.
//! The return value is then processed in ProcessQueryCallback methods.
+ //! Any prepared statements added to this holder need to be prepared with the CONNECTION_ASYNC flag.
QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder)
{
QueryResultHolderFuture res;
diff --git a/src/server/shared/Database/Field.cpp b/src/server/shared/Database/Field.cpp
index a3428916cc2..3ea153bdc0c 100755
--- a/src/server/shared/Database/Field.cpp
+++ b/src/server/shared/Database/Field.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/Field.h b/src/server/shared/Database/Field.h
index dde7b902b2d..355f6b47ff2 100755
--- a/src/server/shared/Database/Field.h
+++ b/src/server/shared/Database/Field.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 816dc25f1b3..31fd5f66375 100755..100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -23,281 +23,372 @@ void CharacterDatabaseConnection::DoPrepareStatements()
m_stmts.resize(MAX_CHARACTERDATABASE_STATEMENTS);
PREPARE_STATEMENT(CHAR_DEL_QUEST_POOL_SAVE, "DELETE FROM pool_quest_save WHERE pool_id = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_QUEST_POOL_SAVE, "INSERT INTO pool_quest_save (pool_id, quest_id) VALUES (?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_QUEST_POOL_SAVE, "INSERT INTO pool_quest_save (pool_id, quest_id) VALUES (?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM, "DELETE FROM guild_bank_item WHERE guildid = ? AND TabId = ? AND SlotId = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_EXPIRED_BANS, "UPDATE character_banned SET active = 0 WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate <> bandate", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_GET_GUID_BY_NAME, "SELECT guid FROM characters WHERE name = ?", CONNECTION_SYNCH);
- PREPARE_STATEMENT(CHAR_GET_CHECK_NAME, "SELECT 1 FROM characters WHERE name = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_GET_SUM_CHARS, "SELECT COUNT(guid) FROM characters WHERE account = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_GET_CHAR_CREATE_INFO, "SELECT level, race, class FROM characters WHERE account = ? LIMIT 0, ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_ADD_BAN, "INSERT INTO character_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?, 1)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_NOT_BANNED, "UPDATE character_banned SET active = 0 WHERE guid = ? AND active != 0", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_GET_BANINFO, "SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate, banreason, bannedby FROM character_banned WHERE guid = ? ORDER BY bandate ASC", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_GET_GUID_BY_NAME_FILTER, "SELECT guid, name FROM characters WHERE name LIKE CONCAT('%', ?, '%')", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_GET_BANINFO_LIST, "SELECT bandate, unbandate, bannedby, banreason FROM character_banned WHERE guid = ? ORDER BY unbandate", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_GET_BANNED_NAME, "SELECT characters.name FROM characters, character_banned WHERE character_banned.guid = ? AND character_banned.guid = characters.guid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_GUID_BY_NAME, "SELECT guid FROM characters WHERE name = ?", CONNECTION_BOTH);
+ PREPARE_STATEMENT(CHAR_SEL_CHECK_NAME, "SELECT 1 FROM characters WHERE name = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_SUM_CHARS, "SELECT COUNT(guid) FROM characters WHERE account = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_CHAR_CREATE_INFO, "SELECT level, race, class FROM characters WHERE account = ? LIMIT 0, ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_CHARACTER_BAN, "INSERT INTO character_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?, 1)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_CHARACTER_BAN, "UPDATE character_banned SET active = 0 WHERE guid = ? AND active != 0", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_BANINFO, "SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate, banreason, bannedby FROM character_banned WHERE guid = ? ORDER BY bandate ASC", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_GUID_BY_NAME_FILTER, "SELECT guid, name FROM characters WHERE name LIKE CONCAT('%', ?, '%')", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_BANINFO_LIST, "SELECT bandate, unbandate, bannedby, banreason FROM character_banned WHERE guid = ? ORDER BY unbandate", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_BANNED_NAME, "SELECT characters.name FROM characters, character_banned WHERE character_banned.guid = ? AND character_banned.guid = characters.guid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.playerBytes, c.playerBytes2, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? ORDER BY c.guid", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.playerBytes, c.playerBytes2, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? ORDER BY c.guid", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_PET_SLOTS, "SELECT owner, slot FROM character_pet WHERE owner = ? AND slot >= ? AND slot <= ? ORDER BY slot", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_PET_SLOTS_DETAIL, "SELECT owner, id, entry, level, name FROM character_pet WHERE owner = ? AND slot >= ? AND slot <= ? ORDER BY slot", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_PET_ENTRY, "SELECT entry FROM character_pet WHERE owner = ? AND id = ? AND slot >= ? AND slot <= ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_PET_SLOT_BY_ID, "SELECT slot, entry FROM character_pet WHERE owner = ? AND id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_FREE_NAME, "SELECT guid, name FROM characters WHERE guid = ? AND account = ? AND (at_login & ?) = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_GUID_RACE_ACC_BY_NAME, "SELECT guid, race, account FROM characters WHERE name = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_DAILY, "DELETE FROM character_queststatus_daily", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_WEEKLY, "DELETE FROM character_queststatus_weekly", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_SEASONAL, "DELETE FROM character_queststatus_seasonal WHERE event = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_DAILY_CHAR, "DELETE FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_WEEKLY_CHAR, "DELETE FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_QUEST_STATUS_SEASONAL_CHAR, "DELETE FROM character_queststatus_seasonal WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC);
// Start LoginQueryHolder content
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
"resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, instance_mode_mask, "
"arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, "
"health, power1, power2, power3, power4, power5, power6, power7, instance_id, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars, grantableLevels FROM characters WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_GROUP, "SELECT guid FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_BOUNDINSTANCES, "SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_AURAS, "SELECT caster_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, "
+ PREPARE_STATEMENT(CHAR_SEL_GROUP_MEMBER, "SELECT guid FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_INSTANCE, "SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_AURAS, "SELECT caster_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, "
"base_amount0, base_amount1, base_amount2, maxduration, remaintime, remaincharges FROM character_aura WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_SPELLS, "SELECT spell, active, disabled FROM character_spell WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_QUESTSTATUS, "SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, "
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_SPELL, "SELECT spell, active, disabled FROM character_spell WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, "
"itemcount1, itemcount2, itemcount3, itemcount4, playercount FROM character_queststatus WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_DAILYQUESTSTATUS, "SELECT quest, time FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_WEKLYQUESTSTATUS, "SELECT quest FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_REPUTATION, "SELECT faction, standing, flags FROM character_reputation WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_INVENTORY, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, bag, slot, "
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_DAILYQUESTSTATUS, "SELECT quest, time FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS, "SELECT quest FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS, "SELECT quest FROM character_queststatus_seasonal WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_CHARACTER_DAILYQUESTSTATUS, "INSERT INTO character_queststatus_daily (guid, quest, time) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_CHARACTER_WEEKLYQUESTSTATUS, "INSERT INTO character_queststatus_weekly (guid, quest) VALUES (?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_CHARACTER_SEASONALQUESTSTATUS, "INSERT INTO character_queststatus_seasonal (guid, quest, event) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_REPUTATION, "SELECT faction, standing, flags FROM character_reputation WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_INVENTORY, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, bag, slot, "
"item, itemEntry FROM character_inventory ci JOIN item_instance ii ON ci.item = ii.guid WHERE ci.guid = ? ORDER BY bag, slot", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ACTIONS, "SELECT a.button, a.action, a.type FROM character_action as a, characters as c WHERE a.guid = c.guid AND a.spec = c.activespec AND a.guid = ? ORDER BY button", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_MAILCOUNT, "SELECT COUNT(id) FROM mail WHERE receiver = ? AND (checked & 1) = 0 AND deliver_time <= ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_MAILDATE, "SELECT MIN(deliver_time) FROM mail WHERE receiver = ? AND (checked & 1) = 0", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_SOCIALLIST, "SELECT friend, flags, note FROM character_social JOIN characters ON characters.guid = character_social.friend WHERE character_social.guid = ? AND deleteinfos_name IS NULL LIMIT 255", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_GUILD, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_CRITERIAPROGRESS, "SELECT criteria, counter, date FROM character_achievement_progress WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, item0, item1, item2, item3, item4, item5, item6, item7, item8, "
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_ACTIONS, "SELECT a.button, a.action, a.type FROM character_action as a, characters as c WHERE a.guid = c.guid AND a.spec = c.activespec AND a.guid = ? ORDER BY button", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_MAILCOUNT, "SELECT COUNT(id) FROM mail WHERE receiver = ? AND (checked & 1) = 0 AND deliver_time <= ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_MAILDATE, "SELECT MIN(deliver_time) FROM mail WHERE receiver = ? AND (checked & 1) = 0", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_SOCIALLIST, "SELECT friend, flags, note FROM character_social JOIN characters ON characters.guid = character_social.friend WHERE character_social.guid = ? AND deleteinfos_name IS NULL LIMIT 255", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_CRITERIAPROGRESS, "SELECT criteria, counter, date FROM character_achievement_progress WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, item0, item1, item2, item3, item4, item5, item6, item7, item8, "
"item9, item10, item11, item12, item13, item14, item15, item16, item17, item18 FROM character_equipmentsets WHERE guid = ? ORDER BY setindex", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_BGDATA, "SELECT instanceId, team, joinX, joinY, joinZ, joinO, joinMapId, taxiStart, taxiEnd, mountSpell FROM character_battleground_data WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_GLYPHS, "SELECT spec, glyph1, glyph2, glyph3, glyph4, glyph5, glyph6 FROM character_glyphs WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_TALENTS, "SELECT spell, spec FROM character_talent WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_SKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_RANDOMBG, "SELECT guid FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_BANNED, "SELECT guid FROM character_banned WHERE guid = ? AND active = 1", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_QUESTSTATUSREW, "SELECT quest FROM character_queststatus_rewarded WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_ACCOUNT_INSTANCELOCKTIMES, "SELECT instanceId, releaseTime FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_BGDATA, "SELECT instanceId, team, joinX, joinY, joinZ, joinO, joinMapId, taxiStart, taxiEnd, mountSpell FROM character_battleground_data WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_GLYPHS, "SELECT spec, glyph1, glyph2, glyph3, glyph4, glyph5, glyph6 FROM character_glyphs WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_TALENTS, "SELECT spell, spec FROM character_talent WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_SKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_RANDOMBG, "SELECT guid FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_BANNED, "SELECT guid FROM character_banned WHERE guid = ? AND active = 1", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_QUESTSTATUSREW, "SELECT quest FROM character_queststatus_rewarded WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES, "SELECT instanceId, releaseTime FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC)
// End LoginQueryHolder content
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? ORDER BY button", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_MAILITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, item_guid, itemEntry, owner_guid FROM mail_items mi JOIN item_instance ii ON mi.item_guid = ii.guid WHERE mail_id = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_LOAD_AUCTION_ITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, itemguid, itemEntry FROM auctionhouse ah JOIN item_instance ii ON ah.itemguid = ii.guid", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_LOAD_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_AUCTION, "INSERT INTO auctionhouse (id, auctioneerguid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? ORDER BY button", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_MAILITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, item_guid, itemEntry, owner_guid FROM mail_items mi JOIN item_instance ii ON mi.item_guid = ii.guid WHERE mail_id = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_AUCTION_ITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, itemguid, itemEntry FROM auctionhouse ah JOIN item_instance ii ON ah.itemguid = ii.guid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_INS_AUCTION, "INSERT INTO auctionhouse (id, auctioneerguid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_AUCTION, "DELETE FROM auctionhouse WHERE id = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_MAIL, "INSERT INTO mail(id, messageType, stationery, mailTemplateId, sender, receiver, subject, body, has_items, expire_time, deliver_time, money, cod, checked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_MAIL, "INSERT INTO mail(id, messageType, stationery, mailTemplateId, sender, receiver, subject, body, has_items, expire_time, deliver_time, money, cod, checked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_MAIL, "DELETE FROM mail WHERE id = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_MAIL_ITEM, "INSERT INTO mail_items(mail_id, item_guid, receiver) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_MAIL_ITEM, "INSERT INTO mail_items(mail_id, item_guid, receiver) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_DEL_MAIL_ITEM, "DELETE FROM mail_items WHERE item_guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_MAIL_ITEM, "DELETE FROM mail_items WHERE item_guid = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_DEL_EMPTY_EXPIRED_MAIL, "DELETE FROM mail WHERE expire_time < ? AND has_items = 0 AND body = ''", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_GET_EXPIRED_MAIL, "SELECT id, messageType, sender, receiver, has_items, expire_time, cod, checked, mailTemplateId FROM mail WHERE expire_time < ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_GET_EXPIRED_MAIL_ITEMS, "SELECT item_guid, itemEntry, mail_id FROM mail_items mi INNER JOIN item_instance ii ON ii.guid = mi.item_guid LEFT JOIN mail mm ON mi.mail_id = mm.id WHERE mm.id IS NOT NULL AND mm.expire_time < ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_SET_MAIL_RETURNED, "UPDATE mail SET sender = ?, receiver = ?, expire_time = ?, deliver_time = ?, cod = 0, checked = ? WHERE id = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_MAIL_ITEM_RECEIVER, "UPDATE mail_items SET receiver = ? WHERE item_guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_ITEM_OWNER, "UPDATE item_instance SET owner_guid = ? WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_EXPIRED_MAIL, "SELECT id, messageType, sender, receiver, has_items, expire_time, cod, checked, mailTemplateId FROM mail WHERE expire_time < ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_EXPIRED_MAIL_ITEMS, "SELECT item_guid, itemEntry, mail_id FROM mail_items mi INNER JOIN item_instance ii ON ii.guid = mi.item_guid LEFT JOIN mail mm ON mi.mail_id = mm.id WHERE mm.id IS NOT NULL AND mm.expire_time < ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_UPD_MAIL_RETURNED, "UPDATE mail SET sender = ?, receiver = ?, expire_time = ?, deliver_time = ?, cod = 0, checked = ? WHERE id = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_MAIL_ITEM_RECEIVER, "UPDATE mail_items SET receiver = ? WHERE item_guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_ITEM_OWNER, "UPDATE item_instance SET owner_guid = ? WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_ITEM_REFUNDS, "SELECT player_guid, paidMoney, paidExtendedCost FROM item_refund_instance WHERE item_guid = ? AND player_guid = ? LIMIT 1", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_LOAD_ITEM_BOP_TRADE, "SELECT allowedPlayers FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_ITEM_REFUNDS, "SELECT player_guid, paidMoney, paidExtendedCost FROM item_refund_instance WHERE item_guid = ? AND player_guid = ? LIMIT 1", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_ITEM_BOP_TRADE, "SELECT allowedPlayers FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1", CONNECTION_SYNCH)
PREPARE_STATEMENT(CHAR_DEL_ITEM_BOP_TRADE, "DELETE FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_ITEM_BOP_TRADE, "INSERT INTO item_soulbound_trade_data VALUES (?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_ITEM_BOP_TRADE, "INSERT INTO item_soulbound_trade_data VALUES (?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_REP_INVENTORY_ITEM, "REPLACE INTO character_inventory (guid, bag, slot, item) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_INVENTORY_ITEM, "DELETE FROM character_inventory WHERE item = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_ITEM_INSTANCE, "REPLACE INTO item_instance (itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_UPDATE_ITEM_INSTANCE, "UPDATE item_instance SET itemEntry = ?, owner_guid = ?, creatorGuid = ?, giftCreatorGuid = ?, count = ?, duration = ?, charges = ?, flags = ?, enchantments = ?, randomPropertyId = ?, durability = ?, playedTime = ?, text = ? WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_UPDATE_ITEM_INSTANCE_ON_LOAD, "UPDATE item_instance SET duration = ?, flags = ?, durability = ? WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_REP_ITEM_INSTANCE, "REPLACE INTO item_instance (itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_ITEM_INSTANCE, "UPDATE item_instance SET itemEntry = ?, owner_guid = ?, creatorGuid = ?, giftCreatorGuid = ?, count = ?, duration = ?, charges = ?, flags = ?, enchantments = ?, randomPropertyId = ?, durability = ?, playedTime = ?, text = ? WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_ITEM_INSTANCE_ON_LOAD, "UPDATE item_instance SET duration = ?, flags = ?, durability = ? WHERE guid = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_ITEM_INSTANCE, "DELETE FROM item_instance WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_UPDATE_GIFT_OWNER, "UPDATE character_gifts SET guid = ? WHERE item_guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GIFT_OWNER, "UPDATE character_gifts SET guid = ? WHERE item_guid = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GIFT, "DELETE FROM character_gifts WHERE item_guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_GET_ACCOUNT_BY_NAME, "SELECT account FROM characters WHERE name = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_ACCOUNT_BY_NAME, "SELECT account FROM characters WHERE name = ?", CONNECTION_SYNCH)
PREPARE_STATEMENT(CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, "DELETE FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_ACCOUNT_INSTANCE_LOCK_TIMES, "INSERT INTO account_instance_times (accountId, instanceId, releaseTime) VALUES (?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_NAME_CLASS, "SELECT name, class FROM characters WHERE guid = ?", CONNECTION_SYNCH);
- PREPARE_STATEMENT(CHAR_LOAD_MATCH_MAKER_RATING, "SELECT matchMakerRating FROM character_arena_stats WHERE guid = ? AND slot = ?", CONNECTION_SYNCH);
- PREPARE_STATEMENT(CHAR_GET_CHARACTER_COUNT, "SELECT account, COUNT(guid) FROM characters WHERE account = ? GROUP BY account", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES, "INSERT INTO account_instance_times (accountId, instanceId, releaseTime) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_NAME_CLASS, "SELECT name, class FROM characters WHERE guid = ?", CONNECTION_SYNCH);
+ PREPARE_STATEMENT(CHAR_SEL_MATCH_MAKER_RATING, "SELECT matchMakerRating FROM character_arena_stats WHERE guid = ? AND slot = ?", CONNECTION_SYNCH);
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_COUNT, "SELECT account, COUNT(guid) FROM characters WHERE account = ? GROUP BY account", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_NAME, "UPDATE characters set name = ?, at_login = at_login & ~ ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_DECLINED_NAME, "DELETE FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC);
// Guild handling
// 0: uint32, 1: string, 2: uint32, 3: string, 4: string, 5: uint64, 6-10: uint32, 11: uint64
- PREPARE_STATEMENT(CHAR_ADD_GUILD, "INSERT INTO guild (guildid, name, leaderguid, info, motd, createdate, EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor, BankMoney) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD, "INSERT INTO guild (guildid, name, leaderguid, info, motd, createdate, EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor, BankMoney) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD, "DELETE FROM guild WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
// 0: uint32, 1: uint32, 2: uint8, 4: string, 5: string
- PREPARE_STATEMENT(CHAR_ADD_GUILD_MEMBER, "INSERT INTO guild_member (guildid, guid, rank, pnote, offnote) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD_MEMBER, "INSERT INTO guild_member (guildid, guid, rank, pnote, offnote) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_MEMBER, "DELETE FROM guild_member WHERE guid = ?", CONNECTION_ASYNC) // 0: uint32
PREPARE_STATEMENT(CHAR_DEL_GUILD_MEMBERS, "DELETE FROM guild_member WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
// 0: uint32, 1: uint8, 3: string, 4: uint32
- PREPARE_STATEMENT(CHAR_ADD_GUILD_RANK, "INSERT INTO guild_rank (guildid, rid, rname, rights) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD_RANK, "INSERT INTO guild_rank (guildid, rid, rname, rights) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
PREPARE_STATEMENT(CHAR_DEL_GUILD_LOWEST_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid >= ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
- PREPARE_STATEMENT(CHAR_ADD_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)", CONNECTION_ASYNC) // 0: uint32, 1: uint8
+ PREPARE_STATEMENT(CHAR_INS_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)", CONNECTION_ASYNC) // 0: uint32, 1: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_TAB, "DELETE FROM guild_bank_tab WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_TABS, "DELETE FROM guild_bank_tab WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
// 0: uint32, 1: uint8, 2: uint8, 3: uint32, 4: uint32
- PREPARE_STATEMENT(CHAR_ADD_GUILD_BANK_ITEM, "INSERT INTO guild_bank_item (guildid, TabId, SlotId, item_guid) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD_BANK_ITEM, "INSERT INTO guild_bank_item (guildid, TabId, SlotId, item_guid) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_ITEM, "DELETE FROM guild_bank_item WHERE guildid = ? AND TabId = ? AND SlotId = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_ITEMS, "DELETE FROM guild_bank_item WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
- PREPARE_STATEMENT(CHAR_ADD_GUILD_BANK_RIGHT_DEFAULT, "INSERT INTO guild_bank_right (guildid, TabId, rid) VALUES (?, ?, ?)", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint8
+ PREPARE_STATEMENT(CHAR_INS_GUILD_BANK_RIGHT_DEFAULT, "INSERT INTO guild_bank_right (guildid, TabId, rid) VALUES (?, ?, ?)", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint8
// 0: uint32, 1: uint8, 2: uint8, 3: uint8, 4: uint32
- PREPARE_STATEMENT(CHAR_ADD_GUILD_BANK_RIGHT, "INSERT INTO guild_bank_right (guildid, TabId, rid, gbright, SlotPerDay) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD_BANK_RIGHT, "INSERT INTO guild_bank_right (guildid, TabId, rid, gbright, SlotPerDay) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_RIGHT, "DELETE FROM guild_bank_right WHERE guildid = ? AND TabId = ? AND rid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_RIGHTS, "DELETE FROM guild_bank_right WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_RIGHTS_FOR_RANK, "DELETE FROM guild_bank_right WHERE guildid = ? AND rid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
// 0-1: uint32, 2-3: uint8, 4-5: uint32, 6: uint16, 7: uint8, 8: uint64
- PREPARE_STATEMENT(CHAR_ADD_GUILD_BANK_EVENTLOG, "INSERT INTO guild_bank_eventlog (guildid, LogGuid, TabId, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD_BANK_EVENTLOG, "INSERT INTO guild_bank_eventlog (guildid, LogGuid, TabId, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_EVENTLOG, "DELETE FROM guild_bank_eventlog WHERE guildid = ? AND LogGuid = ? AND TabId = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32, 2: uint8
PREPARE_STATEMENT(CHAR_DEL_GUILD_BANK_EVENTLOGS, "DELETE FROM guild_bank_eventlog WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
// 0-1: uint32, 2: uint8, 3-4: uint32, 5: uint8, 6: uint64
- PREPARE_STATEMENT(CHAR_ADD_GUILD_EVENTLOG, "INSERT INTO guild_eventlog (guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GUILD_EVENTLOG, "INSERT INTO guild_eventlog (guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GUILD_EVENTLOG, "DELETE FROM guild_eventlog WHERE guildid = ? AND LogGuid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32
PREPARE_STATEMENT(CHAR_DEL_GUILD_EVENTLOGS, "DELETE FROM guild_eventlog WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_PNOTE, "UPDATE guild_member SET pnote = ? WHERE guid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_OFFNOTE, "UPDATE guild_member SET offnote = ? WHERE guid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_RANK, "UPDATE guild_member SET rank = ? WHERE guid = ?", CONNECTION_ASYNC) // 0: uint8, 1: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MOTD, "UPDATE guild SET motd = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_INFO, "UPDATE guild SET info = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_LEADER, "UPDATE guild SET leaderguid = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_RANK_NAME, "UPDATE guild_rank SET rname = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC) // 0: string, 1: uint8, 2: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_RANK_RIGHTS, "UPDATE guild_rank SET rights = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_PNOTE, "UPDATE guild_member SET pnote = ? WHERE guid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_OFFNOTE, "UPDATE guild_member SET offnote = ? WHERE guid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_RANK, "UPDATE guild_member SET rank = ? WHERE guid = ?", CONNECTION_ASYNC) // 0: uint8, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MOTD, "UPDATE guild SET motd = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_INFO, "UPDATE guild SET info = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: string, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_LEADER, "UPDATE guild SET leaderguid = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_NAME, "UPDATE guild_rank SET rname = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC) // 0: string, 1: uint8, 2: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_RIGHTS, "UPDATE guild_rank SET rights = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint32
// 0-5: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_EMBLEM_INFO, "UPDATE guild SET EmblemStyle = ?, EmblemColor = ?, BorderStyle = ?, BorderColor = ?, BackgroundColor = ? WHERE guildid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_EMBLEM_INFO, "UPDATE guild SET EmblemStyle = ?, EmblemColor = ?, BorderStyle = ?, BorderColor = ?, BackgroundColor = ? WHERE guildid = ?", CONNECTION_ASYNC)
// 0: string, 1: string, 2: uint32, 3: uint8
- PREPARE_STATEMENT(CHAR_SET_GUILD_BANK_TAB_INFO, "UPDATE guild_bank_tab SET TabName = ?, TabIcon = ? WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_BANK_MONEY, "UPDATE guild SET BankMoney = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint64, 1: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_BANK_TAB_INFO, "UPDATE guild_bank_tab SET TabName = ?, TabIcon = ? WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_BANK_MONEY, "UPDATE guild SET BankMoney = ? WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint64, 1: uint32
// 0: uint8, 1: uint32, 2: uint8, 3: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_BANK_EVENTLOG_TAB, "UPDATE guild_bank_eventlog SET TabId = ? WHERE guildid = ? AND TabId = ? AND LogGuid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_MONEY, "UPDATE guild_member SET BankRemMoney = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32, 2: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_MONEY, "UPDATE guild_member SET BankResetTimeMoney = ?, BankRemMoney = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32, 2: uint32, 3: uint32
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_RESET_TIME, "UPDATE guild_member SET BankResetTimeMoney = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
- PREPARE_STATEMENT(CHAR_SET_GUILD_RANK_BANK_MONEY, "UPDATE guild_rank SET BankMoneyPerDay = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_BANK_TAB_TEXT, "UPDATE guild_bank_tab SET TabText = ? WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC) // 0: string, 1: uint32, 2: uint8
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_BANK_EVENTLOG_TAB, "UPDATE guild_bank_eventlog SET TabId = ? WHERE guildid = ? AND TabId = ? AND LogGuid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_MONEY, "UPDATE guild_member SET BankRemMoney = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32, 2: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_MONEY, "UPDATE guild_member SET BankResetTimeMoney = ?, BankRemMoney = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint32, 2: uint32, 3: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_RESET_TIME, "UPDATE guild_member SET BankResetTimeMoney = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_MONEY, "UPDATE guild_rank SET BankMoneyPerDay = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC) // 0: uint32, 1: uint8, 2: uint32
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_BANK_TAB_TEXT, "UPDATE guild_bank_tab SET TabText = ? WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC) // 0: string, 1: uint32, 2: uint8
// 0: uint32, 1: uint32, 2: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS0, "UPDATE guild_member SET BankRemSlotsTab0 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS1, "UPDATE guild_member SET BankRemSlotsTab1 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS2, "UPDATE guild_member SET BankRemSlotsTab2 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS3, "UPDATE guild_member SET BankRemSlotsTab3 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS4, "UPDATE guild_member SET BankRemSlotsTab4 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS5, "UPDATE guild_member SET BankRemSlotsTab5 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS0, "UPDATE guild_member SET BankRemSlotsTab0 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS1, "UPDATE guild_member SET BankRemSlotsTab1 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS2, "UPDATE guild_member SET BankRemSlotsTab2 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS3, "UPDATE guild_member SET BankRemSlotsTab3 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS4, "UPDATE guild_member SET BankRemSlotsTab4 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS5, "UPDATE guild_member SET BankRemSlotsTab5 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
// 0: uint32, 1: uint32, 2: uint32, 3: uint32
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS0, "UPDATE guild_member SET BankResetTimeTab0 = ?, BankRemSlotsTab0 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS1, "UPDATE guild_member SET BankResetTimeTab1 = ?, BankRemSlotsTab1 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS2, "UPDATE guild_member SET BankResetTimeTab2 = ?, BankRemSlotsTab2 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS3, "UPDATE guild_member SET BankResetTimeTab3 = ?, BankRemSlotsTab3 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS4, "UPDATE guild_member SET BankResetTimeTab4 = ?, BankRemSlotsTab4 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS5, "UPDATE guild_member SET BankResetTimeTab5 = ?, BankRemSlotsTab5 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS0, "UPDATE guild_member SET BankResetTimeTab0 = ?, BankRemSlotsTab0 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS1, "UPDATE guild_member SET BankResetTimeTab1 = ?, BankRemSlotsTab1 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS2, "UPDATE guild_member SET BankResetTimeTab2 = ?, BankRemSlotsTab2 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS3, "UPDATE guild_member SET BankResetTimeTab3 = ?, BankRemSlotsTab3 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS4, "UPDATE guild_member SET BankResetTimeTab4 = ?, BankRemSlotsTab4 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS5, "UPDATE guild_member SET BankResetTimeTab5 = ?, BankRemSlotsTab5 = ? WHERE guildid = ? AND guid = ?", CONNECTION_ASYNC)
// 0: uint32, 1: uint8
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_TIME0, "UPDATE guild_member SET BankResetTimeTab0 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_TIME1, "UPDATE guild_member SET BankResetTimeTab1 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_TIME2, "UPDATE guild_member SET BankResetTimeTab2 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_TIME3, "UPDATE guild_member SET BankResetTimeTab3 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_TIME4, "UPDATE guild_member SET BankResetTimeTab4 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_GUILD_RANK_BANK_TIME5, "UPDATE guild_member SET BankResetTimeTab5 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_CHAR_DATA_FOR_GUILD, "SELECT name, level, class, zone, account FROM characters WHERE guid = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_TIME0, "UPDATE guild_member SET BankResetTimeTab0 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_TIME1, "UPDATE guild_member SET BankResetTimeTab1 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_TIME2, "UPDATE guild_member SET BankResetTimeTab2 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_TIME3, "UPDATE guild_member SET BankResetTimeTab3 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_TIME4, "UPDATE guild_member SET BankResetTimeTab4 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_GUILD_RANK_BANK_TIME5, "UPDATE guild_member SET BankResetTimeTab5 = 0 WHERE guildid = ? AND rank = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHAR_DATA_FOR_GUILD, "SELECT name, level, class, zone, account FROM characters WHERE guid = ?", CONNECTION_SYNCH)
// Chat channel handling
- PREPARE_STATEMENT(CHAR_LOAD_CHANNEL, "SELECT announce, ownership, password, bannedList FROM channels WHERE name = ? AND team = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_CHANNEL, "INSERT INTO channels(name, team, lastUsed) VALUES (?, ?, UNIX_TIMESTAMP())", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_CHANNEL, "UPDATE channels SET announce = ?, ownership = ?, password = ?, bannedList = ?, lastUsed = UNIX_TIMESTAMP() WHERE name = ? AND team = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_CHANNEL_USAGE, "UPDATE channels SET lastUsed = UNIX_TIMESTAMP() WHERE name = ? AND team = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_CHANNEL_OWNERSHIP, "UPDATE channels SET ownership = ? WHERE name LIKE ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CHANNEL, "SELECT announce, ownership, password, bannedList FROM channels WHERE name = ? AND team = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_INS_CHANNEL, "INSERT INTO channels(name, team, lastUsed) VALUES (?, ?, UNIX_TIMESTAMP())", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_CHANNEL, "UPDATE channels SET announce = ?, ownership = ?, password = ?, bannedList = ?, lastUsed = UNIX_TIMESTAMP() WHERE name = ? AND team = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_CHANNEL_USAGE, "UPDATE channels SET lastUsed = UNIX_TIMESTAMP() WHERE name = ? AND team = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_CHANNEL_OWNERSHIP, "UPDATE channels SET ownership = ? WHERE name LIKE ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_OLD_CHANNELS, "DELETE FROM channels WHERE ownership = 1 AND lastUsed + ? < UNIX_TIMESTAMP()", CONNECTION_ASYNC)
// Equipmentsets
- PREPARE_STATEMENT(CHAR_SET_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, item0=?, item1=?, item2=?, item3=?, item4=?, item5=?, item6=?, item7=?, item8=?, item9=?, item10=?, item11=?, item12=?, item13=?, item14=?, item15=?, item16=?, item17=?, item18=? WHERE guid=? AND setguid=? AND setindex=?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_EQUIP_SET, "INSERT INTO character_equipmentsets (guid, setguid, setindex, name, iconname, item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, item0=?, item1=?, item2=?, item3=?, item4=?, item5=?, item6=?, item7=?, item8=?, item9=?, item10=?, item11=?, item12=?, item13=?, item14=?, item15=?, item16=?, item17=?, item18=? WHERE guid=? AND setguid=? AND setindex=?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_EQUIP_SET, "INSERT INTO character_equipmentsets (guid, setguid, setindex, name, iconname, item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_EQUIP_SET, "DELETE FROM character_equipmentsets WHERE setguid=?", CONNECTION_ASYNC)
// Auras
PREPARE_STATEMENT(CHAR_DEL_AURA, "DELETE FROM character_aura WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_AURA, "INSERT INTO character_aura (guid, caster_guid, item_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxduration, remaintime, remaincharges) "
+ PREPARE_STATEMENT(CHAR_INS_AURA, "INSERT INTO character_aura (guid, caster_guid, item_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxduration, remaintime, remaincharges) "
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
// Account data
- PREPARE_STATEMENT(CHAR_LOAD_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_SET_ACCOUNT_DATA, "REPLACE INTO account_data(accountId, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_REP_ACCOUNT_DATA, "REPLACE INTO account_data(accountId, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_ACCOUNT_DATA, "DELETE FROM account_data WHERE accountId = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ACCOUNT_DATA, "SELECT type, time, data FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_PLAYER_ACCOUNT_DATA, "REPLACE INTO character_account_data(guid, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_PLAYER_ACCOUNT_DATA, "SELECT type, time, data FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_REP_PLAYER_ACCOUNT_DATA, "REPLACE INTO character_account_data(guid, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_PLAYER_ACCOUNT_DATA, "DELETE FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC)
// Tutorials
- PREPARE_STATEMENT(CHAR_LOAD_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_GET_HAS_TUTORIALS, "SELECT 1 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_TUTORIALS, "INSERT INTO account_tutorial(tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, accountId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_TUTORIALS, "UPDATE account_tutorial SET tut0 = ?, tut1 = ?, tut2 = ?, tut3 = ?, tut4 = ?, tut5 = ?, tut6 = ?, tut7 = ? WHERE accountId = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_HAS_TUTORIALS, "SELECT 1 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_INS_TUTORIALS, "INSERT INTO account_tutorial(tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, accountId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_TUTORIALS, "UPDATE account_tutorial SET tut0 = ?, tut1 = ?, tut2 = ?, tut3 = ?, tut4 = ?, tut5 = ?, tut6 = ?, tut7 = ? WHERE accountId = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_TUTORIALS, "DELETE FROM account_tutorial WHERE accountId = ?", CONNECTION_ASYNC)
// Instance saves
- PREPARE_STATEMENT(CHAR_ADD_INSTANCE_SAVE, "INSERT INTO instance (id, map, resettime, difficulty, completedEncounters, data) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_UPDATE_INSTANCE_DATA, "UPDATE instance SET completedEncounters=?, data=? WHERE id=?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_INSTANCE_SAVE, "INSERT INTO instance (id, map, resettime, difficulty, completedEncounters, data) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_INSTANCE_DATA, "UPDATE instance SET completedEncounters=?, data=? WHERE id=?", CONNECTION_ASYNC)
// Game event saves
PREPARE_STATEMENT(CHAR_DEL_GAME_EVENT_SAVE, "DELETE FROM game_event_save WHERE eventEntry = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_GAME_EVENT_SAVE, "INSERT INTO game_event_save (eventEntry, state, next_start) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GAME_EVENT_SAVE, "INSERT INTO game_event_save (eventEntry, state, next_start) VALUES (?, ?, ?)", CONNECTION_ASYNC)
// Game event condition saves
PREPARE_STATEMENT(CHAR_DEL_ALL_GAME_EVENT_CONDITION_SAVE, "DELETE FROM game_event_condition_save WHERE eventEntry = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GAME_EVENT_CONDITION_SAVE, "DELETE FROM game_event_condition_save WHERE eventEntry = ? AND condition_id = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_GAME_EVENT_CONDITION_SAVE, "INSERT INTO game_event_condition_save (eventEntry, condition_id, done) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GAME_EVENT_CONDITION_SAVE, "INSERT INTO game_event_condition_save (eventEntry, condition_id, done) VALUES (?, ?, ?)", CONNECTION_ASYNC)
// Petitions
- PREPARE_STATEMENT(CHAR_LOAD_PETITION, "SELECT ownerguid, name, type FROM petition WHERE petitionguid = ?", CONNECTION_SYNCH);
- PREPARE_STATEMENT(CHAR_LOAD_PETITION_SIGNATURE, "SELECT playerguid FROM petition_sign WHERE petitionguid = ?", CONNECTION_SYNCH);
+ PREPARE_STATEMENT(CHAR_SEL_PETITION, "SELECT ownerguid, name, type FROM petition WHERE petitionguid = ?", CONNECTION_SYNCH);
+ PREPARE_STATEMENT(CHAR_SEL_PETITION_SIGNATURE, "SELECT playerguid FROM petition_sign WHERE petitionguid = ?", CONNECTION_SYNCH);
+ PREPARE_STATEMENT(CHAR_DEL_ALL_PETITION_SIGNATURES, "DELETE FROM petition_sign WHERE playerguid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_PETITION_SIGNATURE, "DELETE FROM petition_sign WHERE playerguid = ? AND type = ?", CONNECTION_ASYNC);
// Arena teams
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENAINFO, "SELECT arenaTeamId, weekGames, seasonGames, seasonWins, personalRating FROM arena_team_member WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_ARENA_TEAM, "INSERT INTO arena_team (arenaTeamId, name, captainGuid, type, rating, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_SET_ARENA_TEAM_MEMBER, "INSERT INTO arena_team_member (arenaTeamId, guid) VALUES (?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_CHARACTER_ARENAINFO, "SELECT arenaTeamId, weekGames, seasonGames, seasonWins, personalRating FROM arena_team_member WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_ARENA_TEAM, "INSERT INTO arena_team (arenaTeamId, name, captainGuid, type, rating, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_ARENA_TEAM_MEMBER, "INSERT INTO arena_team_member (arenaTeamId, guid) VALUES (?, ?)", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_DEL_ARENA_TEAM, "DELETE FROM arena_team where arenaTeamId = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_DEL_ARENA_TEAM_MEMBERS, "DELETE FROM arena_team_member WHERE arenaTeamId = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_CAPTAIN, "UPDATE arena_team SET captainGuid = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ARENA_TEAM_CAPTAIN, "UPDATE arena_team SET captainGuid = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
PREPARE_STATEMENT(CHAR_DEL_ARENA_TEAM_MEMBER, "DELETE FROM arena_team_member WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_STATS, "UPDATE arena_team SET rating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ?, rank = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_UPDATE_ARENA_TEAM_MEMBER, "UPDATE arena_team_member SET personalRating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ? WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_UPDATE_CHARACTER_ARENA_STATS, "REPLACE INTO character_arena_stats (guid, slot, matchMakerRating) VALUES (?, ?, ?)", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_LOAD_PLAYER_ARENA_TEAMS, "SELECT arena_team_member.arenaTeamId FROM arena_team_member JOIN arena_team ON arena_team_member.arenaTeamId = arena_team.arenaTeamId WHERE guid = ?", CONNECTION_SYNCH);
+ PREPARE_STATEMENT(CHAR_UPD_ARENA_TEAM_STATS, "UPDATE arena_team SET rating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ?, rank = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ARENA_TEAM_MEMBER, "UPDATE arena_team_member SET personalRating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ? WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_REP_CHARACTER_ARENA_STATS, "REPLACE INTO character_arena_stats (guid, slot, matchMakerRating) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_SEL_PLAYER_ARENA_TEAMS, "SELECT arena_team_member.arenaTeamId FROM arena_team_member JOIN arena_team ON arena_team_member.arenaTeamId = arena_team.arenaTeamId WHERE guid = ?", CONNECTION_SYNCH);
// Character battleground data
- PREPARE_STATEMENT(CHAR_ADD_PLAYER_BGDATA, "INSERT INTO character_battleground_data (guid, instanceId, team, joinX, joinY, joinZ, joinO, joinMapId, taxiStart, taxiEnd, mountSpell) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_PLAYER_BGDATA, "INSERT INTO character_battleground_data (guid, instanceId, team, joinX, joinY, joinZ, joinO, joinMapId, taxiStart, taxiEnd, mountSpell) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_PLAYER_BGDATA, "DELETE FROM character_battleground_data WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_PLAYERS_BGDATA, "UPDATE character_battleground_data SET instanceId = 0", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_UPD_PLAYERS_BGDATA, "UPDATE character_battleground_data SET instanceId = 0", CONNECTION_SYNCH)
// Character homebind
- PREPARE_STATEMENT(CHAR_ADD_PLAYER_HOMEBIND, "INSERT INTO character_homebind (guid, mapId, zoneId, posX, posY, posZ) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_SET_PLAYER_HOMEBIND, "UPDATE character_homebind SET mapId = ?, zoneId = ?, posX = ?, posY = ?, posZ = ? WHERE guid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_PLAYER_HOMEBIND, "INSERT INTO character_homebind (guid, mapId, zoneId, posX, posY, posZ) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_UPD_PLAYER_HOMEBIND, "UPDATE character_homebind SET mapId = ?, zoneId = ?, posX = ?, posY = ?, posZ = ? WHERE guid = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_PLAYER_HOMEBIND, "DELETE FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC)
// Corpse
- PREPARE_STATEMENT(CHAR_LOAD_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_CORPSE, "INSERT INTO corpse (corpseGuid, guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_INS_CORPSE, "INSERT INTO corpse (corpseGuid, guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE corpseGuid = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_PLAYER_CORPSES, "DELETE FROM corpse WHERE guid = ? AND corpseType <> 0", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_OLD_CORPSES, "DELETE FROM corpse WHERE corpseType = 0 OR time < (UNIX_TIMESTAMP(NOW()) - ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_RESET_NONEXISTENT_INSTANCE_FOR_CORPSES, "UPDATE corpse SET instanceId = 0 WHERE instanceId > 0 AND instanceId NOT IN (SELECT id FROM instance)", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_UPD_NONEXISTENT_INSTANCE_FOR_CORPSES, "UPDATE corpse SET instanceId = 0 WHERE instanceId > 0 AND instanceId NOT IN (SELECT id FROM instance)", CONNECTION_SYNCH)
// Creature respawn
- PREPARE_STATEMENT(CHAR_LOAD_CREATURE_RESPAWNS, "SELECT guid, respawnTime, instanceId FROM creature_respawn", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_CREATURE_RESPAWN, "REPLACE INTO creature_respawn (guid, respawnTime, instanceId) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_CREATURE_RESPAWNS, "SELECT guid, respawnTime, instanceId FROM creature_respawn", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_REP_CREATURE_RESPAWN, "REPLACE INTO creature_respawn (guid, respawnTime, instanceId) VALUES (?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_CREATURE_RESPAWN, "DELETE FROM creature_respawn WHERE guid = ? AND instanceId = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_CREATURE_RESPAWN_BY_GUID, "DELETE FROM creature_respawn WHERE guid = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE, "DELETE FROM creature_respawn WHERE instanceId = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_GET_MAX_CREATURE_RESPAWNS, "SELECT MAX(respawnTime), instanceId FROM creature_respawn WHERE instanceId > 0 GROUP BY instanceId", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_MAX_CREATURE_RESPAWNS, "SELECT MAX(respawnTime), instanceId FROM creature_respawn WHERE instanceId > 0 GROUP BY instanceId", CONNECTION_SYNCH)
PREPARE_STATEMENT(CHAR_DEL_NONEXISTENT_INSTANCE_CREATURE_RESPAWNS, "DELETE FROM creature_respawn WHERE instanceId > 0 AND instanceId NOT IN (SELECT instanceId FROM instance)", CONNECTION_SYNCH)
// Gameobject respawn
- PREPARE_STATEMENT(CHAR_LOAD_GO_RESPAWNS, "SELECT guid, respawnTime, instanceId FROM gameobject_respawn", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_GO_RESPAWN, "REPLACE INTO gameobject_respawn (guid, respawnTime, instanceId) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_GO_RESPAWNS, "SELECT guid, respawnTime, instanceId FROM gameobject_respawn", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_REP_GO_RESPAWN, "REPLACE INTO gameobject_respawn (guid, respawnTime, instanceId) VALUES (?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GO_RESPAWN, "DELETE FROM gameobject_respawn WHERE guid = ? AND instanceId = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GO_RESPAWN_BY_INSTANCE, "DELETE FROM gameobject_respawn WHERE instanceId = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_EXPIRED_GO_RESPAWNS, "DELETE FROM gameobject_respawn WHERE respawnTime <= UNIX_TIMESTAMP(NOW())", CONNECTION_SYNCH)
PREPARE_STATEMENT(CHAR_DEL_NONEXISTENT_INSTANCE_GO_RESPAWNS, "DELETE FROM gameobject_respawn WHERE instanceId > 0 AND instanceId NOT IN (SELECT instanceId FROM instance)", CONNECTION_SYNCH)
// GM Tickets
- PREPARE_STATEMENT(CHAR_LOAD_GM_TICKETS, "SELECT ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, completed, escalated, viewed FROM gm_tickets", CONNECTION_SYNCH)
- PREPARE_STATEMENT(CHAR_ADD_GM_TICKET, "REPLACE INTO gm_tickets (ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, completed, escalated, viewed) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_SEL_GM_TICKETS, "SELECT ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, completed, escalated, viewed FROM gm_tickets", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_REP_GM_TICKET, "REPLACE INTO gm_tickets (ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, completed, escalated, viewed) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_GM_TICKET, "DELETE FROM gm_tickets WHERE ticketId = ?", CONNECTION_ASYNC)
PREPARE_STATEMENT(CHAR_DEL_PLAYER_GM_TICKETS, "DELETE FROM gm_tickets WHERE guid = ?", CONNECTION_ASYNC)
// GM Survey/subsurvey/lag report
- PREPARE_STATEMENT(CHAR_ADD_GM_SURVEY, "INSERT INTO gm_surveys (guid, surveyId, mainSurvey, overallComment, createTime) VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(NOW()))", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_GM_SUBSURVEY, "INSERT INTO gm_subsurveys (surveyId, subsurveyId, rank, comment) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(CHAR_ADD_LAG_REPORT, "INSERT INTO lag_reports (guid, lagType, mapId, posX, posY, posZ) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GM_SURVEY, "INSERT INTO gm_surveys (guid, surveyId, mainSurvey, overallComment, createTime) VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(NOW()))", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_GM_SUBSURVEY, "INSERT INTO gm_subsurveys (surveyId, subsurveyId, rank, comment) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(CHAR_INS_LAG_REPORT, "INSERT INTO lag_reports (guid, lagType, mapId, posX, posY, posZ) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
// For loading and deleting expired auctions at startup
- PREPARE_STATEMENT(CHAR_LOAD_EXPIRED_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid WHERE ah.time <= ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(CHAR_SEL_EXPIRED_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid WHERE ah.time <= ?", CONNECTION_SYNCH)
+
+ // Player saving
+ PREPARE_STATEMENT(CHAR_INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
+ "map, instance_id, instance_mode_mask, position_x, position_y, position_z, orientation, "
+ "taximask, cinematic, "
+ "totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, "
+ "extra_flags, stable_slots, at_login, zone, "
+ "death_expire_time, taxi_path, arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, "
+ "todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, health, power1, power2, power3, "
+ "power4, power5, power6, power7, latency, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars, grantableLevels) VALUES "
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,playerBytes=?,playerBytes2=?,playerFlags=?,"
+ "map=?,instance_id=?,instance_mode_mask=?,position_x=?,position_y=?,position_z=?,orientation=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?,"
+ "logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?,"
+ "arenaPoints=?,totalHonorPoints=?,todayHonorPoints=?,yesterdayHonorPoints=?,totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?,knownCurrencies=?,"
+ "watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,power7=?,latency=?,speccount=?,activespec=?,exploredZones=?,"
+ "equipmentCache=?,ammoId=?,knownTitles=?,actionBars=?,grantableLevels=?,online=? WHERE guid=?", CONNECTION_ASYNC);
+
+ PREPARE_STATEMENT(CHAR_UPD_ADD_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_REM_AT_LOGIN_FLAG, "UPDATE characters set at_login = at_login & ~ ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ALL_AT_LOGIN_FLAGS, "UPDATE characters SET at_login = at_login | ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_BUG_REPORT, "INSERT INTO bugreport (type, content) VALUES(?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_PETITION_NAME, "UPDATE petition SET name = ? WHERE petitionguid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_PETITION_SIGNATURE, "INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_INSTANCE_PERM_BINDING, "DELETE FROM group_instance WHERE guid = ? AND (permanent = 1 OR instance IN (SELECT instance FROM character_instance WHERE guid = ?))", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GROUP_LEADER, "UPDATE groups SET leaderGuid = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GROUP_TYPE, "UPDATE groups SET groupType = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GROUP_MEMBER_SUBGROUP, "UPDATE group_member SET subgroup = ? WHERE memberGuid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GROUP_MEMBER_FLAG, "UPDATE group_member SET memberFlags = ? WHERE memberGuid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GROUP_DIFFICULTY, "UPDATE groups SET difficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GROUP_RAID_DIFFICULTY, "UPDATE groups SET raiddifficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_ALL_GM_TICKETS, "TRUNCATE TABLE gm_tickets", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_SPELL, "DELETE FROM character_talent WHERE spell = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UDP_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ZONE, "UPDATE characters SET zone = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_LEVEL, "UPDATE characters SET level = ?, xp = 0 WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA, "DELETE FROM character_achievement_progress WHERE criteria = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_ACHIEVMENT, "DELETE FROM character_achievement WHERE achievement = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_ADDON, "INSERT INTO addons (name, crc) VALUES (?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_INVALID_PET_SPELL, "DELETE FROM pet_spell WHERE spell = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE, "DELETE FROM group_instance WHERE instance = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_GROUP_INSTANCE_BY_GUID, "DELETE FROM group_instance WHERE guid = ? AND instance = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_REP_GROUP_INSTANCE, "REPLACE INTO group_instance (guid, instance, permanent) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_INSTANCE_RESETTIME, "UPDATE instance SET resettime = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GLOBAL_INSTANCE_RESETTIME, "UPDATE instance_reset SET resettime = ? WHERE mapid = ? AND difficulty = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_CHAR_ONLINE, "UPDATE characters SET online = 1 WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_CHAR_NAME_AT_LOGIN, "UPDATE characters set name = ?, at_login = at_login & ~ ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_WORLDSTATE, "UPDATE worldstates SET value = ? WHERE entry = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_WORLDSTATE, "INSERT INTO worldstates (entry, value) VALUES (?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_CHAR_INSTANCE, "DELETE FROM character_instance WHERE guid = ? AND instance = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_CHAR_INSTANCE, "UPDATE character_instance SET instance = ?, permanent = ? WHERE guid = ? AND instance = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_CHAR_INSTANCE, "INSERT INTO character_instance (guid, instance, permanent) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_GENDER_PLAYERBYTES, "UPDATE characters SET gender = ?, playerBytes = ?, playerBytes2 = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_CHARACTER_SKILL, "DELETE FROM character_skills WHERE guid = ? AND skill = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_ADD_CHARACTER_SOCIAL_FLAGS, "UPDATE character_social SET flags = flags | ? WHERE guid = ? AND friend = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_REM_CHARACTER_SOCIAL_FLAGS, "UPDATE character_social SET flags = flags & ~ ? WHERE guid = ? AND friend = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_INS_CHARACTER_SOCIAL, "INSERT INTO character_social (guid, friend, flags) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_DEL_CHARACTER_SOCIAL, "DELETE FROM character_social WHERE guid = ? AND friend = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_CHARACTER_SOCIAL_NOTE, "UPDATE character_social SET note = ? WHERE guid = ? AND friend = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(CHAR_UPD_CHARACTER_POSITION, "UPDATE characters SET position_x = ?, position_y = ?, position_z = ?, orientation = ?, map = ?, zone = ?, trans_x = 0, trans_y = 0, trans_z = 0, transguid = 0, taxi_path = '' WHERE guid = ?", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index dd752914138..a239e274a54 100755..100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -37,243 +37,320 @@ typedef DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabaseWorkerP
enum CharacterDatabaseStatements
{
/* Naming standard for defines:
- {DB}_{SET/DEL/ADD/REP}_{Summary of data changed}
+ {DB}_{SEL/INS/UPD/DEL/REP}_{Summary of data changed}
When updating more than one field, consider looking at the calling function
name for a suiting suffix.
*/
CHAR_DEL_QUEST_POOL_SAVE,
- CHAR_ADD_QUEST_POOL_SAVE,
+ CHAR_INS_QUEST_POOL_SAVE,
CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM,
CHAR_DEL_EXPIRED_BANS,
- CHAR_GET_GUID_BY_NAME,
- CHAR_GET_CHECK_NAME,
- CHAR_GET_SUM_CHARS,
- CHAR_GET_CHAR_CREATE_INFO,
- CHAR_ADD_BAN,
- CHAR_SET_NOT_BANNED,
- CHAR_GET_BANINFO,
- CHAR_GET_GUID_BY_NAME_FILTER,
- CHAR_GET_BANINFO_LIST,
- CHAR_GET_BANNED_NAME,
- CHAR_LOAD_PLAYER,
- CHAR_LOAD_PLAYER_GROUP,
- CHAR_LOAD_PLAYER_BOUNDINSTANCES,
- CHAR_LOAD_PLAYER_AURAS,
- CHAR_LOAD_PLAYER_SPELLS,
- CHAR_LOAD_PLAYER_QUESTSTATUS,
- CHAR_LOAD_PLAYER_DAILYQUESTSTATUS,
- CHAR_LOAD_PLAYER_WEKLYQUESTSTATUS,
- CHAR_LOAD_PLAYER_REPUTATION,
- CHAR_LOAD_PLAYER_INVENTORY,
- CHAR_LOAD_PLAYER_ACTIONS,
- CHAR_LOAD_PLAYER_ACTIONS_SPEC,
- CHAR_LOAD_PLAYER_MAILCOUNT,
- CHAR_LOAD_PLAYER_MAILDATE,
- CHAR_LOAD_PLAYER_SOCIALLIST,
- CHAR_LOAD_PLAYER_HOMEBIND,
- CHAR_LOAD_PLAYER_SPELLCOOLDOWNS,
- CHAR_LOAD_PLAYER_DECLINEDNAMES,
- CHAR_LOAD_PLAYER_GUILD,
- CHAR_LOAD_PLAYER_ARENAINFO,
- CHAR_LOAD_PLAYER_ACHIEVEMENTS,
- CHAR_LOAD_PLAYER_CRITERIAPROGRESS,
- CHAR_LOAD_PLAYER_EQUIPMENTSETS,
- CHAR_LOAD_PLAYER_BGDATA,
- CHAR_LOAD_PLAYER_GLYPHS,
- CHAR_LOAD_PLAYER_TALENTS,
- CHAR_LOAD_PLAYER_SKILLS,
- CHAR_LOAD_PLAYER_RANDOMBG,
- CHAR_LOAD_PLAYER_BANNED,
- CHAR_LOAD_PLAYER_QUESTSTATUSREW,
- CHAR_LOAD_ACCOUNT_INSTANCELOCKTIMES,
- CHAR_LOAD_PLAYER_MAILITEMS,
- CHAR_LOAD_AUCTION_ITEMS,
- CHAR_ADD_AUCTION,
+ CHAR_SEL_GUID_BY_NAME,
+ CHAR_SEL_CHECK_NAME,
+ CHAR_SEL_SUM_CHARS,
+ CHAR_SEL_CHAR_CREATE_INFO,
+ CHAR_INS_CHARACTER_BAN,
+ CHAR_UPD_CHARACTER_BAN,
+ CHAR_SEL_BANINFO,
+ CHAR_SEL_GUID_BY_NAME_FILTER,
+ CHAR_SEL_BANINFO_LIST,
+ CHAR_SEL_BANNED_NAME,
+ CHAR_SEL_ENUM,
+ CHAR_SEL_ENUM_DECLINED_NAME,
+ CHAR_SEL_PET_SLOTS,
+ CHAR_SEL_PET_SLOTS_DETAIL,
+ CHAR_SEL_PET_ENTRY,
+ CHAR_SEL_PET_SLOT_BY_ID,
+ CHAR_SEL_FREE_NAME,
+ CHAR_SEL_GUID_RACE_ACC_BY_NAME,
+ CHAR_DEL_QUEST_STATUS_DAILY,
+ CHAR_DEL_QUEST_STATUS_WEEKLY,
+ CHAR_DEL_QUEST_STATUS_SEASONAL,
+ CHAR_DEL_QUEST_STATUS_DAILY_CHAR,
+ CHAR_DEL_QUEST_STATUS_WEEKLY_CHAR,
+ CHAR_DEL_QUEST_STATUS_SEASONAL_CHAR,
+ CHAR_DEL_BATTLEGROUND_RANDOM,
+ CHAR_INS_BATTLEGROUND_RANDOM,
+
+ CHAR_SEL_CHARACTER,
+ CHAR_SEL_GROUP_MEMBER,
+ CHAR_SEL_CHARACTER_INSTANCE,
+ CHAR_SEL_CHARACTER_AURAS,
+ CHAR_SEL_CHARACTER_SPELL,
+ CHAR_SEL_CHARACTER_QUESTSTATUS,
+ CHAR_SEL_CHARACTER_DAILYQUESTSTATUS,
+ CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS,
+ CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS,
+ CHAR_INS_CHARACTER_DAILYQUESTSTATUS,
+ CHAR_INS_CHARACTER_WEEKLYQUESTSTATUS,
+ CHAR_INS_CHARACTER_SEASONALQUESTSTATUS,
+ CHAR_SEL_CHARACTER_REPUTATION,
+ CHAR_SEL_CHARACTER_INVENTORY,
+ CHAR_SEL_CHARACTER_ACTIONS,
+ CHAR_SEL_CHARACTER_ACTIONS_SPEC,
+ CHAR_SEL_CHARACTER_MAILCOUNT,
+ CHAR_SEL_CHARACTER_MAILDATE,
+ CHAR_SEL_CHARACTER_SOCIALLIST,
+ CHAR_SEL_CHARACTER_HOMEBIND,
+ CHAR_SEL_CHARACTER_SPELLCOOLDOWNS,
+ CHAR_SEL_CHARACTER_DECLINEDNAMES,
+ CHAR_SEL_GUILD_MEMBER,
+ CHAR_SEL_CHARACTER_ARENAINFO,
+ CHAR_SEL_CHARACTER_ACHIEVEMENTS,
+ CHAR_SEL_CHARACTER_CRITERIAPROGRESS,
+ CHAR_SEL_CHARACTER_EQUIPMENTSETS,
+ CHAR_SEL_CHARACTER_BGDATA,
+ CHAR_SEL_CHARACTER_GLYPHS,
+ CHAR_SEL_CHARACTER_TALENTS,
+ CHAR_SEL_CHARACTER_SKILLS,
+ CHAR_SEL_CHARACTER_RANDOMBG,
+ CHAR_SEL_CHARACTER_BANNED,
+ CHAR_SEL_CHARACTER_QUESTSTATUSREW,
+ CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES,
+ CHAR_SEL_MAILITEMS,
+ CHAR_SEL_AUCTION_ITEMS,
+ CHAR_INS_AUCTION,
CHAR_DEL_AUCTION,
- CHAR_LOAD_AUCTIONS,
- CHAR_ADD_MAIL,
+ CHAR_SEL_AUCTIONS,
+ CHAR_INS_MAIL,
CHAR_DEL_MAIL,
- CHAR_ADD_MAIL_ITEM,
+ CHAR_INS_MAIL_ITEM,
+ CHAR_DEL_MAIL_ITEM,
+ CHAR_DEL_INVALID_MAIL_ITEM,
CHAR_DEL_EMPTY_EXPIRED_MAIL,
- CHAR_GET_EXPIRED_MAIL,
- CHAR_GET_EXPIRED_MAIL_ITEMS,
- CHAR_SET_MAIL_RETURNED,
- CHAR_SET_MAIL_ITEM_RECEIVER,
- CHAR_SET_ITEM_OWNER,
- CHAR_LOAD_GUILD_BANK_ITEMS,
- CHAR_LOAD_ITEM_REFUNDS,
- CHAR_LOAD_ITEM_BOP_TRADE,
+ CHAR_SEL_EXPIRED_MAIL,
+ CHAR_SEL_EXPIRED_MAIL_ITEMS,
+ CHAR_UPD_MAIL_RETURNED,
+ CHAR_UPD_MAIL_ITEM_RECEIVER,
+ CHAR_UPD_ITEM_OWNER,
+ CHAR_SEL_ITEM_REFUNDS,
+ CHAR_SEL_ITEM_BOP_TRADE,
CHAR_DEL_ITEM_BOP_TRADE,
- CHAR_ADD_ITEM_BOP_TRADE,
+ CHAR_INS_ITEM_BOP_TRADE,
CHAR_REP_INVENTORY_ITEM,
CHAR_DEL_INVENTORY_ITEM,
- CHAR_ADD_ITEM_INSTANCE,
- CHAR_UPDATE_ITEM_INSTANCE,
- CHAR_UPDATE_ITEM_INSTANCE_ON_LOAD,
+ CHAR_REP_ITEM_INSTANCE,
+ CHAR_UPD_ITEM_INSTANCE,
+ CHAR_UPD_ITEM_INSTANCE_ON_LOAD,
CHAR_DEL_ITEM_INSTANCE,
- CHAR_UPDATE_GIFT_OWNER,
+ CHAR_UPD_GIFT_OWNER,
CHAR_DEL_GIFT,
- CHAR_GET_ACCOUNT_BY_NAME,
+ CHAR_SEL_ACCOUNT_BY_NAME,
CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES,
- CHAR_ADD_ACCOUNT_INSTANCE_LOCK_TIMES,
- CHAR_LOAD_PLAYER_NAME_CLASS,
- CHAR_LOAD_MATCH_MAKER_RATING,
- CHAR_GET_CHARACTER_COUNT,
+ CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES,
+ CHAR_SEL_CHARACTER_NAME_CLASS,
+ CHAR_SEL_MATCH_MAKER_RATING,
+ CHAR_SEL_CHARACTER_COUNT,
+ CHAR_UPD_NAME,
+ CHAR_DEL_DECLINED_NAME,
- CHAR_ADD_GUILD,
+ CHAR_INS_GUILD,
CHAR_DEL_GUILD,
- CHAR_ADD_GUILD_MEMBER,
+ CHAR_INS_GUILD_MEMBER,
CHAR_DEL_GUILD_MEMBER,
CHAR_DEL_GUILD_MEMBERS,
- CHAR_ADD_GUILD_RANK,
+ CHAR_INS_GUILD_RANK,
CHAR_DEL_GUILD_RANKS,
CHAR_DEL_GUILD_LOWEST_RANK,
- CHAR_ADD_GUILD_BANK_TAB,
+ CHAR_INS_GUILD_BANK_TAB,
CHAR_DEL_GUILD_BANK_TAB,
CHAR_DEL_GUILD_BANK_TABS,
- CHAR_ADD_GUILD_BANK_ITEM,
+ CHAR_INS_GUILD_BANK_ITEM,
CHAR_DEL_GUILD_BANK_ITEM,
CHAR_DEL_GUILD_BANK_ITEMS,
- CHAR_ADD_GUILD_BANK_RIGHT_DEFAULT,
- CHAR_ADD_GUILD_BANK_RIGHT,
+ CHAR_INS_GUILD_BANK_RIGHT_DEFAULT,
+ CHAR_INS_GUILD_BANK_RIGHT,
CHAR_DEL_GUILD_BANK_RIGHT,
CHAR_DEL_GUILD_BANK_RIGHTS,
CHAR_DEL_GUILD_BANK_RIGHTS_FOR_RANK,
- CHAR_ADD_GUILD_BANK_EVENTLOG,
+ CHAR_INS_GUILD_BANK_EVENTLOG,
CHAR_DEL_GUILD_BANK_EVENTLOG,
CHAR_DEL_GUILD_BANK_EVENTLOGS,
- CHAR_ADD_GUILD_EVENTLOG,
+ CHAR_INS_GUILD_EVENTLOG,
CHAR_DEL_GUILD_EVENTLOG,
CHAR_DEL_GUILD_EVENTLOGS,
- CHAR_SET_GUILD_MEMBER_PNOTE,
- CHAR_SET_GUILD_MEMBER_OFFNOTE,
- CHAR_SET_GUILD_MEMBER_RANK,
- CHAR_SET_GUILD_MOTD,
- CHAR_SET_GUILD_INFO,
- CHAR_SET_GUILD_LEADER,
- CHAR_SET_GUILD_RANK_NAME,
- CHAR_SET_GUILD_RANK_RIGHTS,
- CHAR_SET_GUILD_EMBLEM_INFO,
- CHAR_SET_GUILD_BANK_TAB_INFO,
- CHAR_SET_GUILD_BANK_MONEY,
- CHAR_SET_GUILD_BANK_EVENTLOG_TAB,
- CHAR_SET_GUILD_MEMBER_BANK_REM_MONEY,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_MONEY,
- CHAR_RESET_GUILD_RANK_BANK_RESET_TIME,
- CHAR_SET_GUILD_RANK_BANK_MONEY,
- CHAR_SET_GUILD_BANK_TAB_TEXT,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS0,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS1,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS2,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS3,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS4,
- CHAR_SET_GUILD_MEMBER_BANK_TIME_REM_SLOTS5,
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS0,
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS1,
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS2,
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS3,
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS4,
- CHAR_SET_GUILD_MEMBER_BANK_REM_SLOTS5,
- CHAR_RESET_GUILD_RANK_BANK_TIME0,
- CHAR_RESET_GUILD_RANK_BANK_TIME1,
- CHAR_RESET_GUILD_RANK_BANK_TIME2,
- CHAR_RESET_GUILD_RANK_BANK_TIME3,
- CHAR_RESET_GUILD_RANK_BANK_TIME4,
- CHAR_RESET_GUILD_RANK_BANK_TIME5,
- CHAR_LOAD_CHAR_DATA_FOR_GUILD,
+ CHAR_UPD_GUILD_MEMBER_PNOTE,
+ CHAR_UPD_GUILD_MEMBER_OFFNOTE,
+ CHAR_UPD_GUILD_MEMBER_RANK,
+ CHAR_UPD_GUILD_MOTD,
+ CHAR_UPD_GUILD_INFO,
+ CHAR_UPD_GUILD_LEADER,
+ CHAR_UPD_GUILD_RANK_NAME,
+ CHAR_UPD_GUILD_RANK_RIGHTS,
+ CHAR_UPD_GUILD_EMBLEM_INFO,
+ CHAR_UPD_GUILD_BANK_TAB_INFO,
+ CHAR_UPD_GUILD_BANK_MONEY,
+ CHAR_UPD_GUILD_BANK_EVENTLOG_TAB,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_MONEY,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_MONEY,
+ CHAR_UPD_GUILD_RANK_BANK_RESET_TIME,
+ CHAR_UPD_GUILD_RANK_BANK_MONEY,
+ CHAR_UPD_GUILD_BANK_TAB_TEXT,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS0,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS1,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS2,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS3,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS4,
+ CHAR_UPD_GUILD_MEMBER_BANK_TIME_REM_SLOTS5,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS0,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS1,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS2,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS3,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS4,
+ CHAR_UPD_GUILD_MEMBER_BANK_REM_SLOTS5,
+ CHAR_UPD_GUILD_RANK_BANK_TIME0,
+ CHAR_UPD_GUILD_RANK_BANK_TIME1,
+ CHAR_UPD_GUILD_RANK_BANK_TIME2,
+ CHAR_UPD_GUILD_RANK_BANK_TIME3,
+ CHAR_UPD_GUILD_RANK_BANK_TIME4,
+ CHAR_UPD_GUILD_RANK_BANK_TIME5,
+ CHAR_SEL_CHAR_DATA_FOR_GUILD,
- CHAR_LOAD_CHANNEL,
- CHAR_ADD_CHANNEL,
- CHAR_SET_CHANNEL,
- CHAR_SET_CHANNEL_USAGE,
- CHAR_SET_CHANNEL_OWNERSHIP,
+ CHAR_SEL_CHANNEL,
+ CHAR_INS_CHANNEL,
+ CHAR_UPD_CHANNEL,
+ CHAR_UPD_CHANNEL_USAGE,
+ CHAR_UPD_CHANNEL_OWNERSHIP,
CHAR_DEL_OLD_CHANNELS,
- CHAR_SET_EQUIP_SET,
- CHAR_ADD_EQUIP_SET,
+ CHAR_UPD_EQUIP_SET,
+ CHAR_INS_EQUIP_SET,
CHAR_DEL_EQUIP_SET,
CHAR_DEL_AURA,
- CHAR_ADD_AURA,
+ CHAR_INS_AURA,
- CHAR_LOAD_ACCOUNT_DATA,
- CHAR_SET_ACCOUNT_DATA,
+ CHAR_SEL_ACCOUNT_DATA,
+ CHAR_REP_ACCOUNT_DATA,
CHAR_DEL_ACCOUNT_DATA,
- CHAR_LOAD_PLAYER_ACCOUNT_DATA,
- CHAR_SET_PLAYER_ACCOUNT_DATA,
+ CHAR_SEL_PLAYER_ACCOUNT_DATA,
+ CHAR_REP_PLAYER_ACCOUNT_DATA,
CHAR_DEL_PLAYER_ACCOUNT_DATA,
- CHAR_LOAD_TUTORIALS,
- CHAR_GET_HAS_TUTORIALS,
- CHAR_ADD_TUTORIALS,
- CHAR_SET_TUTORIALS,
+ CHAR_SEL_TUTORIALS,
+ CHAR_SEL_HAS_TUTORIALS,
+ CHAR_INS_TUTORIALS,
+ CHAR_UPD_TUTORIALS,
CHAR_DEL_TUTORIALS,
- CHAR_ADD_INSTANCE_SAVE,
- CHAR_UPDATE_INSTANCE_DATA,
+ CHAR_INS_INSTANCE_SAVE,
+ CHAR_UPD_INSTANCE_DATA,
CHAR_DEL_GAME_EVENT_SAVE,
- CHAR_ADD_GAME_EVENT_SAVE,
+ CHAR_INS_GAME_EVENT_SAVE,
CHAR_DEL_ALL_GAME_EVENT_CONDITION_SAVE,
CHAR_DEL_GAME_EVENT_CONDITION_SAVE,
- CHAR_ADD_GAME_EVENT_CONDITION_SAVE,
+ CHAR_INS_GAME_EVENT_CONDITION_SAVE,
- CHAR_ADD_ARENA_TEAM,
- CHAR_SET_ARENA_TEAM_MEMBER,
+ CHAR_INS_ARENA_TEAM,
+ CHAR_INS_ARENA_TEAM_MEMBER,
CHAR_DEL_ARENA_TEAM,
CHAR_DEL_ARENA_TEAM_MEMBERS,
- CHAR_UPDATE_ARENA_TEAM_CAPTAIN,
+ CHAR_UPD_ARENA_TEAM_CAPTAIN,
CHAR_DEL_ARENA_TEAM_MEMBER,
- CHAR_UPDATE_ARENA_TEAM_STATS,
- CHAR_UPDATE_ARENA_TEAM_MEMBER,
- CHAR_UPDATE_CHARACTER_ARENA_STATS,
- CHAR_LOAD_PLAYER_ARENA_TEAMS,
+ CHAR_UPD_ARENA_TEAM_STATS,
+ CHAR_UPD_ARENA_TEAM_MEMBER,
+ CHAR_REP_CHARACTER_ARENA_STATS,
+ CHAR_SEL_PLAYER_ARENA_TEAMS,
- CHAR_LOAD_PETITION,
- CHAR_LOAD_PETITION_SIGNATURE,
+ CHAR_SEL_PETITION,
+ CHAR_SEL_PETITION_SIGNATURE,
+ CHAR_DEL_ALL_PETITION_SIGNATURES,
+ CHAR_DEL_PETITION_SIGNATURE,
- CHAR_ADD_PLAYER_BGDATA,
+ CHAR_INS_PLAYER_BGDATA,
CHAR_DEL_PLAYER_BGDATA,
- CHAR_RESET_PLAYERS_BGDATA,
+ CHAR_UPD_PLAYERS_BGDATA,
- CHAR_ADD_PLAYER_HOMEBIND,
- CHAR_SET_PLAYER_HOMEBIND,
+ CHAR_INS_PLAYER_HOMEBIND,
+ CHAR_UPD_PLAYER_HOMEBIND,
CHAR_DEL_PLAYER_HOMEBIND,
- CHAR_LOAD_CORPSES,
- CHAR_ADD_CORPSE,
+ CHAR_SEL_CORPSES,
+ CHAR_INS_CORPSE,
CHAR_DEL_CORPSE,
CHAR_DEL_PLAYER_CORPSES,
CHAR_DEL_OLD_CORPSES,
- CHAR_RESET_NONEXISTENT_INSTANCE_FOR_CORPSES,
+ CHAR_UPD_NONEXISTENT_INSTANCE_FOR_CORPSES,
- CHAR_LOAD_CREATURE_RESPAWNS,
- CHAR_ADD_CREATURE_RESPAWN,
+ CHAR_SEL_CREATURE_RESPAWNS,
+ CHAR_REP_CREATURE_RESPAWN,
CHAR_DEL_CREATURE_RESPAWN,
CHAR_DEL_CREATURE_RESPAWN_BY_GUID,
CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE,
- CHAR_GET_MAX_CREATURE_RESPAWNS,
+ CHAR_SEL_MAX_CREATURE_RESPAWNS,
CHAR_DEL_NONEXISTENT_INSTANCE_CREATURE_RESPAWNS,
- CHAR_LOAD_GO_RESPAWNS,
- CHAR_ADD_GO_RESPAWN,
+ CHAR_SEL_GO_RESPAWNS,
+ CHAR_REP_GO_RESPAWN,
CHAR_DEL_GO_RESPAWN,
CHAR_DEL_GO_RESPAWN_BY_INSTANCE,
CHAR_DEL_EXPIRED_GO_RESPAWNS,
CHAR_DEL_NONEXISTENT_INSTANCE_GO_RESPAWNS,
- CHAR_LOAD_GM_TICKETS,
- CHAR_ADD_GM_TICKET,
+ CHAR_SEL_GM_TICKETS,
+ CHAR_REP_GM_TICKET,
CHAR_DEL_GM_TICKET,
+ CHAR_DEL_ALL_GM_TICKETS,
CHAR_DEL_PLAYER_GM_TICKETS,
- CHAR_ADD_GM_SURVEY,
- CHAR_ADD_GM_SUBSURVEY,
- CHAR_ADD_LAG_REPORT,
+ CHAR_INS_GM_SURVEY,
+ CHAR_INS_GM_SUBSURVEY,
+ CHAR_INS_LAG_REPORT,
+
+ CHAR_SEL_EXPIRED_AUCTIONS,
+
+ CHAR_INS_CHARACTER,
+ CHAR_UPD_CHARACTER,
- CHAR_LOAD_EXPIRED_AUCTIONS,
+ CHAR_UPD_ADD_AT_LOGIN_FLAG,
+ CHAR_UPD_REM_AT_LOGIN_FLAG,
+ CHAR_UPD_ALL_AT_LOGIN_FLAGS,
+ CHAR_INS_BUG_REPORT,
+ CHAR_UPD_PETITION_NAME,
+ CHAR_INS_PETITION_SIGNATURE,
+ CHAR_UPD_ACCOUNT_ONLINE,
+ CHAR_INS_GROUP,
+ CHAR_INS_GROUP_MEMBER,
+ CHAR_DEL_GROUP_MEMBER,
+ CHAR_DEL_GROUP_INSTANCE_PERM_BINDING,
+ CHAR_UPD_GROUP_LEADER,
+ CHAR_UPD_GROUP_TYPE,
+ CHAR_UPD_GROUP_MEMBER_SUBGROUP,
+ CHAR_UPD_GROUP_MEMBER_FLAG,
+ CHAR_UPD_GROUP_DIFFICULTY,
+ CHAR_UPD_GROUP_RAID_DIFFICULTY,
+ CHAR_DEL_INVALID_SPELL,
+ CHAR_UPD_DELETE_INFO,
+ CHAR_UDP_RESTORE_DELETE_INFO,
+ CHAR_UPD_ZONE,
+ CHAR_UPD_LEVEL,
+ CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA,
+ CHAR_DEL_INVALID_ACHIEVMENT,
+ CHAR_INS_ADDON,
+ CHAR_DEL_INVALID_PET_SPELL,
+ CHAR_DEL_GROUP_INSTANCE_BY_INSTANCE,
+ CHAR_DEL_GROUP_INSTANCE_BY_GUID,
+ CHAR_REP_GROUP_INSTANCE,
+ CHAR_UPD_INSTANCE_RESETTIME,
+ CHAR_UPD_GLOBAL_INSTANCE_RESETTIME,
+ CHAR_UPD_CHAR_ONLINE,
+ CHAR_UPD_CHAR_NAME_AT_LOGIN,
+ CHAR_UPD_WORLDSTATE,
+ CHAR_INS_WORLDSTATE,
+ CHAR_DEL_CHAR_INSTANCE,
+ CHAR_UPD_CHAR_INSTANCE,
+ CHAR_INS_CHAR_INSTANCE,
+ CHAR_UPD_GENDER_PLAYERBYTES,
+ CHAR_DEL_CHARACTER_SKILL,
+ CHAR_UPD_ADD_CHARACTER_SOCIAL_FLAGS,
+ CHAR_UPD_REM_CHARACTER_SOCIAL_FLAGS,
+ CHAR_INS_CHARACTER_SOCIAL,
+ CHAR_DEL_CHARACTER_SOCIAL,
+ CHAR_UPD_CHARACTER_SOCIAL_NOTE,
+ CHAR_UPD_CHARACTER_POSITION,
MAX_CHARACTERDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index 13cfe09914d..7e497c4437b 100755
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -22,27 +22,44 @@ void LoginDatabaseConnection::DoPrepareStatements()
if (!m_reconnecting)
m_stmts.resize(MAX_LOGINDATABASE_STATEMENTS);
- PREPARE_STATEMENT(LOGIN_GET_REALMLIST, "SELECT id, name, address, port, icon, color, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE color <> 3 ORDER BY name", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_SET_EXPIREDIPBANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_SET_EXPIREDACCBANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_GET_IPBANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_SET_IPAUTOBANNED, "INSERT INTO ip_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban')", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_GET_ACCBANNED, "SELECT bandate, unbandate FROM account_banned WHERE id = ? AND active = 1", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_SET_ACCAUTOBANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban', 1)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_GET_SESSIONKEY, "SELECT a.sessionkey, a.id, aa.gmlevel FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_SET_VS, "UPDATE account SET v = ?, s = ? WHERE username = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_SET_LOGONPROOF, "UPDATE account SET sessionkey = ?, last_ip = ?, last_login = NOW(), locale = ?, failed_logins = 0 WHERE username = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_GET_LOGONCHALLENGE, "SELECT a.sha_pass_hash, a.id, a.locked, a.last_ip, aa.gmlevel, a.v, a.s FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.username = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_SET_FAILEDLOGINS, "UPDATE account SET failed_logins = failed_logins + 1 WHERE username = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_GET_FAILEDLOGINS, "SELECT id, failed_logins FROM account WHERE username = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_GET_ACCIDBYNAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_GET_NUMCHARSONREALM, "SELECT numchars FROM realmcharacters WHERE realmid = ? AND acctid= ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_GET_ACCOUNT_BY_IP, "SELECT id FROM account WHERE last_ip = ?", CONNECTION_SYNCH)
- PREPARE_STATEMENT(LOGIN_SET_IP_BANNED, "INSERT INTO ip_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_SET_IP_NOT_BANNED, "DELETE FROM ip_banned WHERE ip = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_SET_ACCOUNT_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?, 1)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_SET_ACCOUNT_NOT_BANNED, "UPDATE account_banned SET active = 0 WHERE id = ? AND active != 0", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_DEL_REALMCHARACTERS, "DELETE FROM realmcharacters WHERE acctid = ? AND realmid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_ADD_REALMCHARACTERS, "INSERT INTO realmcharacters (numchars, acctid, realmid) VALUES (?, ?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(LOGIN_GET_SUM_REALMCHARS, "SELECT SUM(numchars) FROM realmcharacters WHERE acctid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_SEL_REALMLIST, "SELECT id, name, address, port, icon, color, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE color <> 3 ORDER BY name", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_SEL_IP_BANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban')", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_SEL_ACCOUNT_BANNED, "SELECT bandate, unbandate FROM account_banned WHERE id = ? AND active = 1", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban', 1)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_SEL_SESSIONKEY, "SELECT a.sessionkey, a.id, aa.gmlevel FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_UPD_VS, "UPDATE account SET v = ?, s = ? WHERE username = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_UPD_LOGONPROOF, "UPDATE account SET sessionkey = ?, last_ip = ?, last_login = NOW(), locale = ?, failed_logins = 0 WHERE username = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_SEL_LOGONCHALLENGE, "SELECT a.sha_pass_hash, a.id, a.locked, a.last_ip, aa.gmlevel, a.v, a.s FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.username = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_UPD_FAILEDLOGINS, "UPDATE account SET failed_logins = failed_logins + 1 WHERE username = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_SEL_FAILEDLOGINS, "SELECT id, failed_logins FROM account WHERE username = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_SEL_NUM_CHARS_ON_REALM, "SELECT numchars FROM realmcharacters WHERE realmid = ? AND acctid= ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_SEL_ACCOUNT_BY_IP, "SELECT id FROM account WHERE last_ip = ?", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(LOGIN_INS_IP_BANNED, "INSERT INTO ip_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_DEL_IP_NOT_BANNED, "DELETE FROM ip_banned WHERE ip = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_INS_ACCOUNT_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?, 1)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_UPD_ACCOUNT_NOT_BANNED, "UPDATE account_banned SET active = 0 WHERE id = ? AND active != 0", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_DEL_REALM_CHARACTERS, "DELETE FROM realmcharacters WHERE acctid = ? AND realmid = ?", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_INS_REALM_CHARACTERS, "INSERT INTO realmcharacters (numchars, acctid, realmid) VALUES (?, ?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(LOGIN_SEL_SUM_REALM_CHARACTERS, "SELECT SUM(numchars) FROM realmcharacters WHERE acctid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_INS_ACCOUNT, "INSERT INTO account(username, sha_pass_hash, joindate) VALUES(?, ?, NOW())", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_INS_REALM_CHARACTERS_INIT, "INSERT INTO realmcharacters (realmid, acctid, numchars) SELECT realmlist.id, account.id, 0 FROM realmlist, account LEFT JOIN realmcharacters ON acctid=account.id WHERE acctid IS NULL", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_DEL_OLD_BANS, "DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_DEL_OLD_IP_BANS, "DELETE FROM ip_banned WHERE unbandate <= UNIX_TIMESTAMP() AND unbandate<>bandate", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_EXPANSION, "UPDATE account SET expansion = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_ACCOUNT_LOCK, "UPDATE account SET locked = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_INS_LOG, "INSERT INTO logs (time, realm, type, string) VALUES (UNIX_TIMESTAMP(), ? , ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_USERNAME, "UPDATE account SET v = 0, s = 0, username = ?, sha_pass_hash = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_PASSWORD, "UPDATE account SET v = 0, s = 0, sha_pass_hash = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_MUTE_TIME, "UPDATE account SET mutetime = ? WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_LAST_IP, "UPDATE account SET last_ip = ? WHERE username = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_ACCOUNT_ONLINE, "UPDATE account SET online = 1 WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_UPD_UPTIME_PLAYERS, "UPDATE uptime SET uptime = ?, maxplayers = ? WHERE realmid = ? AND starttime = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_DEL_OLD_LOGS, "DELETE FROM logs WHERE (time + ?) < ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_DEL_ACCOUNT_ACCESS, "DELETE FROM account_access WHERE id = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_DEL_ACCOUNT_ACCESS_BY_REALM, "DELETE FROM account_access WHERE id = ? AND (RealmID = ? OR RealmID = -1)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(LOGIN_INS_ACCOUNT_ACCESS, "INSERT INTO account_access (id,gmlevel,RealmID) VALUES (?, ?, ?)", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index b5f927ffe28..afb188020c7 100755
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -37,34 +37,51 @@ typedef DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabaseWorkerPool;
enum LoginDatabaseStatements
{
/* Naming standard for defines:
- {DB}_{SET/DEL/ADD/REP}_{Summary of data changed}
+ {DB}_{SEL/INS/UPD/DEL/REP}_{Summary of data changed}
When updating more than one field, consider looking at the calling function
name for a suiting suffix.
*/
- LOGIN_GET_REALMLIST,
- LOGIN_SET_EXPIREDIPBANS,
- LOGIN_SET_EXPIREDACCBANS,
- LOGIN_GET_IPBANNED,
- LOGIN_SET_IPAUTOBANNED,
- LOGIN_GET_ACCBANNED,
- LOGIN_SET_ACCAUTOBANNED,
- LOGIN_GET_SESSIONKEY,
- LOGIN_SET_VS,
- LOGIN_SET_LOGONPROOF,
- LOGIN_GET_LOGONCHALLENGE,
- LOGIN_SET_FAILEDLOGINS,
- LOGIN_GET_FAILEDLOGINS,
- LOGIN_GET_ACCIDBYNAME,
- LOGIN_GET_NUMCHARSONREALM,
- LOGIN_GET_ACCOUNT_BY_IP,
- LOGIN_SET_IP_BANNED,
- LOGIN_SET_IP_NOT_BANNED,
- LOGIN_SET_ACCOUNT_BANNED,
- LOGIN_SET_ACCOUNT_NOT_BANNED,
- LOGIN_DEL_REALMCHARACTERS,
- LOGIN_ADD_REALMCHARACTERS,
- LOGIN_GET_SUM_REALMCHARS,
+ LOGIN_SEL_REALMLIST,
+ LOGIN_DEL_EXPIRED_IP_BANS,
+ LOGIN_UPD_EXPIRED_ACCOUNT_BANS,
+ LOGIN_SEL_IP_BANNED,
+ LOGIN_INS_IP_AUTO_BANNED,
+ LOGIN_SEL_ACCOUNT_BANNED,
+ LOGIN_INS_ACCOUNT_AUTO_BANNED,
+ LOGIN_SEL_SESSIONKEY,
+ LOGIN_UPD_VS,
+ LOGIN_UPD_LOGONPROOF,
+ LOGIN_SEL_LOGONCHALLENGE,
+ LOGIN_UPD_FAILEDLOGINS,
+ LOGIN_SEL_FAILEDLOGINS,
+ LOGIN_SEL_ACCOUNT_ID_BY_NAME,
+ LOGIN_SEL_NUM_CHARS_ON_REALM,
+ LOGIN_SEL_ACCOUNT_BY_IP,
+ LOGIN_INS_IP_BANNED,
+ LOGIN_DEL_IP_NOT_BANNED,
+ LOGIN_INS_ACCOUNT_BANNED,
+ LOGIN_UPD_ACCOUNT_NOT_BANNED,
+ LOGIN_DEL_REALM_CHARACTERS,
+ LOGIN_INS_REALM_CHARACTERS,
+ LOGIN_SEL_SUM_REALM_CHARACTERS,
+ LOGIN_INS_ACCOUNT,
+ LOGIN_INS_REALM_CHARACTERS_INIT,
+ LOGIN_DEL_OLD_BANS,
+ LOGIN_DEL_OLD_IP_BANS,
+ LOGIN_UPD_EXPANSION,
+ LOGIN_UPD_ACCOUNT_LOCK,
+ LOGIN_INS_LOG,
+ LOGIN_UPD_USERNAME,
+ LOGIN_UPD_PASSWORD,
+ LOGIN_UPD_MUTE_TIME,
+ LOGIN_UPD_LAST_IP,
+ LOGIN_UPD_ACCOUNT_ONLINE,
+ LOGIN_UPD_UPTIME_PLAYERS,
+ LOGIN_DEL_OLD_LOGS,
+ LOGIN_DEL_ACCOUNT_ACCESS,
+ LOGIN_DEL_ACCOUNT_ACCESS_BY_REALM,
+ LOGIN_INS_ACCOUNT_ACCESS,
MAX_LOGINDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index ebf60e3d20e..d7d8491008b 100755
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -22,10 +22,42 @@ void WorldDatabaseConnection::DoPrepareStatements()
if (!m_reconnecting)
m_stmts.resize(MAX_WORLDDATABASE_STATEMENTS);
- PREPARE_STATEMENT(WORLD_LOAD_QUEST_POOLS, "SELECT entry, pool_entry FROM pool_quest", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_SEL_QUEST_POOLS, "SELECT entry, pool_entry FROM pool_quest", CONNECTION_SYNCH)
PREPARE_STATEMENT(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?", CONNECTION_ASYNC)
- PREPARE_STATEMENT(WORLD_REP_CRELINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC)
- PREPARE_STATEMENT(WORLD_LOAD_CRETEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH)
- PREPARE_STATEMENT(WORLD_LOAD_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH)
- PREPARE_STATEMENT(WORLD_LOAD_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_REP_CREATURE_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC)
+ PREPARE_STATEMENT(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_SEL_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH)
+ PREPARE_STATEMENT(WORLD_DEL_GAMEOBJECT, "DELETE FROM gameobject WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_EVENT_GAMEOBJECT, "DELETE FROM game_event_gameobject WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_GRAVEYARD_ZONE, "INSERT INTO game_graveyard_zone (id, ghost_zone, faction) VALUES (?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_GRAVEYARD_ZONE, "DELETE FROM game_graveyard_zone WHERE id = ? AND ghost_zone = ? AND faction = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_GAME_TELE, "INSERT INTO game_tele (id, position_x, position_y, position_z, orientation, map, name) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_GAME_TELE, "DELETE FROM game_tele WHERE name = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_NPC_VENODR, "INSERT INTO npc_vendor (entry, item, maxcount, incrtime, extendedcost) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_NPC_VENDOR, "DELETE FROM npc_vendor WHERE entry = ? AND item = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_MOVEMENT_TYPE, "UPDATE creature SET MovementType = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_FACTION, "UPDATE creature_template SET faction_A = ?, faction_H = ? WHERE entry = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_NPCFLAG, "UPDATE creature_template SET npcflag = ? WHERE entry = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_POSITION, "UPDATE creature SET position_x = ?, position_y = ?, position_z = ?, orientation = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_SPAWN_DISTANCE, "UPDATE creature SET spawndist = ?, MovementType = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_SPAWN_TIME_SECS, "UPDATE creature SET spawntimesecs = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_CREATURE_FORMATION, "INSERT INTO creature_formations (leaderGUID, memberGUID, dist, angle, groupAI) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_WAYPOINT_DATA, "INSERT INTO waypoint_data (id, point, position_x, position_y, position_z) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_WAYPOINT_DATA, "DELETE FROM waypoint_data WHERE id = ? AND point = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_DATA_POINT, "UPDATE waypoint_data SET point = point - 1 WHERE id = ? AND point > ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_DATA_POSITION, "UPDATE waypoint_data SET position_x = ?, position_y = ?, position_z = ? where id = ? AND point = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_DATA_WPGUID, "UPDATE waypoint_data SET wpguid = ? WHERE id = ? and point = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_ALL_WAYPOINT_DATA_WPGUID, "UPDATE waypoint_data SET wpguid = 0", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_CREATURE_ADDON, "INSERT INTO creature_addon(guid, path_id) VALUES (?, ?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_CREATURE_ADDON_PATH, "UPDATE creature_addon SET path_id = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_CREATURE_ADDON, "DELETE FROM creature_addon WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_INS_WAYPOINT_SCRIPT, "INSERT INTO waypoint_scripts (guid) VALUES (?)", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_WAYPOINT_SCRIPT, "DELETE FROM waypoint_scripts WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_SCRIPT_ID, "UPDATE waypoint_scripts SET id = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_SCRIPT_X, "UPDATE waypoint_scripts SET x = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_SCRIPT_Y, "UPDATE waypoint_scripts SET y = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_SCRIPT_Z, "UPDATE waypoint_scripts SET z = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_UPD_WAYPOINT_SCRIPT_O, "UPDATE waypoint_scripts SET o = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PREPARE_STATEMENT(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC);
}
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h
index 274ea4350c9..e708177503f 100755
--- a/src/server/shared/Database/Implementation/WorldDatabase.h
+++ b/src/server/shared/Database/Implementation/WorldDatabase.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -37,17 +37,49 @@ typedef DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabaseWorkerPool;
enum WorldDatabaseStatements
{
/* Naming standard for defines:
- {DB}_{SET/DEL/ADD/REP}_{Summary of data changed}
+ {DB}_{SEL/INS/UPD/DEL/REP}_{Summary of data changed}
When updating more than one field, consider looking at the calling function
name for a suiting suffix.
*/
- WORLD_LOAD_QUEST_POOLS,
+ WORLD_SEL_QUEST_POOLS,
WORLD_DEL_CRELINKED_RESPAWN,
- WORLD_REP_CRELINKED_RESPAWN,
- WORLD_LOAD_CRETEXT,
- WORLD_LOAD_SMART_SCRIPTS,
- WORLD_LOAD_SMARTAI_WP,
+ WORLD_REP_CREATURE_LINKED_RESPAWN,
+ WORLD_SEL_CREATURE_TEXT,
+ WORLD_SEL_SMART_SCRIPTS,
+ WORLD_SEL_SMARTAI_WP,
+ WORLD_DEL_GAMEOBJECT,
+ WORLD_DEL_EVENT_GAMEOBJECT,
+ WORLD_INS_GRAVEYARD_ZONE,
+ WORLD_DEL_GRAVEYARD_ZONE,
+ WORLD_INS_GAME_TELE,
+ WORLD_DEL_GAME_TELE,
+ WORLD_INS_NPC_VENODR,
+ WORLD_DEL_NPC_VENDOR,
+ WORLD_UPD_CREATURE_MOVEMENT_TYPE,
+ WORLD_UPD_CREATURE_FACTION,
+ WORLD_UPD_CREATURE_NPCFLAG,
+ WORLD_UPD_CREATURE_POSITION,
+ WORLD_UPD_CREATURE_SPAWN_DISTANCE,
+ WORLD_UPD_CREATURE_SPAWN_TIME_SECS,
+ WORLD_INS_CREATURE_FORMATION,
+ WORLD_INS_WAYPOINT_DATA,
+ WORLD_DEL_WAYPOINT_DATA,
+ WORLD_UPD_WAYPOINT_DATA_POINT,
+ WORLD_UPD_WAYPOINT_DATA_POSITION,
+ WORLD_UPD_WAYPOINT_DATA_WPGUID,
+ WORLD_UPD_ALL_WAYPOINT_DATA_WPGUID,
+ WORLD_UPD_CREATURE_ADDON_PATH,
+ WORLD_INS_CREATURE_ADDON,
+ WORLD_DEL_CREATURE_ADDON,
+ WORLD_INS_WAYPOINT_SCRIPT,
+ WORLD_DEL_WAYPOINT_SCRIPT,
+ WORLD_UPD_WAYPOINT_SCRIPT_ID,
+ WORLD_UPD_WAYPOINT_SCRIPT_X,
+ WORLD_UPD_WAYPOINT_SCRIPT_Y,
+ WORLD_UPD_WAYPOINT_SCRIPT_Z,
+ WORLD_UPD_WAYPOINT_SCRIPT_O,
+ WORLD_DEL_CREATURE,
MAX_WORLDDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp
index 70a8beb3d70..f686db4c199 100755
--- a/src/server/shared/Database/MySQLConnection.cpp
+++ b/src/server/shared/Database/MySQLConnection.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -527,7 +527,12 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo)
// Query related errors - skip query
case 1058: // "Column count doesn't match value count"
case 1062: // "Duplicate entry '%s' for key '%d'"
- case 1054: // "Unknown column '%s' in 'order clause'"
+ return false;
+
+ // Outdated table or database structure - terminate core
+ case 1054: // "Unknown column '%s' in '%s'"
+ case 1146: // "Table '%s' doesn't exist"
+ WPFatal(!errNo, "Your database structure is not up to date. Please make sure you've executed all queries in the sql/updates folders.");
return false;
default:
diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h
index 03846c47ecd..46e14d81a5e 100755
--- a/src/server/shared/Database/MySQLConnection.h
+++ b/src/server/shared/Database/MySQLConnection.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -33,6 +33,7 @@ enum ConnectionFlags
{
CONNECTION_ASYNC = 0x1,
CONNECTION_SYNCH = 0x2,
+ CONNECTION_BOTH = CONNECTION_ASYNC | CONNECTION_SYNCH,
};
struct MySQLConnectionInfo
diff --git a/src/server/shared/Database/MySQLThreading.h b/src/server/shared/Database/MySQLThreading.h
index 33f24d9aba5..2004ee9826c 100755
--- a/src/server/shared/Database/MySQLThreading.h
+++ b/src/server/shared/Database/MySQLThreading.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/PreparedStatement.cpp b/src/server/shared/Database/PreparedStatement.cpp
index 22ca31fc20a..baeb591ffb1 100755
--- a/src/server/shared/Database/PreparedStatement.cpp
+++ b/src/server/shared/Database/PreparedStatement.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/PreparedStatement.h b/src/server/shared/Database/PreparedStatement.h
index 97240d79801..11ece3e3032 100755
--- a/src/server/shared/Database/PreparedStatement.h
+++ b/src/server/shared/Database/PreparedStatement.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index b948a92fc5f..a3602531205 100755
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/QueryHolder.h b/src/server/shared/Database/QueryHolder.h
index 06cfde72e48..86b3b5955bd 100755
--- a/src/server/shared/Database/QueryHolder.h
+++ b/src/server/shared/Database/QueryHolder.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/QueryResult.cpp b/src/server/shared/Database/QueryResult.cpp
index 9c6ad20222e..dff055b8d3d 100755
--- a/src/server/shared/Database/QueryResult.cpp
+++ b/src/server/shared/Database/QueryResult.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h
index 6dc01076b59..c165a9456f5 100755
--- a/src/server/shared/Database/QueryResult.h
+++ b/src/server/shared/Database/QueryResult.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Database/SQLOperation.h b/src/server/shared/Database/SQLOperation.h
index ff91771b1a6..b911c1c92aa 100755
--- a/src/server/shared/Database/SQLOperation.h
+++ b/src/server/shared/Database/SQLOperation.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/Transaction.cpp b/src/server/shared/Database/Transaction.cpp
index b4295379664..5aecda87797 100755
--- a/src/server/shared/Database/Transaction.cpp
+++ b/src/server/shared/Database/Transaction.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Database/Transaction.h b/src/server/shared/Database/Transaction.h
index 1537f238f37..92002819951 100755
--- a/src/server/shared/Database/Transaction.h
+++ b/src/server/shared/Database/Transaction.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/shared/Debugging/Errors.h b/src/server/shared/Debugging/Errors.h
index cfa1452864f..6927fdb483f 100755
--- a/src/server/shared/Debugging/Errors.h
+++ b/src/server/shared/Debugging/Errors.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -22,11 +22,12 @@
#include "Common.h"
#include "Log.h"
#include <ace/Stack_Trace.h>
+#include <ace/OS_NS_unistd.h>
#define WPAssert( assertion ) { if (!(assertion)) { ACE_Stack_Trace st; sLog->outError( "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n", __FILE__, __LINE__, __FUNCTION__, #assertion, st.c_str()); assert( #assertion &&0 ); ((void(*)())NULL)();} }
#define WPError( assertion, errmsg ) if ( ! (assertion) ) { sLog->outError( "%\n%s:%i in %s ERROR:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg ); assert( false ); }
#define WPWarning( assertion, errmsg ) if ( ! (assertion) ) { sLog->outError( "\n%s:%i in %s WARNING:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg ); }
-#define WPFatal( assertion, errmsg ) if ( ! (assertion) ) { sLog->outError( "\n%s:%i in %s FATAL ERROR:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg ); assert( #assertion &&0 ); abort(); }
+#define WPFatal( assertion, errmsg ) if ( ! (assertion) ) { sLog->outError( "\n%s:%i in %s FATAL ERROR:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg ); ACE_OS::sleep(10); assert( #assertion &&0 ); abort(); }
#define ASSERT WPAssert
#endif
diff --git a/src/server/shared/Define.h b/src/server/shared/Define.h
index 42663fb6bd4..bb3bab75e87 100755
--- a/src/server/shared/Define.h
+++ b/src/server/shared/Define.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/FactoryHolder.h b/src/server/shared/Dynamic/FactoryHolder.h
index 4184eec119e..830e6d8b67d 100755
--- a/src/server/shared/Dynamic/FactoryHolder.h
+++ b/src/server/shared/Dynamic/FactoryHolder.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/LinkedList.h b/src/server/shared/Dynamic/LinkedList.h
index 19a2bb1c8cf..29cbeb2e66c 100755
--- a/src/server/shared/Dynamic/LinkedList.h
+++ b/src/server/shared/Dynamic/LinkedList.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/LinkedReference/RefManager.h b/src/server/shared/Dynamic/LinkedReference/RefManager.h
index ab56de9bc24..1c6e6956dbd 100755
--- a/src/server/shared/Dynamic/LinkedReference/RefManager.h
+++ b/src/server/shared/Dynamic/LinkedReference/RefManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h
index fd5ce8fc25b..d4c607470cc 100755
--- a/src/server/shared/Dynamic/LinkedReference/Reference.h
+++ b/src/server/shared/Dynamic/LinkedReference/Reference.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h
index db5e28eff8f..ca481671796 100755
--- a/src/server/shared/Dynamic/ObjectRegistry.h
+++ b/src/server/shared/Dynamic/ObjectRegistry.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/TypeContainer.h b/src/server/shared/Dynamic/TypeContainer.h
index 0fb3eb25347..67789d8ff42 100755
--- a/src/server/shared/Dynamic/TypeContainer.h
+++ b/src/server/shared/Dynamic/TypeContainer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -108,11 +108,11 @@ class TypeMapContainer
}
/// Removes the object from the container, and returns the removed object
- template<class SPECIFIC_TYPE> bool remove(SPECIFIC_TYPE* obj)
- {
- SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj);
- return (t != NULL);
- }
+ //template<class SPECIFIC_TYPE> bool remove(SPECIFIC_TYPE* obj)
+ //{
+ // SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj);
+ // return (t != NULL);
+ //}
ContainerMapList<OBJECT_TYPES> & GetElements(void) { return i_elements; }
const ContainerMapList<OBJECT_TYPES> & GetElements(void) const { return i_elements;}
diff --git a/src/server/shared/Dynamic/TypeContainerFunctions.h b/src/server/shared/Dynamic/TypeContainerFunctions.h
index 981cd82197f..19ebfb3adfc 100755
--- a/src/server/shared/Dynamic/TypeContainerFunctions.h
+++ b/src/server/shared/Dynamic/TypeContainerFunctions.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -62,7 +62,7 @@ namespace Trinity
template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Insert(ContainerMapList<SPECIFIC_TYPE> &elements, SPECIFIC_TYPE *obj)
{
//elements._element[hdl] = obj;
- obj->GetGridRef().link(&elements._element, obj);
+ obj->AddToGrid(elements._element);
return obj;
};
@@ -84,31 +84,30 @@ namespace Trinity
return (t != NULL ? t : Insert(elements._TailElements, obj));
}
- // non-const remove method
- template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<SPECIFIC_TYPE> & /*elements*/, SPECIFIC_TYPE *obj)
- {
- obj->GetGridRef().unlink();
- return obj;
- }
-
- template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
- {
- return NULL;
- }
-
- // this is a missed
- template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Remove(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
- {
- return NULL; // a missed
- }
-
- template<class SPECIFIC_TYPE, class T, class H> SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> > &elements, SPECIFIC_TYPE *obj)
- {
- // The head element is bad
- SPECIFIC_TYPE* t = Remove(elements._elements, obj);
- return ( t != NULL ? t : Remove(elements._TailElements, obj) );
- }
-
+ //// non-const remove method
+ //template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<SPECIFIC_TYPE> & /*elements*/, SPECIFIC_TYPE *obj)
+ //{
+ // obj->GetGridRef().unlink();
+ // return obj;
+ //}
+
+ //template<class SPECIFIC_TYPE> SPECIFIC_TYPE* Remove(ContainerMapList<TypeNull> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
+ //{
+ // return NULL;
+ //}
+
+ //// this is a missed
+ //template<class SPECIFIC_TYPE, class T> SPECIFIC_TYPE* Remove(ContainerMapList<T> &/*elements*/, SPECIFIC_TYPE * /*obj*/)
+ //{
+ // return NULL; // a missed
+ //}
+
+ //template<class SPECIFIC_TYPE, class T, class H> SPECIFIC_TYPE* Remove(ContainerMapList<TypeList<H, T> > &elements, SPECIFIC_TYPE *obj)
+ //{
+ // // The head element is bad
+ // SPECIFIC_TYPE* t = Remove(elements._elements, obj);
+ // return ( t != NULL ? t : Remove(elements._TailElements, obj) );
+ //}
}
#endif
diff --git a/src/server/shared/Dynamic/TypeContainerFunctionsPtr.h b/src/server/shared/Dynamic/TypeContainerFunctionsPtr.h
index 7b03f8503b5..2c065d96d4a 100755
--- a/src/server/shared/Dynamic/TypeContainerFunctionsPtr.h
+++ b/src/server/shared/Dynamic/TypeContainerFunctionsPtr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/TypeContainerVisitor.h b/src/server/shared/Dynamic/TypeContainerVisitor.h
index 66ab8443375..beddb31f343 100755
--- a/src/server/shared/Dynamic/TypeContainerVisitor.h
+++ b/src/server/shared/Dynamic/TypeContainerVisitor.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/TypeList.h b/src/server/shared/Dynamic/TypeList.h
index 588bfc65755..4967ab0fbc0 100755
--- a/src/server/shared/Dynamic/TypeList.h
+++ b/src/server/shared/Dynamic/TypeList.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Dynamic/UnorderedMap.h b/src/server/shared/Dynamic/UnorderedMap.h
index c698cc0a823..5e7b48f9b7b 100755
--- a/src/server/shared/Dynamic/UnorderedMap.h
+++ b/src/server/shared/Dynamic/UnorderedMap.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -71,4 +71,3 @@ namespace __gnu_cxx
using std::hash_map;
#endif
#endif
-
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index 56c02a8e77b..abdeace4d97 100755
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -139,7 +139,7 @@ void Log::Initialize()
{
bool m_gmlog_timestamp = ConfigMgr::GetBoolDefault("GmLogTimestamp", false);
- size_t dot_pos = m_gmlog_filename_format.find_last_of(".");
+ size_t dot_pos = m_gmlog_filename_format.find_last_of('.');
if (dot_pos!=m_gmlog_filename_format.npos)
{
if (m_gmlog_timestamp)
@@ -370,13 +370,17 @@ void Log::outDB(LogTypes type, const char * str)
if (!str || type >= MAX_LOG_TYPES)
return;
- std::string new_str(str);
- if (new_str.empty())
+ std::string logStr(str);
+ if (logStr.empty())
return;
- LoginDatabase.EscapeString(new_str);
- LoginDatabase.PExecute("INSERT INTO logs (time, realm, type, string) "
- "VALUES (" UI64FMTD ", %u, %u, '%s');", uint64(time(0)), realm, type, new_str.c_str());
+ PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_LOG);
+
+ stmt->setInt32(0, realm);
+ stmt->setInt32(1, type);
+ stmt->setString(2, logStr);
+
+ LoginDatabase.Execute(stmt);
}
void Log::outString(const char * str, ...)
@@ -556,10 +560,10 @@ void Log::outSQLDriver(const char* str, ...)
{
outTimestamp(sqlLogFile);
- va_list ap;
- va_start(ap, str);
- vfprintf(sqlLogFile, str, ap);
- va_end(ap);
+ va_list apSQL;
+ va_start(apSQL, str);
+ vfprintf(sqlLogFile, str, apSQL);
+ va_end(apSQL);
fprintf(sqlLogFile, "\n");
fflush(sqlLogFile);
@@ -646,11 +650,11 @@ void Log::outBasic(const char * str, ...)
if (logfile)
{
outTimestamp(logfile);
- va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(logfile, str, ap2);
fprintf(logfile, "\n" );
- va_end(ap);
+ va_end(ap2);
fflush(logfile);
}
}
@@ -690,10 +694,10 @@ void Log::outDetail(const char * str, ...)
if (logfile)
{
outTimestamp(logfile);
- va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
- va_end(ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(logfile, str, ap2);
+ va_end(ap2);
fprintf(logfile, "\n");
fflush(logfile);
@@ -720,10 +724,10 @@ void Log::outDebugInLine(const char * str, ...)
if (logfile)
{
- va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
- va_end(ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(logfile, str, ap2);
+ va_end(ap2);
}
}
}
@@ -742,10 +746,10 @@ void Log::outSQLDev(const char* str, ...)
if (sqlDevLogFile)
{
- va_list ap;
- va_start(ap, str);
- vfprintf(sqlDevLogFile, str, ap);
- va_end(ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(sqlDevLogFile, str, ap2);
+ va_end(ap2);
fprintf(sqlDevLogFile, "\n");
fflush(sqlDevLogFile);
@@ -790,10 +794,10 @@ void Log::outDebug(DebugLogFilters f, const char * str, ...)
if (logfile)
{
outTimestamp(logfile);
- va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
- va_end(ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(logfile, str, ap2);
+ va_end(ap2);
fprintf(logfile, "\n" );
fflush(logfile);
@@ -835,10 +839,10 @@ void Log::outStaticDebug(const char * str, ...)
if (logfile)
{
outTimestamp(logfile);
- va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
- va_end(ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(logfile, str, ap2);
+ va_end(ap2);
fprintf(logfile, "\n" );
fflush(logfile);
@@ -900,11 +904,11 @@ void Log::outCommand(uint32 account, const char * str, ...)
if (logfile)
{
outTimestamp(logfile);
- va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
+ va_list ap2;
+ va_start(ap2, str);
+ vfprintf(logfile, str, ap2);
fprintf(logfile, "\n" );
- va_end(ap);
+ va_end(ap2);
fflush(logfile);
}
}
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h
index 5c23616ac5c..2381d91d98d 100755
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -102,8 +102,10 @@ const int Colors = int(WHITE)+1;
class Log
{
friend class ACE_Singleton<Log, ACE_Thread_Mutex>;
- Log();
- ~Log();
+
+ private:
+ Log();
+ ~Log();
public:
void Initialize();
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index 08318aa7a5b..6b99b79625d 100755
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Packets/WorldPacket.h b/src/server/shared/Packets/WorldPacket.h
index c27801a8d58..7ab95bc496d 100755
--- a/src/server/shared/Packets/WorldPacket.h
+++ b/src/server/shared/Packets/WorldPacket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/SystemConfig.h b/src/server/shared/SystemConfig.h
index 18acc739018..2431ebb7165 100755
--- a/src/server/shared/SystemConfig.h
+++ b/src/server/shared/SystemConfig.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h
index b179b215253..fd7a1130fb4 100755
--- a/src/server/shared/Threading/Callback.h
+++ b/src/server/shared/Threading/Callback.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -29,107 +29,178 @@ typedef ACE_Future<PreparedQueryResult> PreparedQueryResultFuture;
issued the request. <ParamType> is variable type of parameter that is used as parameter
for the callback function.
*/
-template <typename Result, typename ParamType>
+#define CALLBACK_STAGE_INVALID uint8(-1)
+
+template <typename Result, typename ParamType, bool chain = false>
class QueryCallback
{
public:
- QueryCallback() {}
+ QueryCallback() : _stage(chain ? 0 : CALLBACK_STAGE_INVALID) {}
+ //! The parameter of this function should be a resultset returned from either .AsyncQuery or .AsyncPQuery
void SetFutureResult(ACE_Future<Result> value)
{
- result = value;
+ _result = value;
}
ACE_Future<Result> GetFutureResult()
{
- return result;
+ return _result;
}
int IsReady()
{
- return result.ready();
+ return _result.ready();
}
void GetResult(Result& res)
{
- result.get(res);
+ _result.get(res);
}
void FreeResult()
{
- result.cancel();
+ _result.cancel();
}
void SetParam(ParamType value)
{
- param = value;
+ _param = value;
}
ParamType GetParam()
{
- return param;
+ return _param;
+ }
+
+ //! Resets the stage of the callback chain
+ void ResetStage()
+ {
+ if (!chain)
+ return;
+
+ _stage = 0;
+ }
+
+ //! Advances the callback chain to the next stage, so upper level code can act on its results accordingly
+ void NextStage()
+ {
+ if (!chain)
+ return;
+
+ ++_stage;
+ }
+
+ //! Returns the callback stage (or CALLBACK_STAGE_INVALID if invalid)
+ uint8 GetStage()
+ {
+ return _stage;
+ }
+
+ //! Resets all underlying variables (param, result and stage)
+ void Reset()
+ {
+ SetParam(NULL);
+ FreeResult();
+ ResetStage();
}
private:
- ACE_Future<Result> result;
- ParamType param;
+ ACE_Future<Result> _result;
+ ParamType _param;
+ uint8 _stage;
};
-template <typename Result, typename ParamType1, typename ParamType2>
+template <typename Result, typename ParamType1, typename ParamType2, bool chain = false>
class QueryCallback_2
{
public:
- QueryCallback_2() {}
+ QueryCallback_2() : _stage(chain ? 0 : CALLBACK_STAGE_INVALID) {}
+ //! The parameter of this function should be a resultset returned from either .AsyncQuery or .AsyncPQuery
void SetFutureResult(ACE_Future<Result> value)
{
- result = value;
+ _result = value;
}
ACE_Future<Result> GetFutureResult()
{
- return result;
+ return _result;
}
int IsReady()
{
- return result.ready();
+ return _result.ready();
}
void GetResult(Result& res)
{
- result.get(res);
+ _result.get(res);
}
void FreeResult()
{
- result.cancel();
+ _result.cancel();
}
void SetFirstParam(ParamType1 value)
{
- param_1 = value;
+ _param_1 = value;
}
void SetSecondParam(ParamType2 value)
{
- param_2 = value;
+ _param_2 = value;
}
ParamType1 GetFirstParam()
{
- return param_1;
+ return _param_1;
}
ParamType2 GetSecondParam()
{
- return param_2;
+ return _param_2;
+ }
+
+ //! Resets the stage of the callback chain
+ void ResetStage()
+ {
+ if (!chain)
+ return;
+
+ _stage = 0;
+ }
+
+ //! Advances the callback chain to the next stage, so upper level code can act on its results accordingly
+ void NextStage()
+ {
+ if (!chain)
+ return;
+
+ ++_stage;
+ }
+
+ //! Returns the callback stage (or CALLBACK_STAGE_INVALID if invalid)
+ uint8 GetStage()
+ {
+ return _stage;
+ }
+
+ //! Resets all underlying variables (param, result and stage)
+ void Reset()
+ {
+ SetFirstParam(NULL);
+ SetSecondParam(NULL);
+ FreeResult();
+ ResetStage();
}
private:
- ACE_Future<Result> result;
- ParamType1 param_1;
- ParamType2 param_2;
+ ACE_Future<Result> _result;
+ ParamType1 _param_1;
+ ParamType2 _param_2;
+ uint8 _stage;
};
#endif \ No newline at end of file
diff --git a/src/server/shared/Threading/LockedQueue.h b/src/server/shared/Threading/LockedQueue.h
index 92eab440684..7f78dc07db8 100755
--- a/src/server/shared/Threading/LockedQueue.h
+++ b/src/server/shared/Threading/LockedQueue.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -98,13 +98,16 @@ namespace ACE_Based
return true;
}
- //! Peeks at the top of the queue. Remember to unlock after use.
- T& peek()
+ //! Peeks at the top of the queue. Check if the queue is empty before calling! Remember to unlock after use if autoUnlock == false.
+ T& peek(bool autoUnlock = false)
{
lock();
T& result = _queue.front();
+ if (autoUnlock)
+ unlock();
+
return result;
}
diff --git a/src/server/shared/Threading/Threading.cpp b/src/server/shared/Threading/Threading.cpp
index 7e22f1afdae..f31db8fbdcd 100755
--- a/src/server/shared/Threading/Threading.cpp
+++ b/src/server/shared/Threading/Threading.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Threading/Threading.h b/src/server/shared/Threading/Threading.h
index 89550ec996f..8b10e223828 100755
--- a/src/server/shared/Threading/Threading.h
+++ b/src/server/shared/Threading/Threading.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/ByteConverter.h b/src/server/shared/Utilities/ByteConverter.h
index e202b822309..d0790acadd3 100755
--- a/src/server/shared/Utilities/ByteConverter.h
+++ b/src/server/shared/Utilities/ByteConverter.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/EventProcessor.cpp b/src/server/shared/Utilities/EventProcessor.cpp
index 56dcad2516b..b4f67471323 100755
--- a/src/server/shared/Utilities/EventProcessor.cpp
+++ b/src/server/shared/Utilities/EventProcessor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/EventProcessor.h b/src/server/shared/Utilities/EventProcessor.h
index 3edd531035b..149ca9a4098 100755
--- a/src/server/shared/Utilities/EventProcessor.h
+++ b/src/server/shared/Utilities/EventProcessor.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/ServiceWin32.cpp b/src/server/shared/Utilities/ServiceWin32.cpp
index cd623c62132..f2887a4d1bd 100755
--- a/src/server/shared/Utilities/ServiceWin32.cpp
+++ b/src/server/shared/Utilities/ServiceWin32.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/ServiceWin32.h b/src/server/shared/Utilities/ServiceWin32.h
index da65aebc5d2..f810a0e5624 100755
--- a/src/server/shared/Utilities/ServiceWin32.h
+++ b/src/server/shared/Utilities/ServiceWin32.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/SignalHandler.h b/src/server/shared/Utilities/SignalHandler.h
index 143cde71ceb..a478c1f58d9 100755
--- a/src/server/shared/Utilities/SignalHandler.h
+++ b/src/server/shared/Utilities/SignalHandler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/Timer.h b/src/server/shared/Utilities/Timer.h
index 9e9265ddc09..4dae8ac30d2 100755
--- a/src/server/shared/Utilities/Timer.h
+++ b/src/server/shared/Utilities/Timer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index 187258e41b3..6ae43bc6840 100755
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -17,7 +17,6 @@
*/
#include "Util.h"
-
#include "utf8.h"
#ifdef USE_SFMT_FOR_RNG
#include "SFMT.h"
@@ -31,17 +30,22 @@
typedef ACE_TSS<SFMTRand> SFMTRandTSS;
static SFMTRandTSS sfmtRand;
-int32 irand (int32 min, int32 max)
+int32 irand(int32 min, int32 max)
{
return int32(sfmtRand->IRandom(min, max));
}
-uint32 urand (uint32 min, uint32 max)
+uint32 urand(uint32 min, uint32 max)
{
return sfmtRand->URandom(min, max);
}
-int32 rand32 ()
+float frand(float min, float max)
+{
+ return float(sfmtRand->Random() * (max - min) + min);
+}
+
+int32 rand32()
{
return int32(sfmtRand->BRandom());
}
@@ -51,27 +55,33 @@ double rand_norm(void)
return sfmtRand->Random();
}
-double rand_chance (void)
+double rand_chance(void)
{
return sfmtRand->Random() * 100.0;
}
+
#else
typedef ACE_TSS<MTRand> MTRandTSS;
static MTRandTSS mtRand;
int32 irand(int32 min, int32 max)
{
- return int32(mtRand->randInt (max - min)) + min;
+ return int32(mtRand->randInt(max - min)) + min;
}
uint32 urand(uint32 min, uint32 max)
{
- return mtRand->randInt (max - min) + min;
+ return mtRand->randInt(max - min) + min;
+}
+
+float frand(float min, float max)
+{
+ return float(mtRand->randExc(max - min) + min);
}
int32 rand32()
{
- return mtRand->randInt ();
+ return mtRand->randInt();
}
double rand_norm(void)
@@ -162,13 +172,13 @@ std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly)
std::ostringstream ss;
if (days)
- ss << days << (shortText ? "d " : " Day(s) ");
+ ss << days << (shortText ? "d" : " Day(s) ");
if (hours || hoursOnly)
- ss << hours << (shortText ? "h " : " Hour(s) ");
+ ss << hours << (shortText ? "h" : " Hour(s) ");
if (!hoursOnly)
{
if (minutes)
- ss << minutes << (shortText ? "m " : " Minute(s) ");
+ ss << minutes << (shortText ? "m" : " Minute(s) ");
if (secs || (!days && !hours && !minutes) )
ss << secs << (shortText ? "s" : " Second(s).");
}
diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h
index 8ded45a7bb6..684b26eea63 100755
--- a/src/server/shared/Utilities/Util.h
+++ b/src/server/shared/Utilities/Util.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -64,6 +64,9 @@ inline uint32 secsToTimeBitFields(time_t secs)
/* Return a random number in the range 0 .. RAND32_MAX. */
int32 rand32();
+ /* Return a random number in the range min..max */
+ float frand(float min, float max);
+
/* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
* A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
* With an FPU, there is usually no difference in performance between float and double. */
diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt
index cdd9b04c234..60adce41326 100644
--- a/src/server/worldserver/CMakeLists.txt
+++ b/src/server/worldserver/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+# Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp
index cf5ad79f878..8e04a9c2f34 100755
--- a/src/server/worldserver/CommandLine/CliRunnable.cpp
+++ b/src/server/worldserver/CommandLine/CliRunnable.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -104,7 +104,7 @@ void utf8print(void* /*arg*/, const char* str)
printf(temp_buf);
#else
{
- printf(str);
+ printf("%s", str);
fflush(stdout);
}
#endif
@@ -115,6 +115,7 @@ void commandFinished(void*, bool /*success*/)
printf("TC> ");
fflush(stdout);
}
+
/**
* Collects all GUIDs (and related info) from deleted characters which are still in the database.
*
@@ -291,8 +292,13 @@ void ChatHandler::HandleCharacterDeletedRestoreHelper(DeletedInfo const& delInfo
return;
}
- CharacterDatabase.PExecute("UPDATE characters SET name='%s', account='%u', deleteDate=NULL, deleteInfos_Name=NULL, deleteInfos_Account=NULL WHERE deleteDate IS NOT NULL AND guid = %u",
- delInfo.name.c_str(), delInfo.accountId, delInfo.lowguid);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_RESTORE_DELETE_INFO);
+
+ stmt->setString(0, delInfo.name);
+ stmt->setUInt32(1, delInfo.accountId);
+ stmt->setUInt32(2, delInfo.lowguid);
+
+ CharacterDatabase.Execute(stmt);
}
/**
@@ -562,10 +568,11 @@ void CliRunnable::run()
{
///- Display the list of available CLI functions then beep
//sLog->outString("");
- #if PLATFORM != PLATFORM_WINDOWS
+#if PLATFORM != PLATFORM_WINDOWS
rl_attempted_completion_function = cli_completion;
rl_event_hook = cli_hook_func;
- #endif
+#endif
+
if (ConfigMgr::GetBoolDefault("BeepAtStart", true))
printf("\a"); // \a = Alert
@@ -580,49 +587,49 @@ void CliRunnable::run()
char *command_str ; // = fgets(commandbuf, sizeof(commandbuf), stdin);
- #if PLATFORM == PLATFORM_WINDOWS
+#if PLATFORM == PLATFORM_WINDOWS
char commandbuf[256];
command_str = fgets(commandbuf, sizeof(commandbuf), stdin);
- #else
+#else
command_str = readline("TC>");
rl_bind_key('\t', rl_complete);
- #endif
+#endif
+
if (command_str != NULL)
{
- for (int x=0; command_str[x]; x++)
- if (command_str[x]=='\r'||command_str[x]=='\n')
+ for (int x=0; command_str[x]; ++x)
+ if (command_str[x] == '\r' || command_str[x] == '\n')
{
- command_str[x]=0;
+ command_str[x] = 0;
break;
}
if (!*command_str)
{
- #if PLATFORM == PLATFORM_WINDOWS
+#if PLATFORM == PLATFORM_WINDOWS
printf("TC>");
- #endif
+#endif
continue;
}
std::string command;
if (!consoleToUtf8(command_str, command)) // convert from console encoding to utf8
{
- #if PLATFORM == PLATFORM_WINDOWS
+#if PLATFORM == PLATFORM_WINDOWS
printf("TC>");
- #endif
+#endif
continue;
}
+
fflush(stdout);
sWorld->QueueCliCommand(new CliCommandHolder(NULL, command.c_str(), &utf8print, &commandFinished));
- #if PLATFORM != PLATFORM_WINDOWS
+#if PLATFORM != PLATFORM_WINDOWS
add_history(command.c_str());
- #endif
-
+#endif
}
else if (feof(stdin))
{
World::StopNow(SHUTDOWN_EXIT_CODE);
}
-
}
}
diff --git a/src/server/worldserver/CommandLine/CliRunnable.h b/src/server/worldserver/CommandLine/CliRunnable.h
index 416dc8e9008..af5691367b3 100755
--- a/src/server/worldserver/CommandLine/CliRunnable.h
+++ b/src/server/worldserver/CommandLine/CliRunnable.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 1ce247d9249..23f925dedef 100755
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp
index 5260140fef0..d84cfc1a4a4 100755
--- a/src/server/worldserver/Master.cpp
+++ b/src/server/worldserver/Master.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -457,12 +457,11 @@ bool Master::_StartDB()
clearOnlineAccounts();
///- Insert version info into DB
- WorldDatabase.PExecute("UPDATE version SET core_version = '%s', core_revision = '%s'", _FULLVERSION, _HASH);
+ WorldDatabase.PExecute("UPDATE version SET core_version = '%s', core_revision = '%s'", _FULLVERSION, _HASH); // One-time query
sWorld->LoadDBVersion();
sLog->outString("Using World DB: %s", sWorld->GetDBVersion());
- sLog->outString("Using creature EventAI: %s", sWorld->GetCreatureEventAIVersion());
return true;
}
@@ -487,5 +486,5 @@ void Master::clearOnlineAccounts()
CharacterDatabase.DirectExecute("UPDATE characters SET online = 0 WHERE online <> 0");
// Battleground instance ids reset at server restart
- CharacterDatabase.DirectExecute(CharacterDatabase.GetPreparedStatement(CHAR_RESET_PLAYERS_BGDATA));
+ CharacterDatabase.DirectExecute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYERS_BGDATA));
}
diff --git a/src/server/worldserver/Master.h b/src/server/worldserver/Master.h
index 76259199d68..17c230ef7c7 100755
--- a/src/server/worldserver/Master.h
+++ b/src/server/worldserver/Master.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/worldserver/RemoteAccess/RARunnable.cpp b/src/server/worldserver/RemoteAccess/RARunnable.cpp
index d7cee88b994..3f5d7bde736 100644
--- a/src/server/worldserver/RemoteAccess/RARunnable.cpp
+++ b/src/server/worldserver/RemoteAccess/RARunnable.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -33,22 +33,17 @@
#include "RASocket.h"
-RARunnable::RARunnable() : m_Reactor(NULL)
+RARunnable::RARunnable()
{
- ACE_Reactor_Impl* imp = 0;
+ ACE_Reactor_Impl* imp = NULL;
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
-
imp = new ACE_Dev_Poll_Reactor();
-
imp->max_notify_iterations (128);
imp->restart (1);
-
#else
-
imp = new ACE_TP_Reactor();
imp->max_notify_iterations (128);
-
#endif
m_Reactor = new ACE_Reactor (imp, 1);
@@ -68,7 +63,6 @@ void RARunnable::run()
uint16 raport = ConfigMgr::GetIntDefault("Ra.Port", 3443);
std::string stringip = ConfigMgr::GetStringDefault("Ra.IP", "0.0.0.0");
-
ACE_INET_Addr listen_addr(raport, stringip.c_str());
if (acceptor.open(listen_addr, m_Reactor) == -1)
@@ -84,7 +78,6 @@ void RARunnable::run()
// don't be too smart to move this outside the loop
// the run_reactor_event_loop will modify interval
ACE_Time_Value interval(0, 100000);
-
if (m_Reactor->run_reactor_event_loop(interval) == -1)
break;
}
diff --git a/src/server/worldserver/RemoteAccess/RARunnable.h b/src/server/worldserver/RemoteAccess/RARunnable.h
index 76807e5797c..9b3e93cc5fa 100644
--- a/src/server/worldserver/RemoteAccess/RARunnable.h
+++ b/src/server/worldserver/RemoteAccess/RARunnable.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/worldserver/RemoteAccess/RASocket.cpp b/src/server/worldserver/RemoteAccess/RASocket.cpp
index 71d4d1df035..e5637d282c6 100755
--- a/src/server/worldserver/RemoteAccess/RASocket.cpp
+++ b/src/server/worldserver/RemoteAccess/RASocket.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
@@ -286,7 +286,7 @@ int RASocket::subnegotiate()
if (n >= 1024)
{
- sLog->outRemote("RASocket::subnegotiate: allocated buffer 1024 bytes was too small for negotiation packet, size: %u", n);
+ sLog->outRemote("RASocket::subnegotiate: allocated buffer 1024 bytes was too small for negotiation packet, size: %u", uint32(n));
return -1;
}
diff --git a/src/server/worldserver/RemoteAccess/RASocket.h b/src/server/worldserver/RemoteAccess/RASocket.h
index 0c626d5840e..1c9b1ac24b5 100755
--- a/src/server/worldserver/RemoteAccess/RASocket.h
+++ b/src/server/worldserver/RemoteAccess/RASocket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/worldserver/TCSoap/TCSoap.cpp b/src/server/worldserver/TCSoap/TCSoap.cpp
index fa7c34cffbf..8b7d8c19071 100755
--- a/src/server/worldserver/TCSoap/TCSoap.cpp
+++ b/src/server/worldserver/TCSoap/TCSoap.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/worldserver/TCSoap/TCSoap.h b/src/server/worldserver/TCSoap/TCSoap.h
index 37ed841086d..285adaaaf4b 100755
--- a/src/server/worldserver/TCSoap/TCSoap.h
+++ b/src/server/worldserver/TCSoap/TCSoap.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
diff --git a/src/server/worldserver/WorldThread/WorldRunnable.cpp b/src/server/worldserver/WorldThread/WorldRunnable.cpp
index c7e4891747d..8ea54ca599e 100755
--- a/src/server/worldserver/WorldThread/WorldRunnable.cpp
+++ b/src/server/worldserver/WorldThread/WorldRunnable.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/worldserver/WorldThread/WorldRunnable.h b/src/server/worldserver/WorldThread/WorldRunnable.h
index 03805e67541..31ae51f064d 100755
--- a/src/server/worldserver/WorldThread/WorldRunnable.h
+++ b/src/server/worldserver/WorldThread/WorldRunnable.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index a8c0d91b2e6..1e37f50aa63 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1744,7 +1744,8 @@ Channel.RestrictedLfg = 1
#
# Channel.SilentlyGMJoin
-# Description: Silently join GM characters to channels
+# Description: Silently join GM characters to channels. If set to 1, channel kick and ban
+# commands issued by a GM will not be broadcasted.
# Default: 0 - (Disabled, Join with announcement)
# 1 - (Enabled, Join without announcement)
diff --git a/src/server/worldserver/worldserver.rc b/src/server/worldserver/worldserver.rc
index 7712a50cffb..2f778e599a1 100755
--- a/src/server/worldserver/worldserver.rc
+++ b/src/server/worldserver/worldserver.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it