aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--README.md2
-rw-r--r--cmake/genrev.cmake16
-rw-r--r--cmake/macros/ConfigureBoost.cmake27
-rw-r--r--cmake/macros/FindMySQL.cmake67
-rw-r--r--cmake/macros/FindOpenSSL.cmake2
-rw-r--r--dep/CMakeLists.txt1
-rw-r--r--dep/PackageList.txt8
-rw-r--r--dep/cppformat/CMakeLists.txt35
-rw-r--r--dep/cppformat/ChangeLog.rst335
-rw-r--r--dep/cppformat/LICENSE22
-rw-r--r--dep/cppformat/format.cc1224
-rw-r--r--dep/cppformat/format.h2680
-rw-r--r--dep/cppformat/posix.cc252
-rw-r--r--dep/cppformat/posix.h344
-rw-r--r--dep/process/License.txt23
-rw-r--r--dep/process/Readme.txt6
-rw-r--r--dep/process/boost/process.hpp22
-rw-r--r--dep/process/boost/process/all.hpp30
-rw-r--r--dep/process/boost/process/child.hpp74
-rw-r--r--dep/process/boost/process/config.hpp82
-rw-r--r--dep/process/boost/process/create_pipe.hpp48
-rw-r--r--dep/process/boost/process/execute.hpp38
-rw-r--r--dep/process/boost/process/executor.hpp176
-rw-r--r--dep/process/boost/process/initializers.hpp497
-rw-r--r--dep/process/boost/process/mitigate.hpp104
-rw-r--r--dep/process/boost/process/pipe.hpp64
-rw-r--r--dep/process/boost/process/posix/child.hpp26
-rw-r--r--dep/process/boost/process/posix/create_pipe.hpp40
-rw-r--r--dep/process/boost/process/posix/execute.hpp82
-rw-r--r--dep/process/boost/process/posix/executor.hpp120
-rw-r--r--dep/process/boost/process/posix/initializers.hpp39
-rw-r--r--dep/process/boost/process/posix/initializers/bind_fd.hpp43
-rw-r--r--dep/process/boost/process/posix/initializers/bind_stderr.hpp37
-rw-r--r--dep/process/boost/process/posix/initializers/bind_stdin.hpp37
-rw-r--r--dep/process/boost/process/posix/initializers/bind_stdout.hpp37
-rw-r--r--dep/process/boost/process/posix/initializers/close_fd.hpp35
-rw-r--r--dep/process/boost/process/posix/initializers/close_fds.hpp43
-rw-r--r--dep/process/boost/process/posix/initializers/close_fds_if.hpp80
-rw-r--r--dep/process/boost/process/posix/initializers/close_stderr.hpp30
-rw-r--r--dep/process/boost/process/posix/initializers/close_stdin.hpp30
-rw-r--r--dep/process/boost/process/posix/initializers/close_stdout.hpp30
-rw-r--r--dep/process/boost/process/posix/initializers/hide_console.hpp24
-rw-r--r--dep/process/boost/process/posix/initializers/inherit_env.hpp36
-rw-r--r--dep/process/boost/process/posix/initializers/initializer_base.hpp35
-rw-r--r--dep/process/boost/process/posix/initializers/notify_io_service.hpp55
-rw-r--r--dep/process/boost/process/posix/initializers/on_exec_error.hpp42
-rw-r--r--dep/process/boost/process/posix/initializers/on_exec_setup.hpp42
-rw-r--r--dep/process/boost/process/posix/initializers/on_fork_error.hpp42
-rw-r--r--dep/process/boost/process/posix/initializers/on_fork_setup.hpp42
-rw-r--r--dep/process/boost/process/posix/initializers/on_fork_success.hpp42
-rw-r--r--dep/process/boost/process/posix/initializers/run_exe.hpp59
-rw-r--r--dep/process/boost/process/posix/initializers/set_args.hpp57
-rw-r--r--dep/process/boost/process/posix/initializers/set_cmd_line.hpp54
-rw-r--r--dep/process/boost/process/posix/initializers/set_env.hpp54
-rw-r--r--dep/process/boost/process/posix/initializers/set_on_error.hpp95
-rw-r--r--dep/process/boost/process/posix/initializers/start_in_dir.hpp36
-rw-r--r--dep/process/boost/process/posix/initializers/throw_on_error.hpp90
-rw-r--r--dep/process/boost/process/posix/pipe.hpp30
-rw-r--r--dep/process/boost/process/posix/search_path.hpp53
-rw-r--r--dep/process/boost/process/posix/shell_path.hpp32
-rw-r--r--dep/process/boost/process/posix/terminate.hpp37
-rw-r--r--dep/process/boost/process/posix/wait_for_exit.hpp52
-rw-r--r--dep/process/boost/process/search_path.hpp51
-rw-r--r--dep/process/boost/process/shell_path.hpp46
-rw-r--r--dep/process/boost/process/terminate.hpp52
-rw-r--r--dep/process/boost/process/wait_for_exit.hpp58
-rw-r--r--dep/process/boost/process/windows/child.hpp55
-rw-r--r--dep/process/boost/process/windows/create_pipe.hpp40
-rw-r--r--dep/process/boost/process/windows/execute.hpp82
-rw-r--r--dep/process/boost/process/windows/executor.hpp130
-rw-r--r--dep/process/boost/process/windows/initializers.hpp33
-rw-r--r--dep/process/boost/process/windows/initializers/bind_stderr.hpp39
-rw-r--r--dep/process/boost/process/windows/initializers/bind_stdin.hpp39
-rw-r--r--dep/process/boost/process/windows/initializers/bind_stdout.hpp39
-rw-r--r--dep/process/boost/process/windows/initializers/close_stderr.hpp31
-rw-r--r--dep/process/boost/process/windows/initializers/close_stdin.hpp31
-rw-r--r--dep/process/boost/process/windows/initializers/close_stdout.hpp31
-rw-r--r--dep/process/boost/process/windows/initializers/hide_console.hpp31
-rw-r--r--dep/process/boost/process/windows/initializers/inherit_env.hpp24
-rw-r--r--dep/process/boost/process/windows/initializers/initializer_base.hpp29
-rw-r--r--dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp42
-rw-r--r--dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp42
-rw-r--r--dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp42
-rw-r--r--dep/process/boost/process/windows/initializers/run_exe.hpp69
-rw-r--r--dep/process/boost/process/windows/initializers/set_args.hpp87
-rw-r--r--dep/process/boost/process/windows/initializers/set_cmd_line.hpp68
-rw-r--r--dep/process/boost/process/windows/initializers/set_env.hpp88
-rw-r--r--dep/process/boost/process/windows/initializers/set_on_error.hpp36
-rw-r--r--dep/process/boost/process/windows/initializers/show_window.hpp36
-rw-r--r--dep/process/boost/process/windows/initializers/start_in_dir.hpp69
-rw-r--r--dep/process/boost/process/windows/initializers/throw_on_error.hpp30
-rw-r--r--dep/process/boost/process/windows/pipe.hpp32
-rw-r--r--dep/process/boost/process/windows/search_path.hpp104
-rw-r--r--dep/process/boost/process/windows/shell_path.hpp50
-rw-r--r--dep/process/boost/process/windows/terminate.hpp38
-rw-r--r--dep/process/boost/process/windows/wait_for_exit.hpp49
-rw-r--r--revision.h.in.cmake3
-rw-r--r--sql/base/auth_database.sql63
-rw-r--r--sql/base/characters_database.sql59
-rw-r--r--sql/base/dev/world_database.sql35
-rw-r--r--sql/custom/auth/.gitignore1
-rw-r--r--sql/custom/characters/.gitignore1
-rw-r--r--sql/custom/world/.gitignore1
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_00_auth.sql (renamed from sql/updates/auth/2014_11_10_00_auth.sql)0
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_01_auth.sql (renamed from sql/updates/auth/2014_11_10_01_auth.sql)0
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2014_12_10_00_auth.sql (renamed from sql/updates/auth/2014_12_10_00_auth.sql)0
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2014_12_21_00_auth.sql (renamed from sql/updates/auth/2014_12_21_00_auth.sql)0
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql36
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql6
-rw-r--r--sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql8
-rw-r--r--sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql23
-rw-r--r--sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql6
-rw-r--r--sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_00_world.sql (renamed from sql/updates/world/2014_10_19_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_01_world.sql (renamed from sql/updates/world/2014_10_19_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_20_00_world.sql (renamed from sql/updates/world/2014_10_20_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_21_00_world.sql (renamed from sql/updates/world/2014_10_21_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_22_00_world.sql (renamed from sql/updates/world/2014_10_22_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_00_world.sql (renamed from sql/updates/world/2014_10_23_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_01_world.sql (renamed from sql/updates/world/2014_10_23_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_00_world.sql (renamed from sql/updates/world/2014_10_24_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_01_world.sql (renamed from sql/updates/world/2014_10_24_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_26_00_world.sql (renamed from sql/updates/world/2014_10_26_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_00_world.sql (renamed from sql/updates/world/2014_10_27_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_01_world_335.sql (renamed from sql/updates/world/2014_10_27_01_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_02_world.sql (renamed from sql/updates/world/2014_10_27_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_28_00_world.sql (renamed from sql/updates/world/2014_10_28_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_29_00_world.sql (renamed from sql/updates/world/2014_10_29_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_00_world.sql (renamed from sql/updates/world/2014_10_30_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_02_world.sql (renamed from sql/updates/world/2014_10_30_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_00_world.sql (renamed from sql/updates/world/2014_11_01_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_01_world.sql (renamed from sql/updates/world/2014_11_01_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_02_world.sql (renamed from sql/updates/world/2014_11_01_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_03_world.sql (renamed from sql/updates/world/2014_11_01_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_00_world.sql (renamed from sql/updates/world/2014_11_02_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_01_world.sql (renamed from sql/updates/world/2014_11_02_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_04_00_world.sql (renamed from sql/updates/world/2014_11_04_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_05_00_world.sql (renamed from sql/updates/world/2014_11_05_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_00_world.sql (renamed from sql/updates/world/2014_11_07_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_01_world.sql (renamed from sql/updates/world/2014_11_07_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_02_world.sql (renamed from sql/updates/world/2014_11_07_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_03_world.sql (renamed from sql/updates/world/2014_11_07_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_08_00_world.sql (renamed from sql/updates/world/2014_11_08_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_09_00_world.sql (renamed from sql/updates/world/2014_11_09_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_00_world.sql (renamed from sql/updates/world/2014_11_10_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_01_world.sql (renamed from sql/updates/world/2014_11_10_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_02_world.sql (renamed from sql/updates/world/2014_11_10_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_03_world.sql (renamed from sql/updates/world/2014_11_10_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_04_world.sql (renamed from sql/updates/world/2014_11_10_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_05_world.sql (renamed from sql/updates/world/2014_11_10_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_00_world.sql (renamed from sql/updates/world/2014_11_11_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_01_world.sql (renamed from sql/updates/world/2014_11_11_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_13_00_world.sql (renamed from sql/updates/world/2014_11_13_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_16_00_world.sql (renamed from sql/updates/world/2014_11_16_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_17_00_world.sql (renamed from sql/updates/world/2014_11_17_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_00_world.sql (renamed from sql/updates/world/2014_11_19_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_01_world.sql (renamed from sql/updates/world/2014_11_19_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_02_world.sql (renamed from sql/updates/world/2014_11_19_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_00_world.sql (renamed from sql/updates/world/2014_11_20_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_01_world.sql (renamed from sql/updates/world/2014_11_20_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_02_world.sql (renamed from sql/updates/world/2014_11_20_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_03_world.sql (renamed from sql/updates/world/2014_11_20_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_04_world.sql (renamed from sql/updates/world/2014_11_20_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_05_world.sql (renamed from sql/updates/world/2014_11_20_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_00_world.sql (renamed from sql/updates/world/2014_11_21_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_01_world.sql (renamed from sql/updates/world/2014_11_21_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_02_world.sql (renamed from sql/updates/world/2014_11_21_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_22_00_world.sql (renamed from sql/updates/world/2014_11_22_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_00_world.sql (renamed from sql/updates/world/2014_11_23_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_01_world.sql (renamed from sql/updates/world/2014_11_23_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_02_world.sql (renamed from sql/updates/world/2014_11_23_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_03_world.sql (renamed from sql/updates/world/2014_11_23_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_04_world.sql (renamed from sql/updates/world/2014_11_23_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_00_world.sql (renamed from sql/updates/world/2014_11_24_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_01_world.sql (renamed from sql/updates/world/2014_11_24_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_02_world.sql (renamed from sql/updates/world/2014_11_24_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_03_world.sql (renamed from sql/updates/world/2014_11_24_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_04_world.sql (renamed from sql/updates/world/2014_11_24_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_00_world.sql (renamed from sql/updates/world/2014_11_25_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_01_world.sql (renamed from sql/updates/world/2014_11_25_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_26_00_world.sql (renamed from sql/updates/world/2014_11_26_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_00_world.sql (renamed from sql/updates/world/2014_11_27_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_01_world.sql (renamed from sql/updates/world/2014_11_27_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_00_world.sql (renamed from sql/updates/world/2014_11_28_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_01_world.sql (renamed from sql/updates/world/2014_11_28_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_11_29_00_world.sql (renamed from sql/updates/world/2014_11_29_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_02_00_world.sql (renamed from sql/updates/world/2014_12_02_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_03_00_world.sql (renamed from sql/updates/world/2014_12_03_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_04_00_world.sql (renamed from sql/updates/world/2014_12_04_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_00_world.sql (renamed from sql/updates/world/2014_12_05_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_01_world.sql (renamed from sql/updates/world/2014_12_05_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_00_world.sql (renamed from sql/updates/world/2014_12_09_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_01_world.sql (renamed from sql/updates/world/2014_12_09_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_02_world.sql (renamed from sql/updates/world/2014_12_09_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_03_world.sql (renamed from sql/updates/world/2014_12_09_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_04_world.sql (renamed from sql/updates/world/2014_12_09_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_00_world.sql (renamed from sql/updates/world/2014_12_11_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_01_world.sql (renamed from sql/updates/world/2014_12_11_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_00_world.sql (renamed from sql/updates/world/2014_12_12_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_01_world.sql (renamed from sql/updates/world/2014_12_12_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_13_00_world.sql (renamed from sql/updates/world/2014_12_13_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_00_world.sql (renamed from sql/updates/world/2014_12_14_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_01_world.sql (renamed from sql/updates/world/2014_12_14_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_02_world.sql (renamed from sql/updates/world/2014_12_14_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_15_00_world.sql (renamed from sql/updates/world/2014_12_15_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_16_00_world.sql (renamed from sql/updates/world/2014_12_16_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_17_00_world.sql (renamed from sql/updates/world/2014_12_17_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_18_00_world.sql (renamed from sql/updates/world/2014_12_18_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_21_00_world.sql (renamed from sql/updates/world/2014_12_21_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_22_00_world.sql (renamed from sql/updates/world/2014_12_22_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_00_world.sql (renamed from sql/updates/world/2014_12_26_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_01_world.sql (renamed from sql/updates/world/2014_12_26_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_00_world.sql (renamed from sql/updates/world/2014_12_27_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_01_world_335.sql (renamed from sql/updates/world/2014_12_27_01_world_335.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_02_world.sql (renamed from sql/updates/world/2014_12_27_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_03_world.sql (renamed from sql/updates/world/2014_12_27_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_04_world.sql (renamed from sql/updates/world/2014_12_27_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_05_world.sql (renamed from sql/updates/world/2014_12_27_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_06_world.sql (renamed from sql/updates/world/2014_12_27_06_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_07_world.sql (renamed from sql/updates/world/2014_12_27_07_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_08_world.sql (renamed from sql/updates/world/2014_12_27_08_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_09_world.sql (renamed from sql/updates/world/2014_12_27_09_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_10_world.sql (renamed from sql/updates/world/2014_12_27_10_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_11_world.sql (renamed from sql/updates/world/2014_12_27_11_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_12_world.sql (renamed from sql/updates/world/2014_12_27_12_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_00_world.sql (renamed from sql/updates/world/2014_12_28_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_01_world.sql (renamed from sql/updates/world/2014_12_28_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_02_world.sql (renamed from sql/updates/world/2014_12_28_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_03_world.sql (renamed from sql/updates/world/2014_12_28_03_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_04_world.sql (renamed from sql/updates/world/2014_12_28_04_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_05_world.sql (renamed from sql/updates/world/2014_12_28_05_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_00_world.sql (renamed from sql/updates/world/2014_12_29_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_01_world.sql (renamed from sql/updates/world/2014_12_29_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_02_world.sql (renamed from sql/updates/world/2014_12_29_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_00_world.sql (renamed from sql/updates/world/2014_12_30_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_01_world.sql (renamed from sql/updates/world/2014_12_30_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2014_12_31_00_world.sql (renamed from sql/updates/world/2014_12_31_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_01_00_world.sql (renamed from sql/updates/world/2015_01_01_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_07_00_world.sql (renamed from sql/updates/world/2015_01_07_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_08_00_world.sql (renamed from sql/updates/world/2015_01_08_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_00_world.sql (renamed from sql/updates/world/2015_01_09_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_01_world.sql (renamed from sql/updates/world/2015_01_09_01_world.sql)10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_00_world.sql (renamed from sql/updates/world/2015_01_11_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_01_world.sql (renamed from sql/updates/world/2015_01_11_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_00_world.sql (renamed from sql/updates/world/2015_01_12_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_01_world.sql (renamed from sql/updates/world/2015_01_12_01_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_02_world.sql (renamed from sql/updates/world/2015_01_12_02_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_16_00_world.sql (renamed from sql/updates/world/2015_01_16_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_17_00_world.sql (renamed from sql/updates/world/2015_01_17_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_18_00_world.sql (renamed from sql/updates/world/2015_01_18_00_world.sql)6
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_21_00_world.sql (renamed from sql/updates/world/2015_01_21_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_22_00_world.sql (renamed from sql/updates/world/2015_01_22_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_25_00_world.sql (renamed from sql/updates/world/2015_01_25_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_27_00_world.sql (renamed from sql/updates/world/2015_01_27_00_world.sql)0
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_30_00_world.sql32
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_01_31_00_335.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_02_00_world.sql16
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_05_00_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_00_world.sql27
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_01_world.sql40
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_02_world.sql33
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_03_world.sql62
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_04_world.sql32
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_05_world.sql45
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_06_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_07_world.sql6
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_08_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_09_world.sql11
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_10_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_11_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_12_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_13_world_335.sql372
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_00_world.sql14
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_00_world.sql10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_03_world.sql204
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_04_world.sql85
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_05_world.sql52
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_06_world.sql340
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_07_world.sql461
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_08_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_09_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_10_world.sql32
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_11_world.sql252
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_12_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_13_world.sql43
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_14_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_15_world.sql1
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_00_world.sql18
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_01_world.sql12
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_02_world.sql41
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_03_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_04_world.sql15
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_05_world.sql911
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_06_world.sql58
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_07_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_08_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_09_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_00_world.sql12
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_01_world.sql100
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_02_world.sql153
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_03_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_04_world.sql44
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_05_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_01_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_02_world.sql6
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_03_world.sql14
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_04_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_05_world.sql37
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_06_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_07_world.sql53
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_08_world.sql68
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_09_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_10_world.sql62
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_00_world.sql58
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_01_world.sql66
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_02_world.sql144
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_03_world.sql12
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_04_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_05_world.sql74
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_06_world.sql24
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_07_world.sql34
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_08_world.sql15
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_09_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_00_world.sql8
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_01_world.sql163
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_02_world.sql51
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_03_world.sql1
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_04_world.sql111
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_05_world.sql51
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_00_world.sql456
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_01_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_02_world.sql56
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_03_world.sql53
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_04_world.sql11
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_05_world.sql27
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_06_world.sql10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_07_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_08_world.sql27
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_09_world.sql10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_10_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_11_world.sql9
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_12_world.sql61
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_13_world.sql84
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_14_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_00_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_02_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_03_world.sql29
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_04_world.sql10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_05_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_06_world.sql405
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_00_world.sql136
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_01_world.sql35
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_03_world.sql12
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_04_world.sql142
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_05_world.sql1
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_00_world.sql54
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_01_world.sql11
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_02_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_03_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_19_00_world.sql427
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_00_world.sql10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_01_world.sql14
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_02_world.sql80
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_03_world.sql26
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_04_world.sql10
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_21_00_world.sql9
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_22_00_world.sql809
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_00_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_01_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_02_world.sql25
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_03_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_04_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_05_world.sql109
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_06_world.sql1
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_07_world.sql18
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_08_world.sql281
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_09_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_10_world.sql177
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_00_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_01_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_25_00_world.sql25
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql30
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql15
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql25
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql48
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql65
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql136
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql1
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql1
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql33
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql5
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql12
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql8
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql55
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql18
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql14
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql43
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql17
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql316
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql32
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql37
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql7
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql48
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql234
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql24
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql29
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql81
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql59
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql3
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql8
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql13
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql153
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql8
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql20
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql105
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql223
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql165
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql173
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql11
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql342
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql14
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql35
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql4
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql13
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql2
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql23
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql6
-rw-r--r--sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql339
-rw-r--r--sql/updates/world/2015_03_21_00_world.sql1
-rw-r--r--sql/updates/world/2015_03_21_01_world.sql60
-rw-r--r--sql/updates/world/2015_03_21_02_world.sql5
-rw-r--r--sql/updates/world/2015_03_22_00_world.sql243
-rw-r--r--sql/updates/world/2015_03_22_01_world.sql100
-rw-r--r--sql/updates/world/2015_03_22_02_world.sql3
-rw-r--r--sql/updates/world/2015_03_22_03_world.sql68
-rw-r--r--sql/updates/world/2015_03_22_04_world.sql88
-rw-r--r--sql/updates/world/2015_03_22_05_world.sql42
-rw-r--r--sql/updates/world/2015_03_22_06_world.sql62
-rw-r--r--sql/updates/world/2015_03_22_07_world.sql318
-rw-r--r--sql/updates/world/2015_03_23_00_world.sql5
-rw-r--r--sql/updates/world/2015_03_23_01_world.sql5
-rw-r--r--sql/updates/world/2015_03_23_02_world.sql2
-rw-r--r--sql/updates/world/2015_03_23_03_world.sql12
-rw-r--r--sql/updates/world/2015_03_23_04_world.sql15
-rw-r--r--sql/updates/world/2015_03_23_05_world.sql2
-rw-r--r--sql/updates/world/2015_03_23_06_world.sql22
-rw-r--r--sql/updates/world/2015_03_23_07_world.sql43
-rw-r--r--sql/updates/world/2015_03_23_08_world.sql37
-rw-r--r--sql/updates/world/2015_03_23_09_world.sql14
-rw-r--r--sql/updates/world/2015_03_23_10_world.sql11
-rw-r--r--sql/updates/world/2015_03_23_11_world.sql83
-rw-r--r--sql/updates/world/2015_03_23_12_world.sql20
-rw-r--r--sql/updates/world/2015_03_23_13_world.sql93
-rw-r--r--sql/updates/world/2015_03_24_00_world.sql2
-rw-r--r--sql/updates/world/2015_03_24_01_world.sql10
-rw-r--r--sql/updates/world/2015_03_24_02_world.sql6
-rw-r--r--sql/updates/world/2015_03_24_03_world.sql3
-rw-r--r--sql/updates/world/2015_03_24_04_world.sql2
-rw-r--r--sql/updates/world/2015_03_24_05_world.sql16
-rw-r--r--sql/updates/world/2015_03_25_00_world.sql2
-rw-r--r--sql/updates/world/2015_03_25_01_world.sql9
-rw-r--r--sql/updates/world/2015_03_25_02_world.sql13
-rw-r--r--sql/updates/world/2015_03_25_03_world.sql98
-rw-r--r--sql/updates/world/2015_03_25_04_world.sql18
-rw-r--r--sql/updates/world/2015_03_26_00_world.sql586
-rw-r--r--src/genrev/CMakeLists.txt4
-rw-r--r--src/server/authserver/CMakeLists.txt4
-rw-r--r--src/server/authserver/Main.cpp33
-rw-r--r--src/server/authserver/authserver.conf.dist84
-rw-r--r--src/server/collision/CMakeLists.txt1
-rw-r--r--src/server/collision/Management/MMapManager.cpp14
-rw-r--r--src/server/collision/Maps/MapTree.cpp5
-rw-r--r--src/server/collision/Maps/TileAssembler.cpp12
-rw-r--r--src/server/collision/Models/GameObjectModel.cpp6
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp6
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp5
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp4
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp1281
-rw-r--r--src/server/game/Achievements/AchievementMgr.h8
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp4
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBot.cpp20
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBot.h24
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp569
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h31
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp4
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp2
-rw-r--r--src/server/game/CMakeLists.txt2
-rw-r--r--src/server/game/Chat/Chat.cpp32
-rw-r--r--src/server/game/Chat/Chat.h22
-rw-r--r--src/server/game/Chat/ChatLink.cpp2
-rw-r--r--src/server/game/Combat/ThreatManager.cpp2
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp23
-rw-r--r--src/server/game/Conditions/ConditionMgr.h3
-rw-r--r--src/server/game/DungeonFinding/LFG.cpp3
-rw-r--r--src/server/game/DungeonFinding/LFG.h4
-rw-r--r--src/server/game/DungeonFinding/LFGGroupData.cpp12
-rw-r--r--src/server/game/DungeonFinding/LFGGroupData.h4
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp43
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h3
-rw-r--r--src/server/game/DungeonFinding/LFGQueue.cpp2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp39
-rw-r--r--src/server/game/Entities/Object/Object.h1
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp139
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp120
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp69
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.cpp2
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h2
-rw-r--r--src/server/game/Groups/Group.cpp2
-rw-r--r--src/server/game/Handlers/PetHandler.cpp22
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp8
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp2
-rw-r--r--src/server/game/Instances/InstanceScript.cpp6
-rw-r--r--src/server/game/Instances/InstanceScript.h8
-rw-r--r--src/server/game/Loot/LootMgr.cpp2
-rw-r--r--src/server/game/Maps/Map.cpp32
-rw-r--r--src/server/game/Miscellaneous/Language.h3
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Movement/MotionMaster.cpp39
-rw-r--r--src/server/game/Movement/MotionMaster.h1
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp4
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp2
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp2
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp8
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp3
-rw-r--r--src/server/game/Scripting/ScriptMgr.h2
-rw-r--r--src/server/game/Server/WorldSession.cpp18
-rw-r--r--src/server/game/Server/WorldSocket.cpp10
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp54
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp13
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.h4
-rw-r--r--src/server/game/Spells/Spell.cpp154
-rw-r--r--src/server/game/Spells/SpellEffects.cpp18
-rw-r--r--src/server/game/Spells/SpellInfo.cpp96
-rw-r--r--src/server/game/Spells/SpellInfo.h10
-rw-r--r--src/server/game/Spells/SpellMgr.cpp8
-rw-r--r--src/server/game/World/World.cpp10
-rw-r--r--src/server/scripts/CMakeLists.txt2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp6
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp26
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp81
-rw-r--r--src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_undercity.cpp242
-rw-r--r--src/server/scripts/Kalimdor/CMakeLists.txt1
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp124
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp9
-rw-r--r--src/server/scripts/Kalimdor/zone_felwood.cpp37
-rw-r--r--src/server/scripts/Kalimdor/zone_mulgore.cpp306
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp1
-rw-r--r--src/server/scripts/Northrend/CMakeLists.txt3
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp8
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp18
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp190
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp22
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h54
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp15
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp393
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h23
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp52
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp51
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp1
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp43
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp80
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp72
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp110
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/nexus.h23
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp243
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp21
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp53
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h1
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp9
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp1
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp49
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp39
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp92
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp146
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp7
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp5
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp38
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp31
-rw-r--r--src/server/shared/CMakeLists.txt6
-rw-r--r--src/server/shared/Cryptography/BigNumber.cpp7
-rw-r--r--src/server/shared/DataStores/DBCStore.h7
-rw-r--r--src/server/shared/Database/DatabaseLoader.cpp191
-rw-r--r--src/server/shared/Database/DatabaseLoader.h71
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h100
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.cpp4
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.h2
-rw-r--r--src/server/shared/Database/MySQLConnection.cpp20
-rw-r--r--src/server/shared/Database/MySQLConnection.h7
-rw-r--r--src/server/shared/Database/Transaction.cpp12
-rw-r--r--src/server/shared/Database/Transaction.h1
-rw-r--r--src/server/shared/Debugging/Errors.h6
-rw-r--r--src/server/shared/Debugging/WheatyExceptionReport.cpp14
-rw-r--r--src/server/shared/Debugging/WheatyExceptionReport.h2
-rw-r--r--src/server/shared/Logging/Appender.cpp34
-rw-r--r--src/server/shared/Logging/Appender.h15
-rw-r--r--src/server/shared/Logging/AppenderConsole.cpp10
-rw-r--r--src/server/shared/Logging/AppenderConsole.h2
-rw-r--r--src/server/shared/Logging/AppenderDB.cpp12
-rw-r--r--src/server/shared/Logging/AppenderDB.h2
-rw-r--r--src/server/shared/Logging/AppenderFile.cpp14
-rw-r--r--src/server/shared/Logging/AppenderFile.h2
-rw-r--r--src/server/shared/Logging/Log.cpp51
-rw-r--r--src/server/shared/Logging/Log.h69
-rw-r--r--src/server/shared/Logging/LogOperation.cpp8
-rw-r--r--src/server/shared/Logging/LogOperation.h10
-rw-r--r--src/server/shared/Logging/Logger.cpp4
-rw-r--r--src/server/shared/Logging/Logger.h2
-rw-r--r--src/server/shared/Networking/Socket.h4
-rw-r--r--src/server/shared/Networking/SocketMgr.h2
-rw-r--r--src/server/shared/Updater/DBUpdater.cpp381
-rw-r--r--src/server/shared/Updater/DBUpdater.h79
-rw-r--r--src/server/shared/Updater/UpdateFetcher.cpp401
-rw-r--r--src/server/shared/Updater/UpdateFetcher.h127
-rw-r--r--src/server/shared/Utilities/StringFormat.h34
-rw-r--r--src/server/worldserver/CMakeLists.txt4
-rw-r--r--src/server/worldserver/Main.cpp80
-rw-r--r--src/server/worldserver/RemoteAccess/RASession.h2
-rw-r--r--src/server/worldserver/worldserver.conf.dist148
656 files changed, 28294 insertions, 3119 deletions
diff --git a/.travis.yml b/.travis.yml
index e8ff00f425f..25bcf02815a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,7 @@ before_install:
- sudo apt-get -qq update
- sudo apt-get -qq install build-essential libtool gcc-4.8 g++-4.8 make cmake openssl
- sudo apt-get -qq install libssl-dev libmysqlclient15-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev
- - sudo apt-get -qq install libboost1.55-dev libboost-thread1.55-dev libboost-system1.55-dev libboost-program-options1.55-dev
+ - sudo apt-get -qq install libboost1.55-dev libboost-thread1.55-dev libboost-filesystem1.55-dev libboost-system1.55-dev libboost-program-options1.55-dev libboost-iostreams1.55-dev
install:
- mysql -uroot -e 'create database test_mysql;'
diff --git a/README.md b/README.md
index 263339fc9dd..d92b3848c94 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
[![Coverity Scan Build Status](https://scan.coverity.com/projects/435/badge.svg)](https://scan.coverity.com/projects/435)
[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=1310)](https://www.bountysource.com/trackers/1310-trinity-core?utm_source=1310&utm_medium=shield&utm_campaign=TRACKER_BADGE)
+[![Issue Stats](http://www.issuestats.com/github/TrinityCore/TrinityCore/badge/pr)](http://www.issuestats.com/github/TrinityCore/TrinityCore)
+[![Issue Stats](http://www.issuestats.com/github/TrinityCore/TrinityCore/badge/issue)](http://www.issuestats.com/github/TrinityCore/TrinityCore)
`6.x`: [![6.x Build Status](https://travis-ci.org/TrinityCore/TrinityCore.svg?branch=6.x)](https://travis-ci.org/TrinityCore/TrinityCore)
`4.3.4`: [![4.3.4 Build Status](https://travis-ci.org/TrinityCore/TrinityCore.svg?branch=4.3.4)](https://travis-ci.org/TrinityCore/TrinityCore)
`3.3.5`: [![3.3.5 Build Status](https://travis-ci.org/TrinityCore/TrinityCore.svg?branch=3.3.5)](https://travis-ci.org/TrinityCore/TrinityCore)
diff --git a/cmake/genrev.cmake b/cmake/genrev.cmake
index c34e9d75973..1f5f02ceeec 100644
--- a/cmake/genrev.cmake
+++ b/cmake/genrev.cmake
@@ -12,21 +12,19 @@
# This is done EACH compile so they can be alerted about the consequences.
if(NOT BUILDDIR)
- # Workaround for funny MSVC behaviour - this segment only run during compile
- set(NO_GIT ${WITHOUT_GIT})
- set(GIT_EXEC ${GIT_EXECUTABLE})
+ # Workaround for funny MSVC behaviour - this segment is only used when using cmake gui
set(BUILDDIR ${CMAKE_BINARY_DIR})
endif()
-if(NO_GIT)
+if(WITHOUT_GIT)
set(rev_date "1970-01-01 00:00:00 +0000")
set(rev_hash "unknown")
set(rev_branch "Archived")
else()
- if(GIT_EXEC)
+ if(GIT_EXECUTABLE)
# Create a revision-string that we can use
execute_process(
- COMMAND "${GIT_EXEC}" describe --match init --dirty=+ --abbrev=12
+ COMMAND "${GIT_EXECUTABLE}" describe --match init --dirty=+ --abbrev=12
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_info
OUTPUT_STRIP_TRAILING_WHITESPACE
@@ -35,7 +33,7 @@ else()
# And grab the commits timestamp
execute_process(
- COMMAND "${GIT_EXEC}" show -s --format=%ci
+ COMMAND "${GIT_EXECUTABLE}" show -s --format=%ci
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_date
OUTPUT_STRIP_TRAILING_WHITESPACE
@@ -44,7 +42,7 @@ else()
# Also retrieve branch name
execute_process(
- COMMAND "${GIT_EXEC}" rev-parse --abbrev-ref HEAD
+ COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_branch
OUTPUT_STRIP_TRAILING_WHITESPACE
@@ -69,7 +67,7 @@ else()
endif()
# Create the actual revision.h file from the above params
-if(NOT "${rev_hash_cached}" MATCHES "${rev_hash}" OR NOT "${rev_branch_cached}" MATCHES "${rev_branch}")
+if(NOT "${rev_hash_cached}" MATCHES "${rev_hash}" OR NOT "${rev_branch_cached}" MATCHES "${rev_branch}" OR NOT EXISTS "${BUILDDIR}/revision.h")
configure_file(
"${CMAKE_SOURCE_DIR}/revision.h.in.cmake"
"${BUILDDIR}/revision.h"
diff --git a/cmake/macros/ConfigureBoost.cmake b/cmake/macros/ConfigureBoost.cmake
index 3d3791b8a93..16c817d9d25 100644
--- a/cmake/macros/ConfigureBoost.cmake
+++ b/cmake/macros/ConfigureBoost.cmake
@@ -25,11 +25,36 @@ if(WIN32)
add_definitions(-D_WIN32_WINNT=${ver})
endif()
-find_package(Boost 1.49 REQUIRED system thread program_options)
+find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams)
add_definitions(-DBOOST_DATE_TIME_NO_LIB)
add_definitions(-DBOOST_REGEX_NO_LIB)
add_definitions(-DBOOST_CHRONO_NO_LIB)
+# Find if Boost was compiled in C++03 mode because it requires -DBOOST_NO_CXX11_SCOPED_ENUMS
+
+include (CheckCXXSourceCompiles)
+
+set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIR})
+set(CMAKE_REQUIRED_LIBRARIES ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_IOSTREAMS_LIBRARY})
+set(CMAKE_REQUIRED_FLAGS "-std=c++11")
+unset(boost_filesystem_copy_links_without_NO_SCOPED_ENUM CACHE)
+check_cxx_source_compiles("
+ #include <boost/filesystem/path.hpp>
+ #include <boost/filesystem/operations.hpp>
+ int main() { boost::filesystem::copy_file(boost::filesystem::path(), boost::filesystem::path()); }"
+boost_filesystem_copy_links_without_NO_SCOPED_ENUM)
+unset(CMAKE_REQUIRED_INCLUDES CACHE)
+unset(CMAKE_REQUIRED_LIBRARIES CACHE)
+unset(CMAKE_REQUIRED_FLAGS CACHE)
+
+if (NOT boost_filesystem_copy_links_without_NO_SCOPED_ENUM)
+ if (Boost_VERSION LESS 105100) # 1.51
+ add_definitions(-DBOOST_NO_SCOPED_ENUMS)
+ else()
+ add_definitions(-DBOOST_NO_CXX11_SCOPED_ENUMS)
+ endif()
+endif()
+
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
endif()
diff --git a/cmake/macros/FindMySQL.cmake b/cmake/macros/FindMySQL.cmake
index 2c393463c47..6b00510ba42 100644
--- a/cmake/macros/FindMySQL.cmake
+++ b/cmake/macros/FindMySQL.cmake
@@ -5,6 +5,7 @@
# This module defines
# MYSQL_INCLUDE_DIR, where to find mysql.h
# MYSQL_LIBRARIES, the libraries to link against to connect to MySQL
+# MYSQL_EXECUTABLE, the MySQL executable.
# MYSQL_FOUND, if false, you cannot build anything that requires MySQL.
# also defined, but not for general use are
@@ -94,6 +95,7 @@ find_path(MYSQL_INCLUDE_DIR
"$ENV{ProgramFiles}/MySQL/*/include"
"$ENV{SystemDrive}/MySQL/*/include"
"c:/msys/local/include"
+ "$ENV{MYSQL_ROOT}/include"
DOC
"Specify the directory containing mysql.h."
)
@@ -159,6 +161,7 @@ if( WIN32 )
"$ENV{ProgramFiles}/MySQL/*/lib/opt"
"$ENV{SystemDrive}/MySQL/*/lib/opt"
"c:/msys/local/include"
+ "$ENV{MYSQL_ROOT}/lib"
DOC "Specify the location of the mysql library here."
)
endif( WIN32 )
@@ -180,6 +183,65 @@ else( NOT WIN32 )
set( MYSQL_EXTRA_LIBRARIES "" )
endif( NOT WIN32 )
+if( UNIX )
+ find_program(MYSQL_EXECUTABLE mysql
+ PATHS
+ ${MYSQL_CONFIG_PREFER_PATH}
+ /usr/local/mysql/bin/
+ /usr/local/bin/
+ /usr/bin/
+ DOC
+ "path to your mysql binary."
+ )
+endif( UNIX )
+
+if( WIN32 )
+ find_program(MYSQL_EXECUTABLE mysql
+ PATHS
+ "C:/Program Files/MySQL/MySQL Server 5.6/bin"
+ "C:/Program Files/MySQL/MySQL Server 5.6/bin/opt"
+ "C:/Program Files/MySQL/MySQL Server 5.5/bin"
+ "C:/Program Files/MySQL/MySQL Server 5.5/bin/opt"
+ "C:/Program Files/MySQL/MySQL Server 5.1/bin"
+ "C:/Program Files/MySQL/MySQL Server 5.1/bin/opt"
+ "C:/Program Files/MySQL/MySQL Server 5.0/bin"
+ "C:/Program Files/MySQL/MySQL Server 5.0/bin/opt"
+ "C:/Program Files/MySQL/bin"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.6/bin"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.6/bin/opt"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.5/bin"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.5/bin/opt"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.1/bin"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.1/bin/opt"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.0/bin"
+ "C:/Program Files (x86)/MySQL/MySQL Server 5.0/bin/opt"
+ "C:/Program Files (x86)/MySQL/bin"
+ "C:/MySQL/bin/debug"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/bin/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/bin"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/bin/opt"
+ "$ENV{ProgramFiles}/MySQL/*/bin/opt"
+ "$ENV{SystemDrive}/MySQL/*/bin/opt"
+ "c:/msys/local/include"
+ "$ENV{MYSQL_ROOT}/bin"
+ DOC
+ "path to your mysql binary."
+ )
+endif( WIN32 )
+
if( MYSQL_LIBRARY )
if( MYSQL_INCLUDE_DIR )
set( MYSQL_FOUND 1 )
@@ -188,7 +250,10 @@ if( MYSQL_LIBRARY )
else( MYSQL_INCLUDE_DIR )
message(FATAL_ERROR "Could not find MySQL headers! Please install the development libraries and headers")
endif( MYSQL_INCLUDE_DIR )
- mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR )
+ if( MYSQL_EXECUTABLE )
+ message(STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE}")
+ endif( MYSQL_EXECUTABLE )
+ mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE)
else( MYSQL_LIBRARY )
message(FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers")
endif( MYSQL_LIBRARY )
diff --git a/cmake/macros/FindOpenSSL.cmake b/cmake/macros/FindOpenSSL.cmake
index 1cc34b36a4c..7baa43274ab 100644
--- a/cmake/macros/FindOpenSSL.cmake
+++ b/cmake/macros/FindOpenSSL.cmake
@@ -186,7 +186,7 @@ if (OPENSSL_INCLUDE_DIR)
set(OPENSSL_VERSION "${_OPENSSL_VERSION}")
else (_OPENSSL_VERSION)
file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
- REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*")
+ REGEX "^# *define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*")
# The version number is encoded as 0xMNNFFPPS: major minor fix patch status
# The status gives if this is a developer or prerelease and is ignored here.
diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt
index f04c8580413..a38dcbe068d 100644
--- a/dep/CMakeLists.txt
+++ b/dep/CMakeLists.txt
@@ -35,6 +35,7 @@ if(SERVERS OR TOOLS)
endif()
if(SERVERS)
+ add_subdirectory(cppformat)
add_subdirectory(gsoap)
endif()
diff --git a/dep/PackageList.txt b/dep/PackageList.txt
index 4412df6ffa6..4fb4e2877fc 100644
--- a/dep/PackageList.txt
+++ b/dep/PackageList.txt
@@ -4,10 +4,18 @@ Boost
http://www.boost.org
Version: 1.55
+Boost Process (Proposed for boost, but its not an official part of it yet. Used to start child processes.)
+ http://www.highscore.de/boost/process0.5/
+ Version: 0.5
+
bzip2 (a freely available, patent free, high-quality data compressor)
http://www.bzip.org/
Version: 1.0.6
+cppformat (type safe format library)
+ https://github.com/cppformat/cppformat
+ Version: 1.1.0 bf8636c9596fbfddded3d0f5879abc7579c9f4dd
+
G3D (a commercial-grade C++ 3D engine available as Open Source (BSD License)
http://g3d.sourceforge.net/
Version: 9.0-Release r4036
diff --git a/dep/cppformat/CMakeLists.txt b/dep/cppformat/CMakeLists.txt
new file mode 100644
index 00000000000..ea02185811f
--- /dev/null
+++ b/dep/cppformat/CMakeLists.txt
@@ -0,0 +1,35 @@
+include(CheckCXXCompilerFlag)
+include(CheckSymbolExists)
+
+set(FMT_SOURCES format.cc format.h)
+
+# Use variadic templates
+add_definitions(-DFMT_VARIADIC_TEMPLATES=1)
+
+# Check if initializer lists are supported.
+check_cxx_source_compiles("
+ #include <initializer_list>
+ int main() {}" FMT_INITIALIZER_LIST)
+
+# Use delete
+add_definitions(-DFMT_USE_DELETED_FUNCTIONS=1)
+
+# Use static assert
+add_definitions(-DFMT_USE_STATIC_ASSERT=1)
+
+if (WIN32)
+ check_symbol_exists(open io.h HAVE_OPEN)
+else ()
+ check_symbol_exists(open fcntl.h HAVE_OPEN)
+endif ()
+if (HAVE_OPEN)
+ add_definitions(-DFMT_USE_FILE_DESCRIPTORS=1)
+ set(FMT_SOURCES ${FMT_SOURCES} posix.cc posix.h)
+endif ()
+
+add_library(format STATIC ${FMT_SOURCES})
+
+if (CMAKE_COMPILER_IS_GNUCXX)
+ set_target_properties(format PROPERTIES COMPILE_FLAGS
+ "-Wall -Wextra -Wshadow -pedantic")
+endif ()
diff --git a/dep/cppformat/ChangeLog.rst b/dep/cppformat/ChangeLog.rst
new file mode 100644
index 00000000000..fe780ae010c
--- /dev/null
+++ b/dep/cppformat/ChangeLog.rst
@@ -0,0 +1,335 @@
+1.1.0 - 2015-03-06
+------------------
+
+* Added ``BasicArrayWriter``, a class template that provides operations for
+ formatting and writing data into a fixed-size array
+ (`#105 <https://github.com/cppformat/cppformat/issues/105>`_ and
+ `#122 <https://github.com/cppformat/cppformat/issues/122>`_):
+
+ .. code:: c++
+
+ char buffer[100];
+ fmt::ArrayWriter w(buffer);
+ w.write("The answer is {}", 42);
+
+* Added `0 A.D. <http://play0ad.com/>`_ and `PenUltima Online (POL)
+ <http://www.polserver.com/>`_ to the list of notable projects using C++ Format.
+
+* C++ Format now uses MSVC intrinsics for better formatting performance
+ (`#115 <https://github.com/cppformat/cppformat/pull/115>`_,
+ `#116 <https://github.com/cppformat/cppformat/pull/116>`_,
+ `#118 <https://github.com/cppformat/cppformat/pull/118>`_ and
+ `#121 <https://github.com/cppformat/cppformat/pull/121>`_).
+ Previously these optimizations where only used on GCC and Clang.
+ Thanks to `@CarterLi <https://github.com/CarterLi>`_ and
+ `@objectx <https://github.com/objectx>`_.
+
+* CMake install target (`#119 <https://github.com/cppformat/cppformat/pull/119>`_).
+ Thanks to `@TrentHouliston <https://github.com/TrentHouliston>`_.
+
+ You can now install C++ Format with ``make install`` command.
+
+* Improved `Biicode <http://www.biicode.com/>`_ support
+ (`#98 <https://github.com/cppformat/cppformat/pull/98>`_ and
+ `#104 <https://github.com/cppformat/cppformat/pull/104>`_). Thanks to
+ `@MariadeAnton <https://github.com/MariadeAnton>`_ and
+ `@franramirez688 <https://github.com/franramirez688>`_.
+
+* Improved support for bulding with `Android NDK
+ <https://developer.android.com/tools/sdk/ndk/index.html>`_
+ (`#107 <https://github.com/cppformat/cppformat/pull/107>`_).
+ Thanks to `@newnon <https://github.com/newnon>`_.
+
+ The `android-ndk-example <https://github.com/cppformat/android-ndk-example>`_
+ repository provides and example of using C++ Format with Android NDK:
+
+ .. image:: https://raw.githubusercontent.com/cppformat/android-ndk-example/
+ master/screenshot.png
+
+* Improved documentation of ``SystemError`` and ``WindowsError``
+ (`#54 <https://github.com/cppformat/cppformat/issues/54>`_).
+
+* Various code improvements
+ (`#110 <https://github.com/cppformat/cppformat/pull/110>`_,
+ `#111 <https://github.com/cppformat/cppformat/pull/111>`_
+ `#112 <https://github.com/cppformat/cppformat/pull/112>`_).
+ Thanks to `@CarterLi <https://github.com/CarterLi>`_.
+
+* Improved compile-time errors when formatting wide into narrow strings
+ (`#117 <https://github.com/cppformat/cppformat/issues/117>`_).
+
+* Fixed ``BasicWriter::write`` without formatting arguments when C++11 support
+ is disabled (`#109 <https://github.com/cppformat/cppformat/issues/109>`_).
+
+* Fixed header-only build on OS X with GCC 4.9
+ (`#124 <https://github.com/cppformat/cppformat/issues/124>`_).
+
+* Fixed packaging issues (`#94 <https://github.com/cppformat/cppformat/issues/94>`_).
+
+* Fixed warnings in GCC, MSVC and Xcode/Clang
+ (`#95 <https://github.com/cppformat/cppformat/issues/95>`_,
+ `#96 <https://github.com/cppformat/cppformat/issues/96>`_ and
+ `#114 <https://github.com/cppformat/cppformat/pull/114>`_).
+
+* Added `changelog <https://github.com/cppformat/cppformat/edit/master/ChangeLog.rst>`_
+ (`#103 <https://github.com/cppformat/cppformat/issues/103>`_).
+
+1.0.0 - 2015-02-05
+------------------
+
+* Add support for a header-only configuration when ``FMT_HEADER_ONLY`` is
+ defined before including ``format.h``:
+
+ .. code:: c++
+
+ #define FMT_HEADER_ONLY
+ #include "format.h"
+
+* Compute string length in the constructor of ``BasicStringRef``
+ instead of the ``size`` method
+ (`#79 <https://github.com/cppformat/cppformat/issues/79>`_).
+ This eliminates size computation for string literals on reasonable optimizing
+ compilers.
+
+* Fix formatting of types with overloaded ``operator <<`` for ``std::wostream``
+ (`#86 <https://github.com/cppformat/cppformat/issues/86>`_):
+
+ .. code:: c++
+
+ fmt::format(L"The date is {0}", Date(2012, 12, 9));
+
+* Fix linkage of tests on Arch Linux
+ (`#89 <https://github.com/cppformat/cppformat/issues/89>`_).
+
+* Allow precision specifier for non-float arguments
+ (`#90 <https://github.com/cppformat/cppformat/issues/90>`_):
+
+ .. code:: c++
+
+ fmt::print("{:.3}\n", "Carpet"); // prints "Car"
+
+* Fix build on Android NDK
+ (`#93 <https://github.com/cppformat/cppformat/issues/93>`_)
+
+* Improvements to documentation build procedure.
+
+* Remove ``FMT_SHARED`` CMake variable in favor of standard `BUILD_SHARED_LIBS
+ <http://www.cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html>`_.
+
+* Fix error handling in ``fmt::fprintf``.
+
+* Fix a number of warnings.
+
+0.12.0 - 2014-10-25
+-------------------
+
+* [Breaking] Improved separation between formatting and buffer management.
+ ``Writer`` is now a base class that cannot be instantiated directly.
+ The new ``MemoryWriter`` class implements the default buffer management
+ with small allocations done on stack. So ``fmt::Writer`` should be replaced
+ with ``fmt::MemoryWriter`` in variable declarations.
+
+ Old code:
+
+ .. code:: c++
+
+ fmt::Writer w;
+
+ New code:
+
+ .. code:: c++
+
+ fmt::MemoryWriter w;
+
+ If you pass ``fmt::Writer`` by reference, you can continue to do so:
+
+ .. code:: c++
+
+ void f(fmt::Writer &w);
+
+ This doesn't affect the formatting API.
+
+* Support for custom memory allocators
+ (`#69 <https://github.com/cppformat/cppformat/issues/69>`_)
+
+* Formatting functions now accept `signed char` and `unsigned char` strings as
+ arguments (`#73 <https://github.com/cppformat/cppformat/issues/73>`_):
+
+ .. code:: c++
+
+ auto s = format("GLSL version: {}", glGetString(GL_VERSION));
+
+* Reduced code bloat. According to the new `benchmark results
+ <https://github.com/cppformat/cppformat#compile-time-and-code-bloat>`_,
+ cppformat is close to ``printf`` and by the order of magnitude better than
+ Boost Format in terms of compiled code size.
+
+* Improved appearance of the documentation on mobile by using the `Sphinx
+ Bootstrap theme <http://ryan-roemer.github.io/sphinx-bootstrap-theme/>`_:
+
+ .. |old| image:: https://cloud.githubusercontent.com/assets/576385/4792130/
+ cd256436-5de3-11e4-9a62-c077d0c2b003.png
+
+ .. |new| image:: https://cloud.githubusercontent.com/assets/576385/4792131/
+ cd29896c-5de3-11e4-8f59-cac952942bf0.png
+
+ +-------+-------+
+ | Old | New |
+ +-------+-------+
+ | |old| | |new| |
+ +-------+-------+
+
+0.11.0 - 2014-08-21
+-------------------
+
+* Safe printf implementation with a POSIX extension for positional arguments:
+
+ .. code:: c++
+
+ fmt::printf("Elapsed time: %.2f seconds", 1.23);
+ fmt::printf("%1$s, %3$d %2$s", weekday, month, day);
+
+* Arguments of ``char`` type can now be formatted as integers
+ (Issue `#55 <https://github.com/cppformat/cppformat/issues/55>`_):
+
+ .. code:: c++
+
+ fmt::format("0x{0:02X}", 'a');
+
+* Deprecated parts of the API removed.
+
+* The library is now built and tested on MinGW with Appveyor in addition to
+ existing test platforms Linux/GCC, OS X/Clang, Windows/MSVC.
+
+0.10.0 - 2014-07-01
+-------------------
+
+**Improved API**
+
+* All formatting methods are now implemented as variadic functions instead
+ of using ``operator<<`` for feeding arbitrary arguments into a temporary
+ formatter object. This works both with C++11 where variadic templates are
+ used and with older standards where variadic functions are emulated by
+ providing lightweight wrapper functions defined with the ``FMT_VARIADIC``
+ macro. You can use this macro for defining your own portable variadic
+ functions:
+
+ .. code:: c++
+
+ void report_error(const char *format, const fmt::ArgList &args) {
+ fmt::print("Error: {}");
+ fmt::print(format, args);
+ }
+ FMT_VARIADIC(void, report_error, const char *)
+
+ report_error("file not found: {}", path);
+
+ Apart from a more natural syntax, this also improves performance as there
+ is no need to construct temporary formatter objects and control arguments'
+ lifetimes. Because the wrapper functions are very ligthweight, this doesn't
+ cause code bloat even in pre-C++11 mode.
+
+* Simplified common case of formatting an ``std::string``. Now it requires a
+ single function call:
+
+ .. code:: c++
+
+ std::string s = format("The answer is {}.", 42);
+
+ Previously it required 2 function calls:
+
+ .. code:: c++
+
+ std::string s = str(Format("The answer is {}.") << 42);
+
+ Instead of unsafe ``c_str`` function, ``fmt::Writer`` should be used directly
+ to bypass creation of ``std::string``:
+
+ .. code:: c++
+
+ fmt::Writer w;
+ w.write("The answer is {}.", 42);
+ w.c_str(); // returns a C string
+
+ This doesn't do dynamic memory allocation for small strings and is less error
+ prone as the lifetime of the string is the same as for ``std::string::c_str``
+ which is well understood (hopefully).
+
+* Improved consistency in naming functions that are a part of the public API.
+ Now all public functions are lowercase following the standard library
+ conventions. Previously it was a combination of lowercase and
+ CapitalizedWords.
+ Issue `#50 <https://github.com/cppformat/cppformat/issues/50>`_.
+
+* Old functions are marked as deprecated and will be removed in the next
+ release.
+
+**Other Changes**
+
+* Experimental support for printf format specifications (work in progress):
+
+ .. code:: c++
+
+ fmt::printf("The answer is %d.", 42);
+ std::string s = fmt::sprintf("Look, a %s!", "string");
+
+* Support for hexadecimal floating point format specifiers ``a`` and ``A``:
+
+ .. code:: c++
+
+ print("{:a}", -42.0); // Prints -0x1.5p+5
+ print("{:A}", -42.0); // Prints -0X1.5P+5
+
+* CMake option ``FMT_SHARED`` that specifies whether to build format as a
+ shared library (off by default).
+
+0.9.0 - 2014-05-13
+------------------
+
+* More efficient implementation of variadic formatting functions.
+
+* ``Writer::Format`` now has a variadic overload:
+
+ .. code:: c++
+
+ Writer out;
+ out.Format("Look, I'm {}!", "variadic");
+
+* For efficiency and consistency with other overloads, variadic overload of
+ the ``Format`` function now returns ``Writer`` instead of ``std::string``.
+ Use the ``str`` function to convert it to ``std::string``:
+
+ .. code:: c++
+
+ std::string s = str(Format("Look, I'm {}!", "variadic"));
+
+* Replaced formatter actions with output sinks: ``NoAction`` -> ``NullSink``,
+ ``Write`` -> ``FileSink``, ``ColorWriter`` -> ``ANSITerminalSink``.
+ This improves naming consistency and shouldn't affect client code unless
+ these classes are used directly which should be rarely needed.
+
+* Added ``ThrowSystemError`` function that formats a message and throws
+ ``SystemError`` containing the formatted message and system-specific error
+ description. For example, the following code
+
+ .. code:: c++
+
+ FILE *f = fopen(filename, "r");
+ if (!f)
+ ThrowSystemError(errno, "Failed to open file '{}'") << filename;
+
+ will throw ``SystemError`` exception with description
+ "Failed to open file '<filename>': No such file or directory" if file
+ doesn't exist.
+
+* Support for AppVeyor continuous integration platform.
+
+* ``Format`` now throws ``SystemError`` in case of I/O errors.
+
+* Improve test infrastructure. Print functions are now tested by redirecting
+ the output to a pipe.
+
+0.8.0 - 2014-04-14
+------------------
+
+* Initial release
diff --git a/dep/cppformat/LICENSE b/dep/cppformat/LICENSE
new file mode 100644
index 00000000000..2ee9ec93495
--- /dev/null
+++ b/dep/cppformat/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2014 - 2015, Victor Zverovich
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dep/cppformat/format.cc b/dep/cppformat/format.cc
new file mode 100644
index 00000000000..86fac25a524
--- /dev/null
+++ b/dep/cppformat/format.cc
@@ -0,0 +1,1224 @@
+/*
+ Formatting library for C++
+
+ Copyright (c) 2012 - 2015, Victor Zverovich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "format.h"
+
+#include <string.h>
+
+#include <cctype>
+#include <cerrno>
+#include <climits>
+#include <cmath>
+#include <cstdarg>
+
+#ifdef _WIN32
+# ifdef __MINGW32__
+# include <cstring>
+# endif
+# include <windows.h>
+#endif
+
+using fmt::internal::Arg;
+
+// Check if exceptions are disabled.
+#if __GNUC__ && !__EXCEPTIONS
+# define FMT_EXCEPTIONS 0
+#endif
+#if _MSC_VER && !_HAS_EXCEPTIONS
+# define FMT_EXCEPTIONS 0
+#endif
+#ifndef FMT_EXCEPTIONS
+# define FMT_EXCEPTIONS 1
+#endif
+
+#if FMT_EXCEPTIONS
+# define FMT_TRY try
+# define FMT_CATCH(x) catch (x)
+#else
+# define FMT_TRY if (true)
+# define FMT_CATCH(x) if (false)
+#endif
+
+#ifndef FMT_THROW
+# if FMT_EXCEPTIONS
+# define FMT_THROW(x) throw x
+# else
+# ifndef NDEBUG
+# define FMT_THROW(x) assert(false && #x)
+# elif defined _MSC_VER
+# define FMT_THROW(x) __assume(0)
+# elif defined __clang__ || FMT_GCC_VERSION >= 405
+# define FMT_THROW(x) __builtin_unreachable()
+# else
+# define FMT_THROW(x) std::abort()
+# endif
+# endif
+#endif
+
+#ifndef FMT_NORETURN
+# if defined __GNUC__ || defined __clang__
+# define FMT_NORETURN __attribute__((__noreturn__))
+# elif defined _MSC_VER
+# define FMT_NORETURN __declspec(noreturn)
+# else
+# define FMT_NORETURN
+# endif
+#endif
+
+#ifdef FMT_HEADER_ONLY
+# define FMT_FUNC inline
+#else
+# define FMT_FUNC
+#endif
+
+#if _MSC_VER
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant
+# pragma warning(disable: 4702) // unreachable code
+// Disable deprecation warning for strerror. The latter is not called but
+// MSVC fails to detect it.
+# pragma warning(disable: 4996)
+#endif
+
+// Dummy implementations of strerror_r and strerror_s called if corresponding
+// system functions are not available.
+static inline fmt::internal::None<> strerror_r(int, char *, ...) {
+ return fmt::internal::None<>();
+}
+static inline fmt::internal::None<> strerror_s(char *, std::size_t, ...) {
+ return fmt::internal::None<>();
+}
+
+namespace {
+
+#ifndef _MSC_VER
+# define FMT_SNPRINTF snprintf
+#else // _MSC_VER
+inline int fmt_snprintf(char *buffer, size_t size, const char *format, ...) {
+ va_list args;
+ va_start(args, format);
+ int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
+ va_end(args);
+ return result;
+}
+# define FMT_SNPRINTF fmt_snprintf
+#endif // _MSC_VER
+
+#if defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
+# define FMT_SWPRINTF snwprintf
+#else
+# define FMT_SWPRINTF swprintf
+#endif // defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
+
+// Checks if a value fits in int - used to avoid warnings about comparing
+// signed and unsigned integers.
+template <bool IsSigned>
+struct IntChecker {
+ template <typename T>
+ static bool fits_in_int(T value) {
+ unsigned max = INT_MAX;
+ return value <= max;
+ }
+};
+
+template <>
+struct IntChecker<true> {
+ template <typename T>
+ static bool fits_in_int(T value) {
+ return value >= INT_MIN && value <= INT_MAX;
+ }
+};
+
+const char RESET_COLOR[] = "\x1b[0m";
+
+typedef void (*FormatFunc)(fmt::Writer &, int, fmt::StringRef);
+
+// Portable thread-safe version of strerror.
+// Sets buffer to point to a string describing the error code.
+// This can be either a pointer to a string stored in buffer,
+// or a pointer to some static immutable string.
+// Returns one of the following values:
+// 0 - success
+// ERANGE - buffer is not large enough to store the error message
+// other - failure
+// Buffer should be at least of size 1.
+int safe_strerror(
+ int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT {
+ assert(buffer != 0 && buffer_size != 0);
+
+ class StrError {
+ private:
+ int error_code_;
+ char *&buffer_;
+ std::size_t buffer_size_;
+
+ // Handle the result of XSI-compliant version of strerror_r.
+ int handle(int result) {
+ // glibc versions before 2.13 return result in errno.
+ return result == -1 ? errno : result;
+ }
+
+ // Handle the result of GNU-specific version of strerror_r.
+ int handle(char *message) {
+ // If the buffer is full then the message is probably truncated.
+ if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1)
+ return ERANGE;
+ buffer_ = message;
+ return 0;
+ }
+
+ // Handle the case when strerror_r is not available.
+ int handle(fmt::internal::None<>) {
+ return fallback(strerror_s(buffer_, buffer_size_, error_code_));
+ }
+
+ // Fallback to strerror_s when strerror_r is not available.
+ int fallback(int result) {
+ // If the buffer is full then the message is probably truncated.
+ return result == 0 && strlen(buffer_) == buffer_size_ - 1 ?
+ ERANGE : result;
+ }
+
+ // Fallback to strerror if strerror_r and strerror_s are not available.
+ int fallback(fmt::internal::None<>) {
+ errno = 0;
+ buffer_ = strerror(error_code_);
+ return errno;
+ }
+
+ public:
+ StrError(int error_code, char *&buffer, std::size_t buffer_size)
+ : error_code_(error_code), buffer_(buffer), buffer_size_(buffer_size) {}
+
+ int run() { return handle(strerror_r(error_code_, buffer_, buffer_size_)); }
+ };
+ return StrError(error_code, buffer, buffer_size).run();
+}
+
+void format_error_code(fmt::Writer &out, int error_code,
+ fmt::StringRef message) FMT_NOEXCEPT {
+ // Report error code making sure that the output fits into
+ // INLINE_BUFFER_SIZE to avoid dynamic memory allocation and potential
+ // bad_alloc.
+ out.clear();
+ static const char SEP[] = ": ";
+ static const char _ERR[] = "error ";
+ fmt::internal::IntTraits<int>::MainType ec_value = error_code;
+ // Subtract 2 to account for terminating null characters in SEP and _ERR.
+ std::size_t error_code_size =
+ sizeof(SEP) + sizeof(_ERR) + fmt::internal::count_digits(ec_value) - 2;
+ if (message.size() <= fmt::internal::INLINE_BUFFER_SIZE - error_code_size)
+ out << message << SEP;
+ out << _ERR << error_code;
+ assert(out.size() <= fmt::internal::INLINE_BUFFER_SIZE);
+}
+
+void report_error(FormatFunc func,
+ int error_code, fmt::StringRef message) FMT_NOEXCEPT {
+ fmt::MemoryWriter full_message;
+ func(full_message, error_code, message);
+ // Use Writer::data instead of Writer::c_str to avoid potential memory
+ // allocation.
+ std::fwrite(full_message.data(), full_message.size(), 1, stderr);
+ std::fputc('\n', stderr);
+}
+
+// IsZeroInt::visit(arg) returns true iff arg is a zero integer.
+class IsZeroInt : public fmt::internal::ArgVisitor<IsZeroInt, bool> {
+ public:
+ template <typename T>
+ bool visit_any_int(T value) { return value == 0; }
+};
+
+// Parses an unsigned integer advancing s to the end of the parsed input.
+// This function assumes that the first character of s is a digit.
+template <typename Char>
+int parse_nonnegative_int(const Char *&s) {
+ assert('0' <= *s && *s <= '9');
+ unsigned value = 0;
+ do {
+ unsigned new_value = value * 10 + (*s++ - '0');
+ // Check if value wrapped around.
+ if (new_value < value) {
+ value = UINT_MAX;
+ break;
+ }
+ value = new_value;
+ } while ('0' <= *s && *s <= '9');
+ if (value > INT_MAX)
+ FMT_THROW(fmt::FormatError("number is too big"));
+ return value;
+}
+
+inline void require_numeric_argument(const Arg &arg, char spec) {
+ if (arg.type > Arg::LAST_NUMERIC_TYPE) {
+ std::string message =
+ fmt::format("format specifier '{}' requires numeric argument", spec);
+ FMT_THROW(fmt::FormatError(message));
+ }
+}
+
+template <typename Char>
+void check_sign(const Char *&s, const Arg &arg) {
+ char sign = static_cast<char>(*s);
+ require_numeric_argument(arg, sign);
+ if (arg.type == Arg::UINT || arg.type == Arg::ULONG_LONG) {
+ FMT_THROW(fmt::FormatError(fmt::format(
+ "format specifier '{}' requires signed argument", sign)));
+ }
+ ++s;
+}
+
+// Checks if an argument is a valid printf width specifier and sets
+// left alignment if it is negative.
+class WidthHandler : public fmt::internal::ArgVisitor<WidthHandler, unsigned> {
+ private:
+ fmt::FormatSpec &spec_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(WidthHandler);
+
+ public:
+ explicit WidthHandler(fmt::FormatSpec &spec) : spec_(spec) {}
+
+ FMT_NORETURN
+ unsigned visit_unhandled_arg() {
+ FMT_THROW(fmt::FormatError("width is not integer"));
+ }
+
+ template <typename T>
+ unsigned visit_any_int(T value) {
+ typedef typename fmt::internal::IntTraits<T>::MainType UnsignedType;
+ UnsignedType width = value;
+ if (fmt::internal::is_negative(value)) {
+ spec_.align_ = fmt::ALIGN_LEFT;
+ width = 0 - width;
+ }
+ if (width > INT_MAX)
+ FMT_THROW(fmt::FormatError("number is too big"));
+ return static_cast<unsigned>(width);
+ }
+};
+
+class PrecisionHandler :
+ public fmt::internal::ArgVisitor<PrecisionHandler, int> {
+ public:
+ FMT_NORETURN
+ unsigned visit_unhandled_arg() {
+ FMT_THROW(fmt::FormatError("precision is not integer"));
+ }
+
+ template <typename T>
+ int visit_any_int(T value) {
+ if (!IntChecker<std::numeric_limits<T>::is_signed>::fits_in_int(value))
+ FMT_THROW(fmt::FormatError("number is too big"));
+ return static_cast<int>(value);
+ }
+};
+
+// Converts an integer argument to an integral type T for printf.
+template <typename T>
+class ArgConverter : public fmt::internal::ArgVisitor<ArgConverter<T>, void> {
+ private:
+ fmt::internal::Arg &arg_;
+ wchar_t type_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(ArgConverter);
+
+ public:
+ ArgConverter(fmt::internal::Arg &arg, wchar_t type)
+ : arg_(arg), type_(type) {}
+
+ template <typename U>
+ void visit_any_int(U value) {
+ bool is_signed = type_ == 'd' || type_ == 'i';
+ using fmt::internal::Arg;
+ if (sizeof(T) <= sizeof(int)) {
+ // Extra casts are used to silence warnings.
+ if (is_signed) {
+ arg_.type = Arg::INT;
+ arg_.int_value = static_cast<int>(static_cast<T>(value));
+ } else {
+ arg_.type = Arg::UINT;
+ arg_.uint_value = static_cast<unsigned>(
+ static_cast<typename fmt::internal::MakeUnsigned<T>::Type>(value));
+ }
+ } else {
+ if (is_signed) {
+ arg_.type = Arg::LONG_LONG;
+ arg_.long_long_value =
+ static_cast<typename fmt::internal::MakeUnsigned<U>::Type>(value);
+ } else {
+ arg_.type = Arg::ULONG_LONG;
+ arg_.ulong_long_value =
+ static_cast<typename fmt::internal::MakeUnsigned<U>::Type>(value);
+ }
+ }
+ }
+};
+
+// Converts an integer argument to char for printf.
+class CharConverter : public fmt::internal::ArgVisitor<CharConverter, void> {
+ private:
+ fmt::internal::Arg &arg_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(CharConverter);
+
+ public:
+ explicit CharConverter(fmt::internal::Arg &arg) : arg_(arg) {}
+
+ template <typename T>
+ void visit_any_int(T value) {
+ arg_.type = Arg::CHAR;
+ arg_.int_value = static_cast<char>(value);
+ }
+};
+
+// This function template is used to prevent compile errors when handling
+// incompatible string arguments, e.g. handling a wide string in a narrow
+// string formatter.
+template <typename Char>
+Arg::StringValue<Char> ignore_incompatible_str(Arg::StringValue<wchar_t>);
+
+template <>
+inline Arg::StringValue<char> ignore_incompatible_str(
+ Arg::StringValue<wchar_t>) { return Arg::StringValue<char>(); }
+
+template <>
+inline Arg::StringValue<wchar_t> ignore_incompatible_str(
+ Arg::StringValue<wchar_t> s) { return s; }
+} // namespace
+
+FMT_FUNC void fmt::SystemError::init(
+ int err_code, StringRef format_str, ArgList args) {
+ error_code_ = err_code;
+ MemoryWriter w;
+ internal::format_system_error(w, err_code, format(format_str, args));
+ std::runtime_error &base = *this;
+ base = std::runtime_error(w.str());
+}
+
+template <typename T>
+int fmt::internal::CharTraits<char>::format_float(
+ char *buffer, std::size_t size, const char *format,
+ unsigned width, int precision, T value) {
+ if (width == 0) {
+ return precision < 0 ?
+ FMT_SNPRINTF(buffer, size, format, value) :
+ FMT_SNPRINTF(buffer, size, format, precision, value);
+ }
+ return precision < 0 ?
+ FMT_SNPRINTF(buffer, size, format, width, value) :
+ FMT_SNPRINTF(buffer, size, format, width, precision, value);
+}
+
+template <typename T>
+int fmt::internal::CharTraits<wchar_t>::format_float(
+ wchar_t *buffer, std::size_t size, const wchar_t *format,
+ unsigned width, int precision, T value) {
+ if (width == 0) {
+ return precision < 0 ?
+ FMT_SWPRINTF(buffer, size, format, value) :
+ FMT_SWPRINTF(buffer, size, format, precision, value);
+ }
+ return precision < 0 ?
+ FMT_SWPRINTF(buffer, size, format, width, value) :
+ FMT_SWPRINTF(buffer, size, format, width, precision, value);
+}
+
+template <typename T>
+const char fmt::internal::BasicData<T>::DIGITS[] =
+ "0001020304050607080910111213141516171819"
+ "2021222324252627282930313233343536373839"
+ "4041424344454647484950515253545556575859"
+ "6061626364656667686970717273747576777879"
+ "8081828384858687888990919293949596979899";
+
+#define FMT_POWERS_OF_10(factor) \
+ factor * 10, \
+ factor * 100, \
+ factor * 1000, \
+ factor * 10000, \
+ factor * 100000, \
+ factor * 1000000, \
+ factor * 10000000, \
+ factor * 100000000, \
+ factor * 1000000000
+
+template <typename T>
+const uint32_t fmt::internal::BasicData<T>::POWERS_OF_10_32[] = {
+ 0, FMT_POWERS_OF_10(1)
+};
+
+template <typename T>
+const uint64_t fmt::internal::BasicData<T>::POWERS_OF_10_64[] = {
+ 0,
+ FMT_POWERS_OF_10(1),
+ FMT_POWERS_OF_10(fmt::ULongLong(1000000000)),
+ // Multiply several constants instead of using a single long long constant
+ // to avoid warnings about C++98 not supporting long long.
+ fmt::ULongLong(1000000000) * fmt::ULongLong(1000000000) * 10
+};
+
+FMT_FUNC void fmt::internal::report_unknown_type(char code, const char *type) {
+ (void)type;
+ if (std::isprint(static_cast<unsigned char>(code))) {
+ FMT_THROW(fmt::FormatError(
+ fmt::format("unknown format code '{}' for {}", code, type)));
+ }
+ FMT_THROW(fmt::FormatError(
+ fmt::format("unknown format code '\\x{:02x}' for {}",
+ static_cast<unsigned>(code), type)));
+}
+
+#ifdef _WIN32
+
+FMT_FUNC fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) {
+ int length = MultiByteToWideChar(
+ CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, 0, 0);
+ static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16";
+ if (length == 0)
+ FMT_THROW(WindowsError(GetLastError(), ERROR_MSG));
+ buffer_.resize(length);
+ length = MultiByteToWideChar(
+ CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, &buffer_[0], length);
+ if (length == 0)
+ FMT_THROW(WindowsError(GetLastError(), ERROR_MSG));
+}
+
+FMT_FUNC fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) {
+ if (int error_code = convert(s)) {
+ FMT_THROW(WindowsError(error_code,
+ "cannot convert string from UTF-16 to UTF-8"));
+ }
+}
+
+FMT_FUNC int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) {
+ int length = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, 0, 0, 0, 0);
+ if (length == 0)
+ return GetLastError();
+ buffer_.resize(length);
+ length = WideCharToMultiByte(
+ CP_UTF8, 0, s.c_str(), -1, &buffer_[0], length, 0, 0);
+ if (length == 0)
+ return GetLastError();
+ return 0;
+}
+
+FMT_FUNC void fmt::WindowsError::init(
+ int err_code, StringRef format_str, ArgList args) {
+ error_code_ = err_code;
+ MemoryWriter w;
+ internal::format_windows_error(w, err_code, format(format_str, args));
+ std::runtime_error &base = *this;
+ base = std::runtime_error(w.str());
+}
+
+#endif
+
+FMT_FUNC void fmt::internal::format_system_error(
+ fmt::Writer &out, int error_code,
+ fmt::StringRef message) FMT_NOEXCEPT {
+ FMT_TRY {
+ MemoryBuffer<char, INLINE_BUFFER_SIZE> buffer;
+ buffer.resize(INLINE_BUFFER_SIZE);
+ for (;;) {
+ char *system_message = &buffer[0];
+ int result = safe_strerror(error_code, system_message, buffer.size());
+ if (result == 0) {
+ out << message << ": " << system_message;
+ return;
+ }
+ if (result != ERANGE)
+ break; // Can't get error message, report error code instead.
+ buffer.resize(buffer.size() * 2);
+ }
+ } FMT_CATCH(...) {}
+ format_error_code(out, error_code, message);
+}
+
+#ifdef _WIN32
+FMT_FUNC void fmt::internal::format_windows_error(
+ fmt::Writer &out, int error_code,
+ fmt::StringRef message) FMT_NOEXCEPT {
+ class String {
+ private:
+ LPWSTR str_;
+
+ public:
+ String() : str_() {}
+ ~String() { LocalFree(str_); }
+ LPWSTR *ptr() { return &str_; }
+ LPCWSTR c_str() const { return str_; }
+ };
+ FMT_TRY {
+ String system_message;
+ if (FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0,
+ error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ reinterpret_cast<LPWSTR>(system_message.ptr()), 0, 0)) {
+ UTF16ToUTF8 utf8_message;
+ if (utf8_message.convert(system_message.c_str()) == ERROR_SUCCESS) {
+ out << message << ": " << utf8_message;
+ return;
+ }
+ }
+ } FMT_CATCH(...) {}
+ format_error_code(out, error_code, message);
+}
+#endif
+
+// An argument formatter.
+template <typename Char>
+class fmt::internal::ArgFormatter :
+ public fmt::internal::ArgVisitor<fmt::internal::ArgFormatter<Char>, void> {
+ private:
+ fmt::BasicFormatter<Char> &formatter_;
+ fmt::BasicWriter<Char> &writer_;
+ fmt::FormatSpec &spec_;
+ const Char *format_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(ArgFormatter);
+
+ public:
+ ArgFormatter(
+ fmt::BasicFormatter<Char> &f,fmt::FormatSpec &s, const Char *fmt)
+ : formatter_(f), writer_(f.writer()), spec_(s), format_(fmt) {}
+
+ template <typename T>
+ void visit_any_int(T value) { writer_.write_int(value, spec_); }
+
+ template <typename T>
+ void visit_any_double(T value) { writer_.write_double(value, spec_); }
+
+ void visit_char(int value) {
+ if (spec_.type_ && spec_.type_ != 'c') {
+ spec_.flags_ |= CHAR_FLAG;
+ writer_.write_int(value, spec_);
+ return;
+ }
+ if (spec_.align_ == ALIGN_NUMERIC || spec_.flags_ != 0)
+ FMT_THROW(FormatError("invalid format specifier for char"));
+ typedef typename fmt::BasicWriter<Char>::CharPtr CharPtr;
+ Char fill = static_cast<Char>(spec_.fill());
+ if (spec_.precision_ == 0) {
+ std::fill_n(writer_.grow_buffer(spec_.width_), spec_.width_, fill);
+ return;
+ }
+ CharPtr out = CharPtr();
+ if (spec_.width_ > 1) {
+ out = writer_.grow_buffer(spec_.width_);
+ if (spec_.align_ == fmt::ALIGN_RIGHT) {
+ std::fill_n(out, spec_.width_ - 1, fill);
+ out += spec_.width_ - 1;
+ } else if (spec_.align_ == fmt::ALIGN_CENTER) {
+ out = writer_.fill_padding(out, spec_.width_, 1, fill);
+ } else {
+ std::fill_n(out + 1, spec_.width_ - 1, fill);
+ }
+ } else {
+ out = writer_.grow_buffer(1);
+ }
+ *out = static_cast<Char>(value);
+ }
+
+ void visit_string(Arg::StringValue<char> value) {
+ writer_.write_str(value, spec_);
+ }
+ void visit_wstring(Arg::StringValue<wchar_t> value) {
+ writer_.write_str(ignore_incompatible_str<Char>(value), spec_);
+ }
+
+ void visit_pointer(const void *value) {
+ if (spec_.type_ && spec_.type_ != 'p')
+ fmt::internal::report_unknown_type(spec_.type_, "pointer");
+ spec_.flags_ = fmt::HASH_FLAG;
+ spec_.type_ = 'x';
+ writer_.write_int(reinterpret_cast<uintptr_t>(value), spec_);
+ }
+
+ void visit_custom(Arg::CustomValue c) {
+ c.format(&formatter_, c.value, &format_);
+ }
+};
+
+template <typename Char>
+void fmt::internal::FixedBuffer<Char>::grow(std::size_t) {
+ FMT_THROW(std::runtime_error("buffer overflow"));
+}
+
+template <typename Char>
+template <typename StrChar>
+void fmt::BasicWriter<Char>::write_str(
+ const Arg::StringValue<StrChar> &s, const FormatSpec &spec) {
+ // Check if StrChar is convertible to Char.
+ internal::CharTraits<Char>::convert(StrChar());
+ if (spec.type_ && spec.type_ != 's')
+ internal::report_unknown_type(spec.type_, "string");
+ const StrChar *str_value = s.value;
+ std::size_t str_size = s.size;
+ if (str_size == 0) {
+ if (!str_value)
+ FMT_THROW(FormatError("string pointer is null"));
+ if (*str_value)
+ str_size = std::char_traits<StrChar>::length(str_value);
+ }
+ std::size_t precision = spec.precision_;
+ if (spec.precision_ >= 0 && precision < str_size)
+ str_size = spec.precision_;
+ write_str(str_value, str_size, spec);
+}
+
+template <typename Char>
+inline Arg fmt::BasicFormatter<Char>::parse_arg_index(const Char *&s) {
+ const char *error = 0;
+ Arg arg = *s < '0' || *s > '9' ?
+ next_arg(error) : get_arg(parse_nonnegative_int(s), error);
+ if (error) {
+ FMT_THROW(FormatError(
+ *s != '}' && *s != ':' ? "invalid format string" : error));
+ }
+ return arg;
+}
+
+FMT_FUNC Arg fmt::internal::FormatterBase::do_get_arg(
+ unsigned arg_index, const char *&error) {
+ Arg arg = args_[arg_index];
+ if (arg.type == Arg::NONE)
+ error = "argument index out of range";
+ return arg;
+}
+
+inline Arg fmt::internal::FormatterBase::next_arg(const char *&error) {
+ if (next_arg_index_ >= 0)
+ return do_get_arg(next_arg_index_++, error);
+ error = "cannot switch from manual to automatic argument indexing";
+ return Arg();
+}
+
+inline Arg fmt::internal::FormatterBase::get_arg(
+ unsigned arg_index, const char *&error) {
+ if (next_arg_index_ <= 0) {
+ next_arg_index_ = -1;
+ return do_get_arg(arg_index, error);
+ }
+ error = "cannot switch from automatic to manual argument indexing";
+ return Arg();
+}
+
+template <typename Char>
+void fmt::internal::PrintfFormatter<Char>::parse_flags(
+ FormatSpec &spec, const Char *&s) {
+ for (;;) {
+ switch (*s++) {
+ case '-':
+ spec.align_ = ALIGN_LEFT;
+ break;
+ case '+':
+ spec.flags_ |= SIGN_FLAG | PLUS_FLAG;
+ break;
+ case '0':
+ spec.fill_ = '0';
+ break;
+ case ' ':
+ spec.flags_ |= SIGN_FLAG;
+ break;
+ case '#':
+ spec.flags_ |= HASH_FLAG;
+ break;
+ default:
+ --s;
+ return;
+ }
+ }
+}
+
+template <typename Char>
+Arg fmt::internal::PrintfFormatter<Char>::get_arg(
+ const Char *s, unsigned arg_index) {
+ (void)s;
+ const char *error = 0;
+ Arg arg = arg_index == UINT_MAX ?
+ next_arg(error) : FormatterBase::get_arg(arg_index - 1, error);
+ if (error)
+ FMT_THROW(FormatError(!*s ? "invalid format string" : error));
+ return arg;
+}
+
+template <typename Char>
+unsigned fmt::internal::PrintfFormatter<Char>::parse_header(
+ const Char *&s, FormatSpec &spec) {
+ unsigned arg_index = UINT_MAX;
+ Char c = *s;
+ if (c >= '0' && c <= '9') {
+ // Parse an argument index (if followed by '$') or a width possibly
+ // preceded with '0' flag(s).
+ unsigned value = parse_nonnegative_int(s);
+ if (*s == '$') { // value is an argument index
+ ++s;
+ arg_index = value;
+ } else {
+ if (c == '0')
+ spec.fill_ = '0';
+ if (value != 0) {
+ // Nonzero value means that we parsed width and don't need to
+ // parse it or flags again, so return now.
+ spec.width_ = value;
+ return arg_index;
+ }
+ }
+ }
+ parse_flags(spec, s);
+ // Parse width.
+ if (*s >= '0' && *s <= '9') {
+ spec.width_ = parse_nonnegative_int(s);
+ } else if (*s == '*') {
+ ++s;
+ spec.width_ = WidthHandler(spec).visit(get_arg(s));
+ }
+ return arg_index;
+}
+
+template <typename Char>
+void fmt::internal::PrintfFormatter<Char>::format(
+ BasicWriter<Char> &writer, BasicStringRef<Char> format_str,
+ const ArgList &args) {
+ const Char *start = format_str.c_str();
+ set_args(args);
+ const Char *s = start;
+ while (*s) {
+ Char c = *s++;
+ if (c != '%') continue;
+ if (*s == c) {
+ write(writer, start, s);
+ start = ++s;
+ continue;
+ }
+ write(writer, start, s - 1);
+
+ FormatSpec spec;
+ spec.align_ = ALIGN_RIGHT;
+
+ // Parse argument index, flags and width.
+ unsigned arg_index = parse_header(s, spec);
+
+ // Parse precision.
+ if (*s == '.') {
+ ++s;
+ if ('0' <= *s && *s <= '9') {
+ spec.precision_ = parse_nonnegative_int(s);
+ } else if (*s == '*') {
+ ++s;
+ spec.precision_ = PrecisionHandler().visit(get_arg(s));
+ }
+ }
+
+ Arg arg = get_arg(s, arg_index);
+ if (spec.flag(HASH_FLAG) && IsZeroInt().visit(arg))
+ spec.flags_ &= ~HASH_FLAG;
+ if (spec.fill_ == '0') {
+ if (arg.type <= Arg::LAST_NUMERIC_TYPE)
+ spec.align_ = ALIGN_NUMERIC;
+ else
+ spec.fill_ = ' '; // Ignore '0' flag for non-numeric types.
+ }
+
+ // Parse length and convert the argument to the required type.
+ switch (*s++) {
+ case 'h':
+ if (*s == 'h')
+ ArgConverter<signed char>(arg, *++s).visit(arg);
+ else
+ ArgConverter<short>(arg, *s).visit(arg);
+ break;
+ case 'l':
+ if (*s == 'l')
+ ArgConverter<fmt::LongLong>(arg, *++s).visit(arg);
+ else
+ ArgConverter<long>(arg, *s).visit(arg);
+ break;
+ case 'j':
+ ArgConverter<intmax_t>(arg, *s).visit(arg);
+ break;
+ case 'z':
+ ArgConverter<size_t>(arg, *s).visit(arg);
+ break;
+ case 't':
+ ArgConverter<ptrdiff_t>(arg, *s).visit(arg);
+ break;
+ case 'L':
+ // printf produces garbage when 'L' is omitted for long double, no
+ // need to do the same.
+ break;
+ default:
+ --s;
+ ArgConverter<int>(arg, *s).visit(arg);
+ }
+
+ // Parse type.
+ if (!*s)
+ FMT_THROW(FormatError("invalid format string"));
+ spec.type_ = static_cast<char>(*s++);
+ if (arg.type <= Arg::LAST_INTEGER_TYPE) {
+ // Normalize type.
+ switch (spec.type_) {
+ case 'i': case 'u':
+ spec.type_ = 'd';
+ break;
+ case 'c':
+ // TODO: handle wchar_t
+ CharConverter(arg).visit(arg);
+ break;
+ }
+ }
+
+ start = s;
+
+ // Format argument.
+ switch (arg.type) {
+ case Arg::INT:
+ writer.write_int(arg.int_value, spec);
+ break;
+ case Arg::UINT:
+ writer.write_int(arg.uint_value, spec);
+ break;
+ case Arg::LONG_LONG:
+ writer.write_int(arg.long_long_value, spec);
+ break;
+ case Arg::ULONG_LONG:
+ writer.write_int(arg.ulong_long_value, spec);
+ break;
+ case Arg::CHAR: {
+ if (spec.type_ && spec.type_ != 'c')
+ writer.write_int(arg.int_value, spec);
+ typedef typename BasicWriter<Char>::CharPtr CharPtr;
+ CharPtr out = CharPtr();
+ if (spec.width_ > 1) {
+ Char fill = ' ';
+ out = writer.grow_buffer(spec.width_);
+ if (spec.align_ != ALIGN_LEFT) {
+ std::fill_n(out, spec.width_ - 1, fill);
+ out += spec.width_ - 1;
+ } else {
+ std::fill_n(out + 1, spec.width_ - 1, fill);
+ }
+ } else {
+ out = writer.grow_buffer(1);
+ }
+ *out = static_cast<Char>(arg.int_value);
+ break;
+ }
+ case Arg::DOUBLE:
+ writer.write_double(arg.double_value, spec);
+ break;
+ case Arg::LONG_DOUBLE:
+ writer.write_double(arg.long_double_value, spec);
+ break;
+ case Arg::CSTRING:
+ arg.string.size = 0;
+ writer.write_str(arg.string, spec);
+ break;
+ case Arg::STRING:
+ writer.write_str(arg.string, spec);
+ break;
+ case Arg::WSTRING:
+ writer.write_str(ignore_incompatible_str<Char>(arg.wstring), spec);
+ break;
+ case Arg::POINTER:
+ if (spec.type_ && spec.type_ != 'p')
+ internal::report_unknown_type(spec.type_, "pointer");
+ spec.flags_= HASH_FLAG;
+ spec.type_ = 'x';
+ writer.write_int(reinterpret_cast<uintptr_t>(arg.pointer), spec);
+ break;
+ case Arg::CUSTOM: {
+ if (spec.type_)
+ internal::report_unknown_type(spec.type_, "object");
+ const void *str_format = "s";
+ arg.custom.format(&writer, arg.custom.value, &str_format);
+ break;
+ }
+ default:
+ assert(false);
+ break;
+ }
+ }
+ write(writer, start, s);
+}
+
+template <typename Char>
+const Char *fmt::BasicFormatter<Char>::format(
+ const Char *&format_str, const Arg &arg) {
+ const Char *s = format_str;
+ FormatSpec spec;
+ if (*s == ':') {
+ if (arg.type == Arg::CUSTOM) {
+ arg.custom.format(this, arg.custom.value, &s);
+ return s;
+ }
+ ++s;
+ // Parse fill and alignment.
+ if (Char c = *s) {
+ const Char *p = s + 1;
+ spec.align_ = ALIGN_DEFAULT;
+ do {
+ switch (*p) {
+ case '<':
+ spec.align_ = ALIGN_LEFT;
+ break;
+ case '>':
+ spec.align_ = ALIGN_RIGHT;
+ break;
+ case '=':
+ spec.align_ = ALIGN_NUMERIC;
+ break;
+ case '^':
+ spec.align_ = ALIGN_CENTER;
+ break;
+ }
+ if (spec.align_ != ALIGN_DEFAULT) {
+ if (p != s) {
+ if (c == '}') break;
+ if (c == '{')
+ FMT_THROW(FormatError("invalid fill character '{'"));
+ s += 2;
+ spec.fill_ = c;
+ } else ++s;
+ if (spec.align_ == ALIGN_NUMERIC)
+ require_numeric_argument(arg, '=');
+ break;
+ }
+ } while (--p >= s);
+ }
+
+ // Parse sign.
+ switch (*s) {
+ case '+':
+ check_sign(s, arg);
+ spec.flags_ |= SIGN_FLAG | PLUS_FLAG;
+ break;
+ case '-':
+ check_sign(s, arg);
+ spec.flags_ |= MINUS_FLAG;
+ break;
+ case ' ':
+ check_sign(s, arg);
+ spec.flags_ |= SIGN_FLAG;
+ break;
+ }
+
+ if (*s == '#') {
+ require_numeric_argument(arg, '#');
+ spec.flags_ |= HASH_FLAG;
+ ++s;
+ }
+
+ // Parse width and zero flag.
+ if ('0' <= *s && *s <= '9') {
+ if (*s == '0') {
+ require_numeric_argument(arg, '0');
+ spec.align_ = ALIGN_NUMERIC;
+ spec.fill_ = '0';
+ }
+ // Zero may be parsed again as a part of the width, but it is simpler
+ // and more efficient than checking if the next char is a digit.
+ spec.width_ = parse_nonnegative_int(s);
+ }
+
+ // Parse precision.
+ if (*s == '.') {
+ ++s;
+ spec.precision_ = 0;
+ if ('0' <= *s && *s <= '9') {
+ spec.precision_ = parse_nonnegative_int(s);
+ } else if (*s == '{') {
+ ++s;
+ const Arg &precision_arg = parse_arg_index(s);
+ if (*s++ != '}')
+ FMT_THROW(FormatError("invalid format string"));
+ ULongLong value = 0;
+ switch (precision_arg.type) {
+ case Arg::INT:
+ if (precision_arg.int_value < 0)
+ FMT_THROW(FormatError("negative precision"));
+ value = precision_arg.int_value;
+ break;
+ case Arg::UINT:
+ value = precision_arg.uint_value;
+ break;
+ case Arg::LONG_LONG:
+ if (precision_arg.long_long_value < 0)
+ FMT_THROW(FormatError("negative precision"));
+ value = precision_arg.long_long_value;
+ break;
+ case Arg::ULONG_LONG:
+ value = precision_arg.ulong_long_value;
+ break;
+ default:
+ FMT_THROW(FormatError("precision is not integer"));
+ }
+ if (value > INT_MAX)
+ FMT_THROW(FormatError("number is too big"));
+ spec.precision_ = static_cast<int>(value);
+ } else {
+ FMT_THROW(FormatError("missing precision specifier"));
+ }
+ if (arg.type < Arg::LAST_INTEGER_TYPE || arg.type == Arg::POINTER) {
+ FMT_THROW(FormatError(
+ fmt::format("precision not allowed in {} format specifier",
+ arg.type == Arg::POINTER ? "pointer" : "integer")));
+ }
+ }
+
+ // Parse type.
+ if (*s != '}' && *s)
+ spec.type_ = static_cast<char>(*s++);
+ }
+
+ if (*s++ != '}')
+ FMT_THROW(FormatError("missing '}' in format string"));
+ start_ = s;
+
+ // Format argument.
+ internal::ArgFormatter<Char>(*this, spec, s - 1).visit(arg);
+ return s;
+}
+
+template <typename Char>
+void fmt::BasicFormatter<Char>::format(
+ BasicStringRef<Char> format_str, const ArgList &args) {
+ const Char *s = start_ = format_str.c_str();
+ set_args(args);
+ while (*s) {
+ Char c = *s++;
+ if (c != '{' && c != '}') continue;
+ if (*s == c) {
+ write(writer_, start_, s);
+ start_ = ++s;
+ continue;
+ }
+ if (c == '}')
+ FMT_THROW(FormatError("unmatched '}' in format string"));
+ write(writer_, start_, s - 1);
+ Arg arg = parse_arg_index(s);
+ s = format(s, arg);
+ }
+ write(writer_, start_, s);
+}
+
+FMT_FUNC void fmt::report_system_error(
+ int error_code, fmt::StringRef message) FMT_NOEXCEPT {
+ report_error(internal::format_system_error, error_code, message);
+}
+
+#ifdef _WIN32
+FMT_FUNC void fmt::report_windows_error(
+ int error_code, fmt::StringRef message) FMT_NOEXCEPT {
+ report_error(internal::format_windows_error, error_code, message);
+}
+#endif
+
+FMT_FUNC void fmt::print(std::FILE *f, StringRef format_str, ArgList args) {
+ MemoryWriter w;
+ w.write(format_str, args);
+ std::fwrite(w.data(), 1, w.size(), f);
+}
+
+FMT_FUNC void fmt::print(StringRef format_str, ArgList args) {
+ print(stdout, format_str, args);
+}
+
+FMT_FUNC void fmt::print(std::ostream &os, StringRef format_str, ArgList args) {
+ MemoryWriter w;
+ w.write(format_str, args);
+ os.write(w.data(), w.size());
+}
+
+FMT_FUNC void fmt::print_colored(Color c, StringRef format, ArgList args) {
+ char escape[] = "\x1b[30m";
+ escape[3] = '0' + static_cast<char>(c);
+ std::fputs(escape, stdout);
+ print(format, args);
+ std::fputs(RESET_COLOR, stdout);
+}
+
+FMT_FUNC int fmt::fprintf(std::FILE *f, StringRef format, ArgList args) {
+ MemoryWriter w;
+ printf(w, format, args);
+ std::size_t size = w.size();
+ return std::fwrite(w.data(), 1, size, f) < size ? -1 : static_cast<int>(size);
+}
+
+#ifndef FMT_HEADER_ONLY
+
+// Explicit instantiations for char.
+
+template void fmt::internal::FixedBuffer<char>::grow(std::size_t);
+
+template const char *fmt::BasicFormatter<char>::format(
+ const char *&format_str, const fmt::internal::Arg &arg);
+
+template void fmt::BasicFormatter<char>::format(
+ BasicStringRef<char> format, const ArgList &args);
+
+template void fmt::internal::PrintfFormatter<char>::format(
+ BasicWriter<char> &writer, BasicStringRef<char> format, const ArgList &args);
+
+template int fmt::internal::CharTraits<char>::format_float(
+ char *buffer, std::size_t size, const char *format,
+ unsigned width, int precision, double value);
+
+template int fmt::internal::CharTraits<char>::format_float(
+ char *buffer, std::size_t size, const char *format,
+ unsigned width, int precision, long double value);
+
+// Explicit instantiations for wchar_t.
+
+template void fmt::internal::FixedBuffer<wchar_t>::grow(std::size_t);
+
+template const wchar_t *fmt::BasicFormatter<wchar_t>::format(
+ const wchar_t *&format_str, const fmt::internal::Arg &arg);
+
+template void fmt::BasicFormatter<wchar_t>::format(
+ BasicStringRef<wchar_t> format, const ArgList &args);
+
+template void fmt::internal::PrintfFormatter<wchar_t>::format(
+ BasicWriter<wchar_t> &writer, BasicStringRef<wchar_t> format,
+ const ArgList &args);
+
+template int fmt::internal::CharTraits<wchar_t>::format_float(
+ wchar_t *buffer, std::size_t size, const wchar_t *format,
+ unsigned width, int precision, double value);
+
+template int fmt::internal::CharTraits<wchar_t>::format_float(
+ wchar_t *buffer, std::size_t size, const wchar_t *format,
+ unsigned width, int precision, long double value);
+
+#endif // FMT_HEADER_ONLY
+
+#if _MSC_VER
+# pragma warning(pop)
+#endif
diff --git a/dep/cppformat/format.h b/dep/cppformat/format.h
new file mode 100644
index 00000000000..0a67f3f977d
--- /dev/null
+++ b/dep/cppformat/format.h
@@ -0,0 +1,2680 @@
+/*
+ Formatting library for C++
+
+ Copyright (c) 2012 - 2015, Victor Zverovich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FMT_FORMAT_H_
+#define FMT_FORMAT_H_
+
+#include <stdint.h>
+
+#include <cassert>
+#include <cmath>
+#include <cstddef> // for std::ptrdiff_t
+#include <cstdio>
+#include <algorithm>
+#include <limits>
+#include <stdexcept>
+#include <string>
+#include <sstream>
+
+#if _SECURE_SCL
+# include <iterator>
+#endif
+
+#ifdef _MSC_VER
+# include <intrin.h> // _BitScanReverse, _BitScanReverse64
+
+namespace fmt {
+namespace internal {
+# pragma intrinsic(_BitScanReverse)
+inline uint32_t clz(uint32_t x) {
+ unsigned long r = 0;
+ _BitScanReverse(&r, x);
+ return 31 - r;
+}
+# define FMT_BUILTIN_CLZ(n) fmt::internal::clz(n)
+
+# ifdef _WIN64
+# pragma intrinsic(_BitScanReverse64)
+# endif
+
+inline uint32_t clzll(uint64_t x) {
+ unsigned long r = 0;
+# ifdef _WIN64
+ _BitScanReverse64(&r, x);
+# else
+ // Scan the high 32 bits.
+ if (_BitScanReverse(&r, static_cast<uint32_t>(x >> 32)))
+ return 63 - (r + 32);
+
+ // Scan the low 32 bits.
+ _BitScanReverse(&r, static_cast<uint32_t>(x));
+# endif
+ return 63 - r;
+}
+# define FMT_BUILTIN_CLZLL(n) fmt::internal::clzll(n)
+}
+}
+#endif
+
+#ifdef __GNUC__
+# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+# define FMT_GCC_EXTENSION __extension__
+# if FMT_GCC_VERSION >= 406
+# pragma GCC diagnostic push
+// Disable the warning about "long long" which is sometimes reported even
+// when using __extension__.
+# pragma GCC diagnostic ignored "-Wlong-long"
+// Disable the warning about declaration shadowing because it affects too
+// many valid cases.
+# pragma GCC diagnostic ignored "-Wshadow"
+# endif
+# if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__
+# define FMT_HAS_GXX_CXX11 1
+# endif
+#else
+# define FMT_GCC_EXTENSION
+#endif
+
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wdocumentation"
+#endif
+
+#ifdef __GNUC_LIBSTD__
+# define FMT_GNUC_LIBSTD_VERSION (__GNUC_LIBSTD__ * 100 + __GNUC_LIBSTD_MINOR__)
+#endif
+
+#ifdef __has_feature
+# define FMT_HAS_FEATURE(x) __has_feature(x)
+#else
+# define FMT_HAS_FEATURE(x) 0
+#endif
+
+#ifdef __has_builtin
+# define FMT_HAS_BUILTIN(x) __has_builtin(x)
+#else
+# define FMT_HAS_BUILTIN(x) 0
+#endif
+
+#ifdef __has_cpp_attribute
+# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
+#else
+# define FMT_HAS_CPP_ATTRIBUTE(x) 0
+#endif
+
+#ifndef FMT_USE_VARIADIC_TEMPLATES
+// Variadic templates are available in GCC since version 4.4
+// (http://gcc.gnu.org/projects/cxx0x.html) and in Visual C++
+// since version 2013.
+# define FMT_USE_VARIADIC_TEMPLATES \
+ (FMT_HAS_FEATURE(cxx_variadic_templates) || \
+ (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800)
+#endif
+
+#ifndef FMT_USE_RVALUE_REFERENCES
+// Don't use rvalue references when compiling with clang and an old libstdc++
+// as the latter doesn't provide std::move.
+# if defined(FMT_GNUC_LIBSTD_VERSION) && FMT_GNUC_LIBSTD_VERSION <= 402
+# define FMT_USE_RVALUE_REFERENCES 0
+# else
+# define FMT_USE_RVALUE_REFERENCES \
+ (FMT_HAS_FEATURE(cxx_rvalue_references) || \
+ (FMT_GCC_VERSION >= 403 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1600)
+# endif
+#endif
+
+#if FMT_USE_RVALUE_REFERENCES
+# include <utility> // for std::move
+#endif
+
+// Define FMT_USE_NOEXCEPT to make C++ Format use noexcept (C++11 feature).
+#if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \
+ (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11)
+# define FMT_NOEXCEPT noexcept
+#else
+# define FMT_NOEXCEPT throw()
+#endif
+
+// A macro to disallow the copy constructor and operator= functions
+// This should be used in the private: declarations for a class
+#if FMT_USE_DELETED_FUNCTIONS || FMT_HAS_FEATURE(cxx_deleted_functions) || \
+ (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800
+# define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \
+ TypeName(const TypeName&) = delete; \
+ TypeName& operator=(const TypeName&) = delete
+#else
+# define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \
+ TypeName(const TypeName&); \
+ TypeName& operator=(const TypeName&)
+#endif
+
+namespace fmt {
+
+// Fix the warning about long long on older versions of GCC
+// that don't support the diagnostic pragma.
+FMT_GCC_EXTENSION typedef long long LongLong;
+FMT_GCC_EXTENSION typedef unsigned long long ULongLong;
+
+#if FMT_USE_RVALUE_REFERENCES
+using std::move;
+#endif
+
+template <typename Char>
+class BasicWriter;
+
+typedef BasicWriter<char> Writer;
+typedef BasicWriter<wchar_t> WWriter;
+
+template <typename Char>
+class BasicFormatter;
+
+template <typename Char, typename T>
+void format(BasicFormatter<Char> &f, const Char *&format_str, const T &value);
+
+/**
+ \rst
+ A string reference. It can be constructed from a C string or
+ ``std::string``.
+
+ You can use one of the following typedefs for common character types:
+
+ +------------+-------------------------+
+ | Type | Definition |
+ +============+=========================+
+ | StringRef | BasicStringRef<char> |
+ +------------+-------------------------+
+ | WStringRef | BasicStringRef<wchar_t> |
+ +------------+-------------------------+
+
+ This class is most useful as a parameter type to allow passing
+ different types of strings to a function, for example::
+
+ template <typename... Args>
+ std::string format(StringRef format_str, const Args & ... args);
+
+ format("{}", 42);
+ format(std::string("{}"), 42);
+ \endrst
+ */
+template <typename Char>
+class BasicStringRef {
+ private:
+ const Char *data_;
+ std::size_t size_;
+
+ public:
+ /**
+ Constructs a string reference object from a C string and a size.
+ */
+ BasicStringRef(const Char *s, std::size_t size) : data_(s), size_(size) {}
+
+ /**
+ Constructs a string reference object from a C string computing
+ the size with ``std::char_traits<Char>::length``.
+ */
+ BasicStringRef(const Char *s)
+ : data_(s), size_(std::char_traits<Char>::length(s)) {}
+
+ /**
+ Constructs a string reference from an `std::string` object.
+ */
+ BasicStringRef(const std::basic_string<Char> &s)
+ : data_(s.c_str()), size_(s.size()) {}
+
+ /**
+ Converts a string reference to an `std::string` object.
+ */
+ operator std::basic_string<Char>() const {
+ return std::basic_string<Char>(data_, size());
+ }
+
+ /**
+ Returns the pointer to a C string.
+ */
+ const Char *c_str() const { return data_; }
+
+ /**
+ Returns the string size.
+ */
+ std::size_t size() const { return size_; }
+
+ friend bool operator==(BasicStringRef lhs, BasicStringRef rhs) {
+ return lhs.data_ == rhs.data_;
+ }
+ friend bool operator!=(BasicStringRef lhs, BasicStringRef rhs) {
+ return lhs.data_ != rhs.data_;
+ }
+};
+
+typedef BasicStringRef<char> StringRef;
+typedef BasicStringRef<wchar_t> WStringRef;
+
+/**
+ A formatting error such as invalid format string.
+*/
+class FormatError : public std::runtime_error {
+ public:
+ explicit FormatError(StringRef message)
+ : std::runtime_error(message.c_str()) {}
+};
+
+namespace internal {
+
+// The number of characters to store in the MemoryBuffer object itself
+// to avoid dynamic memory allocation.
+enum { INLINE_BUFFER_SIZE = 500 };
+
+#if _SECURE_SCL
+// Use checked iterator to avoid warnings on MSVC.
+template <typename T>
+inline stdext::checked_array_iterator<T*> make_ptr(T *ptr, std::size_t size) {
+ return stdext::checked_array_iterator<T*>(ptr, size);
+}
+#else
+template <typename T>
+inline T *make_ptr(T *ptr, std::size_t) { return ptr; }
+#endif
+
+// A buffer for POD types. It supports a subset of std::vector's operations.
+template <typename T>
+class Buffer {
+ private:
+ FMT_DISALLOW_COPY_AND_ASSIGN(Buffer);
+
+ protected:
+ T *ptr_;
+ std::size_t size_;
+ std::size_t capacity_;
+
+ Buffer(T *ptr = 0, std::size_t capacity = 0)
+ : ptr_(ptr), size_(0), capacity_(capacity) {}
+
+ virtual void grow(std::size_t size) = 0;
+
+ public:
+ virtual ~Buffer() {}
+
+ // Returns the size of this buffer.
+ std::size_t size() const { return size_; }
+
+ // Returns the capacity of this buffer.
+ std::size_t capacity() const { return capacity_; }
+
+ // Resizes the buffer. If T is a POD type new elements are not initialized.
+ void resize(std::size_t new_size) {
+ if (new_size > capacity_)
+ grow(new_size);
+ size_ = new_size;
+ }
+
+ // Reserves space to store at least capacity elements.
+ void reserve(std::size_t capacity) {
+ if (capacity > capacity_)
+ grow(capacity);
+ }
+
+ void clear() FMT_NOEXCEPT { size_ = 0; }
+
+ void push_back(const T &value) {
+ if (size_ == capacity_)
+ grow(size_ + 1);
+ ptr_[size_++] = value;
+ }
+
+ // Appends data to the end of the buffer.
+ void append(const T *begin, const T *end);
+
+ T &operator[](std::size_t index) { return ptr_[index]; }
+ const T &operator[](std::size_t index) const { return ptr_[index]; }
+};
+
+template <typename T>
+void Buffer<T>::append(const T *begin, const T *end) {
+ std::ptrdiff_t num_elements = end - begin;
+ if (size_ + num_elements > capacity_)
+ grow(size_ + num_elements);
+ std::copy(begin, end, make_ptr(ptr_, capacity_) + size_);
+ size_ += num_elements;
+}
+
+// A memory buffer for POD types with the first SIZE elements stored in
+// the object itself.
+template <typename T, std::size_t SIZE, typename Allocator = std::allocator<T> >
+class MemoryBuffer : private Allocator, public Buffer<T> {
+ private:
+ T data_[SIZE];
+
+ // Free memory allocated by the buffer.
+ void free() {
+ if (this->ptr_ != data_) this->deallocate(this->ptr_, this->capacity_);
+ }
+
+ protected:
+ void grow(std::size_t size);
+
+ public:
+ explicit MemoryBuffer(const Allocator &alloc = Allocator())
+ : Allocator(alloc), Buffer<T>(data_, SIZE) {}
+ ~MemoryBuffer() { free(); }
+
+#if FMT_USE_RVALUE_REFERENCES
+ private:
+ // Move data from other to this buffer.
+ void move(MemoryBuffer &other) {
+ Allocator &this_alloc = *this, &other_alloc = other;
+ this_alloc = std::move(other_alloc);
+ this->size_ = other.size_;
+ this->capacity_ = other.capacity_;
+ if (other.ptr_ == other.data_) {
+ this->ptr_ = data_;
+ std::copy(other.data_,
+ other.data_ + this->size_, make_ptr(data_, this->capacity_));
+ } else {
+ this->ptr_ = other.ptr_;
+ // Set pointer to the inline array so that delete is not called
+ // when freeing.
+ other.ptr_ = other.data_;
+ }
+ }
+
+ public:
+ MemoryBuffer(MemoryBuffer &&other) {
+ move(other);
+ }
+
+ MemoryBuffer &operator=(MemoryBuffer &&other) {
+ assert(this != &other);
+ free();
+ move(other);
+ return *this;
+ }
+#endif
+
+ // Returns a copy of the allocator associated with this buffer.
+ Allocator get_allocator() const { return *this; }
+};
+
+template <typename T, std::size_t SIZE, typename Allocator>
+void MemoryBuffer<T, SIZE, Allocator>::grow(std::size_t size) {
+ std::size_t new_capacity =
+ (std::max)(size, this->capacity_ + this->capacity_ / 2);
+ T *new_ptr = this->allocate(new_capacity);
+ // The following code doesn't throw, so the raw pointer above doesn't leak.
+ std::copy(this->ptr_,
+ this->ptr_ + this->size_, make_ptr(new_ptr, new_capacity));
+ std::size_t old_capacity = this->capacity_;
+ T *old_ptr = this->ptr_;
+ this->capacity_ = new_capacity;
+ this->ptr_ = new_ptr;
+ // deallocate may throw (at least in principle), but it doesn't matter since
+ // the buffer already uses the new storage and will deallocate it in case
+ // of exception.
+ if (old_ptr != data_)
+ this->deallocate(old_ptr, old_capacity);
+}
+
+// A fixed-size buffer.
+template <typename Char>
+class FixedBuffer : public fmt::internal::Buffer<Char> {
+ public:
+ FixedBuffer(Char *array, std::size_t size)
+ : fmt::internal::Buffer<Char>(array, size) {}
+
+ protected:
+ void grow(std::size_t size);
+};
+
+#ifndef _MSC_VER
+// Portable version of signbit.
+inline int getsign(double x) {
+ // When compiled in C++11 mode signbit is no longer a macro but a function
+ // defined in namespace std and the macro is undefined.
+# ifdef signbit
+ return signbit(x);
+# else
+ return std::signbit(x);
+# endif
+}
+
+// Portable version of isinf.
+# ifdef isinf
+inline int isinfinity(double x) { return isinf(x); }
+inline int isinfinity(long double x) { return isinf(x); }
+# else
+inline int isinfinity(double x) { return std::isinf(x); }
+inline int isinfinity(long double x) { return std::isinf(x); }
+# endif
+#else
+inline int getsign(double value) {
+ if (value < 0) return 1;
+ if (value == value) return 0;
+ int dec = 0, sign = 0;
+ char buffer[2]; // The buffer size must be >= 2 or _ecvt_s will fail.
+ _ecvt_s(buffer, sizeof(buffer), value, 0, &dec, &sign);
+ return sign;
+}
+inline int isinfinity(double x) { return !_finite(x); }
+inline int isinfinity(long double x) { return !_finite(static_cast<double>(x)); }
+#endif
+
+template <typename Char>
+class BasicCharTraits {
+ public:
+#if _SECURE_SCL
+ typedef stdext::checked_array_iterator<Char*> CharPtr;
+#else
+ typedef Char *CharPtr;
+#endif
+};
+
+template <typename Char>
+class CharTraits;
+
+template <>
+class CharTraits<char> : public BasicCharTraits<char> {
+ private:
+ // Conversion from wchar_t to char is not allowed.
+ static char convert(wchar_t);
+
+public:
+ static char convert(char value) { return value; }
+
+ // Formats a floating-point number.
+ template <typename T>
+ static int format_float(char *buffer, std::size_t size,
+ const char *format, unsigned width, int precision, T value);
+};
+
+template <>
+class CharTraits<wchar_t> : public BasicCharTraits<wchar_t> {
+ public:
+ static wchar_t convert(char value) { return value; }
+ static wchar_t convert(wchar_t value) { return value; }
+
+ template <typename T>
+ static int format_float(wchar_t *buffer, std::size_t size,
+ const wchar_t *format, unsigned width, int precision, T value);
+};
+
+// Checks if a number is negative - used to avoid warnings.
+template <bool IsSigned>
+struct SignChecker {
+ template <typename T>
+ static bool is_negative(T value) { return value < 0; }
+};
+
+template <>
+struct SignChecker<false> {
+ template <typename T>
+ static bool is_negative(T) { return false; }
+};
+
+// Returns true if value is negative, false otherwise.
+// Same as (value < 0) but doesn't produce warnings if T is an unsigned type.
+template <typename T>
+inline bool is_negative(T value) {
+ return SignChecker<std::numeric_limits<T>::is_signed>::is_negative(value);
+}
+
+// Selects uint32_t if FitsIn32Bits is true, uint64_t otherwise.
+template <bool FitsIn32Bits>
+struct TypeSelector { typedef uint32_t Type; };
+
+template <>
+struct TypeSelector<false> { typedef uint64_t Type; };
+
+template <typename T>
+struct IntTraits {
+ // Smallest of uint32_t and uint64_t that is large enough to represent
+ // all values of T.
+ typedef typename
+ TypeSelector<std::numeric_limits<T>::digits <= 32>::Type MainType;
+};
+
+// MakeUnsigned<T>::Type gives an unsigned type corresponding to integer type T.
+template <typename T>
+struct MakeUnsigned { typedef T Type; };
+
+#define FMT_SPECIALIZE_MAKE_UNSIGNED(T, U) \
+ template <> \
+ struct MakeUnsigned<T> { typedef U Type; }
+
+FMT_SPECIALIZE_MAKE_UNSIGNED(char, unsigned char);
+FMT_SPECIALIZE_MAKE_UNSIGNED(signed char, unsigned char);
+FMT_SPECIALIZE_MAKE_UNSIGNED(short, unsigned short);
+FMT_SPECIALIZE_MAKE_UNSIGNED(int, unsigned);
+FMT_SPECIALIZE_MAKE_UNSIGNED(long, unsigned long);
+FMT_SPECIALIZE_MAKE_UNSIGNED(LongLong, ULongLong);
+
+void report_unknown_type(char code, const char *type);
+
+// Static data is placed in this class template to allow header-only
+// configuration.
+template <typename T = void>
+struct BasicData {
+ static const uint32_t POWERS_OF_10_32[];
+ static const uint64_t POWERS_OF_10_64[];
+ static const char DIGITS[];
+};
+
+typedef BasicData<> Data;
+
+#if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clz)
+# define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
+#endif
+
+#if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clzll)
+# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)
+#endif
+
+#ifdef FMT_BUILTIN_CLZLL
+// Returns the number of decimal digits in n. Leading zeros are not counted
+// except for n == 0 in which case count_digits returns 1.
+inline unsigned count_digits(uint64_t n) {
+ // Based on http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10
+ // and the benchmark https://github.com/localvoid/cxx-benchmark-count-digits.
+ unsigned t = (64 - FMT_BUILTIN_CLZLL(n | 1)) * 1233 >> 12;
+ return t - (n < Data::POWERS_OF_10_64[t]) + 1;
+}
+#else
+// Fallback version of count_digits used when __builtin_clz is not available.
+inline unsigned count_digits(uint64_t n) {
+ unsigned count = 1;
+ for (;;) {
+ // Integer division is slow so do it for a group of four digits instead
+ // of for every digit. The idea comes from the talk by Alexandrescu
+ // "Three Optimization Tips for C++". See speed-test for a comparison.
+ if (n < 10) return count;
+ if (n < 100) return count + 1;
+ if (n < 1000) return count + 2;
+ if (n < 10000) return count + 3;
+ n /= 10000u;
+ count += 4;
+ }
+}
+#endif
+
+#ifdef FMT_BUILTIN_CLZ
+// Optional version of count_digits for better performance on 32-bit platforms.
+inline unsigned count_digits(uint32_t n) {
+ uint32_t t = (32 - FMT_BUILTIN_CLZ(n | 1)) * 1233 >> 12;
+ return t - (n < Data::POWERS_OF_10_32[t]) + 1;
+}
+#endif
+
+// Formats a decimal unsigned integer value writing into buffer.
+template <typename UInt, typename Char>
+inline void format_decimal(Char *buffer, UInt value, unsigned num_digits) {
+ --num_digits;
+ while (value >= 100) {
+ // Integer division is slow so do it for a group of two digits instead
+ // of for every digit. The idea comes from the talk by Alexandrescu
+ // "Three Optimization Tips for C++". See speed-test for a comparison.
+ unsigned index = (value % 100) * 2;
+ value /= 100;
+ buffer[num_digits] = Data::DIGITS[index + 1];
+ buffer[num_digits - 1] = Data::DIGITS[index];
+ num_digits -= 2;
+ }
+ if (value < 10) {
+ *buffer = static_cast<char>('0' + value);
+ return;
+ }
+ unsigned index = static_cast<unsigned>(value * 2);
+ buffer[1] = Data::DIGITS[index + 1];
+ buffer[0] = Data::DIGITS[index];
+}
+
+#ifdef _WIN32
+// A converter from UTF-8 to UTF-16.
+// It is only provided for Windows since other systems support UTF-8 natively.
+class UTF8ToUTF16 {
+ private:
+ MemoryBuffer<wchar_t, INLINE_BUFFER_SIZE> buffer_;
+
+ public:
+ explicit UTF8ToUTF16(StringRef s);
+ operator WStringRef() const { return WStringRef(&buffer_[0], size()); }
+ size_t size() const { return buffer_.size() - 1; }
+ const wchar_t *c_str() const { return &buffer_[0]; }
+ std::wstring str() const { return std::wstring(&buffer_[0], size()); }
+};
+
+// A converter from UTF-16 to UTF-8.
+// It is only provided for Windows since other systems support UTF-8 natively.
+class UTF16ToUTF8 {
+ private:
+ MemoryBuffer<char, INLINE_BUFFER_SIZE> buffer_;
+
+ public:
+ UTF16ToUTF8() {}
+ explicit UTF16ToUTF8(WStringRef s);
+ operator StringRef() const { return StringRef(&buffer_[0], size()); }
+ size_t size() const { return buffer_.size() - 1; }
+ const char *c_str() const { return &buffer_[0]; }
+ std::string str() const { return std::string(&buffer_[0], size()); }
+
+ // Performs conversion returning a system error code instead of
+ // throwing exception on conversion error. This method may still throw
+ // in case of memory allocation error.
+ int convert(WStringRef s);
+};
+#endif
+
+void format_system_error(fmt::Writer &out, int error_code,
+ fmt::StringRef message) FMT_NOEXCEPT;
+
+#ifdef _WIN32
+void format_windows_error(fmt::Writer &out, int error_code,
+ fmt::StringRef message) FMT_NOEXCEPT;
+#endif
+
+// Computes max(Arg, 1) at compile time. It is used to avoid errors about
+// allocating an array of 0 size.
+template <unsigned Arg>
+struct NonZero {
+ enum { VALUE = Arg };
+};
+
+template <>
+struct NonZero<0> {
+ enum { VALUE = 1 };
+};
+
+// The value of a formatting argument. It is a POD type to allow storage in
+// internal::MemoryBuffer.
+struct Value {
+ template <typename Char>
+ struct StringValue {
+ const Char *value;
+ std::size_t size;
+ };
+
+ typedef void (*FormatFunc)(
+ void *formatter, const void *arg, void *format_str_ptr);
+
+ struct CustomValue {
+ const void *value;
+ FormatFunc format;
+ };
+
+ union {
+ int int_value;
+ unsigned uint_value;
+ LongLong long_long_value;
+ ULongLong ulong_long_value;
+ double double_value;
+ long double long_double_value;
+ const void *pointer;
+ StringValue<char> string;
+ StringValue<signed char> sstring;
+ StringValue<unsigned char> ustring;
+ StringValue<wchar_t> wstring;
+ CustomValue custom;
+ };
+};
+
+struct Arg : Value {
+ enum Type {
+ NONE,
+ // Integer types should go first,
+ INT, UINT, LONG_LONG, ULONG_LONG, CHAR, LAST_INTEGER_TYPE = CHAR,
+ // followed by floating-point types.
+ DOUBLE, LONG_DOUBLE, LAST_NUMERIC_TYPE = LONG_DOUBLE,
+ CSTRING, STRING, WSTRING, POINTER, CUSTOM
+ };
+ Type type;
+};
+
+template <typename T = void>
+struct None {};
+
+// A helper class template to enable or disable overloads taking wide
+// characters and strings in MakeValue.
+template <typename T, typename Char>
+struct WCharHelper {
+ typedef None<T> Supported;
+ typedef T Unsupported;
+};
+
+template <typename T>
+struct WCharHelper<T, wchar_t> {
+ typedef T Supported;
+ typedef None<T> Unsupported;
+};
+
+template <typename T>
+class IsConvertibleToInt {
+ private:
+ typedef char yes[1];
+ typedef char no[2];
+
+ static const T &get();
+
+ static yes &check(fmt::ULongLong);
+ static no &check(...);
+
+ public:
+ enum { value = (sizeof(check(get())) == sizeof(yes)) };
+};
+
+template<bool B, class T = void>
+struct EnableIf {};
+
+template<class T>
+struct EnableIf<true, T> { typedef T type; };
+
+// Makes a Value object from any type.
+template <typename Char>
+class MakeValue : public Value {
+ private:
+ // The following two methods are private to disallow formatting of
+ // arbitrary pointers. If you want to output a pointer cast it to
+ // "void *" or "const void *". In particular, this forbids formatting
+ // of "[const] volatile char *" which is printed as bool by iostreams.
+ // Do not implement!
+ template <typename T>
+ MakeValue(const T *value);
+ template <typename T>
+ MakeValue(T *value);
+
+ // The following methods are private to disallow formatting of wide
+ // characters and strings into narrow strings as in
+ // fmt::format("{}", L"test");
+ // To fix this, use a wide format string: fmt::format(L"{}", L"test").
+ MakeValue(typename WCharHelper<wchar_t, Char>::Unsupported);
+ MakeValue(typename WCharHelper<wchar_t *, Char>::Unsupported);
+ MakeValue(typename WCharHelper<const wchar_t *, Char>::Unsupported);
+ MakeValue(typename WCharHelper<const std::wstring &, Char>::Unsupported);
+ MakeValue(typename WCharHelper<WStringRef, Char>::Unsupported);
+
+ void set_string(StringRef str) {
+ string.value = str.c_str();
+ string.size = str.size();
+ }
+
+ void set_string(WStringRef str) {
+ wstring.value = str.c_str();
+ wstring.size = str.size();
+ }
+
+ // Formats an argument of a custom type, such as a user-defined class.
+ template <typename T>
+ static void format_custom_arg(
+ void *formatter, const void *arg, void *format_str_ptr) {
+ format(*static_cast<BasicFormatter<Char>*>(formatter),
+ *static_cast<const Char**>(format_str_ptr),
+ *static_cast<const T*>(arg));
+ }
+
+ public:
+ MakeValue() {}
+
+#define FMT_MAKE_VALUE(Type, field, TYPE) \
+ MakeValue(Type value) { field = value; } \
+ static uint64_t type(Type) { return Arg::TYPE; }
+
+ FMT_MAKE_VALUE(bool, int_value, INT)
+ FMT_MAKE_VALUE(short, int_value, INT)
+ FMT_MAKE_VALUE(unsigned short, uint_value, UINT)
+ FMT_MAKE_VALUE(int, int_value, INT)
+ FMT_MAKE_VALUE(unsigned, uint_value, UINT)
+
+ MakeValue(long value) {
+ // To minimize the number of types we need to deal with, long is
+ // translated either to int or to long long depending on its size.
+ if (sizeof(long) == sizeof(int))
+ int_value = static_cast<int>(value);
+ else
+ long_long_value = value;
+ }
+ static uint64_t type(long) {
+ return sizeof(long) == sizeof(int) ? Arg::INT : Arg::LONG_LONG;
+ }
+
+ MakeValue(unsigned long value) {
+ if (sizeof(unsigned long) == sizeof(unsigned))
+ uint_value = static_cast<unsigned>(value);
+ else
+ ulong_long_value = value;
+ }
+ static uint64_t type(unsigned long) {
+ return sizeof(unsigned long) == sizeof(unsigned) ?
+ Arg::UINT : Arg::ULONG_LONG;
+ }
+
+ FMT_MAKE_VALUE(LongLong, long_long_value, LONG_LONG)
+ FMT_MAKE_VALUE(ULongLong, ulong_long_value, ULONG_LONG)
+ FMT_MAKE_VALUE(float, double_value, DOUBLE)
+ FMT_MAKE_VALUE(double, double_value, DOUBLE)
+ FMT_MAKE_VALUE(long double, long_double_value, LONG_DOUBLE)
+ FMT_MAKE_VALUE(signed char, int_value, CHAR)
+ FMT_MAKE_VALUE(unsigned char, int_value, CHAR)
+ FMT_MAKE_VALUE(char, int_value, CHAR)
+
+ MakeValue(typename WCharHelper<wchar_t, Char>::Supported value) {
+ int_value = value;
+ }
+ static uint64_t type(wchar_t) { return Arg::CHAR; }
+
+#define FMT_MAKE_STR_VALUE(Type, TYPE) \
+ MakeValue(Type value) { set_string(value); } \
+ static uint64_t type(Type) { return Arg::TYPE; }
+
+ FMT_MAKE_VALUE(char *, string.value, CSTRING)
+ FMT_MAKE_VALUE(const char *, string.value, CSTRING)
+ FMT_MAKE_VALUE(const signed char *, sstring.value, CSTRING)
+ FMT_MAKE_VALUE(const unsigned char *, ustring.value, CSTRING)
+ FMT_MAKE_STR_VALUE(const std::string &, STRING)
+ FMT_MAKE_STR_VALUE(StringRef, STRING)
+
+#define FMT_MAKE_WSTR_VALUE(Type, TYPE) \
+ MakeValue(typename WCharHelper<Type, Char>::Supported value) { \
+ set_string(value); \
+ } \
+ static uint64_t type(Type) { return Arg::TYPE; }
+
+ FMT_MAKE_WSTR_VALUE(wchar_t *, WSTRING)
+ FMT_MAKE_WSTR_VALUE(const wchar_t *, WSTRING)
+ FMT_MAKE_WSTR_VALUE(const std::wstring &, WSTRING)
+ FMT_MAKE_WSTR_VALUE(WStringRef, WSTRING)
+
+ FMT_MAKE_VALUE(void *, pointer, POINTER)
+ FMT_MAKE_VALUE(const void *, pointer, POINTER)
+
+ template <typename T>
+ MakeValue(const T &value,
+ typename EnableIf<!IsConvertibleToInt<T>::value, int>::type = 0) {
+ custom.value = &value;
+ custom.format = &format_custom_arg<T>;
+ }
+
+ template <typename T>
+ MakeValue(const T &value,
+ typename EnableIf<IsConvertibleToInt<T>::value, int>::type = 0) {
+ int_value = value;
+ }
+
+ template <typename T>
+ static uint64_t type(const T &) {
+ return IsConvertibleToInt<T>::value ? Arg::INT : Arg::CUSTOM;
+ }
+};
+
+#define FMT_DISPATCH(call) static_cast<Impl*>(this)->call
+
+// An argument visitor.
+// To use ArgVisitor define a subclass that implements some or all of the
+// visit methods with the same signatures as the methods in ArgVisitor,
+// for example, visit_int(int).
+// Specify the subclass name as the Impl template parameter. Then calling
+// ArgVisitor::visit for some argument will dispatch to a visit method
+// specific to the argument type. For example, if the argument type is
+// double then visit_double(double) method of a subclass will be called.
+// If the subclass doesn't contain a method with this signature, then
+// a corresponding method of ArgVisitor will be called.
+//
+// Example:
+// class MyArgVisitor : public ArgVisitor<MyArgVisitor, void> {
+// public:
+// void visit_int(int value) { print("{}", value); }
+// void visit_double(double value) { print("{}", value ); }
+// };
+//
+// ArgVisitor uses the curiously recurring template pattern:
+// http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern
+template <typename Impl, typename Result>
+class ArgVisitor {
+ public:
+ Result visit_unhandled_arg() { return Result(); }
+
+ Result visit_int(int value) {
+ return FMT_DISPATCH(visit_any_int(value));
+ }
+ Result visit_long_long(LongLong value) {
+ return FMT_DISPATCH(visit_any_int(value));
+ }
+ Result visit_uint(unsigned value) {
+ return FMT_DISPATCH(visit_any_int(value));
+ }
+ Result visit_ulong_long(ULongLong value) {
+ return FMT_DISPATCH(visit_any_int(value));
+ }
+ Result visit_char(int value) {
+ return FMT_DISPATCH(visit_any_int(value));
+ }
+ template <typename T>
+ Result visit_any_int(T) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
+
+ Result visit_double(double value) {
+ return FMT_DISPATCH(visit_any_double(value));
+ }
+ Result visit_long_double(long double value) {
+ return FMT_DISPATCH(visit_any_double(value));
+ }
+ template <typename T>
+ Result visit_any_double(T) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
+
+ Result visit_string(Arg::StringValue<char>) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
+ Result visit_wstring(Arg::StringValue<wchar_t>) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
+ Result visit_pointer(const void *) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
+ Result visit_custom(Arg::CustomValue) {
+ return FMT_DISPATCH(visit_unhandled_arg());
+ }
+
+ Result visit(const Arg &arg) {
+ switch (arg.type) {
+ default:
+ assert(false);
+ return Result();
+ case Arg::INT:
+ return FMT_DISPATCH(visit_int(arg.int_value));
+ case Arg::UINT:
+ return FMT_DISPATCH(visit_uint(arg.uint_value));
+ case Arg::LONG_LONG:
+ return FMT_DISPATCH(visit_long_long(arg.long_long_value));
+ case Arg::ULONG_LONG:
+ return FMT_DISPATCH(visit_ulong_long(arg.ulong_long_value));
+ case Arg::DOUBLE:
+ return FMT_DISPATCH(visit_double(arg.double_value));
+ case Arg::LONG_DOUBLE:
+ return FMT_DISPATCH(visit_long_double(arg.long_double_value));
+ case Arg::CHAR:
+ return FMT_DISPATCH(visit_char(arg.int_value));
+ case Arg::CSTRING: {
+ Value::StringValue<char> str = arg.string;
+ str.size = 0;
+ return FMT_DISPATCH(visit_string(str));
+ }
+ case Arg::STRING:
+ return FMT_DISPATCH(visit_string(arg.string));
+ case Arg::WSTRING:
+ return FMT_DISPATCH(visit_wstring(arg.wstring));
+ case Arg::POINTER:
+ return FMT_DISPATCH(visit_pointer(arg.pointer));
+ case Arg::CUSTOM:
+ return FMT_DISPATCH(visit_custom(arg.custom));
+ }
+ }
+};
+
+class RuntimeError : public std::runtime_error {
+ protected:
+ RuntimeError() : std::runtime_error("") {}
+};
+
+template <typename Char>
+class ArgFormatter;
+} // namespace internal
+
+/**
+ An argument list.
+ */
+class ArgList {
+ private:
+ uint64_t types_;
+ const internal::Value *values_;
+
+ public:
+ // Maximum number of arguments that can be passed in ArgList.
+ enum { MAX_ARGS = 16 };
+
+ ArgList() : types_(0) {}
+ ArgList(ULongLong types, const internal::Value *values)
+ : types_(types), values_(values) {}
+
+ /**
+ Returns the argument at specified index.
+ */
+ internal::Arg operator[](unsigned index) const {
+ using internal::Arg;
+ Arg arg;
+ if (index >= MAX_ARGS) {
+ arg.type = Arg::NONE;
+ return arg;
+ }
+ unsigned shift = index * 4;
+ uint64_t mask = 0xf;
+ Arg::Type type =
+ static_cast<Arg::Type>((types_ & (mask << shift)) >> shift);
+ arg.type = type;
+ if (type != Arg::NONE) {
+ internal::Value &value = arg;
+ value = values_[index];
+ }
+ return arg;
+ }
+};
+
+struct FormatSpec;
+
+namespace internal {
+
+class FormatterBase {
+ private:
+ ArgList args_;
+ int next_arg_index_;
+
+ // Returns the argument with specified index.
+ Arg do_get_arg(unsigned arg_index, const char *&error);
+
+ protected:
+ void set_args(const ArgList &args) {
+ args_ = args;
+ next_arg_index_ = 0;
+ }
+
+ // Returns the next argument.
+ Arg next_arg(const char *&error);
+
+ // Checks if manual indexing is used and returns the argument with
+ // specified index.
+ Arg get_arg(unsigned arg_index, const char *&error);
+
+ template <typename Char>
+ void write(BasicWriter<Char> &w, const Char *start, const Char *end) {
+ if (start != end)
+ w << BasicStringRef<Char>(start, end - start);
+ }
+};
+
+// A printf formatter.
+template <typename Char>
+class PrintfFormatter : private FormatterBase {
+ private:
+ void parse_flags(FormatSpec &spec, const Char *&s);
+
+ // Returns the argument with specified index or, if arg_index is equal
+ // to the maximum unsigned value, the next argument.
+ Arg get_arg(const Char *s,
+ unsigned arg_index = (std::numeric_limits<unsigned>::max)());
+
+ // Parses argument index, flags and width and returns the argument index.
+ unsigned parse_header(const Char *&s, FormatSpec &spec);
+
+ public:
+ void format(BasicWriter<Char> &writer,
+ BasicStringRef<Char> format_str, const ArgList &args);
+};
+} // namespace internal
+
+// A formatter.
+template <typename Char>
+class BasicFormatter : private internal::FormatterBase {
+ private:
+ BasicWriter<Char> &writer_;
+ const Char *start_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(BasicFormatter);
+
+ // Parses argument index and returns corresponding argument.
+ internal::Arg parse_arg_index(const Char *&s);
+
+ public:
+ explicit BasicFormatter(BasicWriter<Char> &w) : writer_(w) {}
+
+ BasicWriter<Char> &writer() { return writer_; }
+
+ void format(BasicStringRef<Char> format_str, const ArgList &args);
+
+ const Char *format(const Char *&format_str, const internal::Arg &arg);
+};
+
+enum Alignment {
+ ALIGN_DEFAULT, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ALIGN_NUMERIC
+};
+
+// Flags.
+enum {
+ SIGN_FLAG = 1, PLUS_FLAG = 2, MINUS_FLAG = 4, HASH_FLAG = 8,
+ CHAR_FLAG = 0x10 // Argument has char type - used in error reporting.
+};
+
+// An empty format specifier.
+struct EmptySpec {};
+
+// A type specifier.
+template <char TYPE>
+struct TypeSpec : EmptySpec {
+ Alignment align() const { return ALIGN_DEFAULT; }
+ unsigned width() const { return 0; }
+ int precision() const { return -1; }
+ bool flag(unsigned) const { return false; }
+ char type() const { return TYPE; }
+ char fill() const { return ' '; }
+};
+
+// A width specifier.
+struct WidthSpec {
+ unsigned width_;
+ // Fill is always wchar_t and cast to char if necessary to avoid having
+ // two specialization of WidthSpec and its subclasses.
+ wchar_t fill_;
+
+ WidthSpec(unsigned width, wchar_t fill) : width_(width), fill_(fill) {}
+
+ unsigned width() const { return width_; }
+ wchar_t fill() const { return fill_; }
+};
+
+// An alignment specifier.
+struct AlignSpec : WidthSpec {
+ Alignment align_;
+
+ AlignSpec(unsigned width, wchar_t fill, Alignment align = ALIGN_DEFAULT)
+ : WidthSpec(width, fill), align_(align) {}
+
+ Alignment align() const { return align_; }
+
+ int precision() const { return -1; }
+};
+
+// An alignment and type specifier.
+template <char TYPE>
+struct AlignTypeSpec : AlignSpec {
+ AlignTypeSpec(unsigned width, wchar_t fill) : AlignSpec(width, fill) {}
+
+ bool flag(unsigned) const { return false; }
+ char type() const { return TYPE; }
+};
+
+// A full format specifier.
+struct FormatSpec : AlignSpec {
+ unsigned flags_;
+ int precision_;
+ char type_;
+
+ FormatSpec(
+ unsigned width = 0, char type = 0, wchar_t fill = ' ')
+ : AlignSpec(width, fill), flags_(0), precision_(-1), type_(type) {}
+
+ bool flag(unsigned f) const { return (flags_ & f) != 0; }
+ int precision() const { return precision_; }
+ char type() const { return type_; }
+};
+
+// An integer format specifier.
+template <typename T, typename SpecT = TypeSpec<0>, typename Char = char>
+class IntFormatSpec : public SpecT {
+ private:
+ T value_;
+
+ public:
+ IntFormatSpec(T val, const SpecT &spec = SpecT())
+ : SpecT(spec), value_(val) {}
+
+ T value() const { return value_; }
+};
+
+// A string format specifier.
+template <typename T>
+class StrFormatSpec : public AlignSpec {
+ private:
+ const T *str_;
+
+ public:
+ StrFormatSpec(const T *str, unsigned width, wchar_t fill)
+ : AlignSpec(width, fill), str_(str) {}
+
+ const T *str() const { return str_; }
+};
+
+/**
+ Returns an integer format specifier to format the value in base 2.
+ */
+IntFormatSpec<int, TypeSpec<'b'> > bin(int value);
+
+/**
+ Returns an integer format specifier to format the value in base 8.
+ */
+IntFormatSpec<int, TypeSpec<'o'> > oct(int value);
+
+/**
+ Returns an integer format specifier to format the value in base 16 using
+ lower-case letters for the digits above 9.
+ */
+IntFormatSpec<int, TypeSpec<'x'> > hex(int value);
+
+/**
+ Returns an integer formatter format specifier to format in base 16 using
+ upper-case letters for the digits above 9.
+ */
+IntFormatSpec<int, TypeSpec<'X'> > hexu(int value);
+
+/**
+ \rst
+ Returns an integer format specifier to pad the formatted argument with the
+ fill character to the specified width using the default (right) numeric
+ alignment.
+
+ **Example**::
+
+ MemoryWriter out;
+ out << pad(hex(0xcafe), 8, '0');
+ // out.str() == "0000cafe"
+
+ \endrst
+ */
+template <char TYPE_CODE, typename Char>
+IntFormatSpec<int, AlignTypeSpec<TYPE_CODE>, Char> pad(
+ int value, unsigned width, Char fill = ' ');
+
+#define FMT_DEFINE_INT_FORMATTERS(TYPE) \
+inline IntFormatSpec<TYPE, TypeSpec<'b'> > bin(TYPE value) { \
+ return IntFormatSpec<TYPE, TypeSpec<'b'> >(value, TypeSpec<'b'>()); \
+} \
+ \
+inline IntFormatSpec<TYPE, TypeSpec<'o'> > oct(TYPE value) { \
+ return IntFormatSpec<TYPE, TypeSpec<'o'> >(value, TypeSpec<'o'>()); \
+} \
+ \
+inline IntFormatSpec<TYPE, TypeSpec<'x'> > hex(TYPE value) { \
+ return IntFormatSpec<TYPE, TypeSpec<'x'> >(value, TypeSpec<'x'>()); \
+} \
+ \
+inline IntFormatSpec<TYPE, TypeSpec<'X'> > hexu(TYPE value) { \
+ return IntFormatSpec<TYPE, TypeSpec<'X'> >(value, TypeSpec<'X'>()); \
+} \
+ \
+template <char TYPE_CODE> \
+inline IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE> > pad( \
+ IntFormatSpec<TYPE, TypeSpec<TYPE_CODE> > f, unsigned width) { \
+ return IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE> >( \
+ f.value(), AlignTypeSpec<TYPE_CODE>(width, ' ')); \
+} \
+ \
+/* For compatibility with older compilers we provide two overloads for pad, */ \
+/* one that takes a fill character and one that doesn't. In the future this */ \
+/* can be replaced with one overload making the template argument Char */ \
+/* default to char (C++11). */ \
+template <char TYPE_CODE, typename Char> \
+inline IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE>, Char> pad( \
+ IntFormatSpec<TYPE, TypeSpec<TYPE_CODE>, Char> f, \
+ unsigned width, Char fill) { \
+ return IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE>, Char>( \
+ f.value(), AlignTypeSpec<TYPE_CODE>(width, fill)); \
+} \
+ \
+inline IntFormatSpec<TYPE, AlignTypeSpec<0> > pad( \
+ TYPE value, unsigned width) { \
+ return IntFormatSpec<TYPE, AlignTypeSpec<0> >( \
+ value, AlignTypeSpec<0>(width, ' ')); \
+} \
+ \
+template <typename Char> \
+inline IntFormatSpec<TYPE, AlignTypeSpec<0>, Char> pad( \
+ TYPE value, unsigned width, Char fill) { \
+ return IntFormatSpec<TYPE, AlignTypeSpec<0>, Char>( \
+ value, AlignTypeSpec<0>(width, fill)); \
+}
+
+FMT_DEFINE_INT_FORMATTERS(int)
+FMT_DEFINE_INT_FORMATTERS(long)
+FMT_DEFINE_INT_FORMATTERS(unsigned)
+FMT_DEFINE_INT_FORMATTERS(unsigned long)
+FMT_DEFINE_INT_FORMATTERS(LongLong)
+FMT_DEFINE_INT_FORMATTERS(ULongLong)
+
+/**
+ \rst
+ Returns a string formatter that pads the formatted argument with the fill
+ character to the specified width using the default (left) string alignment.
+
+ **Example**::
+
+ std::string s = str(MemoryWriter() << pad("abc", 8));
+ // s == "abc "
+
+ \endrst
+ */
+template <typename Char>
+inline StrFormatSpec<Char> pad(
+ const Char *str, unsigned width, Char fill = ' ') {
+ return StrFormatSpec<Char>(str, width, fill);
+}
+
+inline StrFormatSpec<wchar_t> pad(
+ const wchar_t *str, unsigned width, char fill = ' ') {
+ return StrFormatSpec<wchar_t>(str, width, fill);
+}
+
+// Generates a comma-separated list with results of applying f to
+// numbers 0..n-1.
+# define FMT_GEN(n, f) FMT_GEN##n(f)
+# define FMT_GEN1(f) f(0)
+# define FMT_GEN2(f) FMT_GEN1(f), f(1)
+# define FMT_GEN3(f) FMT_GEN2(f), f(2)
+# define FMT_GEN4(f) FMT_GEN3(f), f(3)
+# define FMT_GEN5(f) FMT_GEN4(f), f(4)
+# define FMT_GEN6(f) FMT_GEN5(f), f(5)
+# define FMT_GEN7(f) FMT_GEN6(f), f(6)
+# define FMT_GEN8(f) FMT_GEN7(f), f(7)
+# define FMT_GEN9(f) FMT_GEN8(f), f(8)
+# define FMT_GEN10(f) FMT_GEN9(f), f(9)
+# define FMT_GEN11(f) FMT_GEN10(f), f(10)
+# define FMT_GEN12(f) FMT_GEN11(f), f(11)
+# define FMT_GEN13(f) FMT_GEN12(f), f(12)
+# define FMT_GEN14(f) FMT_GEN13(f), f(13)
+# define FMT_GEN15(f) FMT_GEN14(f), f(14)
+
+namespace internal {
+inline uint64_t make_type() { return 0; }
+
+template <typename T>
+inline uint64_t make_type(const T &arg) { return MakeValue<char>::type(arg); }
+
+#if FMT_USE_VARIADIC_TEMPLATES
+template <typename Arg, typename... Args>
+inline uint64_t make_type(const Arg &first, const Args & ... tail) {
+ return make_type(first) | (make_type(tail...) << 4);
+}
+#else
+
+struct ArgType {
+ uint64_t type;
+
+ ArgType() : type(0) {}
+
+ template <typename T>
+ ArgType(const T &arg) : type(make_type(arg)) {}
+};
+
+# define FMT_ARG_TYPE_DEFAULT(n) ArgType t##n = ArgType()
+
+inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) {
+ return t0.type | (t1.type << 4) | (t2.type << 8) | (t3.type << 12) |
+ (t4.type << 16) | (t5.type << 20) | (t6.type << 24) | (t7.type << 28) |
+ (t8.type << 32) | (t9.type << 36) | (t10.type << 40) | (t11.type << 44) |
+ (t12.type << 48) | (t13.type << 52) | (t14.type << 56);
+}
+#endif
+} // namespace internal
+
+# define FMT_MAKE_TEMPLATE_ARG(n) typename T##n
+# define FMT_MAKE_ARG_TYPE(n) T##n
+# define FMT_MAKE_ARG(n) const T##n &v##n
+# define FMT_MAKE_REF_char(n) fmt::internal::MakeValue<char>(v##n)
+# define FMT_MAKE_REF_wchar_t(n) fmt::internal::MakeValue<wchar_t>(v##n)
+
+#if FMT_USE_VARIADIC_TEMPLATES
+// Defines a variadic function returning void.
+# define FMT_VARIADIC_VOID(func, arg_type) \
+ template <typename... Args> \
+ void func(arg_type arg1, const Args & ... args) { \
+ const fmt::internal::Value values[ \
+ fmt::internal::NonZero<sizeof...(Args)>::VALUE] = { \
+ fmt::internal::MakeValue<Char>(args)... \
+ }; \
+ func(arg1, ArgList(fmt::internal::make_type(args...), values)); \
+ }
+
+// Defines a variadic constructor.
+# define FMT_VARIADIC_CTOR(ctor, func, arg0_type, arg1_type) \
+ template <typename... Args> \
+ ctor(arg0_type arg0, arg1_type arg1, const Args & ... args) { \
+ using fmt::internal::MakeValue; \
+ const fmt::internal::Value values[ \
+ fmt::internal::NonZero<sizeof...(Args)>::VALUE] = { \
+ MakeValue<Char>(args)... \
+ }; \
+ func(arg0, arg1, ArgList(fmt::internal::make_type(args...), values)); \
+ }
+
+#else
+
+# define FMT_MAKE_REF(n) fmt::internal::MakeValue<Char>(v##n)
+# define FMT_MAKE_REF2(n) v##n
+
+// Defines a wrapper for a function taking one argument of type arg_type
+// and n additional arguments of arbitrary types.
+# define FMT_WRAP1(func, arg_type, n) \
+ template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \
+ inline void func(arg_type arg1, FMT_GEN(n, FMT_MAKE_ARG)) { \
+ const fmt::internal::Value vals[] = {FMT_GEN(n, FMT_MAKE_REF)}; \
+ func(arg1, fmt::ArgList( \
+ fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), vals)); \
+ }
+
+// Emulates a variadic function returning void on a pre-C++11 compiler.
+# define FMT_VARIADIC_VOID(func, arg_type) \
+ inline void func(arg_type arg) { func(arg, fmt::ArgList()); } \
+ FMT_WRAP1(func, arg_type, 1) FMT_WRAP1(func, arg_type, 2) \
+ FMT_WRAP1(func, arg_type, 3) FMT_WRAP1(func, arg_type, 4) \
+ FMT_WRAP1(func, arg_type, 5) FMT_WRAP1(func, arg_type, 6) \
+ FMT_WRAP1(func, arg_type, 7) FMT_WRAP1(func, arg_type, 8) \
+ FMT_WRAP1(func, arg_type, 9) FMT_WRAP1(func, arg_type, 10)
+
+# define FMT_CTOR(ctor, func, arg0_type, arg1_type, n) \
+ template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \
+ ctor(arg0_type arg0, arg1_type arg1, FMT_GEN(n, FMT_MAKE_ARG)) { \
+ const fmt::internal::Value vals[] = {FMT_GEN(n, FMT_MAKE_REF)}; \
+ func(arg0, arg1, fmt::ArgList( \
+ fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), vals)); \
+ }
+
+// Emulates a variadic constructor on a pre-C++11 compiler.
+# define FMT_VARIADIC_CTOR(ctor, func, arg0_type, arg1_type) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 1) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 2) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 3) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 4) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 5) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 6) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 7) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 8) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 9) \
+ FMT_CTOR(ctor, func, arg0_type, arg1_type, 10)
+#endif
+
+// Generates a comma-separated list with results of applying f to pairs
+// (argument, index).
+#define FMT_FOR_EACH1(f, x0) f(x0, 0)
+#define FMT_FOR_EACH2(f, x0, x1) \
+ FMT_FOR_EACH1(f, x0), f(x1, 1)
+#define FMT_FOR_EACH3(f, x0, x1, x2) \
+ FMT_FOR_EACH2(f, x0 ,x1), f(x2, 2)
+#define FMT_FOR_EACH4(f, x0, x1, x2, x3) \
+ FMT_FOR_EACH3(f, x0, x1, x2), f(x3, 3)
+#define FMT_FOR_EACH5(f, x0, x1, x2, x3, x4) \
+ FMT_FOR_EACH4(f, x0, x1, x2, x3), f(x4, 4)
+#define FMT_FOR_EACH6(f, x0, x1, x2, x3, x4, x5) \
+ FMT_FOR_EACH5(f, x0, x1, x2, x3, x4), f(x5, 5)
+#define FMT_FOR_EACH7(f, x0, x1, x2, x3, x4, x5, x6) \
+ FMT_FOR_EACH6(f, x0, x1, x2, x3, x4, x5), f(x6, 6)
+#define FMT_FOR_EACH8(f, x0, x1, x2, x3, x4, x5, x6, x7) \
+ FMT_FOR_EACH7(f, x0, x1, x2, x3, x4, x5, x6), f(x7, 7)
+#define FMT_FOR_EACH9(f, x0, x1, x2, x3, x4, x5, x6, x7, x8) \
+ FMT_FOR_EACH8(f, x0, x1, x2, x3, x4, x5, x6, x7), f(x8, 8)
+#define FMT_FOR_EACH10(f, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) \
+ FMT_FOR_EACH9(f, x0, x1, x2, x3, x4, x5, x6, x7, x8), f(x9, 9)
+
+/**
+ An error returned by an operating system or a language runtime,
+ for example a file opening error.
+*/
+class SystemError : public internal::RuntimeError {
+ private:
+ void init(int err_code, StringRef format_str, ArgList args);
+
+ protected:
+ int error_code_;
+
+ typedef char Char; // For FMT_VARIADIC_CTOR.
+
+ SystemError() {}
+
+ public:
+ /**
+ \rst
+ Constructs a :class:`fmt::SystemError` object with the description
+ of the form
+
+ .. parsed-literal::
+ *<message>*: *<system-message>*
+
+ where *<message>* is the formatted message and *<system-message>* is
+ the system message corresponding to the error code.
+ *error_code* is a system error code as given by ``errno``.
+ If *error_code* is not a valid error code such as -1, the system message
+ may look like "Unknown error -1" and is platform-dependent.
+
+ **Example**::
+
+ // This throws a SystemError with the description
+ // cannot open file 'madeup': No such file or directory
+ // or similar (system message may vary).
+ const char *filename = "madeup";
+ std::FILE *file = std::fopen(filename, "r");
+ if (!file)
+ throw fmt::SystemError(errno, "cannot open file '{}'", filename);
+ \endrst
+ */
+ SystemError(int error_code, StringRef message) {
+ init(error_code, message, ArgList());
+ }
+ FMT_VARIADIC_CTOR(SystemError, init, int, StringRef)
+
+ int error_code() const { return error_code_; }
+};
+
+/**
+ \rst
+ This template provides operations for formatting and writing data into
+ a character stream. The output is stored in a buffer provided by a subclass
+ such as :class:`fmt::BasicMemoryWriter`.
+
+ You can use one of the following typedefs for common character types:
+
+ +---------+----------------------+
+ | Type | Definition |
+ +=========+======================+
+ | Writer | BasicWriter<char> |
+ +---------+----------------------+
+ | WWriter | BasicWriter<wchar_t> |
+ +---------+----------------------+
+
+ \endrst
+ */
+template <typename Char>
+class BasicWriter {
+ private:
+ // Output buffer.
+ internal::Buffer<Char> &buffer_;
+
+ FMT_DISALLOW_COPY_AND_ASSIGN(BasicWriter);
+
+ typedef typename internal::CharTraits<Char>::CharPtr CharPtr;
+
+#if _SECURE_SCL
+ // Returns pointer value.
+ static Char *get(CharPtr p) { return p.base(); }
+#else
+ static Char *get(Char *p) { return p; }
+#endif
+
+ // Fills the padding around the content and returns the pointer to the
+ // content area.
+ static CharPtr fill_padding(CharPtr buffer,
+ unsigned total_size, std::size_t content_size, wchar_t fill);
+
+ // Grows the buffer by n characters and returns a pointer to the newly
+ // allocated area.
+ CharPtr grow_buffer(std::size_t n) {
+ std::size_t size = buffer_.size();
+ buffer_.resize(size + n);
+ return internal::make_ptr(&buffer_[size], n);
+ }
+
+ // Prepare a buffer for integer formatting.
+ CharPtr prepare_int_buffer(unsigned num_digits,
+ const EmptySpec &, const char *prefix, unsigned prefix_size) {
+ unsigned size = prefix_size + num_digits;
+ CharPtr p = grow_buffer(size);
+ std::copy(prefix, prefix + prefix_size, p);
+ return p + size - 1;
+ }
+
+ template <typename Spec>
+ CharPtr prepare_int_buffer(unsigned num_digits,
+ const Spec &spec, const char *prefix, unsigned prefix_size);
+
+ // Formats an integer.
+ template <typename T, typename Spec>
+ void write_int(T value, Spec spec);
+
+ // Formats a floating-point number (double or long double).
+ template <typename T>
+ void write_double(T value, const FormatSpec &spec);
+
+ // Writes a formatted string.
+ template <typename StrChar>
+ CharPtr write_str(
+ const StrChar *s, std::size_t size, const AlignSpec &spec);
+
+ template <typename StrChar>
+ void write_str(
+ const internal::Arg::StringValue<StrChar> &str, const FormatSpec &spec);
+
+ // This following methods are private to disallow writing wide characters
+ // and strings to a char stream. If you want to print a wide string as a
+ // pointer as std::ostream does, cast it to const void*.
+ // Do not implement!
+ void operator<<(typename internal::WCharHelper<wchar_t, Char>::Unsupported);
+ void operator<<(
+ typename internal::WCharHelper<const wchar_t *, Char>::Unsupported);
+
+ // Appends floating-point length specifier to the format string.
+ // The second argument is only used for overload resolution.
+ void append_float_length(Char *&format_ptr, long double) {
+ *format_ptr++ = 'L';
+ }
+
+ template<typename T>
+ void append_float_length(Char *&, T) {}
+
+ friend class internal::ArgFormatter<Char>;
+ friend class internal::PrintfFormatter<Char>;
+
+ protected:
+ /**
+ Constructs a ``BasicWriter`` object.
+ */
+ explicit BasicWriter(internal::Buffer<Char> &b) : buffer_(b) {}
+
+ public:
+ /**
+ Destroys a ``BasicWriter`` object.
+ */
+ virtual ~BasicWriter() {}
+
+ /**
+ Returns the total number of characters written.
+ */
+ std::size_t size() const { return buffer_.size(); }
+
+ /**
+ Returns a pointer to the output buffer content. No terminating null
+ character is appended.
+ */
+ const Char *data() const FMT_NOEXCEPT { return &buffer_[0]; }
+
+ /**
+ Returns a pointer to the output buffer content with terminating null
+ character appended.
+ */
+ const Char *c_str() const {
+ std::size_t size = buffer_.size();
+ buffer_.reserve(size + 1);
+ buffer_[size] = '\0';
+ return &buffer_[0];
+ }
+
+ /**
+ Returns the content of the output buffer as an `std::string`.
+ */
+ std::basic_string<Char> str() const {
+ return std::basic_string<Char>(&buffer_[0], buffer_.size());
+ }
+
+ /**
+ \rst
+ Writes formatted data.
+
+ *args* is an argument list representing arbitrary arguments.
+
+ **Example**::
+
+ MemoryWriter out;
+ out.write("Current point:\n");
+ out.write("({:+f}, {:+f})", -3.14, 3.14);
+
+ This will write the following output to the ``out`` object:
+
+ .. code-block:: none
+
+ Current point:
+ (-3.140000, +3.140000)
+
+ The output can be accessed using :func:`data()`, :func:`c_str` or
+ :func:`str` methods.
+
+ See also :ref:`syntax`.
+ \endrst
+ */
+ void write(BasicStringRef<Char> format, ArgList args) {
+ BasicFormatter<Char>(*this).format(format, args);
+ }
+ FMT_VARIADIC_VOID(write, BasicStringRef<Char>)
+
+ BasicWriter &operator<<(int value) {
+ return *this << IntFormatSpec<int>(value);
+ }
+ BasicWriter &operator<<(unsigned value) {
+ return *this << IntFormatSpec<unsigned>(value);
+ }
+ BasicWriter &operator<<(long value) {
+ return *this << IntFormatSpec<long>(value);
+ }
+ BasicWriter &operator<<(unsigned long value) {
+ return *this << IntFormatSpec<unsigned long>(value);
+ }
+ BasicWriter &operator<<(LongLong value) {
+ return *this << IntFormatSpec<LongLong>(value);
+ }
+
+ /**
+ Formats *value* and writes it to the stream.
+ */
+ BasicWriter &operator<<(ULongLong value) {
+ return *this << IntFormatSpec<ULongLong>(value);
+ }
+
+ BasicWriter &operator<<(double value) {
+ write_double(value, FormatSpec());
+ return *this;
+ }
+
+ /**
+ Formats *value* using the general format for floating-point numbers
+ (``'g'``) and writes it to the stream.
+ */
+ BasicWriter &operator<<(long double value) {
+ write_double(value, FormatSpec());
+ return *this;
+ }
+
+ /**
+ Writes a character to the stream.
+ */
+ BasicWriter &operator<<(char value) {
+ buffer_.push_back(value);
+ return *this;
+ }
+
+ BasicWriter &operator<<(
+ typename internal::WCharHelper<wchar_t, Char>::Supported value) {
+ buffer_.push_back(value);
+ return *this;
+ }
+
+ /**
+ Writes *value* to the stream.
+ */
+ BasicWriter &operator<<(fmt::BasicStringRef<Char> value) {
+ const Char *str = value.c_str();
+ buffer_.append(str, str + value.size());
+ return *this;
+ }
+
+ template <typename T, typename Spec, typename FillChar>
+ BasicWriter &operator<<(IntFormatSpec<T, Spec, FillChar> spec) {
+ internal::CharTraits<Char>::convert(FillChar());
+ write_int(spec.value(), spec);
+ return *this;
+ }
+
+ template <typename StrChar>
+ BasicWriter &operator<<(const StrFormatSpec<StrChar> &spec) {
+ const StrChar *s = spec.str();
+ // TODO: error if fill is not convertible to Char
+ write_str(s, std::char_traits<Char>::length(s), spec);
+ return *this;
+ }
+
+ void clear() FMT_NOEXCEPT { buffer_.clear(); }
+};
+
+template <typename Char>
+template <typename StrChar>
+typename BasicWriter<Char>::CharPtr BasicWriter<Char>::write_str(
+ const StrChar *s, std::size_t size, const AlignSpec &spec) {
+ CharPtr out = CharPtr();
+ if (spec.width() > size) {
+ out = grow_buffer(spec.width());
+ Char fill = static_cast<Char>(spec.fill());
+ if (spec.align() == ALIGN_RIGHT) {
+ std::fill_n(out, spec.width() - size, fill);
+ out += spec.width() - size;
+ } else if (spec.align() == ALIGN_CENTER) {
+ out = fill_padding(out, spec.width(), size, fill);
+ } else {
+ std::fill_n(out + size, spec.width() - size, fill);
+ }
+ } else {
+ out = grow_buffer(size);
+ }
+ std::copy(s, s + size, out);
+ return out;
+}
+
+template <typename Char>
+typename BasicWriter<Char>::CharPtr
+ BasicWriter<Char>::fill_padding(
+ CharPtr buffer, unsigned total_size,
+ std::size_t content_size, wchar_t fill) {
+ std::size_t padding = total_size - content_size;
+ std::size_t left_padding = padding / 2;
+ Char fill_char = static_cast<Char>(fill);
+ std::fill_n(buffer, left_padding, fill_char);
+ buffer += left_padding;
+ CharPtr content = buffer;
+ std::fill_n(buffer + content_size, padding - left_padding, fill_char);
+ return content;
+}
+
+template <typename Char>
+template <typename Spec>
+typename BasicWriter<Char>::CharPtr
+ BasicWriter<Char>::prepare_int_buffer(
+ unsigned num_digits, const Spec &spec,
+ const char *prefix, unsigned prefix_size) {
+ unsigned width = spec.width();
+ Alignment align = spec.align();
+ Char fill = static_cast<Char>(spec.fill());
+ if (spec.precision() > static_cast<int>(num_digits)) {
+ // Octal prefix '0' is counted as a digit, so ignore it if precision
+ // is specified.
+ if (prefix_size > 0 && prefix[prefix_size - 1] == '0')
+ --prefix_size;
+ unsigned number_size = prefix_size + spec.precision();
+ AlignSpec subspec(number_size, '0', ALIGN_NUMERIC);
+ if (number_size >= width)
+ return prepare_int_buffer(num_digits, subspec, prefix, prefix_size);
+ buffer_.reserve(width);
+ unsigned fill_size = width - number_size;
+ if (align != ALIGN_LEFT) {
+ CharPtr p = grow_buffer(fill_size);
+ std::fill(p, p + fill_size, fill);
+ }
+ CharPtr result = prepare_int_buffer(
+ num_digits, subspec, prefix, prefix_size);
+ if (align == ALIGN_LEFT) {
+ CharPtr p = grow_buffer(fill_size);
+ std::fill(p, p + fill_size, fill);
+ }
+ return result;
+ }
+ unsigned size = prefix_size + num_digits;
+ if (width <= size) {
+ CharPtr p = grow_buffer(size);
+ std::copy(prefix, prefix + prefix_size, p);
+ return p + size - 1;
+ }
+ CharPtr p = grow_buffer(width);
+ CharPtr end = p + width;
+ if (align == ALIGN_LEFT) {
+ std::copy(prefix, prefix + prefix_size, p);
+ p += size;
+ std::fill(p, end, fill);
+ } else if (align == ALIGN_CENTER) {
+ p = fill_padding(p, width, size, fill);
+ std::copy(prefix, prefix + prefix_size, p);
+ p += size;
+ } else {
+ if (align == ALIGN_NUMERIC) {
+ if (prefix_size != 0) {
+ p = std::copy(prefix, prefix + prefix_size, p);
+ size -= prefix_size;
+ }
+ } else {
+ std::copy(prefix, prefix + prefix_size, end - size);
+ }
+ std::fill(p, end - size, fill);
+ p = end;
+ }
+ return p - 1;
+}
+
+template <typename Char>
+template <typename T, typename Spec>
+void BasicWriter<Char>::write_int(T value, Spec spec) {
+ unsigned prefix_size = 0;
+ typedef typename internal::IntTraits<T>::MainType UnsignedType;
+ UnsignedType abs_value = value;
+ char prefix[4] = "";
+ if (internal::is_negative(value)) {
+ prefix[0] = '-';
+ ++prefix_size;
+ abs_value = 0 - abs_value;
+ } else if (spec.flag(SIGN_FLAG)) {
+ prefix[0] = spec.flag(PLUS_FLAG) ? '+' : ' ';
+ ++prefix_size;
+ }
+ switch (spec.type()) {
+ case 0: case 'd': {
+ unsigned num_digits = internal::count_digits(abs_value);
+ CharPtr p = prepare_int_buffer(
+ num_digits, spec, prefix, prefix_size) + 1 - num_digits;
+ internal::format_decimal(get(p), abs_value, num_digits);
+ break;
+ }
+ case 'x': case 'X': {
+ UnsignedType n = abs_value;
+ if (spec.flag(HASH_FLAG)) {
+ prefix[prefix_size++] = '0';
+ prefix[prefix_size++] = spec.type();
+ }
+ unsigned num_digits = 0;
+ do {
+ ++num_digits;
+ } while ((n >>= 4) != 0);
+ Char *p = get(prepare_int_buffer(
+ num_digits, spec, prefix, prefix_size));
+ n = abs_value;
+ const char *digits = spec.type() == 'x' ?
+ "0123456789abcdef" : "0123456789ABCDEF";
+ do {
+ *p-- = digits[n & 0xf];
+ } while ((n >>= 4) != 0);
+ break;
+ }
+ case 'b': case 'B': {
+ UnsignedType n = abs_value;
+ if (spec.flag(HASH_FLAG)) {
+ prefix[prefix_size++] = '0';
+ prefix[prefix_size++] = spec.type();
+ }
+ unsigned num_digits = 0;
+ do {
+ ++num_digits;
+ } while ((n >>= 1) != 0);
+ Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size));
+ n = abs_value;
+ do {
+ *p-- = '0' + (n & 1);
+ } while ((n >>= 1) != 0);
+ break;
+ }
+ case 'o': {
+ UnsignedType n = abs_value;
+ if (spec.flag(HASH_FLAG))
+ prefix[prefix_size++] = '0';
+ unsigned num_digits = 0;
+ do {
+ ++num_digits;
+ } while ((n >>= 3) != 0);
+ Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size));
+ n = abs_value;
+ do {
+ *p-- = '0' + (n & 7);
+ } while ((n >>= 3) != 0);
+ break;
+ }
+ default:
+ internal::report_unknown_type(
+ spec.type(), spec.flag(CHAR_FLAG) ? "char" : "integer");
+ break;
+ }
+}
+
+template <typename Char>
+template <typename T>
+void BasicWriter<Char>::write_double(
+ T value, const FormatSpec &spec) {
+ // Check type.
+ char type = spec.type();
+ bool upper = false;
+ switch (type) {
+ case 0:
+ type = 'g';
+ break;
+ case 'e': case 'f': case 'g': case 'a':
+ break;
+ case 'F':
+#ifdef _MSC_VER
+ // MSVC's printf doesn't support 'F'.
+ type = 'f';
+#endif
+ // Fall through.
+ case 'E': case 'G': case 'A':
+ upper = true;
+ break;
+ default:
+ internal::report_unknown_type(type, "double");
+ break;
+ }
+
+ char sign = 0;
+ // Use getsign instead of value < 0 because the latter is always
+ // false for NaN.
+ if (internal::getsign(static_cast<double>(value))) {
+ sign = '-';
+ value = -value;
+ } else if (spec.flag(SIGN_FLAG)) {
+ sign = spec.flag(PLUS_FLAG) ? '+' : ' ';
+ }
+
+ if (value != value) {
+ // Format NaN ourselves because sprintf's output is not consistent
+ // across platforms.
+ std::size_t nan_size = 4;
+ const char *nan = upper ? " NAN" : " nan";
+ if (!sign) {
+ --nan_size;
+ ++nan;
+ }
+ CharPtr out = write_str(nan, nan_size, spec);
+ if (sign)
+ *out = sign;
+ return;
+ }
+
+ if (internal::isinfinity(value)) {
+ // Format infinity ourselves because sprintf's output is not consistent
+ // across platforms.
+ std::size_t inf_size = 4;
+ const char *inf = upper ? " INF" : " inf";
+ if (!sign) {
+ --inf_size;
+ ++inf;
+ }
+ CharPtr out = write_str(inf, inf_size, spec);
+ if (sign)
+ *out = sign;
+ return;
+ }
+
+ std::size_t offset = buffer_.size();
+ unsigned width = spec.width();
+ if (sign) {
+ buffer_.reserve(buffer_.size() + (std::max)(width, 1u));
+ if (width > 0)
+ --width;
+ ++offset;
+ }
+
+ // Build format string.
+ enum { MAX_FORMAT_SIZE = 10}; // longest format: %#-*.*Lg
+ Char format[MAX_FORMAT_SIZE];
+ Char *format_ptr = format;
+ *format_ptr++ = '%';
+ unsigned width_for_sprintf = width;
+ if (spec.flag(HASH_FLAG))
+ *format_ptr++ = '#';
+ if (spec.align() == ALIGN_CENTER) {
+ width_for_sprintf = 0;
+ } else {
+ if (spec.align() == ALIGN_LEFT)
+ *format_ptr++ = '-';
+ if (width != 0)
+ *format_ptr++ = '*';
+ }
+ if (spec.precision() >= 0) {
+ *format_ptr++ = '.';
+ *format_ptr++ = '*';
+ }
+
+ append_float_length(format_ptr, value);
+ *format_ptr++ = type;
+ *format_ptr = '\0';
+
+ // Format using snprintf.
+ Char fill = static_cast<Char>(spec.fill());
+ for (;;) {
+ std::size_t buffer_size = buffer_.capacity() - offset;
+#if _MSC_VER
+ // MSVC's vsnprintf_s doesn't work with zero size, so reserve
+ // space for at least one extra character to make the size non-zero.
+ // Note that the buffer's capacity will increase by more than 1.
+ if (buffer_size == 0) {
+ buffer_.reserve(offset + 1);
+ buffer_size = buffer_.capacity() - offset;
+ }
+#endif
+ Char *start = &buffer_[offset];
+ int n = internal::CharTraits<Char>::format_float(
+ start, buffer_size, format, width_for_sprintf, spec.precision(), value);
+ if (n >= 0 && offset + n < buffer_.capacity()) {
+ if (sign) {
+ if ((spec.align() != ALIGN_RIGHT && spec.align() != ALIGN_DEFAULT) ||
+ *start != ' ') {
+ *(start - 1) = sign;
+ sign = 0;
+ } else {
+ *(start - 1) = fill;
+ }
+ ++n;
+ }
+ if (spec.align() == ALIGN_CENTER &&
+ spec.width() > static_cast<unsigned>(n)) {
+ width = spec.width();
+ CharPtr p = grow_buffer(width);
+ std::copy(p, p + n, p + (width - n) / 2);
+ fill_padding(p, spec.width(), n, fill);
+ return;
+ }
+ if (spec.fill() != ' ' || sign) {
+ while (*start == ' ')
+ *start++ = fill;
+ if (sign)
+ *(start - 1) = sign;
+ }
+ grow_buffer(n);
+ return;
+ }
+ // If n is negative we ask to increase the capacity by at least 1,
+ // but as std::vector, the buffer grows exponentially.
+ buffer_.reserve(n >= 0 ? offset + n + 1 : buffer_.capacity() + 1);
+ }
+}
+
+/**
+ \rst
+ This class template provides operations for formatting and writing data
+ into a character stream. The output is stored in a memory buffer that grows
+ dynamically.
+
+ You can use one of the following typedefs for common character types
+ and the standard allocator:
+
+ +---------------+-----------------------------------------------------+
+ | Type | Definition |
+ +===============+=====================================================+
+ | MemoryWriter | BasicMemoryWriter<char, std::allocator<char>> |
+ +---------------+-----------------------------------------------------+
+ | WMemoryWriter | BasicMemoryWriter<wchar_t, std::allocator<wchar_t>> |
+ +---------------+-----------------------------------------------------+
+
+ **Example**::
+
+ MemoryWriter out;
+ out << "The answer is " << 42 << "\n";
+ out.write("({:+f}, {:+f})", -3.14, 3.14);
+
+ This will write the following output to the ``out`` object:
+
+ .. code-block:: none
+
+ The answer is 42
+ (-3.140000, +3.140000)
+
+ The output can be converted to an ``std::string`` with ``out.str()`` or
+ accessed as a C string with ``out.c_str()``.
+ \endrst
+ */
+template <typename Char, typename Allocator = std::allocator<Char> >
+class BasicMemoryWriter : public BasicWriter<Char> {
+ private:
+ internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE, Allocator> buffer_;
+
+ public:
+ explicit BasicMemoryWriter(const Allocator& alloc = Allocator())
+ : BasicWriter<Char>(buffer_), buffer_(alloc) {}
+
+#if FMT_USE_RVALUE_REFERENCES
+ /**
+ \rst
+ Constructs a :class:`fmt::BasicMemoryWriter` object moving the content
+ of the other object to it.
+ \endrst
+ */
+ BasicMemoryWriter(BasicMemoryWriter &&other)
+ : BasicWriter<Char>(buffer_), buffer_(std::move(other.buffer_)) {
+ }
+
+ /**
+ \rst
+ Moves the content of the other ``BasicMemoryWriter`` object to this one.
+ \endrst
+ */
+ BasicMemoryWriter &operator=(BasicMemoryWriter &&other) {
+ buffer_ = std::move(other.buffer_);
+ return *this;
+ }
+#endif
+};
+
+typedef BasicMemoryWriter<char> MemoryWriter;
+typedef BasicMemoryWriter<wchar_t> WMemoryWriter;
+
+/**
+ \rst
+ This class template provides operations for formatting and writing data
+ into a fixed-size array. For writing into a dynamically growing buffer
+ use :class:`fmt::BasicMemoryWriter`.
+
+ Any write method will throw ``std::runtime_error`` if the output doesn't fit
+ into the array.
+
+ You can use one of the following typedefs for common character types:
+
+ +--------------+---------------------------+
+ | Type | Definition |
+ +==============+===========================+
+ | ArrayWriter | BasicArrayWriter<char> |
+ +--------------+---------------------------+
+ | WArrayWriter | BasicArrayWriter<wchar_t> |
+ +--------------+---------------------------+
+ \endrst
+ */
+template <typename Char>
+class BasicArrayWriter : public BasicWriter<Char> {
+ private:
+ internal::FixedBuffer<Char> buffer_;
+
+ public:
+ /**
+ \rst
+ Constructs a :class:`fmt::BasicArrayWriter` object for *array* of the
+ given size.
+ \endrst
+ */
+ BasicArrayWriter(Char *array, std::size_t size)
+ : BasicWriter<Char>(buffer_), buffer_(array, size) {}
+
+ // FIXME: this is temporary undocumented due to a bug in Sphinx
+ /*
+ \rst
+ Constructs a :class:`fmt::BasicArrayWriter` object for *array* of the
+ size known at compile time.
+ \endrst
+ */
+ template <std::size_t SIZE>
+ explicit BasicArrayWriter(Char (&array)[SIZE])
+ : BasicWriter<Char>(buffer_), buffer_(array, SIZE) {}
+};
+
+typedef BasicArrayWriter<char> ArrayWriter;
+typedef BasicArrayWriter<wchar_t> WArrayWriter;
+
+// Formats a value.
+template <typename Char, typename T>
+void format(BasicFormatter<Char> &f, const Char *&format_str, const T &value) {
+ std::basic_ostringstream<Char> os;
+ os << value;
+ internal::Arg arg;
+ internal::Value &arg_value = arg;
+ std::basic_string<Char> str = os.str();
+ arg_value = internal::MakeValue<Char>(str);
+ arg.type = static_cast<internal::Arg::Type>(
+ internal::MakeValue<Char>::type(str));
+ format_str = f.format(format_str, arg);
+}
+
+// Reports a system error without throwing an exception.
+// Can be used to report errors from destructors.
+void report_system_error(int error_code, StringRef message) FMT_NOEXCEPT;
+
+#ifdef _WIN32
+
+/** A Windows error. */
+class WindowsError : public SystemError {
+ private:
+ void init(int error_code, StringRef format_str, ArgList args);
+
+ public:
+ /**
+ \rst
+ Constructs a :class:`fmt::WindowsError` object with the description
+ of the form
+
+ .. parsed-literal::
+ *<message>*: *<system-message>*
+
+ where *<message>* is the formatted message and *<system-message>* is the
+ system message corresponding to the error code.
+ *error_code* is a Windows error code as given by ``GetLastError``.
+ If *error_code* is not a valid error code such as -1, the system message
+ will look like "error -1".
+
+ **Example**::
+
+ // This throws a WindowsError with the description
+ // cannot open file 'madeup': The system cannot find the file specified.
+ // or similar (system message may vary).
+ const char *filename = "madeup";
+ LPOFSTRUCT of = LPOFSTRUCT();
+ HFILE file = OpenFile(filename, &of, OF_READ);
+ if (file == HFILE_ERROR) {
+ throw fmt::WindowsError(GetLastError(),
+ "cannot open file '{}'", filename);
+ }
+ \endrst
+ */
+ WindowsError(int error_code, StringRef message) {
+ init(error_code, message, ArgList());
+ }
+ FMT_VARIADIC_CTOR(WindowsError, init, int, StringRef)
+};
+
+// Reports a Windows error without throwing an exception.
+// Can be used to report errors from destructors.
+void report_windows_error(int error_code, StringRef message) FMT_NOEXCEPT;
+
+#endif
+
+enum Color { BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE };
+
+/**
+ Formats a string and prints it to stdout using ANSI escape sequences
+ to specify color (experimental).
+ Example:
+ PrintColored(fmt::RED, "Elapsed time: {0:.2f} seconds") << 1.23;
+ */
+void print_colored(Color c, StringRef format, ArgList args);
+
+/**
+ \rst
+ Formats arguments and returns the result as a string.
+
+ **Example**::
+
+ std::string message = format("The answer is {}", 42);
+ \endrst
+*/
+inline std::string format(StringRef format_str, ArgList args) {
+ MemoryWriter w;
+ w.write(format_str, args);
+ return w.str();
+}
+
+inline std::wstring format(WStringRef format_str, ArgList args) {
+ WMemoryWriter w;
+ w.write(format_str, args);
+ return w.str();
+}
+
+/**
+ \rst
+ Prints formatted data to the file *f*.
+
+ **Example**::
+
+ print(stderr, "Don't {}!", "panic");
+ \endrst
+ */
+void print(std::FILE *f, StringRef format_str, ArgList args);
+
+/**
+ \rst
+ Prints formatted data to ``stdout``.
+
+ **Example**::
+
+ print("Elapsed time: {0:.2f} seconds", 1.23);
+ \endrst
+ */
+void print(StringRef format_str, ArgList args);
+
+/**
+ \rst
+ Prints formatted data to the stream *os*.
+
+ **Example**::
+
+ print(cerr, "Don't {}!", "panic");
+ \endrst
+ */
+void print(std::ostream &os, StringRef format_str, ArgList args);
+
+template <typename Char>
+void printf(BasicWriter<Char> &w, BasicStringRef<Char> format, ArgList args) {
+ internal::PrintfFormatter<Char>().format(w, format, args);
+}
+
+/**
+ \rst
+ Formats arguments and returns the result as a string.
+
+ **Example**::
+
+ std::string message = fmt::sprintf("The answer is %d", 42);
+ \endrst
+*/
+inline std::string sprintf(StringRef format, ArgList args) {
+ MemoryWriter w;
+ printf(w, format, args);
+ return w.str();
+}
+
+/**
+ \rst
+ Prints formatted data to the file *f*.
+
+ **Example**::
+
+ fmt::fprintf(stderr, "Don't %s!", "panic");
+ \endrst
+ */
+int fprintf(std::FILE *f, StringRef format, ArgList args);
+
+/**
+ \rst
+ Prints formatted data to ``stdout``.
+
+ **Example**::
+
+ fmt::printf("Elapsed time: %.2f seconds", 1.23);
+ \endrst
+ */
+inline int printf(StringRef format, ArgList args) {
+ return fprintf(stdout, format, args);
+}
+
+/**
+ Fast integer formatter.
+ */
+class FormatInt {
+ private:
+ // Buffer should be large enough to hold all digits (digits10 + 1),
+ // a sign and a null character.
+ enum {BUFFER_SIZE = std::numeric_limits<ULongLong>::digits10 + 3};
+ mutable char buffer_[BUFFER_SIZE];
+ char *str_;
+
+ // Formats value in reverse and returns the number of digits.
+ char *format_decimal(ULongLong value) {
+ char *buffer_end = buffer_ + BUFFER_SIZE - 1;
+ while (value >= 100) {
+ // Integer division is slow so do it for a group of two digits instead
+ // of for every digit. The idea comes from the talk by Alexandrescu
+ // "Three Optimization Tips for C++". See speed-test for a comparison.
+ unsigned index = (value % 100) * 2;
+ value /= 100;
+ *--buffer_end = internal::Data::DIGITS[index + 1];
+ *--buffer_end = internal::Data::DIGITS[index];
+ }
+ if (value < 10) {
+ *--buffer_end = static_cast<char>('0' + value);
+ return buffer_end;
+ }
+ unsigned index = static_cast<unsigned>(value * 2);
+ *--buffer_end = internal::Data::DIGITS[index + 1];
+ *--buffer_end = internal::Data::DIGITS[index];
+ return buffer_end;
+ }
+
+ void FormatSigned(LongLong value) {
+ ULongLong abs_value = static_cast<ULongLong>(value);
+ bool negative = value < 0;
+ if (negative)
+ abs_value = 0 - abs_value;
+ str_ = format_decimal(abs_value);
+ if (negative)
+ *--str_ = '-';
+ }
+
+ public:
+ explicit FormatInt(int value) { FormatSigned(value); }
+ explicit FormatInt(long value) { FormatSigned(value); }
+ explicit FormatInt(LongLong value) { FormatSigned(value); }
+ explicit FormatInt(unsigned value) : str_(format_decimal(value)) {}
+ explicit FormatInt(unsigned long value) : str_(format_decimal(value)) {}
+ explicit FormatInt(ULongLong value) : str_(format_decimal(value)) {}
+
+ /**
+ Returns the number of characters written to the output buffer.
+ */
+ std::size_t size() const { return buffer_ - str_ + BUFFER_SIZE - 1; }
+
+ /**
+ Returns a pointer to the output buffer content. No terminating null
+ character is appended.
+ */
+ const char *data() const { return str_; }
+
+ /**
+ Returns a pointer to the output buffer content with terminating null
+ character appended.
+ */
+ const char *c_str() const {
+ buffer_[BUFFER_SIZE - 1] = '\0';
+ return str_;
+ }
+
+ /**
+ Returns the content of the output buffer as an `std::string`.
+ */
+ std::string str() const { return std::string(str_, size()); }
+};
+
+// Formats a decimal integer value writing into buffer and returns
+// a pointer to the end of the formatted string. This function doesn't
+// write a terminating null character.
+template <typename T>
+inline void format_decimal(char *&buffer, T value) {
+ typename internal::IntTraits<T>::MainType abs_value = value;
+ if (internal::is_negative(value)) {
+ *buffer++ = '-';
+ abs_value = 0 - abs_value;
+ }
+ if (abs_value < 100) {
+ if (abs_value < 10) {
+ *buffer++ = static_cast<char>('0' + abs_value);
+ return;
+ }
+ unsigned index = static_cast<unsigned>(abs_value * 2);
+ *buffer++ = internal::Data::DIGITS[index];
+ *buffer++ = internal::Data::DIGITS[index + 1];
+ return;
+ }
+ unsigned num_digits = internal::count_digits(abs_value);
+ internal::format_decimal(buffer, abs_value, num_digits);
+ buffer += num_digits;
+}
+}
+
+#if FMT_GCC_VERSION
+// Use the system_header pragma to suppress warnings about variadic macros
+// because suppressing -Wvariadic-macros with the diagnostic pragma doesn't
+// work. It is used at the end because we want to suppress as little warnings
+// as possible.
+# pragma GCC system_header
+#endif
+
+// This is used to work around VC++ bugs in handling variadic macros.
+#define FMT_EXPAND(args) args
+
+// Returns the number of arguments.
+// Based on https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s.
+#define FMT_NARG(...) FMT_NARG_(__VA_ARGS__, FMT_RSEQ_N())
+#define FMT_NARG_(...) FMT_EXPAND(FMT_ARG_N(__VA_ARGS__))
+#define FMT_ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
+#define FMT_RSEQ_N() 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
+
+#define FMT_CONCAT(a, b) a##b
+#define FMT_FOR_EACH_(N, f, ...) \
+ FMT_EXPAND(FMT_CONCAT(FMT_FOR_EACH, N)(f, __VA_ARGS__))
+#define FMT_FOR_EACH(f, ...) \
+ FMT_EXPAND(FMT_FOR_EACH_(FMT_NARG(__VA_ARGS__), f, __VA_ARGS__))
+
+#define FMT_ADD_ARG_NAME(type, index) type arg##index
+#define FMT_GET_ARG_NAME(type, index) arg##index
+
+#if FMT_USE_VARIADIC_TEMPLATES
+# define FMT_VARIADIC_(Char, ReturnType, func, call, ...) \
+ template <typename... Args> \
+ ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \
+ const Args & ... args) { \
+ using fmt::internal::Value; \
+ const Value values[fmt::internal::NonZero<sizeof...(Args)>::VALUE] = { \
+ fmt::internal::MakeValue<Char>(args)... \
+ }; \
+ call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList( \
+ fmt::internal::make_type(args...), values)); \
+ }
+#else
+// Defines a wrapper for a function taking __VA_ARGS__ arguments
+// and n additional arguments of arbitrary types.
+# define FMT_WRAP(Char, ReturnType, func, call, n, ...) \
+ template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \
+ inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \
+ FMT_GEN(n, FMT_MAKE_ARG)) { \
+ const fmt::internal::Value vals[] = {FMT_GEN(n, FMT_MAKE_REF_##Char)}; \
+ call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList( \
+ fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), vals)); \
+ }
+
+# define FMT_VARIADIC_(Char, ReturnType, func, call, ...) \
+ inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__)) { \
+ call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList()); \
+ } \
+ FMT_WRAP(Char, ReturnType, func, call, 1, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 2, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 3, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 4, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 5, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 6, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 7, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 8, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 9, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 10, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 11, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 12, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 13, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 14, __VA_ARGS__) \
+ FMT_WRAP(Char, ReturnType, func, call, 15, __VA_ARGS__)
+#endif // FMT_USE_VARIADIC_TEMPLATES
+
+/**
+ \rst
+ Defines a variadic function with the specified return type, function name
+ and argument types passed as variable arguments to this macro.
+
+ **Example**::
+
+ void print_error(const char *file, int line, const char *format,
+ fmt::ArgList args) {
+ fmt::print("{}: {}: ", file, line);
+ fmt::print(format, args);
+ }
+ FMT_VARIADIC(void, print_error, const char *, int, const char *)
+
+ ``FMT_VARIADIC`` is used for compatibility with legacy C++ compilers that
+ don't implement variadic templates. You don't have to use this macro if
+ you don't need legacy compiler support and can use variadic templates
+ directly::
+
+ template <typename... Args>
+ void print_error(const char *file, int line, const char *format,
+ const Args & ... args) {
+ fmt::print("{}: {}: ", file, line);
+ fmt::print(format, args...);
+ }
+ \endrst
+ */
+#define FMT_VARIADIC(ReturnType, func, ...) \
+ FMT_VARIADIC_(char, ReturnType, func, return func, __VA_ARGS__)
+
+#define FMT_VARIADIC_W(ReturnType, func, ...) \
+ FMT_VARIADIC_(wchar_t, ReturnType, func, return func, __VA_ARGS__)
+
+namespace fmt {
+FMT_VARIADIC(std::string, format, StringRef)
+FMT_VARIADIC_W(std::wstring, format, WStringRef)
+FMT_VARIADIC(void, print, StringRef)
+FMT_VARIADIC(void, print, std::FILE *, StringRef)
+FMT_VARIADIC(void, print, std::ostream &, StringRef)
+FMT_VARIADIC(void, print_colored, Color, StringRef)
+FMT_VARIADIC(std::string, sprintf, StringRef)
+FMT_VARIADIC(int, printf, StringRef)
+FMT_VARIADIC(int, fprintf, std::FILE *, StringRef)
+}
+
+// Restore warnings.
+#if FMT_GCC_VERSION >= 406
+# pragma GCC diagnostic pop
+#endif
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
+
+#ifdef FMT_HEADER_ONLY
+# include "format.cc"
+#endif
+
+#endif // FMT_FORMAT_H_
diff --git a/dep/cppformat/posix.cc b/dep/cppformat/posix.cc
new file mode 100644
index 00000000000..0efb5aff3d0
--- /dev/null
+++ b/dep/cppformat/posix.cc
@@ -0,0 +1,252 @@
+/*
+ A C++ interface to POSIX functions.
+
+ Copyright (c) 2014 - 2015, Victor Zverovich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// Disable bogus MSVC warnings.
+#ifndef _CRT_SECURE_NO_WARNINGS
+# define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "posix.h"
+
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifndef _WIN32
+# include <unistd.h>
+#else
+# include <windows.h>
+# include <io.h>
+
+# define O_CREAT _O_CREAT
+# define O_TRUNC _O_TRUNC
+
+# ifndef S_IRUSR
+# define S_IRUSR _S_IREAD
+# endif
+
+# ifndef S_IWUSR
+# define S_IWUSR _S_IWRITE
+# endif
+
+# ifdef __MINGW32__
+# define _SH_DENYNO 0x40
+# undef fileno
+# endif
+
+#endif // _WIN32
+
+namespace {
+#ifdef _WIN32
+// Return type of read and write functions.
+typedef int RWResult;
+
+// On Windows the count argument to read and write is unsigned, so convert
+// it from size_t preventing integer overflow.
+inline unsigned convert_rwcount(std::size_t count) {
+ return count <= UINT_MAX ? static_cast<unsigned>(count) : UINT_MAX;
+}
+#else
+// Return type of read and write functions.
+typedef ssize_t RWResult;
+
+inline std::size_t convert_rwcount(std::size_t count) { return count; }
+#endif
+}
+
+fmt::BufferedFile::~BufferedFile() FMT_NOEXCEPT {
+ if (file_ && FMT_SYSTEM(fclose(file_)) != 0)
+ fmt::report_system_error(errno, "cannot close file");
+}
+
+fmt::BufferedFile::BufferedFile(fmt::StringRef filename, fmt::StringRef mode) {
+ FMT_RETRY_VAL(file_, FMT_SYSTEM(fopen(filename.c_str(), mode.c_str())), 0);
+ if (!file_)
+ throw SystemError(errno, "cannot open file {}", filename);
+}
+
+void fmt::BufferedFile::close() {
+ if (!file_)
+ return;
+ int result = FMT_SYSTEM(fclose(file_));
+ file_ = 0;
+ if (result != 0)
+ throw SystemError(errno, "cannot close file");
+}
+
+// A macro used to prevent expansion of fileno on broken versions of MinGW.
+#define FMT_ARGS
+
+int fmt::BufferedFile::fileno() const {
+ int fd = FMT_POSIX_CALL(fileno FMT_ARGS(file_));
+ if (fd == -1)
+ throw SystemError(errno, "cannot get file descriptor");
+ return fd;
+}
+
+fmt::File::File(fmt::StringRef path, int oflag) {
+ int mode = S_IRUSR | S_IWUSR;
+#if defined(_WIN32) && !defined(__MINGW32__)
+ fd_ = -1;
+ FMT_POSIX_CALL(sopen_s(&fd_, path.c_str(), oflag, _SH_DENYNO, mode));
+#else
+ FMT_RETRY(fd_, FMT_POSIX_CALL(open(path.c_str(), oflag, mode)));
+#endif
+ if (fd_ == -1)
+ throw SystemError(errno, "cannot open file {}", path);
+}
+
+fmt::File::~File() FMT_NOEXCEPT {
+ // Don't retry close in case of EINTR!
+ // See http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html
+ if (fd_ != -1 && FMT_POSIX_CALL(close(fd_)) != 0)
+ fmt::report_system_error(errno, "cannot close file");
+}
+
+void fmt::File::close() {
+ if (fd_ == -1)
+ return;
+ // Don't retry close in case of EINTR!
+ // See http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html
+ int result = FMT_POSIX_CALL(close(fd_));
+ fd_ = -1;
+ if (result != 0)
+ throw SystemError(errno, "cannot close file");
+}
+
+fmt::LongLong fmt::File::size() const {
+#ifdef _WIN32
+ // Use GetFileSize instead of GetFileSizeEx for the case when _WIN32_WINNT
+ // is less than 0x0500 as is the case with some default MinGW builds.
+ // Both functions support large file sizes.
+ DWORD size_upper = 0;
+ HANDLE handle = reinterpret_cast<HANDLE>(_get_osfhandle(fd_));
+ DWORD size_lower = FMT_SYSTEM(GetFileSize(handle, &size_upper));
+ if (size_lower == INVALID_FILE_SIZE) {
+ DWORD error = GetLastError();
+ if (error != NO_ERROR)
+ throw WindowsError(GetLastError(), "cannot get file size");
+ }
+ fmt::ULongLong size = size_upper;
+ return (size << sizeof(DWORD) * CHAR_BIT) | size_lower;
+#else
+ typedef struct stat Stat;
+ Stat file_stat = Stat();
+ if (FMT_POSIX_CALL(fstat(fd_, &file_stat)) == -1)
+ throw SystemError(errno, "cannot get file attributes");
+ FMT_STATIC_ASSERT(sizeof(fmt::LongLong) >= sizeof(file_stat.st_size),
+ "return type of File::size is not large enough");
+ return file_stat.st_size;
+#endif
+}
+
+std::size_t fmt::File::read(void *buffer, std::size_t count) {
+ RWResult result = 0;
+ FMT_RETRY(result, FMT_POSIX_CALL(read(fd_, buffer, convert_rwcount(count))));
+ if (result < 0)
+ throw SystemError(errno, "cannot read from file");
+ return result;
+}
+
+std::size_t fmt::File::write(const void *buffer, std::size_t count) {
+ RWResult result = 0;
+ FMT_RETRY(result, FMT_POSIX_CALL(write(fd_, buffer, convert_rwcount(count))));
+ if (result < 0)
+ throw SystemError(errno, "cannot write to file");
+ return result;
+}
+
+fmt::File fmt::File::dup(int fd) {
+ // Don't retry as dup doesn't return EINTR.
+ // http://pubs.opengroup.org/onlinepubs/009695399/functions/dup.html
+ int new_fd = FMT_POSIX_CALL(dup(fd));
+ if (new_fd == -1)
+ throw SystemError(errno, "cannot duplicate file descriptor {}", fd);
+ return File(new_fd);
+}
+
+void fmt::File::dup2(int fd) {
+ int result = 0;
+ FMT_RETRY(result, FMT_POSIX_CALL(dup2(fd_, fd)));
+ if (result == -1) {
+ throw SystemError(errno,
+ "cannot duplicate file descriptor {} to {}", fd_, fd);
+ }
+}
+
+void fmt::File::dup2(int fd, ErrorCode &ec) FMT_NOEXCEPT {
+ int result = 0;
+ FMT_RETRY(result, FMT_POSIX_CALL(dup2(fd_, fd)));
+ if (result == -1)
+ ec = ErrorCode(errno);
+}
+
+void fmt::File::pipe(File &read_end, File &write_end) {
+ // Close the descriptors first to make sure that assignments don't throw
+ // and there are no leaks.
+ read_end.close();
+ write_end.close();
+ int fds[2] = {};
+#ifdef _WIN32
+ // Make the default pipe capacity same as on Linux 2.6.11+.
+ enum { DEFAULT_CAPACITY = 65536 };
+ int result = FMT_POSIX_CALL(pipe(fds, DEFAULT_CAPACITY, _O_BINARY));
+#else
+ // Don't retry as the pipe function doesn't return EINTR.
+ // http://pubs.opengroup.org/onlinepubs/009696799/functions/pipe.html
+ int result = FMT_POSIX_CALL(pipe(fds));
+#endif
+ if (result != 0)
+ throw SystemError(errno, "cannot create pipe");
+ // The following assignments don't throw because read_fd and write_fd
+ // are closed.
+ read_end = File(fds[0]);
+ write_end = File(fds[1]);
+}
+
+fmt::BufferedFile fmt::File::fdopen(const char *mode) {
+ // Don't retry as fdopen doesn't return EINTR.
+ FILE *f = FMT_POSIX_CALL(fdopen(fd_, mode));
+ if (!f)
+ throw SystemError(errno, "cannot associate stream with file descriptor");
+ BufferedFile file(f);
+ fd_ = -1;
+ return file;
+}
+
+long fmt::getpagesize() {
+#ifdef _WIN32
+ SYSTEM_INFO si;
+ GetSystemInfo(&si);
+ return si.dwPageSize;
+#else
+ long size = FMT_POSIX_CALL(sysconf(_SC_PAGESIZE));
+ if (size < 0)
+ throw SystemError(errno, "cannot get memory page size");
+ return size;
+#endif
+}
diff --git a/dep/cppformat/posix.h b/dep/cppformat/posix.h
new file mode 100644
index 00000000000..70a0db1a560
--- /dev/null
+++ b/dep/cppformat/posix.h
@@ -0,0 +1,344 @@
+/*
+ A C++ interface to POSIX functions.
+
+ Copyright (c) 2014 - 2015, Victor Zverovich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FMT_POSIX_H_
+#define FMT_POSIX_H_
+
+#ifdef __MINGW32__
+// Workaround MinGW bug https://sourceforge.net/p/mingw/bugs/2024/.
+# undef __STRICT_ANSI__
+#endif
+
+#include <errno.h>
+#include <fcntl.h> // for O_RDONLY
+#include <stdio.h>
+
+#include <cstddef>
+
+#include "format.h"
+
+#ifdef FMT_INCLUDE_POSIX_TEST
+# include "test/posix-test.h"
+#endif
+
+#ifndef FMT_POSIX
+# if defined(_WIN32) && !defined(__MINGW32__)
+// Fix warnings about deprecated symbols.
+# define FMT_POSIX(call) _##call
+# else
+# define FMT_POSIX(call) call
+# endif
+#endif
+
+// Calls to system functions are wrapped in FMT_SYSTEM for testability.
+#ifdef FMT_SYSTEM
+# define FMT_POSIX_CALL(call) FMT_SYSTEM(call)
+#else
+# define FMT_SYSTEM(call) call
+# ifdef _WIN32
+// Fix warnings about deprecated symbols.
+# define FMT_POSIX_CALL(call) ::_##call
+# else
+# define FMT_POSIX_CALL(call) ::call
+# endif
+#endif
+
+#if FMT_GCC_VERSION >= 407
+# define FMT_UNUSED __attribute__((unused))
+#else
+# define FMT_UNUSED
+#endif
+
+#if FMT_USE_STATIC_ASSERT || FMT_HAS_CPP_ATTRIBUTE(cxx_static_assert) || \
+ (FMT_GCC_VERSION >= 403 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1600
+# define FMT_STATIC_ASSERT(cond, message) static_assert(cond, message)
+#else
+# define FMT_CONCAT_(a, b) FMT_CONCAT(a, b)
+# define FMT_STATIC_ASSERT(cond, message) \
+ typedef int FMT_CONCAT_(Assert, __LINE__)[(cond) ? 1 : -1] FMT_UNUSED
+#endif
+
+// Retries the expression while it evaluates to error_result and errno
+// equals to EINTR.
+#ifndef _WIN32
+# define FMT_RETRY_VAL(result, expression, error_result) \
+ do { \
+ result = (expression); \
+ } while (result == error_result && errno == EINTR)
+#else
+# define FMT_RETRY_VAL(result, expression, error_result) result = (expression)
+#endif
+
+#define FMT_RETRY(result, expression) FMT_RETRY_VAL(result, expression, -1)
+
+namespace fmt {
+
+// An error code.
+class ErrorCode {
+ private:
+ int value_;
+
+ public:
+ explicit ErrorCode(int value = 0) FMT_NOEXCEPT : value_(value) {}
+
+ int get() const FMT_NOEXCEPT { return value_; }
+};
+
+// A buffered file.
+class BufferedFile {
+ private:
+ FILE *file_;
+
+ friend class File;
+
+ explicit BufferedFile(FILE *f) : file_(f) {}
+
+ public:
+ // Constructs a BufferedFile object which doesn't represent any file.
+ BufferedFile() FMT_NOEXCEPT : file_(0) {}
+
+ // Destroys the object closing the file it represents if any.
+ ~BufferedFile() FMT_NOEXCEPT;
+
+#if !FMT_USE_RVALUE_REFERENCES
+ // Emulate a move constructor and a move assignment operator if rvalue
+ // references are not supported.
+
+ private:
+ // A proxy object to emulate a move constructor.
+ // It is private to make it impossible call operator Proxy directly.
+ struct Proxy {
+ FILE *file;
+ };
+
+public:
+ // A "move constructor" for moving from a temporary.
+ BufferedFile(Proxy p) FMT_NOEXCEPT : file_(p.file) {}
+
+ // A "move constructor" for for moving from an lvalue.
+ BufferedFile(BufferedFile &f) FMT_NOEXCEPT : file_(f.file_) {
+ f.file_ = 0;
+ }
+
+ // A "move assignment operator" for moving from a temporary.
+ BufferedFile &operator=(Proxy p) {
+ close();
+ file_ = p.file;
+ return *this;
+ }
+
+ // A "move assignment operator" for moving from an lvalue.
+ BufferedFile &operator=(BufferedFile &other) {
+ close();
+ file_ = other.file_;
+ other.file_ = 0;
+ return *this;
+ }
+
+ // Returns a proxy object for moving from a temporary:
+ // BufferedFile file = BufferedFile(...);
+ operator Proxy() FMT_NOEXCEPT {
+ Proxy p = {file_};
+ file_ = 0;
+ return p;
+ }
+
+#else
+ private:
+ FMT_DISALLOW_COPY_AND_ASSIGN(BufferedFile);
+
+ public:
+ BufferedFile(BufferedFile &&other) FMT_NOEXCEPT : file_(other.file_) {
+ other.file_ = 0;
+ }
+
+ BufferedFile& operator=(BufferedFile &&other) {
+ close();
+ file_ = other.file_;
+ other.file_ = 0;
+ return *this;
+ }
+#endif
+
+ // Opens a file.
+ BufferedFile(fmt::StringRef filename, fmt::StringRef mode);
+
+ // Closes the file.
+ void close();
+
+ // Returns the pointer to a FILE object representing this file.
+ FILE *get() const FMT_NOEXCEPT { return file_; }
+
+ // We place parentheses around fileno to workaround a bug in some versions
+ // of MinGW that define fileno as a macro.
+ int (fileno)() const;
+
+ void print(fmt::StringRef format_str, const ArgList &args) {
+ fmt::print(file_, format_str, args);
+ }
+ FMT_VARIADIC(void, print, fmt::StringRef)
+};
+
+// A file. Closed file is represented by a File object with descriptor -1.
+// Methods that are not declared with FMT_NOEXCEPT may throw
+// fmt::SystemError in case of failure. Note that some errors such as
+// closing the file multiple times will cause a crash on Windows rather
+// than an exception. You can get standard behavior by overriding the
+// invalid parameter handler with _set_invalid_parameter_handler.
+class File {
+ private:
+ int fd_; // File descriptor.
+
+ // Constructs a File object with a given descriptor.
+ explicit File(int fd) : fd_(fd) {}
+
+ public:
+ // Possible values for the oflag argument to the constructor.
+ enum {
+ RDONLY = FMT_POSIX(O_RDONLY), // Open for reading only.
+ WRONLY = FMT_POSIX(O_WRONLY), // Open for writing only.
+ RDWR = FMT_POSIX(O_RDWR) // Open for reading and writing.
+ };
+
+ // Constructs a File object which doesn't represent any file.
+ File() FMT_NOEXCEPT : fd_(-1) {}
+
+ // Opens a file and constructs a File object representing this file.
+ File(fmt::StringRef path, int oflag);
+
+#if !FMT_USE_RVALUE_REFERENCES
+ // Emulate a move constructor and a move assignment operator if rvalue
+ // references are not supported.
+
+ private:
+ // A proxy object to emulate a move constructor.
+ // It is private to make it impossible call operator Proxy directly.
+ struct Proxy {
+ int fd;
+ };
+
+ public:
+ // A "move constructor" for moving from a temporary.
+ File(Proxy p) FMT_NOEXCEPT : fd_(p.fd) {}
+
+ // A "move constructor" for for moving from an lvalue.
+ File(File &other) FMT_NOEXCEPT : fd_(other.fd_) {
+ other.fd_ = -1;
+ }
+
+ // A "move assignment operator" for moving from a temporary.
+ File &operator=(Proxy p) {
+ close();
+ fd_ = p.fd;
+ return *this;
+ }
+
+ // A "move assignment operator" for moving from an lvalue.
+ File &operator=(File &other) {
+ close();
+ fd_ = other.fd_;
+ other.fd_ = -1;
+ return *this;
+ }
+
+ // Returns a proxy object for moving from a temporary:
+ // File file = File(...);
+ operator Proxy() FMT_NOEXCEPT {
+ Proxy p = {fd_};
+ fd_ = -1;
+ return p;
+ }
+
+#else
+ private:
+ FMT_DISALLOW_COPY_AND_ASSIGN(File);
+
+ public:
+ File(File &&other) FMT_NOEXCEPT : fd_(other.fd_) {
+ other.fd_ = -1;
+ }
+
+ File& operator=(File &&other) {
+ close();
+ fd_ = other.fd_;
+ other.fd_ = -1;
+ return *this;
+ }
+#endif
+
+ // Destroys the object closing the file it represents if any.
+ ~File() FMT_NOEXCEPT;
+
+ // Returns the file descriptor.
+ int descriptor() const FMT_NOEXCEPT { return fd_; }
+
+ // Closes the file.
+ void close();
+
+ // Returns the file size.
+ fmt::LongLong size() const;
+
+ // Attempts to read count bytes from the file into the specified buffer.
+ std::size_t read(void *buffer, std::size_t count);
+
+ // Attempts to write count bytes from the specified buffer to the file.
+ std::size_t write(const void *buffer, std::size_t count);
+
+ // Duplicates a file descriptor with the dup function and returns
+ // the duplicate as a file object.
+ static File dup(int fd);
+
+ // Makes fd be the copy of this file descriptor, closing fd first if
+ // necessary.
+ void dup2(int fd);
+
+ // Makes fd be the copy of this file descriptor, closing fd first if
+ // necessary.
+ void dup2(int fd, ErrorCode &ec) FMT_NOEXCEPT;
+
+ // Creates a pipe setting up read_end and write_end file objects for reading
+ // and writing respectively.
+ static void pipe(File &read_end, File &write_end);
+
+ // Creates a BufferedFile object associated with this file and detaches
+ // this File object from the file.
+ BufferedFile fdopen(const char *mode);
+};
+
+// Returns the memory page size.
+long getpagesize();
+} // namespace fmt
+
+#if !FMT_USE_RVALUE_REFERENCES
+namespace std {
+// For compatibility with C++98.
+inline fmt::BufferedFile &move(fmt::BufferedFile &f) { return f; }
+inline fmt::File &move(fmt::File &f) { return f; }
+}
+#endif
+
+#endif // FMT_POSIX_H_
diff --git a/dep/process/License.txt b/dep/process/License.txt
new file mode 100644
index 00000000000..36b7cd93cdf
--- /dev/null
+++ b/dep/process/License.txt
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/dep/process/Readme.txt b/dep/process/Readme.txt
new file mode 100644
index 00000000000..ada7cf74974
--- /dev/null
+++ b/dep/process/Readme.txt
@@ -0,0 +1,6 @@
+Boost.Process (Not part of the official boost libraries yet)
+================================================================
+Its used to start child processes within the application.
+
+Website: http://www.highscore.de/boost/process0.5/
+Downloaded from: http://www.highscore.de/boost/process0.5/process.zip
diff --git a/dep/process/boost/process.hpp b/dep/process/boost/process.hpp
new file mode 100644
index 00000000000..2271e9b49e7
--- /dev/null
+++ b/dep/process/boost/process.hpp
@@ -0,0 +1,22 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011 Jeff Flinn, Boris Schaeling
+// Copyright (c) 2012 Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process.hpp
+ *
+ * Convenience header which includes all public Boost.Process header files.
+ */
+
+#ifndef BOOST_PROCESS_HPP
+#define BOOST_PROCESS_HPP
+
+#include <boost/process/all.hpp>
+
+#endif
diff --git a/dep/process/boost/process/all.hpp b/dep/process/boost/process/all.hpp
new file mode 100644
index 00000000000..234dd05d4c1
--- /dev/null
+++ b/dep/process/boost/process/all.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/all.hpp
+ *
+ * Convenience header which includes all public Boost.Process header files.
+ */
+
+#ifndef BOOST_PROCESS_ALL_HPP
+#define BOOST_PROCESS_ALL_HPP
+
+#include <boost/process/child.hpp>
+#include <boost/process/create_pipe.hpp>
+#include <boost/process/execute.hpp>
+#include <boost/process/executor.hpp>
+#include <boost/process/initializers.hpp>
+#include <boost/process/pipe.hpp>
+#include <boost/process/search_path.hpp>
+#include <boost/process/shell_path.hpp>
+#include <boost/process/terminate.hpp>
+#include <boost/process/wait_for_exit.hpp>
+
+#endif
diff --git a/dep/process/boost/process/child.hpp b/dep/process/boost/process/child.hpp
new file mode 100644
index 00000000000..ec129fc9367
--- /dev/null
+++ b/dep/process/boost/process/child.hpp
@@ -0,0 +1,74 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/child.hpp
+ *
+ * Defines a child process class.
+ */
+
+#ifndef BOOST_PROCESS_CHILD_HPP
+#define BOOST_PROCESS_CHILD_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(child)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(child)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Represents a child process.
+ *
+ * On Windows child is movable but non-copyable. The destructor
+ * automatically closes handles to the child process.
+ */
+struct child
+{
+ /**
+ * Process information.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ PROCESS_INFORMATION proc_info;
+
+ /**
+ * Constructor.
+ *
+ * \remark <em>Windows only.<em/>
+ */
+ explicit child(const PROCESS_INFORMATION &pi) : proc_info(pi) {}
+
+ /**
+ * Returns the process handle.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ HANDLE process_handle() const { return proc_info.hProcess; }
+
+ /**
+ * Process identifier.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+ pid_t pid;
+
+ /**
+ * Constructor.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+ explicit child(pid_t p) : pid(p) {}
+};
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/config.hpp b/dep/process/boost/process/config.hpp
new file mode 100644
index 00000000000..7aae4d3ca4f
--- /dev/null
+++ b/dep/process/boost/process/config.hpp
@@ -0,0 +1,82 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/config.hpp
+ *
+ * Defines various macros.
+ */
+
+#ifndef BOOST_PROCESS_CONFIG_HPP
+#define BOOST_PROCESS_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/system/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/system/system_error.hpp>
+
+#if defined(BOOST_POSIX_API)
+# include <errno.h>
+# define BOOST_PROCESS_LAST_ERROR errno
+# define BOOST_PROCESS_PLATFORM posix
+#elif defined(BOOST_WINDOWS_API)
+# include <Windows.h>
+# define BOOST_PROCESS_LAST_ERROR GetLastError()
+# define BOOST_PROCESS_PLATFORM windows
+#endif
+
+/** \cond */
+#define BOOST_PROCESS_PLATFORM_PROMOTE_PATH(COMPONENT) \
+ <boost/process/BOOST_PROCESS_PLATFORM/COMPONENT.hpp>
+#define BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(COMPONENT) \
+ namespace boost { namespace process { using BOOST_PROCESS_PLATFORM::COMPONENT; }}
+#define BOOST_PROCESS_PLATFORM_PROMOTE_INITIALIZERS_NAMESPACE \
+ namespace boost { namespace process { namespace initializers { \
+ using namespace boost::process::BOOST_PROCESS_PLATFORM::initializers; }}}
+/** \endcond */
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+/**
+ * \def BOOST_POSIX_API
+ *
+ * This macro is defined on POSIX.
+ */
+#define BOOST_POSIX_API
+/**
+ * \def BOOST_WINDOWS_API
+ *
+ * This macro is defined on Windows.
+ */
+#define BOOST_WINDOWS_API
+#endif
+
+/**
+ * \def BOOST_PROCESS_THROW(EX)
+ *
+ * Defines how exceptions are thrown. Set this macro for example
+ * to \c BOOST_THROW_EXCEPTION if you like to use Boost.Exception.
+ */
+#define BOOST_PROCESS_THROW(EX) throw EX
+
+/** \cond */
+#define BOOST_PROCESS_SOURCE_LOCATION \
+ "in file '" __FILE__ "', line " BOOST_STRINGIZE(__LINE__) ": "
+
+#define BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR(what) \
+ BOOST_PROCESS_THROW(boost::system::system_error( \
+ boost::system::error_code(BOOST_PROCESS_LAST_ERROR, \
+ boost::system::system_category()), \
+ BOOST_PROCESS_SOURCE_LOCATION what))
+
+#define BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec) \
+ ec = boost::system::error_code(BOOST_PROCESS_LAST_ERROR, \
+ boost::system::system_category())
+/** \endcond */
+
+#endif
diff --git a/dep/process/boost/process/create_pipe.hpp b/dep/process/boost/process/create_pipe.hpp
new file mode 100644
index 00000000000..6c34ecf44b1
--- /dev/null
+++ b/dep/process/boost/process/create_pipe.hpp
@@ -0,0 +1,48 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/create_pipe.hpp
+ *
+ * Defines a function to create a pipe.
+ */
+
+#ifndef BOOST_PROCESS_CREATE_PIPE_HPP
+#define BOOST_PROCESS_CREATE_PIPE_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(create_pipe)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(create_pipe)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Creates an anonymous pipe.
+ *
+ * \note On Windows anonymous pipes don't support
+ * asynchronous I/O.
+ *
+ * \throws boost::system::system_error in case of an error
+ */
+pipe create_pipe();
+
+/**
+ * Creates an anonymous pipe.
+ *
+ * \note On Windows anonymous pipes don't support
+ * asynchronous I/O.
+ */
+pipe create_pipe(boost::system::error_code &ec);
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/execute.hpp b/dep/process/boost/process/execute.hpp
new file mode 100644
index 00000000000..608831171e9
--- /dev/null
+++ b/dep/process/boost/process/execute.hpp
@@ -0,0 +1,38 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/execute.hpp
+ *
+ * Defines a function to execute a program.
+ */
+
+#ifndef BOOST_PROCESS_EXECUTE_HPP
+#define BOOST_PROCESS_EXECUTE_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(execute)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(execute)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Starts a program.
+ *
+ * \tparam initializers define what and how the program is started
+ */
+template <class Initializer, class... Initializers>
+child execute(const Initializer &initializer, const Initializers... &initializers);
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/executor.hpp b/dep/process/boost/process/executor.hpp
new file mode 100644
index 00000000000..905d7f84cc7
--- /dev/null
+++ b/dep/process/boost/process/executor.hpp
@@ -0,0 +1,176 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/executor.hpp
+ *
+ * Defines an executor which can create child processes.
+ */
+
+#ifndef BOOST_PROCESS_EXECUTOR_HPP
+#define BOOST_PROCESS_EXECUTOR_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(executor)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(executor)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Starts a program.
+ *
+ * boost::process::executor is a functor which calls the system functions
+ * to start a program. Before system functions are called it iterates
+ * over initializers and calls a member function passing a reference
+ * to itself as a parameter. Initializers get then a chance to setup
+ * the executor. If system functions fail boost::process::executor again
+ * iterates over initializers and calls another member function passing a
+ * reference to itself as a parameter. This gives initializers a
+ * chance to handle the error.
+ *
+ * \note Library users shouldn't need to use boost::process::executor.
+ * It is recommended to call boost::process::execute which uses
+ * boost::pocess::executor internally.
+ */
+struct executor
+{
+ /**
+ * Default constructor.
+ */
+ executor();
+
+ /**
+ * Starts a program.
+ *
+ * \tparam initializers define what and how the program is started
+ */
+ template <class Initializer, class... Initializers>
+ child operator()(const Initializer &initializer, const Initializers... &initializers);
+
+ ///\defgroup WindowsOnly Windows only.
+ ///@{
+
+ /**
+ * Program name.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ LPCTSTR exe;
+
+ /**
+ * Command line.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ LPTSTR cmd_line;
+
+ /**
+ * Process attributes.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ LPSECURITY_ATTRIBUTES proc_attrs;
+
+ /**
+ * Thread attributes.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ LPSECURITY_ATTRIBUTES thread_attrs;
+
+ /**
+ * Flag to inherit handles.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ BOOL inherit_handles;
+
+ /**
+ * Creation flags.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ DWORD creation_flags;
+
+ /**
+ * Environment variables.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ LPVOID env;
+
+ /**
+ * Work directory.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ LPCTSTR work_dir;
+
+ /**
+ * Startupinfo structure.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ STARTUPINFO startup_info;
+
+ /**
+ * Startupinfoex structure.
+ *
+ * If this member variable is available, \c startup_info is a reference
+ * to \c StartupInfo in STARTUPINFOEX.
+ *
+ * \remark <em>Windows Vista, Windows Server 2008 or better.</em>
+ */
+ STARTUPINFOEX startup_info_ex;
+
+ /**
+ * Process information.
+ *
+ * \c proc_info contains the result after a child process
+ * could be started successfully.
+ *
+ * \remark <em>Windows only.</em>
+ */
+ PROCESS_INFORMATION proc_info;
+
+ ///@}
+
+ ///\defgroup POSIXOnly POSIX only.
+ ///@{
+
+ /**
+ * Program name.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+ const char *exe;
+
+ /**
+ * Command line arguments.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+ char **cmd_line;
+
+ /**
+ * Environment variables.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+ char **env;
+
+ ///@}
+};
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/initializers.hpp b/dep/process/boost/process/initializers.hpp
new file mode 100644
index 00000000000..c7175d1425d
--- /dev/null
+++ b/dep/process/boost/process/initializers.hpp
@@ -0,0 +1,497 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/initializers.hpp
+ *
+ * Defines initializers.
+ */
+
+#ifndef BOOST_PROCESS_INITIALIZERS_HPP
+#define BOOST_PROCESS_INITIALIZERS_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(initializers)
+BOOST_PROCESS_PLATFORM_PROMOTE_INITIALIZERS_NAMESPACE
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process { namespace initializers {
+
+/**
+ * Binds the standard error stream.
+ */
+class bind_stderr : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ explicit bind_stderr(const boost::iostreams::file_descriptor_sink &sink);
+};
+
+/**
+ * Binds the standard input stream.
+ */
+class bind_stdin : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ explicit bind_stdin(const boost::iostreams::file_descriptor_source &source);
+};
+
+/**
+ * Binds the standard output stream.
+ */
+class bind_stdout : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ explicit bind_stdout(const boost::iostreams::file_descriptor_sink &sink);
+};
+
+/**
+ * Binds a file descriptor.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class bind_fd : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ bind_fd(int id, const boost::iostreams::file_descriptor &fd);
+};
+
+/**
+ * Closes a file descriptor.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class close_fd : public initializer_base
+{
+ /**
+ * Constructor.
+ */
+ explicit close_fd(int fd);
+};
+
+/**
+ * Closes file descriptors.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class close_fds : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c range_type must be an <tt>int</tt>-range.
+ */
+ explicit close_fds(const range_type &fds);
+};
+
+/**
+ * Closes all file descriptors a predicate returns
+ * true for.
+ *
+ * This initializer doesn't close file descriptors
+ * immediately. Instead it sets the \c FD_CLOEXEC
+ * flag. File descriptors are closed when \c execve
+ * is called and the call succeeds.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class close_fds_if : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c predicate_type must be a function or functor with
+ * this signature: <tt>bool(int)</tt>
+ */
+ explicit close_fds_if(const predicate_type &pred);
+};
+
+/**
+ * Closes the standard error stream.
+ */
+class close_stderr : public initializer_base
+{
+ /**
+ * Constructor.
+ */
+ close_stderr();
+};
+
+/**
+ * Closes the standard input stream.
+ */
+class close_stdin : public initializer_base
+{
+ /**
+ * Constructor.
+ */
+ close_stdin();
+};
+
+/**
+ * Closes the standard output stream.
+ */
+class close_stdout : public initializer_base
+{
+ /**
+ * Constructor.
+ */
+ close_stdout();
+};
+
+/**
+ * Hides the console.
+ */
+class hide_console : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ hide_console();
+};
+
+/**
+ * Inherits environment variables.
+ */
+class inherit_env : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ inherit_env();
+};
+
+/**
+ * Notifies an I/O service object of fork-related events.
+ *
+ * \see boost::asio::io_service::notify_fork
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class notify_io_service : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ explicit notify_io_service(boost::asio::io_service &io_service);
+};
+
+/**
+ * Generic initializer to execute any code if \c execve
+ * failed.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class on_exec_error : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_exec_error(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code before \c execve
+ * is called.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class on_exec_setup : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_exec_setup(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code if \c fork
+ * failed.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class on_fork_error : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_fork_error(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code before \c fork
+ * is called.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class on_fork_setup : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_fork_setup(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code in the parent
+ * process after \c fork has been called successfully.
+ *
+ * \remark <em>POSIX only.</em>
+ */
+class on_fork_success : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_fork_success(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code if \c CreateProcess
+ * failed.
+ *
+ * \remark <em>Windows only.</em>
+ */
+class on_CreateProcess_error : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_CreateProcess_error(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code before \c CreateProcess
+ * is called.
+ *
+ * \remark <em>Windows only.</em>
+ */
+class on_CreateProcess_setup : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_CreateProcess_setup(handler_type handler);
+};
+
+/**
+ * Generic initializer to execute any code after \c CreateProcess
+ * has been called successfully.
+ *
+ * \remark <em>Windows only.</em>
+ */
+class on_CreateProcess_success : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * \c handler_type must be a function or functor with
+ * this signature: <tt>void(executor&)</tt>
+ */
+ explicit on_CreateProcess_success(handler_type handler);
+};
+
+/**
+ * Specifies the executable to start.
+ *
+ * This initializer must always be used. The only exception is
+ * if you use \c set_args or a generic initializer which
+ * specifies the executable.
+ */
+class run_exe : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * On Windows \c string_type must be <tt>const char*</tt>,
+ * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>.
+ * If Unicode is used, \c string_type must be
+ * <tt>const wchar_t*</tt>, <tt>std::wstring</tt> or
+ * <tt>boost::filesystem::path</tt>.
+ *
+ * On POSIX \c string_type must be <tt>const char*</tt>,
+ * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>.
+ */
+ explicit run_exe(const string_type &s);
+};
+
+/**
+ * Sets the command line arguments.
+ *
+ * The first argument specifies the executable to start unless
+ * \c run_exe is used.
+ *
+ * Use \c set_cmd_line if you don't want to pass a collection of
+ * command line arguments but set the command line as one string.
+ */
+class set_args : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * On Windows \c range_type must be a <tt>std::string</tt>-range.
+ * If Unicode is used, \c range_type must be a
+ * <tt>std::wstring</tt>-range.
+ *
+ * On POSIX \c range_type must be a <tt>std::string</tt>-range.
+ */
+ explicit set_args(const range_type &r);
+};
+
+/**
+ * Sets the command line.
+ *
+ * Use \c set_args if you don't want to set the command line as
+ * one string but pass a collection of command line arguments.
+ */
+class set_cmd_line : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * On Windows \c string_type must be <tt>const char*</tt>,
+ * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>.
+ * If Unicode is used, \c string_type must be
+ * <tt>const wchar_t*</tt>, <tt>std::wstring</tt> or
+ * <tt>boost::filesystem::path</tt>.
+ *
+ * On POSIX \c string_type must be <tt>const char*</tt>,
+ * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>.
+ */
+ explicit set_cmd_line(const string_type &s);
+};
+
+/**
+ * Sets the environment.
+ */
+class set_env : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * On Windows \c range_type must be a <tt>std::string</tt>-range.
+ * If Unicode is used, \c range_type must be a
+ * <tt>std::wstring</tt>-range.
+ *
+ * On POSIX \c range_type must be a <tt>std::string</tt>-range.
+ */
+ explicit set_env(const range_type &r);
+};
+
+/**
+ * Sets an error if a child process can't be created.
+ */
+class set_on_error : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ explicit set_on_error(boost::system::error_code &ec);
+};
+
+/**
+ * Sets the flag \c wShowWindow in \c STARTUPINFO.
+ *
+ * \remark <em>Windows only.</em>
+ */
+class show_window : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ */
+ explicit show_window(WORD flags);
+};
+
+/**
+ * Sets the work directory.
+ */
+class start_in_dir : public initializer_base
+{
+public:
+ /**
+ * Constructor.
+ *
+ * On Windows \c string_type must be <tt>const char*</tt>,
+ * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>.
+ * If Unicode is used, \c string_type must be
+ * <tt>const wchar_t*</tt>, <tt>std::wstring</tt> or
+ * <tt>boost::filesystem::path</tt>.
+ *
+ * On POSIX \c string_type must be <tt>const char*</tt>,
+ * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>.
+ */
+ explicit start_in_dir(const string_type &s);
+};
+
+/**
+ * Throws an error if a child process can't be created.
+ *
+ * The type of the error thrown is \c boost::system::system_error.
+ */
+class throw_on_error : public initializer_base
+{
+public:
+};
+
+}}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/mitigate.hpp b/dep/process/boost/process/mitigate.hpp
new file mode 100644
index 00000000000..6838984aa1a
--- /dev/null
+++ b/dep/process/boost/process/mitigate.hpp
@@ -0,0 +1,104 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/mitigate.hpp
+ *
+ * Helpers to mitigate platform differences.
+ */
+
+#ifndef BOOST_PROCESS_MITIGATE_HPP
+#define BOOST_PROCESS_MITIGATE_HPP
+
+#include <boost/asio.hpp>
+#if defined(BOOST_POSIX_API)
+# include <sys/wait.h>
+#endif
+
+namespace boost { namespace process {
+
+#if defined(BOOST_WINDOWS_API)
+typedef boost::asio::windows::stream_handle pipe_end;
+#elif defined(BOOST_POSIX_API)
+typedef boost::asio::posix::stream_descriptor pipe_end;
+#endif
+
+inline const char *zero_device()
+{
+#if defined(BOOST_WINDOWS_API)
+ return "NUL";
+#elif defined(BOOST_POSIX_API)
+ return "/dev/zero";
+#endif
+}
+
+inline const char *null_device()
+{
+#if defined(BOOST_WINDOWS_API)
+ return "NUL";
+#elif defined(BOOST_POSIX_API)
+ return "/dev/null";
+#endif
+}
+
+#if defined(BOOST_WINDOWS_API)
+# define BOOST_PROCESS_EXITSTATUS(a) static_cast<int>(a)
+#elif defined(BOOST_POSIX_API)
+# define BOOST_PROCESS_EXITSTATUS WEXITSTATUS
+#endif
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+/**
+ * Type definition for the end of a pipe.
+ *
+ * On Windows the type is based on boost::asio::windows::stream_handle. On
+ * POSIX it is based on boost::asio::posix::stream_descriptor.
+ *
+ * You can use this type definition for asynchronous I/O with streams of
+ * child processes.
+ */
+typedef boost_asio_type pipe_end;
+
+/**
+ * Gets the name of the zero device.
+ *
+ * You can use zero_device to initialize a
+ * boost::iostreams::file_descriptor_source to read
+ * null characters from.
+ *
+ * \returns NUL on Windows and /dev/zero on POSIX.
+ */
+const char *zero_device();
+
+/**
+ * Gets the name of the null device.
+ *
+ * You can use null_device to initialize a
+ * boost::iostreams::file_descriptor_sink which discards
+ * data written to it.
+ *
+ * \returns NUL on Windows and /dev/null on POSIX.
+ */
+const char *null_device();
+
+/**
+ * \def BOOST_PROCESS_EXITSTATUS
+ *
+ * On Windows \c BOOST_PROCESS_EXITSTATUS is a static cast to \c int.
+ * On POSIX it is set to \c WEXITSTATUS.
+ *
+ * You can use \c BOOST_PROCESS_EXITSTATUS for the return value of
+ * boost::process::wait_for_exit to get the exit status of a process.
+ */
+#define BOOST_PROCESS_EXITSTATUS
+#endif
+
+}}
+
+#endif
diff --git a/dep/process/boost/process/pipe.hpp b/dep/process/boost/process/pipe.hpp
new file mode 100644
index 00000000000..35f2a4470d6
--- /dev/null
+++ b/dep/process/boost/process/pipe.hpp
@@ -0,0 +1,64 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/pipe.hpp
+ *
+ * Defines a pipe.
+ */
+
+#ifndef BOOST_PROCESS_PIPE_HPP
+#define BOOST_PROCESS_PIPE_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(pipe)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(pipe)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(make_pipe)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Represents a pipe.
+ */
+struct pipe
+{
+ /**
+ * Read-end.
+ */
+ pipe_end_type source;
+
+ /**
+ * Write-end.
+ */
+ pipe_end_type sink;
+
+ /**
+ * Constructor.
+ */
+ pipe(pipe_end_type source, pipe_end_type sink);
+};
+
+/**
+ * Returns a pipe instance.
+ *
+ * This is a helper function to instantiate boost::process::pipe.
+ *
+ * \note boost::process::make_pipe does not create a pipe.
+ * You must pass existing pipe ends to this function.
+ * If you want to create an anonymous pipe, call
+ * boost::process::create_pipe.
+ */
+pipe make_pipe(pipe_end_type source, pipe_end_type sink);
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/posix/child.hpp b/dep/process/boost/process/posix/child.hpp
new file mode 100644
index 00000000000..913484529e8
--- /dev/null
+++ b/dep/process/boost/process/posix/child.hpp
@@ -0,0 +1,26 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_CHILD_HPP
+#define BOOST_PROCESS_POSIX_CHILD_HPP
+
+#include <sys/types.h>
+
+namespace boost { namespace process { namespace posix {
+
+struct child
+{
+ pid_t pid;
+
+ explicit child(pid_t p) : pid(p) {}
+};
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/create_pipe.hpp b/dep/process/boost/process/posix/create_pipe.hpp
new file mode 100644
index 00000000000..ecdd523516f
--- /dev/null
+++ b/dep/process/boost/process/posix/create_pipe.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_CREATE_PIPE_HPP
+#define BOOST_PROCESS_POSIX_CREATE_PIPE_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/pipe.hpp>
+#include <boost/system/error_code.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix {
+
+inline pipe create_pipe()
+{
+ int fds[2];
+ if (::pipe(fds) == -1)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("pipe(2) failed");
+ return pipe(fds[0], fds[1]);
+}
+
+inline pipe create_pipe(boost::system::error_code &ec)
+{
+ int fds[2];
+ if (::pipe(fds) == -1)
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else
+ ec.clear();
+ return pipe(fds[0], fds[1]);
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/execute.hpp b/dep/process/boost/process/posix/execute.hpp
new file mode 100644
index 00000000000..27082196c8a
--- /dev/null
+++ b/dep/process/boost/process/posix/execute.hpp
@@ -0,0 +1,82 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_EXECUTE_HPP
+#define BOOST_PROCESS_POSIX_EXECUTE_HPP
+
+#include <boost/process/posix/executor.hpp>
+#include <boost/process/posix/child.hpp>
+#include <boost/fusion/tuple/make_tuple.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace process { namespace posix {
+
+template <class I0>
+child execute(const I0 &i0)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0)));
+}
+
+template <class I0, class I1>
+child execute(const I0 &i0, const I1 &i1)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1)));
+}
+
+template <class I0, class I1, class I2>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2)));
+}
+
+template <class I0, class I1, class I2, class I3>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8, class I9>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8, const I9 &i9)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8), boost::cref(i9)));
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/executor.hpp b/dep/process/boost/process/posix/executor.hpp
new file mode 100644
index 00000000000..a3e81f128f5
--- /dev/null
+++ b/dep/process/boost/process/posix/executor.hpp
@@ -0,0 +1,120 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_EXECUTOR_HPP
+#define BOOST_PROCESS_POSIX_EXECUTOR_HPP
+
+#include <boost/process/posix/child.hpp>
+#include <boost/fusion/algorithm/iteration/for_each.hpp>
+#include <cstdlib>
+#include <sys/types.h>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix {
+
+struct executor
+{
+ executor() : exe(0), cmd_line(0), env(0) {}
+
+ struct call_on_fork_setup
+ {
+ executor &e_;
+
+ call_on_fork_setup(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(const Arg &arg) const
+ {
+ arg.on_fork_setup(e_);
+ }
+ };
+
+ struct call_on_fork_error
+ {
+ executor &e_;
+
+ call_on_fork_error(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_fork_error(e_);
+ }
+ };
+
+ struct call_on_fork_success
+ {
+ executor &e_;
+
+ call_on_fork_success(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_fork_success(e_);
+ }
+ };
+
+ struct call_on_exec_setup
+ {
+ executor &e_;
+
+ call_on_exec_setup(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_exec_setup(e_);
+ }
+ };
+
+ struct call_on_exec_error
+ {
+ executor &e_;
+
+ call_on_exec_error(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_exec_error(e_);
+ }
+ };
+
+ template <class InitializerSequence>
+ child operator()(const InitializerSequence &seq)
+ {
+ boost::fusion::for_each(seq, call_on_fork_setup(*this));
+
+ pid_t pid = ::fork();
+ if (pid == -1)
+ {
+ boost::fusion::for_each(seq, call_on_fork_error(*this));
+ }
+ else if (pid == 0)
+ {
+ boost::fusion::for_each(seq, call_on_exec_setup(*this));
+ ::execve(exe, cmd_line, env);
+ boost::fusion::for_each(seq, call_on_exec_error(*this));
+ _exit(EXIT_FAILURE);
+ }
+
+ boost::fusion::for_each(seq, call_on_fork_success(*this));
+
+ return child(pid);
+ }
+
+ const char *exe;
+ char **cmd_line;
+ char **env;
+};
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers.hpp b/dep/process/boost/process/posix/initializers.hpp
new file mode 100644
index 00000000000..78295c14cb6
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers.hpp
@@ -0,0 +1,39 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_HPP
+
+#include <boost/process/posix/initializers/bind_fd.hpp>
+#include <boost/process/posix/initializers/bind_stderr.hpp>
+#include <boost/process/posix/initializers/bind_stdin.hpp>
+#include <boost/process/posix/initializers/bind_stdout.hpp>
+#include <boost/process/posix/initializers/close_fd.hpp>
+#include <boost/process/posix/initializers/close_fds.hpp>
+#include <boost/process/posix/initializers/close_fds_if.hpp>
+#include <boost/process/posix/initializers/close_stderr.hpp>
+#include <boost/process/posix/initializers/close_stdin.hpp>
+#include <boost/process/posix/initializers/close_stdout.hpp>
+#include <boost/process/posix/initializers/hide_console.hpp>
+#include <boost/process/posix/initializers/inherit_env.hpp>
+#include <boost/process/posix/initializers/notify_io_service.hpp>
+#include <boost/process/posix/initializers/on_exec_error.hpp>
+#include <boost/process/posix/initializers/on_exec_setup.hpp>
+#include <boost/process/posix/initializers/on_fork_error.hpp>
+#include <boost/process/posix/initializers/on_fork_setup.hpp>
+#include <boost/process/posix/initializers/on_fork_success.hpp>
+#include <boost/process/posix/initializers/run_exe.hpp>
+#include <boost/process/posix/initializers/set_args.hpp>
+#include <boost/process/posix/initializers/set_cmd_line.hpp>
+#include <boost/process/posix/initializers/set_env.hpp>
+#include <boost/process/posix/initializers/set_on_error.hpp>
+#include <boost/process/posix/initializers/start_in_dir.hpp>
+#include <boost/process/posix/initializers/throw_on_error.hpp>
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/bind_fd.hpp b/dep/process/boost/process/posix/initializers/bind_fd.hpp
new file mode 100644
index 00000000000..851b7ef3e44
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/bind_fd.hpp
@@ -0,0 +1,43 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_FD_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_FD_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class FileDescriptor>
+class bind_fd_ : public initializer_base
+{
+public:
+ bind_fd_(int id, const FileDescriptor &fd) : id_(id), fd_(fd) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::dup2(fd_.handle(), id_);
+ }
+
+private:
+ int id_;
+ FileDescriptor fd_;
+};
+
+template <class FileDescriptor>
+bind_fd_<FileDescriptor> bind_fd(int id, const FileDescriptor &fd)
+{
+ return bind_fd_<FileDescriptor>(id, fd);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/bind_stderr.hpp b/dep/process/boost/process/posix/initializers/bind_stderr.hpp
new file mode 100644
index 00000000000..be767bf2fe1
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/bind_stderr.hpp
@@ -0,0 +1,37 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDERR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDERR_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class bind_stderr : public initializer_base
+{
+public:
+ explicit bind_stderr(const boost::iostreams::file_descriptor_sink &sink)
+ : sink_(sink) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::dup2(sink_.handle(), STDERR_FILENO);
+ }
+
+private:
+ boost::iostreams::file_descriptor_sink sink_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/bind_stdin.hpp b/dep/process/boost/process/posix/initializers/bind_stdin.hpp
new file mode 100644
index 00000000000..b592d6f8b38
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/bind_stdin.hpp
@@ -0,0 +1,37 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDIN_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDIN_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class bind_stdin : public initializer_base
+{
+public:
+ explicit bind_stdin(const boost::iostreams::file_descriptor_source &source)
+ : source_(source) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::dup2(source_.handle(), STDIN_FILENO);
+ }
+
+private:
+ boost::iostreams::file_descriptor_source source_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/bind_stdout.hpp b/dep/process/boost/process/posix/initializers/bind_stdout.hpp
new file mode 100644
index 00000000000..a2c316d9972
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/bind_stdout.hpp
@@ -0,0 +1,37 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDOUT_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDOUT_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class bind_stdout : public initializer_base
+{
+public:
+ explicit bind_stdout(const boost::iostreams::file_descriptor_sink &sink)
+ : sink_(sink) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::dup2(sink_.handle(), STDOUT_FILENO);
+ }
+
+private:
+ boost::iostreams::file_descriptor_sink sink_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/close_fd.hpp b/dep/process/boost/process/posix/initializers/close_fd.hpp
new file mode 100644
index 00000000000..fd516e41005
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/close_fd.hpp
@@ -0,0 +1,35 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FD_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FD_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class close_fd : public initializer_base
+{
+public:
+ explicit close_fd(int fd) : fd_(fd) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::close(fd_);
+ }
+
+private:
+ int fd_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/close_fds.hpp b/dep/process/boost/process/posix/initializers/close_fds.hpp
new file mode 100644
index 00000000000..2fa338501eb
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/close_fds.hpp
@@ -0,0 +1,43 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Range>
+class close_fds_ : public initializer_base
+{
+public:
+ explicit close_fds_(const Range &fds) : fds_(fds) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ boost::for_each(fds_, ::close);
+ }
+
+private:
+ Range fds_;
+};
+
+template <class Range>
+close_fds_<Range> close_fds(const Range &fds)
+{
+ return close_fds_<Range>(fds);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/close_fds_if.hpp b/dep/process/boost/process/posix/initializers/close_fds_if.hpp
new file mode 100644
index 00000000000..fb3a651d628
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/close_fds_if.hpp
@@ -0,0 +1,80 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_IF_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_IF_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/iterator/counting_iterator.hpp>
+#include <boost/range/counting_range.hpp>
+#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#ifndef BOOST_PROCESS_POSIX_MAX_FD
+# define BOOST_PROCESS_POSIX_MAX_FD 32
+#endif
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Predicate>
+class close_fds_if_ : public initializer_base
+{
+private:
+ static void close(int fd)
+ {
+ ::fcntl(fd, F_SETFD, FD_CLOEXEC);
+ }
+
+public:
+ explicit close_fds_if_(const Predicate &pred) : pred_(pred) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ boost::for_each(
+ boost::adaptors::filter(
+ boost::counting_range(0, upper_bound()),
+ pred_
+ ),
+ close
+ );
+ }
+
+private:
+ static int upper_bound()
+ {
+ int up;
+#if defined(F_MAXFD)
+ do
+ {
+ up = ::fcntl(0, F_MAXFD);
+ } while (up == -1 && errno == EINTR);
+ if (up == -1)
+#endif
+ up = ::sysconf(_SC_OPEN_MAX);
+ if (up == -1)
+ up = BOOST_PROCESS_POSIX_MAX_FD;
+ return up;
+ }
+
+ Predicate pred_;
+};
+
+template <class Predicate>
+close_fds_if_<Predicate> close_fds_if(const Predicate &pred)
+{
+ return close_fds_if_<Predicate>(pred);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/close_stderr.hpp b/dep/process/boost/process/posix/initializers/close_stderr.hpp
new file mode 100644
index 00000000000..1a4c2ad00df
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/close_stderr.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDERR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDERR_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class close_stderr : public initializer_base
+{
+public:
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::close(STDERR_FILENO);
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/close_stdin.hpp b/dep/process/boost/process/posix/initializers/close_stdin.hpp
new file mode 100644
index 00000000000..021c3ec54df
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/close_stdin.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDIN_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDIN_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class close_stdin : public initializer_base
+{
+public:
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::close(STDIN_FILENO);
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/close_stdout.hpp b/dep/process/boost/process/posix/initializers/close_stdout.hpp
new file mode 100644
index 00000000000..cfab7d1d62f
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/close_stdout.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDOUT_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDOUT_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class close_stdout : public initializer_base
+{
+public:
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::close(STDOUT_FILENO);
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/hide_console.hpp b/dep/process/boost/process/posix/initializers/hide_console.hpp
new file mode 100644
index 00000000000..20d527b457f
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/hide_console.hpp
@@ -0,0 +1,24 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_HIDE_CONSOLE_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_HIDE_CONSOLE_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class hide_console : public initializer_base
+{
+public:
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/inherit_env.hpp b/dep/process/boost/process/posix/initializers/inherit_env.hpp
new file mode 100644
index 00000000000..bc73c8571f8
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/inherit_env.hpp
@@ -0,0 +1,36 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_INHERIT_ENV_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_INHERIT_ENV_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+// From <https://svn.boost.org/trac/boost/changeset/67768>
+#if defined(__APPLE__) && defined(__DYNAMIC__)
+extern "C" { extern char ***_NSGetEnviron(void); }
+# define environ (*_NSGetEnviron())
+#else
+# include <unistd.h>
+#endif
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class inherit_env : public initializer_base
+{
+public:
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor &e) const
+ {
+ e.env = environ;
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/initializer_base.hpp b/dep/process/boost/process/posix/initializers/initializer_base.hpp
new file mode 100644
index 00000000000..775f00e48ce
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/initializer_base.hpp
@@ -0,0 +1,35 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_INITIALIZER_BASE_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_INITIALIZER_BASE_HPP
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+struct initializer_base
+{
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor&) const {}
+
+ template <class PosixExecutor>
+ void on_fork_error(PosixExecutor&) const {}
+
+ template <class PosixExecutor>
+ void on_fork_success(PosixExecutor&) const {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const {}
+
+ template <class PosixExecutor>
+ void on_exec_error(PosixExecutor&) const {}
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/notify_io_service.hpp b/dep/process/boost/process/posix/initializers/notify_io_service.hpp
new file mode 100644
index 00000000000..d94f674c81a
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/notify_io_service.hpp
@@ -0,0 +1,55 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_NOTIFY_IO_SERVICE_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_NOTIFY_IO_SERVICE_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class IOService>
+class notify_io_service_ : public initializer_base
+{
+public:
+ explicit notify_io_service_(IOService &io_service) :
+ io_service_(io_service) {}
+
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor&) const
+ {
+ io_service_.notify_fork(IOService::fork_prepare);
+ }
+
+ template <class PosixExecutor>
+ void on_fork_success(PosixExecutor&) const
+ {
+ io_service_.notify_fork(IOService::fork_parent);
+ }
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ io_service_.notify_fork(IOService::fork_child);
+ }
+
+private:
+ IOService &io_service_;
+};
+
+template <class IOService>
+notify_io_service_<IOService> notify_io_service(IOService &io_service)
+{
+ return notify_io_service_<IOService>(io_service);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/on_exec_error.hpp b/dep/process/boost/process/posix/initializers/on_exec_error.hpp
new file mode 100644
index 00000000000..63b56def4f2
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/on_exec_error.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_ERROR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Handler>
+class on_exec_error_ : public initializer_base
+{
+public:
+ explicit on_exec_error_(Handler handler) : handler_(handler) {}
+
+ template <class PosixExecutor>
+ void on_exec_error(PosixExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_exec_error_<Handler> on_exec_error(Handler handler)
+{
+ return on_exec_error_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/on_exec_setup.hpp b/dep/process/boost/process/posix/initializers/on_exec_setup.hpp
new file mode 100644
index 00000000000..50f5f3736b1
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/on_exec_setup.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_SETUP_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_SETUP_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Handler>
+class on_exec_setup_ : public initializer_base
+{
+public:
+ explicit on_exec_setup_(Handler handler) : handler_(handler) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_exec_setup_<Handler> on_exec_setup(Handler handler)
+{
+ return on_exec_setup_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/on_fork_error.hpp b/dep/process/boost/process/posix/initializers/on_fork_error.hpp
new file mode 100644
index 00000000000..42ecf1aac91
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/on_fork_error.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_ERROR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Handler>
+class on_fork_error_ : public initializer_base
+{
+public:
+ explicit on_fork_error_(Handler handler) : handler_(handler) {}
+
+ template <class PosixExecutor>
+ void on_fork_error(PosixExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_fork_error_<Handler> on_fork_error(Handler handler)
+{
+ return on_fork_error_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/on_fork_setup.hpp b/dep/process/boost/process/posix/initializers/on_fork_setup.hpp
new file mode 100644
index 00000000000..c0c5b0682f2
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/on_fork_setup.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SETUP_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SETUP_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Handler>
+class on_fork_setup_ : public initializer_base
+{
+public:
+ explicit on_fork_setup_(Handler handler) : handler_(handler) {}
+
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_fork_setup_<Handler> on_fork_setup(Handler handler)
+{
+ return on_fork_setup_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/on_fork_success.hpp b/dep/process/boost/process/posix/initializers/on_fork_success.hpp
new file mode 100644
index 00000000000..01c9b12db06
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/on_fork_success.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SUCCESS_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SUCCESS_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Handler>
+class on_fork_success_ : public initializer_base
+{
+public:
+ explicit on_fork_success_(Handler handler) : handler_(handler) {}
+
+ template <class PosixExecutor>
+ void on_fork_success(PosixExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_fork_success_<Handler> on_fork_success(Handler handler)
+{
+ return on_fork_success_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/run_exe.hpp b/dep/process/boost/process/posix/initializers/run_exe.hpp
new file mode 100644
index 00000000000..6cceeea8c15
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/run_exe.hpp
@@ -0,0 +1,59 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_RUN_EXE_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_RUN_EXE_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/shared_array.hpp>
+#include <string>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class run_exe_ : public initializer_base
+{
+public:
+ explicit run_exe_(const std::string &s) : s_(s), cmd_line_(new char*[2])
+ {
+ cmd_line_[0] = const_cast<char*>(s_.c_str());
+ cmd_line_[1] = 0;
+ }
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor &e) const
+ {
+ e.exe = s_.c_str();
+ if (!e.cmd_line)
+ e.cmd_line = cmd_line_.get();
+ }
+
+private:
+ std::string s_;
+ boost::shared_array<char*> cmd_line_;
+};
+
+inline run_exe_ run_exe(const char *s)
+{
+ return run_exe_(s);
+}
+
+inline run_exe_ run_exe(const std::string &s)
+{
+ return run_exe_(s);
+}
+
+inline run_exe_ run_exe(const boost::filesystem::path &p)
+{
+ return run_exe_(p.string());
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/set_args.hpp b/dep/process/boost/process/posix/initializers/set_args.hpp
new file mode 100644
index 00000000000..294926dc222
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/set_args.hpp
@@ -0,0 +1,57 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_ARGS_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_ARGS_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/range/algorithm/transform.hpp>
+#include <boost/shared_array.hpp>
+#include <string>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Range>
+class set_args_ : public initializer_base
+{
+private:
+ static char *c_str(const std::string &s)
+ {
+ return const_cast<char*>(s.c_str());
+ }
+
+public:
+ explicit set_args_(const Range &args)
+ {
+ args_.reset(new char*[args.size() + 1]);
+ boost::transform(args, args_.get(), c_str);
+ args_[args.size()] = 0;
+ }
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor &e) const
+ {
+ e.cmd_line = args_.get();
+ if (!e.exe && *args_[0])
+ e.exe = args_[0];
+ }
+
+private:
+ boost::shared_array<char*> args_;
+};
+
+template <class Range>
+set_args_<Range> set_args(const Range &range)
+{
+ return set_args_<Range>(range);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/set_cmd_line.hpp b/dep/process/boost/process/posix/initializers/set_cmd_line.hpp
new file mode 100644
index 00000000000..0f59d253594
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/set_cmd_line.hpp
@@ -0,0 +1,54 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_CMD_LINE_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_CMD_LINE_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/tokenizer.hpp>
+#include <boost/shared_array.hpp>
+#include <string>
+#include <vector>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class set_cmd_line : public initializer_base
+{
+private:
+ static char *c_str(const std::string &s)
+ {
+ return const_cast<char*>(s.c_str());
+ }
+
+public:
+ explicit set_cmd_line(const std::string &s)
+ {
+ typedef boost::tokenizer<boost::escaped_list_separator<char> > tokenizer;
+ boost::escaped_list_separator<char> sep('\\', ' ', '\"');
+ tokenizer tok(s, sep);
+ args_.assign(tok.begin(), tok.end());
+ cmd_line_.reset(new char*[args_.size() + 1]);
+ boost::transform(args_, cmd_line_.get(), c_str);
+ cmd_line_[args_.size()] = 0;
+ }
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor &e) const
+ {
+ e.cmd_line = cmd_line_.get();
+ }
+
+private:
+ std::vector<std::string> args_;
+ boost::shared_array<char*> cmd_line_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/set_env.hpp b/dep/process/boost/process/posix/initializers/set_env.hpp
new file mode 100644
index 00000000000..76649184f34
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/set_env.hpp
@@ -0,0 +1,54 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_ENV_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_ENV_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/range/algorithm/transform.hpp>
+#include <boost/shared_array.hpp>
+#include <string>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+template <class Range>
+class set_env_ : public initializer_base
+{
+private:
+ static char *get_ptr(const std::string &s)
+ {
+ return const_cast<char*>(s.c_str());
+ }
+
+public:
+ explicit set_env_(const Range &envs) : env_(new char*[envs.size() + 1])
+ {
+ boost::transform(envs, env_.get(), get_ptr);
+ env_[envs.size()] = 0;
+ }
+
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor &e) const
+ {
+ e.env = env_.get();
+ }
+
+private:
+ boost::shared_array<char*> env_;
+};
+
+template <class Range>
+set_env_<Range> set_env(const Range &envs)
+{
+ return set_env_<Range>(envs);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/set_on_error.hpp b/dep/process/boost/process/posix/initializers/set_on_error.hpp
new file mode 100644
index 00000000000..c01a816e603
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/set_on_error.hpp
@@ -0,0 +1,95 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_ON_ERROR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_ON_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/system/error_code.hpp>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class set_on_error : public initializer_base
+{
+public:
+ explicit set_on_error(boost::system::error_code &ec) : ec_(ec) {}
+
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor&) const
+ {
+ if (::pipe(fds_) == -1)
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_);
+ if (::fcntl(fds_[1], F_SETFD, FD_CLOEXEC) == -1)
+ {
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_);
+ ::close(fds_[0]);
+ ::close(fds_[1]);
+ }
+ }
+
+ template <class PosixExecutor>
+ void on_fork_error(PosixExecutor&) const
+ {
+ if (!ec_)
+ {
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_);
+ ::close(fds_[0]);
+ ::close(fds_[1]);
+ }
+ }
+
+ template <class PosixExecutor>
+ void on_fork_success(PosixExecutor&) const
+ {
+ if (!ec_)
+ {
+ ::close(fds_[1]);
+ int code;
+ if (::read(fds_[0], &code, sizeof(int)) > 0)
+ {
+ ec_ = boost::system::error_code(code,
+ boost::system::system_category());
+ }
+ ::close(fds_[0]);
+ }
+ }
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ if (!ec_)
+ {
+ ::close(fds_[0]);
+ }
+ }
+
+ template <class PosixExecutor>
+ void on_exec_error(PosixExecutor&) const
+ {
+ if (!ec_)
+ {
+ int e = errno;
+ while (::write(fds_[1], &e, sizeof(int)) == -1 && errno == EINTR)
+ ;
+ ::close(fds_[1]);
+ }
+ }
+
+private:
+ boost::system::error_code &ec_;
+ mutable int fds_[2];
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/start_in_dir.hpp b/dep/process/boost/process/posix/initializers/start_in_dir.hpp
new file mode 100644
index 00000000000..187b5a31f44
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/start_in_dir.hpp
@@ -0,0 +1,36 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_START_IN_DIR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_START_IN_DIR_HPP
+
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <string>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class start_in_dir : public initializer_base
+{
+public:
+ explicit start_in_dir(const std::string &s) : s_(s) {}
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::chdir(s_.c_str());
+ }
+
+private:
+ std::string s_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/initializers/throw_on_error.hpp b/dep/process/boost/process/posix/initializers/throw_on_error.hpp
new file mode 100644
index 00000000000..7734c19e30b
--- /dev/null
+++ b/dep/process/boost/process/posix/initializers/throw_on_error.hpp
@@ -0,0 +1,90 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_THROW_ON_ERROR_HPP
+#define BOOST_PROCESS_POSIX_INITIALIZERS_THROW_ON_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/posix/initializers/initializer_base.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/system/system_error.hpp>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+namespace boost { namespace process { namespace posix { namespace initializers {
+
+class throw_on_error : public initializer_base
+{
+public:
+ template <class PosixExecutor>
+ void on_fork_setup(PosixExecutor&) const
+ {
+ if (::pipe(fds_) == -1)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("pipe(2) failed");
+ if (::fcntl(fds_[1], F_SETFD, FD_CLOEXEC) == -1)
+ {
+ int e = errno;
+ ::close(fds_[0]);
+ ::close(fds_[1]);
+ BOOST_PROCESS_THROW(boost::system::system_error(
+ boost::system::error_code(e, boost::system::system_category()),
+ BOOST_PROCESS_SOURCE_LOCATION "fcntl(2) failed"));
+ }
+ }
+
+ template <class PosixExecutor>
+ void on_fork_error(PosixExecutor&) const
+ {
+ int e = errno;
+ ::close(fds_[0]);
+ ::close(fds_[1]);
+ BOOST_PROCESS_THROW(boost::system::system_error(
+ boost::system::error_code(e, boost::system::system_category()),
+ BOOST_PROCESS_SOURCE_LOCATION "fork(2) failed"));
+ }
+
+ template <class PosixExecutor>
+ void on_fork_success(PosixExecutor&) const
+ {
+ ::close(fds_[1]);
+ int code;
+ if (::read(fds_[0], &code, sizeof(int)) > 0)
+ {
+ ::close(fds_[0]);
+ BOOST_PROCESS_THROW(boost::system::system_error(
+ boost::system::error_code(code,
+ boost::system::system_category()),
+ BOOST_PROCESS_SOURCE_LOCATION "execve(2) failed"));
+ }
+ ::close(fds_[0]);
+ }
+
+ template <class PosixExecutor>
+ void on_exec_setup(PosixExecutor&) const
+ {
+ ::close(fds_[0]);
+ }
+
+ template <class PosixExecutor>
+ void on_exec_error(PosixExecutor&) const
+ {
+ int e = errno;
+ while (::write(fds_[1], &e, sizeof(int)) == -1 && errno == EINTR)
+ ;
+ ::close(fds_[1]);
+ }
+
+private:
+ mutable int fds_[2];
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/pipe.hpp b/dep/process/boost/process/posix/pipe.hpp
new file mode 100644
index 00000000000..ca5b29447ab
--- /dev/null
+++ b/dep/process/boost/process/posix/pipe.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_PIPE_HPP
+#define BOOST_PROCESS_POSIX_PIPE_HPP
+
+namespace boost { namespace process { namespace posix {
+
+struct pipe
+{
+ int source;
+ int sink;
+
+ pipe(int source, int sink) : source(source), sink(sink) {}
+};
+
+inline pipe make_pipe(int source, int sink)
+{
+ return pipe(source, sink);
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/search_path.hpp b/dep/process/boost/process/posix/search_path.hpp
new file mode 100644
index 00000000000..6dc2bea063d
--- /dev/null
+++ b/dep/process/boost/process/posix/search_path.hpp
@@ -0,0 +1,53 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_SEARCH_PATH_HPP
+#define BOOST_PROCESS_POSIX_SEARCH_PATH_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/tokenizer.hpp>
+#include <string>
+#include <stdexcept>
+#include <stdlib.h>
+#include <unistd.h>
+
+namespace boost { namespace process { namespace posix {
+
+inline std::string search_path(const std::string &filename,
+ std::string path = "")
+{
+ if (path.empty())
+ {
+ path = ::getenv("PATH");
+ if (path.empty())
+ BOOST_PROCESS_THROW(std::runtime_error(
+ "Environment variable PATH not found"));
+ }
+
+ std::string result;
+ typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+ boost::char_separator<char> sep(":");
+ tokenizer tok(path, sep);
+ for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)
+ {
+ boost::filesystem::path p = *it;
+ p /= filename;
+ if (!::access(p.c_str(), X_OK))
+ {
+ result = p.string();
+ break;
+ }
+ }
+ return result;
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/shell_path.hpp b/dep/process/boost/process/posix/shell_path.hpp
new file mode 100644
index 00000000000..3e21e757591
--- /dev/null
+++ b/dep/process/boost/process/posix/shell_path.hpp
@@ -0,0 +1,32 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_SHELL_PATH_HPP
+#define BOOST_PROCESS_POSIX_SHELL_PATH_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/filesystem/path.hpp>
+
+namespace boost { namespace process { namespace posix {
+
+inline boost::filesystem::path shell_path()
+{
+ return "/bin/sh";
+}
+
+inline boost::filesystem::path shell_path(boost::system::error_code &ec)
+{
+ ec.clear();
+ return "/bin/sh";
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/terminate.hpp b/dep/process/boost/process/posix/terminate.hpp
new file mode 100644
index 00000000000..9be087df253
--- /dev/null
+++ b/dep/process/boost/process/posix/terminate.hpp
@@ -0,0 +1,37 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_TERMINATE_HPP
+#define BOOST_PROCESS_POSIX_TERMINATE_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <signal.h>
+
+namespace boost { namespace process { namespace posix {
+
+template <class Process>
+void terminate(const Process &p)
+{
+ if (::kill(p.pid, SIGKILL) == -1)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("kill(2) failed");
+}
+
+template <class Process>
+void terminate(const Process &p, boost::system::error_code &ec)
+{
+ if (::kill(p.pid, SIGKILL) == -1)
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else
+ ec.clear();
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/posix/wait_for_exit.hpp b/dep/process/boost/process/posix/wait_for_exit.hpp
new file mode 100644
index 00000000000..d2b946c262a
--- /dev/null
+++ b/dep/process/boost/process/posix/wait_for_exit.hpp
@@ -0,0 +1,52 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_POSIX_WAIT_FOR_EXIT_HPP
+#define BOOST_PROCESS_POSIX_WAIT_FOR_EXIT_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+namespace boost { namespace process { namespace posix {
+
+template <class Process>
+inline int wait_for_exit(const Process &p)
+{
+ pid_t ret;
+ int status;
+ do
+ {
+ ret = ::waitpid(p.pid, &status, 0);
+ } while ((ret == -1 && errno == EINTR) || (ret != -1 && !WIFEXITED(status)));
+ if (ret == -1)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("waitpid(2) failed");
+ return status;
+}
+
+template <class Process>
+inline int wait_for_exit(const Process &p, boost::system::error_code &ec)
+{
+ pid_t ret;
+ int status;
+ do
+ {
+ ret = ::waitpid(p.pid, &status, 0);
+ } while ((ret == -1 && errno == EINTR) || (ret != -1 && !WIFEXITED(status)));
+ if (ret == -1)
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else
+ ec.clear();
+ return status;
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/search_path.hpp b/dep/process/boost/process/search_path.hpp
new file mode 100644
index 00000000000..20bff060b62
--- /dev/null
+++ b/dep/process/boost/process/search_path.hpp
@@ -0,0 +1,51 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/search_path.hpp
+ *
+ * Defines a function to search for an executable in path.
+ */
+
+#ifndef BOOST_PROCESS_SEARCH_PATH_HPP
+#define BOOST_PROCESS_SEARCH_PATH_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(search_path)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(search_path)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Searches for an executable in path.
+ *
+ * filename must be a basename including the file extension.
+ * It must not include any directory separators (like a slash).
+ * On Windows the file extension may be omitted. The function
+ * will then try the various file extensions for executables on
+ * Windows to find filename.
+ *
+ * path must be a set of directories. Directories must be
+ * separated by colons on POSIX and by semicolons on Windows.
+ * If path is empty, the environment variable PATH is used.
+ *
+ * \returns the absolute path to the executable filename or an
+ * empty string if filename isn't found
+ *
+ * \throws std::runtime_error if path is empty and no environment
+ * variable PATH exists
+ */
+string_type search_path(const string_type &filename, string_type path = "");
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/shell_path.hpp b/dep/process/boost/process/shell_path.hpp
new file mode 100644
index 00000000000..92e9f0814b0
--- /dev/null
+++ b/dep/process/boost/process/shell_path.hpp
@@ -0,0 +1,46 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/shell_path.hpp
+ *
+ * Defines a function to return the absolute path to a shell executable.
+ */
+
+#ifndef BOOST_PROCESS_SHELL_PATH_HPP
+#define BOOST_PROCESS_SHELL_PATH_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(shell_path)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(shell_path)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Returns the absolute path to a shell executable.
+ *
+ * \returns the path to cmd.exe on Windows and /bin/sh on POSIX.
+ *
+ * \throws boost::system::system_error in case of an error
+ */
+boost::filesystem::path shell_path();
+
+/**
+ * Returns the absolute path to a shell executable.
+ *
+ * \returns the path to cmd.exe on Windows and /bin/sh on POSIX.
+ */
+boost::filesystem::path shell_path(boost::system::error_code &ec);
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/terminate.hpp b/dep/process/boost/process/terminate.hpp
new file mode 100644
index 00000000000..140eba7e8dd
--- /dev/null
+++ b/dep/process/boost/process/terminate.hpp
@@ -0,0 +1,52 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/terminate.hpp
+ *
+ * Defines a function to terminate a process.
+ */
+
+#ifndef BOOST_PROCESS_TERMINATE_HPP
+#define BOOST_PROCESS_TERMINATE_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(terminate)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(terminate)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Terminates a process.
+ *
+ * \warning Call this function only as a last resort. The process
+ * is terminated immediately and forcefully and has no
+ * chance to close or clean up resources properly.
+ *
+ * \throws boost::system::system_error in case of an error
+ */
+template <class Process>
+void terminate(const Process &p);
+
+/**
+ * Terminates a process.
+ *
+ * \warning Call this function only as a last resort. The process
+ * is terminated immediately and forcefully and has no
+ * chance to close or clean up resources properly.
+ */
+template <class Process>
+void terminate(const Process &p, boost::system::error_code &ec);
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/wait_for_exit.hpp b/dep/process/boost/process/wait_for_exit.hpp
new file mode 100644
index 00000000000..d9b118695d7
--- /dev/null
+++ b/dep/process/boost/process/wait_for_exit.hpp
@@ -0,0 +1,58 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/**
+ * \file boost/process/wait_for_exit.hpp
+ *
+ * Defines a function to wait for a process to exit.
+ */
+
+#ifndef BOOST_PROCESS_WAIT_FOR_EXIT_HPP
+#define BOOST_PROCESS_WAIT_FOR_EXIT_HPP
+
+#include <boost/process/config.hpp>
+
+#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(wait_for_exit)
+BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(wait_for_exit)
+
+#if defined(BOOST_PROCESS_DOXYGEN)
+namespace boost { namespace process {
+
+/**
+ * Waits for a process to exit.
+ *
+ * On Window boost::process::wait_for_exit returns the exit code
+ * of the process. On POSIX the exit status is returned. You must
+ * use the macro \c WEXITSTATUS (defined in sys/wait.h) to fetch
+ * the exit code from the exit status.
+ *
+ * \note This is a blocking function.
+ *
+ * \throws boost::system::system_error in case of an error
+ */
+template <class Process>
+int_type wait_for_exit(const Process &p);
+
+/**
+ * Waits for a process to exit.
+ *
+ * On Window boost::process::wait_for_exit returns the exit code
+ * of the process. On POSIX the exit status is returned. You must
+ * use the macro \c WEXITSTATUS (defined in sys/wait.h) to fetch
+ * the exit code from the exit status.
+ *
+ * \note This is a blocking function.
+ */
+template <class Process>
+int_type wait_for_exit(const Process &p, boost::system::error_code &ec);
+
+}}
+#endif
+
+#endif
diff --git a/dep/process/boost/process/windows/child.hpp b/dep/process/boost/process/windows/child.hpp
new file mode 100644
index 00000000000..083cd29da0e
--- /dev/null
+++ b/dep/process/boost/process/windows/child.hpp
@@ -0,0 +1,55 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_CHILD_HPP
+#define BOOST_PROCESS_WINDOWS_CHILD_HPP
+
+#include <boost/move/move.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+class child
+{
+public:
+ PROCESS_INFORMATION proc_info;
+
+ explicit child(const PROCESS_INFORMATION &pi) : proc_info(pi) {}
+
+ ~child()
+ {
+ ::CloseHandle(proc_info.hProcess);
+ ::CloseHandle(proc_info.hThread);
+ }
+
+ child(BOOST_RV_REF(child) c) : proc_info(c.proc_info)
+ {
+ c.proc_info.hProcess = INVALID_HANDLE_VALUE;
+ c.proc_info.hThread = INVALID_HANDLE_VALUE;
+ }
+
+ child &operator=(BOOST_RV_REF(child) c)
+ {
+ ::CloseHandle(proc_info.hProcess);
+ ::CloseHandle(proc_info.hThread);
+ proc_info = c.proc_info;
+ c.proc_info.hProcess = INVALID_HANDLE_VALUE;
+ c.proc_info.hThread = INVALID_HANDLE_VALUE;
+ return *this;
+ }
+
+ HANDLE process_handle() const { return proc_info.hProcess; }
+
+private:
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(child);
+};
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/create_pipe.hpp b/dep/process/boost/process/windows/create_pipe.hpp
new file mode 100644
index 00000000000..fe1e49751d8
--- /dev/null
+++ b/dep/process/boost/process/windows/create_pipe.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_CREATE_PIPE_HPP
+#define BOOST_PROCESS_WINDOWS_CREATE_PIPE_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/windows/pipe.hpp>
+#include <boost/system/error_code.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+inline pipe create_pipe()
+{
+ HANDLE handles[2];
+ if (!::CreatePipe(&handles[0], &handles[1], NULL, 0))
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("CreatePipe() failed");
+ return make_pipe(handles[0], handles[1]);
+}
+
+inline pipe create_pipe(boost::system::error_code &ec)
+{
+ HANDLE handles[2];
+ if (!::CreatePipe(&handles[0], &handles[1], NULL, 0))
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else
+ ec.clear();
+ return make_pipe(handles[0], handles[1]);
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/execute.hpp b/dep/process/boost/process/windows/execute.hpp
new file mode 100644
index 00000000000..43067521ead
--- /dev/null
+++ b/dep/process/boost/process/windows/execute.hpp
@@ -0,0 +1,82 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_EXECUTE_HPP
+#define BOOST_PROCESS_WINDOWS_EXECUTE_HPP
+
+#include <boost/process/windows/executor.hpp>
+#include <boost/process/windows/child.hpp>
+#include <boost/fusion/tuple/make_tuple.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace process { namespace windows {
+
+template <class I0>
+child execute(const I0 &i0)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0)));
+}
+
+template <class I0, class I1>
+child execute(const I0 &i0, const I1 &i1)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1)));
+}
+
+template <class I0, class I1, class I2>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2)));
+}
+
+template <class I0, class I1, class I2, class I3>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8)));
+}
+
+template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8, class I9>
+child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8, const I9 &i9)
+{
+ return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8), boost::cref(i9)));
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/executor.hpp b/dep/process/boost/process/windows/executor.hpp
new file mode 100644
index 00000000000..1560f30793d
--- /dev/null
+++ b/dep/process/boost/process/windows/executor.hpp
@@ -0,0 +1,130 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_EXECUTOR_HPP
+#define BOOST_PROCESS_WINDOWS_EXECUTOR_HPP
+
+#include <boost/process/windows/child.hpp>
+#include <boost/fusion/algorithm/iteration/for_each.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+struct executor
+{
+ executor() : exe(0), cmd_line(0), proc_attrs(0), thread_attrs(0),
+ inherit_handles(FALSE),
+#if (_WIN32_WINNT >= 0x0600)
+ creation_flags(EXTENDED_STARTUPINFO_PRESENT),
+#else
+ creation_flags(0),
+#endif
+ env(0), work_dir(0)
+#if (_WIN32_WINNT >= 0x0600)
+ ,startup_info(startup_info_ex.StartupInfo)
+#endif
+ {
+#if (_WIN32_WINNT >= 0x0600)
+ ZeroMemory(&startup_info_ex, sizeof(STARTUPINFOEX));
+ startup_info.cb = sizeof(STARTUPINFOEX);
+#else
+ ZeroMemory(&startup_info, sizeof(STARTUPINFO));
+ startup_info.cb = sizeof(STARTUPINFO);
+#endif
+ startup_info.hStdInput = INVALID_HANDLE_VALUE;
+ startup_info.hStdOutput = INVALID_HANDLE_VALUE;
+ startup_info.hStdError = INVALID_HANDLE_VALUE;
+ }
+
+ struct call_on_CreateProcess_setup
+ {
+ executor &e_;
+
+ call_on_CreateProcess_setup(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_CreateProcess_setup(e_);
+ }
+ };
+
+ struct call_on_CreateProcess_error
+ {
+ executor &e_;
+
+ call_on_CreateProcess_error(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_CreateProcess_error(e_);
+ }
+ };
+
+ struct call_on_CreateProcess_success
+ {
+ executor &e_;
+
+ call_on_CreateProcess_success(executor &e) : e_(e) {}
+
+ template <class Arg>
+ void operator()(Arg &arg) const
+ {
+ arg.on_CreateProcess_success(e_);
+ }
+ };
+
+ template <class InitializerSequence>
+ child operator()(const InitializerSequence &seq)
+ {
+ boost::fusion::for_each(seq, call_on_CreateProcess_setup(*this));
+
+ if (!::CreateProcess(
+ exe,
+ cmd_line,
+ proc_attrs,
+ thread_attrs,
+ inherit_handles,
+ creation_flags,
+ env,
+ work_dir,
+ &startup_info,
+ &proc_info))
+ {
+ boost::fusion::for_each(seq, call_on_CreateProcess_error(*this));
+ }
+ else
+ {
+ boost::fusion::for_each(seq, call_on_CreateProcess_success(*this));
+ }
+
+ return child(proc_info);
+ }
+
+ LPCTSTR exe;
+ LPTSTR cmd_line;
+ LPSECURITY_ATTRIBUTES proc_attrs;
+ LPSECURITY_ATTRIBUTES thread_attrs;
+ BOOL inherit_handles;
+ DWORD creation_flags;
+ LPVOID env;
+ LPCTSTR work_dir;
+#if (_WIN32_WINNT >= 0x0600)
+ STARTUPINFOEX startup_info_ex;
+ STARTUPINFO &startup_info;
+#else
+ STARTUPINFO startup_info;
+#endif
+ PROCESS_INFORMATION proc_info;
+};
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers.hpp b/dep/process/boost/process/windows/initializers.hpp
new file mode 100644
index 00000000000..2d7098c034c
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers.hpp
@@ -0,0 +1,33 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_HPP
+
+#include <boost/process/windows/initializers/bind_stderr.hpp>
+#include <boost/process/windows/initializers/bind_stdin.hpp>
+#include <boost/process/windows/initializers/bind_stdout.hpp>
+#include <boost/process/windows/initializers/close_stderr.hpp>
+#include <boost/process/windows/initializers/close_stdin.hpp>
+#include <boost/process/windows/initializers/close_stdout.hpp>
+#include <boost/process/windows/initializers/hide_console.hpp>
+#include <boost/process/windows/initializers/inherit_env.hpp>
+#include <boost/process/windows/initializers/on_CreateProcess_error.hpp>
+#include <boost/process/windows/initializers/on_CreateProcess_setup.hpp>
+#include <boost/process/windows/initializers/on_CreateProcess_success.hpp>
+#include <boost/process/windows/initializers/run_exe.hpp>
+#include <boost/process/windows/initializers/set_args.hpp>
+#include <boost/process/windows/initializers/set_cmd_line.hpp>
+#include <boost/process/windows/initializers/set_env.hpp>
+#include <boost/process/windows/initializers/set_on_error.hpp>
+#include <boost/process/windows/initializers/show_window.hpp>
+#include <boost/process/windows/initializers/start_in_dir.hpp>
+#include <boost/process/windows/initializers/throw_on_error.hpp>
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/bind_stderr.hpp b/dep/process/boost/process/windows/initializers/bind_stderr.hpp
new file mode 100644
index 00000000000..de3ee30dc53
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/bind_stderr.hpp
@@ -0,0 +1,39 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDERR_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDERR_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class bind_stderr : public initializer_base
+{
+public:
+ explicit bind_stderr(const boost::iostreams::file_descriptor_sink &sink) : sink_(sink) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ ::SetHandleInformation(sink_.handle(), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
+ e.startup_info.hStdError = sink_.handle();
+ e.startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ e.inherit_handles = true;
+ }
+
+private:
+ boost::iostreams::file_descriptor_sink sink_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/bind_stdin.hpp b/dep/process/boost/process/windows/initializers/bind_stdin.hpp
new file mode 100644
index 00000000000..54c942ab639
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/bind_stdin.hpp
@@ -0,0 +1,39 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDIN_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDIN_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class bind_stdin : public initializer_base
+{
+public:
+ explicit bind_stdin(const boost::iostreams::file_descriptor_source &source) : source_(source) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ ::SetHandleInformation(source_.handle(), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
+ e.startup_info.hStdInput = source_.handle();
+ e.startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ e.inherit_handles = true;
+ }
+
+private:
+ boost::iostreams::file_descriptor_source source_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/bind_stdout.hpp b/dep/process/boost/process/windows/initializers/bind_stdout.hpp
new file mode 100644
index 00000000000..c72c05f1bfb
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/bind_stdout.hpp
@@ -0,0 +1,39 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDOUT_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDOUT_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class bind_stdout : public initializer_base
+{
+public:
+ explicit bind_stdout(const boost::iostreams::file_descriptor_sink &sink) : sink_(sink) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ ::SetHandleInformation(sink_.handle(), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
+ e.startup_info.hStdOutput = sink_.handle();
+ e.startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ e.inherit_handles = true;
+ }
+
+private:
+ boost::iostreams::file_descriptor_sink sink_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/close_stderr.hpp b/dep/process/boost/process/windows/initializers/close_stderr.hpp
new file mode 100644
index 00000000000..373c097f3ab
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/close_stderr.hpp
@@ -0,0 +1,31 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDERR_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDERR_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class close_stderr : public initializer_base
+{
+public:
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.startup_info.hStdError = INVALID_HANDLE_VALUE;
+ e.startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/close_stdin.hpp b/dep/process/boost/process/windows/initializers/close_stdin.hpp
new file mode 100644
index 00000000000..036b0bb4ce9
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/close_stdin.hpp
@@ -0,0 +1,31 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDIN_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDIN_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class close_stdin : public initializer_base
+{
+public:
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.startup_info.hStdInput = INVALID_HANDLE_VALUE;
+ e.startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/close_stdout.hpp b/dep/process/boost/process/windows/initializers/close_stdout.hpp
new file mode 100644
index 00000000000..b58a6000f9c
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/close_stdout.hpp
@@ -0,0 +1,31 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDOUT_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDOUT_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class close_stdout : public initializer_base
+{
+public:
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.startup_info.hStdOutput = INVALID_HANDLE_VALUE;
+ e.startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/hide_console.hpp b/dep/process/boost/process/windows/initializers/hide_console.hpp
new file mode 100644
index 00000000000..b01aa026f0e
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/hide_console.hpp
@@ -0,0 +1,31 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_HIDE_CONSOLE_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_HIDE_CONSOLE_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class hide_console : public initializer_base
+{
+public:
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.startup_info.dwFlags |= STARTF_USESHOWWINDOW;
+ e.startup_info.wShowWindow |= SW_HIDE;
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/inherit_env.hpp b/dep/process/boost/process/windows/initializers/inherit_env.hpp
new file mode 100644
index 00000000000..a2b2eda00a3
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/inherit_env.hpp
@@ -0,0 +1,24 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_INHERIT_ENV_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_INHERIT_ENV_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class inherit_env : public initializer_base
+{
+public:
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/initializer_base.hpp b/dep/process/boost/process/windows/initializers/initializer_base.hpp
new file mode 100644
index 00000000000..b98da7b21b9
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/initializer_base.hpp
@@ -0,0 +1,29 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_INITIALIZER_BASE_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_INITIALIZER_BASE_HPP
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+struct initializer_base
+{
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor&) const {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_error(WindowsExecutor&) const {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_success(WindowsExecutor&) const {}
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp b/dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp
new file mode 100644
index 00000000000..71eeada0720
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_ERROR_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/windows/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class Handler>
+class on_CreateProcess_error_ : public initializer_base
+{
+public:
+ explicit on_CreateProcess_error_(Handler handler) : handler_(handler) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_error(WindowsExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_CreateProcess_error_<Handler> on_CreateProcess_error(Handler handler)
+{
+ return on_CreateProcess_error_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp b/dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp
new file mode 100644
index 00000000000..671fc9ac5c2
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SETUP_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SETUP_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/windows/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class Handler>
+class on_CreateProcess_setup_ : public initializer_base
+{
+public:
+ explicit on_CreateProcess_setup_(Handler handler) : handler_(handler) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_CreateProcess_setup_<Handler> on_CreateProcess_setup(Handler handler)
+{
+ return on_CreateProcess_setup_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp b/dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp
new file mode 100644
index 00000000000..67b3b2bdcf7
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp
@@ -0,0 +1,42 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SUCCESS_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SUCCESS_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/windows/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class Handler>
+class on_CreateProcess_success_ : public initializer_base
+{
+public:
+ explicit on_CreateProcess_success_(Handler handler) : handler_(handler) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_sucess(WindowsExecutor &e) const
+ {
+ handler_(e);
+ }
+
+private:
+ Handler handler_;
+};
+
+template <class Handler>
+on_CreateProcess_success_<Handler> on_CreateProcess_success(Handler handler)
+{
+ return on_CreateProcess_success_<Handler>(handler);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/run_exe.hpp b/dep/process/boost/process/windows/initializers/run_exe.hpp
new file mode 100644
index 00000000000..bfa2b790b17
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/run_exe.hpp
@@ -0,0 +1,69 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_RUN_EXE_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_RUN_EXE_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/filesystem.hpp>
+#include <string>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class String>
+class run_exe_ : public initializer_base
+{
+public:
+ explicit run_exe_(const String &s) : s_(s) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.exe = s_.c_str();
+ }
+
+private:
+ String s_;
+};
+
+#if defined(_UNICODE) || defined(UNICODE)
+inline run_exe_<std::wstring> run_exe(const wchar_t *ws)
+{
+ return run_exe_<std::wstring>(ws);
+}
+
+inline run_exe_<std::wstring> run_exe(const std::wstring &ws)
+{
+ return run_exe_<std::wstring>(ws);
+}
+
+inline run_exe_<std::wstring> run_exe(const boost::filesystem::path &p)
+{
+ return run_exe_<std::wstring>(p.wstring());
+}
+#else
+inline run_exe_<std::string> run_exe(const char *s)
+{
+ return run_exe_<std::string>(s);
+}
+
+inline run_exe_<std::string> run_exe(const std::string &s)
+{
+ return run_exe_<std::string>(s);
+}
+
+inline run_exe_<std::string> run_exe(const boost::filesystem::path &p)
+{
+ return run_exe_<std::string>(p.string());
+}
+#endif
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/set_args.hpp b/dep/process/boost/process/windows/initializers/set_args.hpp
new file mode 100644
index 00000000000..4b3c5b6249e
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/set_args.hpp
@@ -0,0 +1,87 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ARGS_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ARGS_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/algorithm/copy.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/shared_array.hpp>
+#include <sstream>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class Range>
+class set_args_ : public initializer_base
+{
+private:
+ typedef typename Range::const_iterator ConstIterator;
+ typedef typename Range::value_type String;
+ typedef typename String::value_type Char;
+ typedef std::basic_ostringstream<Char> OStringStream;
+
+public:
+ explicit set_args_(const Range &args)
+ {
+ ConstIterator it = boost::const_begin(args);
+ ConstIterator end = boost::const_end(args);
+ if (it != end)
+ {
+ exe_ = *it;
+ OStringStream os;
+ for (; it != end; ++it)
+ {
+ if (boost::algorithm::contains(*it,
+ String(1, static_cast<Char>(' '))))
+ {
+ os << static_cast<Char>('"') << *it <<
+ static_cast<Char>('"');
+ }
+ else
+ {
+ os << *it;
+ }
+ os << static_cast<Char>(' ');
+ }
+ String s = os.str();
+ cmd_line_.reset(new Char[s.size() + 1]);
+ boost::copy(s, cmd_line_.get());
+ cmd_line_[s.size()] = 0;
+ }
+ else
+ {
+ cmd_line_.reset(new Char[1]());
+ }
+ }
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.cmd_line = cmd_line_.get();
+ if (!e.exe && !exe_.empty())
+ e.exe = exe_.c_str();
+ }
+
+private:
+ boost::shared_array<Char> cmd_line_;
+ String exe_;
+};
+
+template <class Range>
+set_args_<Range> set_args(const Range &range)
+{
+ return set_args_<Range>(range);
+}
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/set_cmd_line.hpp b/dep/process/boost/process/windows/initializers/set_cmd_line.hpp
new file mode 100644
index 00000000000..a3d9f6f7615
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/set_cmd_line.hpp
@@ -0,0 +1,68 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_CMD_LINE_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_CMD_LINE_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/range/algorithm/copy.hpp>
+#include <boost/shared_array.hpp>
+#include <memory>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class String>
+class set_cmd_line_ : public initializer_base
+{
+private:
+ typedef typename String::value_type Char;
+
+public:
+ explicit set_cmd_line_(const String &s)
+ : cmd_line_(new Char[s.size() + 1])
+ {
+ boost::copy(s, cmd_line_.get());
+ cmd_line_[s.size()] = 0;
+ }
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.cmd_line = cmd_line_.get();
+ }
+
+private:
+ boost::shared_array<Char> cmd_line_;
+};
+
+#if defined(_UNICODE) || defined(UNICODE)
+inline set_cmd_line_<std::wstring> set_cmd_line(const wchar_t *ws)
+{
+ return set_cmd_line_<std::wstring>(ws);
+}
+
+inline set_cmd_line_<std::wstring> set_cmd_line(const std::wstring &ws)
+{
+ return set_cmd_line_<std::wstring>(ws);
+}
+#else
+inline set_cmd_line_<std::string> set_cmd_line(const char *s)
+{
+ return set_cmd_line_<std::string>(s);
+}
+
+inline set_cmd_line_<std::string> set_cmd_line(const std::string &s)
+{
+ return set_cmd_line_<std::string>(s);
+}
+#endif
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/set_env.hpp b/dep/process/boost/process/windows/initializers/set_env.hpp
new file mode 100644
index 00000000000..6dfdfc58a48
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/set_env.hpp
@@ -0,0 +1,88 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ENV_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ENV_HPP
+
+#include <Windows.h>
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/range/numeric.hpp>
+#include <boost/range/algorithm/copy.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+#include <boost/shared_array.hpp>
+#include <iterator>
+#include <cstddef>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class Range, bool Unicode>
+class set_env_ : public initializer_base
+{
+private:
+ typedef typename Range::value_type String;
+ typedef typename String::value_type Char;
+
+ static std::size_t add_size(std::size_t size, const String &s)
+ {
+ return size + s.size() + 1u;
+ }
+
+ struct copy
+ {
+ Char *it_;
+
+ copy(Char *it) : it_(it) {}
+
+ void operator()(const String &s)
+ {
+ it_ = boost::copy(s, it_);
+ *it_ = 0;
+ ++it_;
+ }
+ };
+
+public:
+ set_env_(const Range &envs)
+ : size_(boost::accumulate(envs, 0, add_size) + 1),
+ env_(new Char[size_])
+ {
+ boost::for_each(envs, copy(env_.get()));
+ env_[size_ - 1] = 0;
+ }
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.env = env_.get();
+ if (Unicode)
+ e.creation_flags |= CREATE_UNICODE_ENVIRONMENT;
+ }
+
+private:
+ std::size_t size_;
+ boost::shared_array<Char> env_;
+};
+
+#if defined(_UNICODE) || defined(UNICODE)
+template <class Range>
+set_env_<Range, true> set_env(const Range &envs)
+{
+ return set_env_<Range, true>(envs);
+}
+#else
+template <class Range>
+set_env_<Range, false> set_env(const Range &envs)
+{
+ return set_env_<Range, false>(envs);
+}
+#endif
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/set_on_error.hpp b/dep/process/boost/process/windows/initializers/set_on_error.hpp
new file mode 100644
index 00000000000..695ea5904d7
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/set_on_error.hpp
@@ -0,0 +1,36 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ON_ERROR_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ON_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/system/error_code.hpp>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class set_on_error : public initializer_base
+{
+public:
+ explicit set_on_error(boost::system::error_code &ec) : ec_(ec) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_error(WindowsExecutor&) const
+ {
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_);
+ }
+
+private:
+ boost::system::error_code &ec_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/show_window.hpp b/dep/process/boost/process/windows/initializers/show_window.hpp
new file mode 100644
index 00000000000..3046179205a
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/show_window.hpp
@@ -0,0 +1,36 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SHOW_WINDOW_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SHOW_WINDOW_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class show_window : public initializer_base
+{
+public:
+ explicit show_window(WORD flags) : flags_(flags) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.startup_info.dwFlags |= STARTF_USESHOWWINDOW;
+ e.startup_info.wShowWindow |= flags_;
+ }
+
+private:
+ WORD flags_;
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/start_in_dir.hpp b/dep/process/boost/process/windows/initializers/start_in_dir.hpp
new file mode 100644
index 00000000000..8dc952abcc0
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/start_in_dir.hpp
@@ -0,0 +1,69 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_START_IN_DIR_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_START_IN_DIR_HPP
+
+#include <boost/process/windows/initializers/initializer_base.hpp>
+#include <boost/filesystem/path.hpp>
+#include <string>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+template <class String>
+class start_in_dir_ : public initializer_base
+{
+public:
+ explicit start_in_dir_(const String &s) : s_(s) {}
+
+ template <class WindowsExecutor>
+ void on_CreateProcess_setup(WindowsExecutor &e) const
+ {
+ e.work_dir = s_.c_str();
+ }
+
+private:
+ String s_;
+};
+
+#if defined(_UNICODE) || defined(UNICODE)
+inline start_in_dir_<std::wstring> start_in_dir(const wchar_t *ws)
+{
+ return start_in_dir_<std::wstring>(ws);
+}
+
+inline start_in_dir_<std::wstring> start_in_dir(const std::wstring &ws)
+{
+ return start_in_dir_<std::wstring>(ws);
+}
+
+inline start_in_dir_<std::wstring> start_in_dir(const boost::filesystem::path &p)
+{
+ return start_in_dir_<std::wstring>(p.wstring());
+}
+#else
+inline start_in_dir_<std::string> start_in_dir(const char *s)
+{
+ return start_in_dir_<std::string>(s);
+}
+
+inline start_in_dir_<std::string> start_in_dir(const std::string &s)
+{
+ return start_in_dir_<std::string>(s);
+}
+
+inline start_in_dir_<std::string> start_in_dir(const boost::filesystem::path &p)
+{
+ return start_in_dir_<std::string>(p.string());
+}
+#endif
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/initializers/throw_on_error.hpp b/dep/process/boost/process/windows/initializers/throw_on_error.hpp
new file mode 100644
index 00000000000..044fa004177
--- /dev/null
+++ b/dep/process/boost/process/windows/initializers/throw_on_error.hpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_THROW_ON_ERROR_HPP
+#define BOOST_PROCESS_WINDOWS_INITIALIZERS_THROW_ON_ERROR_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/process/windows/initializers/initializer_base.hpp>
+
+namespace boost { namespace process { namespace windows { namespace initializers {
+
+class throw_on_error : public initializer_base
+{
+public:
+ template <class WindowsExecutor>
+ void on_CreateProcess_error(WindowsExecutor&) const
+ {
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("CreateProcess() failed");
+ }
+};
+
+}}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/pipe.hpp b/dep/process/boost/process/windows/pipe.hpp
new file mode 100644
index 00000000000..fd912afcc9e
--- /dev/null
+++ b/dep/process/boost/process/windows/pipe.hpp
@@ -0,0 +1,32 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_PIPE_HPP
+#define BOOST_PROCESS_WINDOWS_PIPE_HPP
+
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+struct pipe
+{
+ HANDLE source;
+ HANDLE sink;
+
+ pipe(HANDLE source, HANDLE sink) : source(source), sink(sink) {}
+};
+
+inline pipe make_pipe(HANDLE source, HANDLE sink)
+{
+ return pipe(source, sink);
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/search_path.hpp b/dep/process/boost/process/windows/search_path.hpp
new file mode 100644
index 00000000000..62bb5f27454
--- /dev/null
+++ b/dep/process/boost/process/windows/search_path.hpp
@@ -0,0 +1,104 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_SEARCH_PATH_HPP
+#define BOOST_PROCESS_WINDOWS_SEARCH_PATH_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/tokenizer.hpp>
+#include <boost/array.hpp>
+#include <boost/system/error_code.hpp>
+#include <string>
+#include <stdexcept>
+#include <stdlib.h>
+#include <Shellapi.h>
+
+namespace boost { namespace process { namespace windows {
+
+#if defined(_UNICODE) || defined(UNICODE)
+inline std::wstring search_path(const std::wstring &filename,
+ std::wstring path = L"")
+{
+ if (path.empty())
+ {
+ path = ::_wgetenv(L"PATH");
+ if (path.empty())
+ BOOST_PROCESS_THROW(std::runtime_error(
+ "Environment variable PATH not found"));
+ }
+
+ typedef boost::tokenizer<boost::char_separator<wchar_t>,
+ std::wstring::const_iterator, std::wstring> tokenizer;
+ boost::char_separator<wchar_t> sep(L";");
+ tokenizer tok(path, sep);
+ for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)
+ {
+ boost::filesystem::path p = *it;
+ p /= filename;
+ boost::array<std::wstring, 4> extensions =
+ { L"", L".exe", L".com", L".bat" };
+ for (boost::array<std::wstring, 4>::iterator it2 = extensions.begin();
+ it2 != extensions.end(); ++it2)
+ {
+ boost::filesystem::path p2 = p;
+ p2 += *it2;
+ boost::system::error_code ec;
+ bool file = boost::filesystem::is_regular_file(p2, ec);
+ if (!ec && file &&
+ SHGetFileInfoW(p2.c_str(), 0, 0, 0, SHGFI_EXETYPE))
+ {
+ return p2.wstring();
+ }
+ }
+ }
+ return L"";
+}
+#else
+inline std::string search_path(const std::string &filename,
+ std::string path = "")
+{
+ if (path.empty())
+ {
+ path = ::getenv("PATH");
+ if (path.empty())
+ BOOST_PROCESS_THROW(std::runtime_error(
+ "Environment variable PATH not found"));
+ }
+
+ typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+ boost::char_separator<char> sep(";");
+ tokenizer tok(path, sep);
+ for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)
+ {
+ boost::filesystem::path p = *it;
+ p /= filename;
+ boost::array<std::string, 4> extensions =
+ { "", ".exe", ".com", ".bat" };
+ for (boost::array<std::string, 4>::iterator it2 = extensions.begin();
+ it2 != extensions.end(); ++it2)
+ {
+ boost::filesystem::path p2 = p;
+ p2 += *it2;
+ boost::system::error_code ec;
+ bool file = boost::filesystem::is_regular_file(p2, ec);
+ if (!ec && file &&
+ SHGetFileInfoA(p2.string().c_str(), 0, 0, 0, SHGFI_EXETYPE))
+ {
+ return p2.string();
+ }
+ }
+ }
+ return "";
+}
+#endif
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/shell_path.hpp b/dep/process/boost/process/windows/shell_path.hpp
new file mode 100644
index 00000000000..ace15b96e10
--- /dev/null
+++ b/dep/process/boost/process/windows/shell_path.hpp
@@ -0,0 +1,50 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_SHELL_PATH_HPP
+#define BOOST_PROCESS_WINDOWS_SHELL_PATH_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/filesystem/path.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+inline boost::filesystem::path shell_path()
+{
+ TCHAR sysdir[MAX_PATH];
+ UINT size = ::GetSystemDirectory(sysdir, sizeof(sysdir));
+ if (!size)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("GetSystemDirectory() failed");
+ boost::filesystem::path p = sysdir;
+ return p / "cmd.exe";
+}
+
+inline boost::filesystem::path shell_path(boost::system::error_code &ec)
+{
+ TCHAR sysdir[MAX_PATH];
+ UINT size = ::GetSystemDirectory(sysdir, sizeof(sysdir));
+ boost::filesystem::path p;
+ if (!size)
+ {
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ }
+ else
+ {
+ ec.clear();
+ p = sysdir;
+ p /= "cmd.exe";
+ }
+ return p;
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/terminate.hpp b/dep/process/boost/process/windows/terminate.hpp
new file mode 100644
index 00000000000..43afe250a6a
--- /dev/null
+++ b/dep/process/boost/process/windows/terminate.hpp
@@ -0,0 +1,38 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_TERMINATE_HPP
+#define BOOST_PROCESS_WINDOWS_TERMINATE_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <cstdlib>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+template <class Process>
+void terminate(const Process &p)
+{
+ if (!::TerminateProcess(p.process_handle(), EXIT_FAILURE))
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("TerminateProcess() failed");
+}
+
+template <class Process>
+void terminate(const Process &p, boost::system::error_code &ec)
+{
+ if (!::TerminateProcess(p.process_handle(), EXIT_FAILURE))
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else
+ ec.clear();
+}
+
+}}}
+
+#endif
diff --git a/dep/process/boost/process/windows/wait_for_exit.hpp b/dep/process/boost/process/windows/wait_for_exit.hpp
new file mode 100644
index 00000000000..23a8b9a9f18
--- /dev/null
+++ b/dep/process/boost/process/windows/wait_for_exit.hpp
@@ -0,0 +1,49 @@
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PROCESS_WINDOWS_WAIT_FOR_EXIT_HPP
+#define BOOST_PROCESS_WINDOWS_WAIT_FOR_EXIT_HPP
+
+#include <boost/process/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <Windows.h>
+
+namespace boost { namespace process { namespace windows {
+
+template <class Process>
+inline DWORD wait_for_exit(const Process &p)
+{
+ if (::WaitForSingleObject(p.process_handle(), INFINITE) == WAIT_FAILED)
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("WaitForSingleObject() failed");
+
+ DWORD exit_code;
+ if (!::GetExitCodeProcess(p.process_handle(), &exit_code))
+ BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("GetExitCodeProcess() failed");
+
+ return exit_code;
+}
+
+template <class Process>
+inline DWORD wait_for_exit(const Process &p, boost::system::error_code &ec)
+{
+ DWORD exit_code = 1;
+
+ if (::WaitForSingleObject(p.process_handle(), INFINITE) == WAIT_FAILED)
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else if (!::GetExitCodeProcess(p.process_handle(), &exit_code))
+ BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec);
+ else
+ ec.clear();
+
+ return exit_code;
+}
+
+}}}
+
+#endif
diff --git a/revision.h.in.cmake b/revision.h.in.cmake
index f50c8022062..eab0437c600 100644
--- a/revision.h.in.cmake
+++ b/revision.h.in.cmake
@@ -3,6 +3,9 @@
#define _HASH "@rev_hash@"
#define _DATE "@rev_date@"
#define _BRANCH "@rev_branch@"
+ #define _SOURCE_DIRECTORY "@CMAKE_SOURCE_DIR@"
+ #define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@"
+ #define _FULL_DATABASE "TDB_full_335.58_2015_03_21.sql"
#define VER_COMPANYNAME_STR "TrinityCore Developers"
#define VER_LEGALCOPYRIGHT_STR "(c)2008-2015 TrinityCore"
#define VER_FILEVERSION 0,0,0
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index 706404f0029..2ad3b17b9f9 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -1,8 +1,8 @@
--- MySQL dump 10.15 Distrib 10.0.15-MariaDB, for Win64 (x86)
+-- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64)
--
--- Host: localhost Database: auth
+-- Host: localhost Database: auth335
-- ------------------------------------------------------
--- Server version 10.0.15-MariaDB
+-- Server version 5.6.9-rc
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -347,7 +347,7 @@ CREATE TABLE `rbac_default_permissions` (
LOCK TABLES `rbac_default_permissions` WRITE;
/*!40000 ALTER TABLE `rbac_default_permissions` DISABLE KEYS */;
-INSERT INTO `rbac_default_permissions` VALUES (0,195,-1),(1,194,-1),(2,193,-1),(3,192,-1);
+INSERT INTO `rbac_default_permissions` VALUES (3,192,-1),(2,193,-1),(1,194,-1),(0,195,-1);
/*!40000 ALTER TABLE `rbac_default_permissions` ENABLE KEYS */;
UNLOCK TABLES;
@@ -459,11 +459,62 @@ CREATE TABLE `realmlist` (
LOCK TABLES `realmlist` WRITE;
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
-INSERT INTO `realmlist` VALUES (1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,1,0,1,0,0,12340);
+INSERT INTO `realmlist` VALUES (1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,12340);
/*!40000 ALTER TABLE `realmlist` ENABLE KEYS */;
UNLOCK TABLES;
--
+-- Table structure for table `updates`
+--
+
+DROP TABLE IF EXISTS `updates`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `updates` (
+ `name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.',
+ `hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.',
+ `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
+ `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
+ `speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.',
+ PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all applied updates in this database.';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `updates`
+--
+
+LOCK TABLES `updates` WRITE;
+/*!40000 ALTER TABLE `updates` DISABLE KEYS */;
+INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0);
+/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `updates_include`
+--
+
+DROP TABLE IF EXISTS `updates_include`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `updates_include` (
+ `path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
+ `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
+ PRIMARY KEY (`path`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of directories where we want to include sql updates.';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `updates_include`
+--
+
+LOCK TABLES `updates_include` WRITE;
+/*!40000 ALTER TABLE `updates_include` DISABLE KEYS */;
+INSERT INTO `updates_include` VALUES ('$/sql/updates/auth','RELEASED'),('$/sql/custom/auth','RELEASED'),('$/sql/old/3.3.5a/auth','ARCHIVED');
+/*!40000 ALTER TABLE `updates_include` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
-- Table structure for table `uptime`
--
@@ -498,4 +549,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2014-12-21 20:42:33
+-- Dump completed on 2015-03-21 21:48:22
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 096cd0424e1..a85591767d4 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1,8 +1,8 @@
--- MySQL dump 10.13 Distrib 5.5.40, for debian-linux-gnu (x86_64)
+-- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64)
--
--- Host: localhost Database: characters
+-- Host: localhost Database: characters335
-- ------------------------------------------------------
--- Server version 5.5.40-0ubuntu0.14.04.1
+-- Server version 5.6.9-rc
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -2489,6 +2489,57 @@ LOCK TABLES `reserved_name` WRITE;
UNLOCK TABLES;
--
+-- Table structure for table `updates`
+--
+
+DROP TABLE IF EXISTS `updates`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `updates` (
+ `name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.',
+ `hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.',
+ `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
+ `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
+ `speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.',
+ PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all applied updates in this database.';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `updates`
+--
+
+LOCK TABLES `updates` WRITE;
+/*!40000 ALTER TABLE `updates` DISABLE KEYS */;
+INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0);
+/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `updates_include`
+--
+
+DROP TABLE IF EXISTS `updates_include`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `updates_include` (
+ `path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
+ `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
+ PRIMARY KEY (`path`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of directories where we want to include sql updates.';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `updates_include`
+--
+
+LOCK TABLES `updates_include` WRITE;
+/*!40000 ALTER TABLE `updates_include` DISABLE KEYS */;
+INSERT INTO `updates_include` VALUES ('$/sql/updates/characters','RELEASED'),('$/sql/custom/characters','RELEASED'),('$/sql/old/3.3.5a/characters','ARCHIVED');
+/*!40000 ALTER TABLE `updates_include` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
-- Table structure for table `warden_action`
--
@@ -2545,4 +2596,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2014-10-18 18:02:06
+-- Dump completed on 2015-03-21 21:48:11
diff --git a/sql/base/dev/world_database.sql b/sql/base/dev/world_database.sql
index 82d08621789..6f65e52a784 100644
--- a/sql/base/dev/world_database.sql
+++ b/sql/base/dev/world_database.sql
@@ -2736,7 +2736,7 @@ CREATE TABLE `quest_template` (
`RewardSpell` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardSpellCast` int(11) NOT NULL DEFAULT '0',
`RewardHonor` int(11) NOT NULL DEFAULT '0',
- `RewardHonorMultiplier` float NOT NULL DEFAULT '1',
+ `RewardHonorMultiplier` float NOT NULL DEFAULT '0',
`RewardMailTemplateId` mediumint(8) unsigned NOT NULL DEFAULT '0',
`RewardMailDelay` int(11) unsigned NOT NULL DEFAULT '0',
`SourceItemId` mediumint(8) unsigned NOT NULL DEFAULT '0',
@@ -3528,6 +3528,37 @@ CREATE TABLE `trinity_string` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
+-- Table structure for table `updates`
+--
+
+DROP TABLE IF EXISTS `updates`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `updates` (
+ `name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.',
+ `hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.',
+ `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
+ `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
+ `speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.',
+ PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all applied updates in this database.';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `updates_include`
+--
+
+DROP TABLE IF EXISTS `updates_include`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `updates_include` (
+ `path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
+ `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
+ PRIMARY KEY (`path`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of directories where we want to include sql updates.';
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
-- Table structure for table `vehicle_accessory`
--
@@ -3674,4 +3705,4 @@ CREATE TABLE `waypoints` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2014-10-30 13:28:50
+-- Dump completed on 2015-03-22 20:02:11
diff --git a/sql/custom/auth/.gitignore b/sql/custom/auth/.gitignore
new file mode 100644
index 00000000000..d1b811b7de5
--- /dev/null
+++ b/sql/custom/auth/.gitignore
@@ -0,0 +1 @@
+*.sql
diff --git a/sql/custom/characters/.gitignore b/sql/custom/characters/.gitignore
new file mode 100644
index 00000000000..d1b811b7de5
--- /dev/null
+++ b/sql/custom/characters/.gitignore
@@ -0,0 +1 @@
+*.sql
diff --git a/sql/custom/world/.gitignore b/sql/custom/world/.gitignore
new file mode 100644
index 00000000000..d1b811b7de5
--- /dev/null
+++ b/sql/custom/world/.gitignore
@@ -0,0 +1 @@
+*.sql
diff --git a/sql/updates/auth/2014_11_10_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_00_auth.sql
index 088c5cc71b5..088c5cc71b5 100644
--- a/sql/updates/auth/2014_11_10_00_auth.sql
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_00_auth.sql
diff --git a/sql/updates/auth/2014_11_10_01_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_01_auth.sql
index 0f89140ecf4..0f89140ecf4 100644
--- a/sql/updates/auth/2014_11_10_01_auth.sql
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_01_auth.sql
diff --git a/sql/updates/auth/2014_12_10_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_10_00_auth.sql
index 8068fd3c459..8068fd3c459 100644
--- a/sql/updates/auth/2014_12_10_00_auth.sql
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_10_00_auth.sql
diff --git a/sql/updates/auth/2014_12_21_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_21_00_auth.sql
index ddea3d335ff..ddea3d335ff 100644
--- a/sql/updates/auth/2014_12_21_00_auth.sql
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_21_00_auth.sql
diff --git a/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql
new file mode 100644
index 00000000000..69e4d38f0d2
--- /dev/null
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql
@@ -0,0 +1,36 @@
+-- Updates base tables
+DROP TABLE IF EXISTS `updates`;
+CREATE TABLE `updates` (
+ `name` VARCHAR(200) NOT NULL COMMENT 'filename with extension of the update.',
+ `hash` CHAR(40) NULL DEFAULT '' COMMENT 'sha1 hash of the sql file.',
+ `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
+ `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
+ `speed` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'time the query takes to apply in ms.',
+ PRIMARY KEY (`name`)
+)
+COMMENT='List of all applied updates in this database.'
+COLLATE='utf8_general_ci'
+ENGINE=MyISAM;
+
+DROP TABLE IF EXISTS `updates_include`;
+CREATE TABLE `updates_include` (
+ `path` VARCHAR(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
+ `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
+ PRIMARY KEY (`path`)
+)
+COMMENT='List of directories where we want to include sql updates.'
+COLLATE='utf8_general_ci'
+ENGINE=MyISAM;
+
+-- Auth database update data
+TRUNCATE TABLE `updates_include`;
+INSERT INTO `updates_include` (`path`, `state`) VALUES
+('$/sql/updates/auth', 'RELEASED'),
+('$/sql/custom/auth', 'RELEASED'),
+('$/sql/old/3.3.5a/auth', 'ARCHIVED');
+
+INSERT IGNORE INTO `updates` (`name`, `hash`) VALUES
+('2015_03_20_00_auth.sql', ''),
+('2015_03_20_01_auth.sql', ''),
+('2015_03_20_02_auth.sql', '');
+
diff --git a/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql
new file mode 100644
index 00000000000..970243fd278
--- /dev/null
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql
@@ -0,0 +1,6 @@
+-- Auth database update data
+TRUNCATE TABLE `updates_include`;
+INSERT INTO `updates_include` (`path`, `state`) VALUES
+('$/sql/updates/auth', 'RELEASED'),
+('$/sql/custom/auth', 'RELEASED'),
+('$/sql/old/3.3.5a/auth', 'ARCHIVED');
diff --git a/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql
new file mode 100644
index 00000000000..71abadebf60
--- /dev/null
+++ b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql
@@ -0,0 +1,8 @@
+INSERT IGNORE INTO `updates` (`name`, `hash`) VALUES
+('2014_11_10_00_auth.sql', '0E3CB119442D09DD88E967015319BBC8DAFBBFE0'),
+('2014_11_10_01_auth.sql', '327E77A1DA3546D5275AB249915DD57EDD6FDD3D'),
+('2014_12_10_00_auth.sql', '821703A96D80F9080074852B5A46E2909C9562EA'),
+('2014_12_21_00_auth.sql', 'CE2E5D2CD82E79C25294539ADED27A1429105B43'),
+('2015_03_20_00_auth.sql', 'E8C5B74BB45F0F35DEC182C72BACF435C7066FB0'),
+('2015_03_20_01_auth.sql', '862961815354DA2746F5F71FBC8155F57CBE75AB'),
+('2015_03_20_02_auth.sql', '');
diff --git a/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql
new file mode 100644
index 00000000000..05c120274da
--- /dev/null
+++ b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql
@@ -0,0 +1,23 @@
+-- Updates base tables
+DROP TABLE IF EXISTS `updates`;
+CREATE TABLE `updates` (
+ `name` VARCHAR(200) NOT NULL COMMENT 'filename with extension of the update.',
+ `hash` CHAR(40) NULL DEFAULT '' COMMENT 'sha1 hash of the sql file.',
+ `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
+ `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
+ `speed` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'time the query takes to apply in ms.',
+ PRIMARY KEY (`name`)
+)
+COMMENT='List of all applied updates in this database.'
+COLLATE='utf8_general_ci'
+ENGINE=MyISAM;
+
+DROP TABLE IF EXISTS `updates_include`;
+CREATE TABLE `updates_include` (
+ `path` VARCHAR(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
+ `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
+ PRIMARY KEY (`path`)
+)
+COMMENT='List of directories where we want to include sql updates.'
+COLLATE='utf8_general_ci'
+ENGINE=MyISAM;
diff --git a/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql
new file mode 100644
index 00000000000..2655d4884a5
--- /dev/null
+++ b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql
@@ -0,0 +1,6 @@
+-- Characters database update data
+TRUNCATE TABLE `updates_include`;
+INSERT INTO `updates_include` (`path`, `state`) VALUES
+('$/sql/updates/characters', 'RELEASED'),
+('$/sql/custom/characters', 'RELEASED'),
+('$/sql/old/3.3.5a/characters', 'ARCHIVED');
diff --git a/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql
new file mode 100644
index 00000000000..5fcc42d4614
--- /dev/null
+++ b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql
@@ -0,0 +1,4 @@
+INSERT IGNORE INTO `updates` (`name`, `hash`) VALUES
+('2015_03_20_00_characters.sql', 'B761760804EA73BD297F296C5C1919687DF7191C'),
+('2015_03_20_01_characters.sql', '894F08B70449A5481FFAF394EE5571D7FC4D8A3A'),
+('2015_03_20_02_characters.sql', '');
diff --git a/sql/updates/world/2014_10_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_00_world.sql
index b5a7cd31e60..b5a7cd31e60 100644
--- a/sql/updates/world/2014_10_19_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_00_world.sql
diff --git a/sql/updates/world/2014_10_19_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_01_world.sql
index b5048704717..b5048704717 100644
--- a/sql/updates/world/2014_10_19_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_01_world.sql
diff --git a/sql/updates/world/2014_10_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_20_00_world.sql
index 89a6eb089d6..89a6eb089d6 100644
--- a/sql/updates/world/2014_10_20_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_20_00_world.sql
diff --git a/sql/updates/world/2014_10_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_21_00_world.sql
index 9a8b68bd99c..9a8b68bd99c 100644
--- a/sql/updates/world/2014_10_21_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_21_00_world.sql
diff --git a/sql/updates/world/2014_10_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_22_00_world.sql
index d82916f71b8..d82916f71b8 100644
--- a/sql/updates/world/2014_10_22_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_22_00_world.sql
diff --git a/sql/updates/world/2014_10_23_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_00_world.sql
index ae441b6bee5..ae441b6bee5 100644
--- a/sql/updates/world/2014_10_23_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_00_world.sql
diff --git a/sql/updates/world/2014_10_23_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_01_world.sql
index a5070a473da..a5070a473da 100644
--- a/sql/updates/world/2014_10_23_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_01_world.sql
diff --git a/sql/updates/world/2014_10_24_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_00_world.sql
index b4a3087b89d..b4a3087b89d 100644
--- a/sql/updates/world/2014_10_24_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_00_world.sql
diff --git a/sql/updates/world/2014_10_24_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_01_world.sql
index 8a3a9c8be3d..8a3a9c8be3d 100644
--- a/sql/updates/world/2014_10_24_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_01_world.sql
diff --git a/sql/updates/world/2014_10_26_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_26_00_world.sql
index 2d9c9c57d50..2d9c9c57d50 100644
--- a/sql/updates/world/2014_10_26_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_26_00_world.sql
diff --git a/sql/updates/world/2014_10_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_00_world.sql
index d4526804133..d4526804133 100644
--- a/sql/updates/world/2014_10_27_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_00_world.sql
diff --git a/sql/updates/world/2014_10_27_01_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_01_world_335.sql
index 443603fca24..443603fca24 100644
--- a/sql/updates/world/2014_10_27_01_world_335.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_01_world_335.sql
diff --git a/sql/updates/world/2014_10_27_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_02_world.sql
index 8bc4564b2f3..8bc4564b2f3 100644
--- a/sql/updates/world/2014_10_27_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_02_world.sql
diff --git a/sql/updates/world/2014_10_28_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_28_00_world.sql
index bdb90e47854..bdb90e47854 100644
--- a/sql/updates/world/2014_10_28_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_28_00_world.sql
diff --git a/sql/updates/world/2014_10_29_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_29_00_world.sql
index f29b6745133..f29b6745133 100644
--- a/sql/updates/world/2014_10_29_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_29_00_world.sql
diff --git a/sql/updates/world/2014_10_30_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_00_world.sql
index 30c528cf3f0..30c528cf3f0 100644
--- a/sql/updates/world/2014_10_30_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_00_world.sql
diff --git a/sql/updates/world/2014_10_30_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_02_world.sql
index a3de351d578..a3de351d578 100644
--- a/sql/updates/world/2014_10_30_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_02_world.sql
diff --git a/sql/updates/world/2014_11_01_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_00_world.sql
index 6623f1e00b1..6623f1e00b1 100644
--- a/sql/updates/world/2014_11_01_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_00_world.sql
diff --git a/sql/updates/world/2014_11_01_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_01_world.sql
index 4f1b4f738db..4f1b4f738db 100644
--- a/sql/updates/world/2014_11_01_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_01_world.sql
diff --git a/sql/updates/world/2014_11_01_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_02_world.sql
index 3bb7e3a033b..3bb7e3a033b 100644
--- a/sql/updates/world/2014_11_01_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_02_world.sql
diff --git a/sql/updates/world/2014_11_01_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_03_world.sql
index dad3773f912..dad3773f912 100644
--- a/sql/updates/world/2014_11_01_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_03_world.sql
diff --git a/sql/updates/world/2014_11_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_00_world.sql
index adf9c036723..adf9c036723 100644
--- a/sql/updates/world/2014_11_02_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_00_world.sql
diff --git a/sql/updates/world/2014_11_02_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_01_world.sql
index 9003dd15c74..9003dd15c74 100644
--- a/sql/updates/world/2014_11_02_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_01_world.sql
diff --git a/sql/updates/world/2014_11_04_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_04_00_world.sql
index 8fdd922f8f9..8fdd922f8f9 100644
--- a/sql/updates/world/2014_11_04_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_04_00_world.sql
diff --git a/sql/updates/world/2014_11_05_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_05_00_world.sql
index e6969ee08ab..e6969ee08ab 100644
--- a/sql/updates/world/2014_11_05_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_05_00_world.sql
diff --git a/sql/updates/world/2014_11_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_00_world.sql
index f10ca6690e0..f10ca6690e0 100644
--- a/sql/updates/world/2014_11_07_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_00_world.sql
diff --git a/sql/updates/world/2014_11_07_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_01_world.sql
index 9586e499b69..9586e499b69 100644
--- a/sql/updates/world/2014_11_07_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_01_world.sql
diff --git a/sql/updates/world/2014_11_07_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_02_world.sql
index 9b6f625e1e4..9b6f625e1e4 100644
--- a/sql/updates/world/2014_11_07_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_02_world.sql
diff --git a/sql/updates/world/2014_11_07_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_03_world.sql
index 8516c42d5f9..8516c42d5f9 100644
--- a/sql/updates/world/2014_11_07_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_03_world.sql
diff --git a/sql/updates/world/2014_11_08_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_08_00_world.sql
index 08f64d64bd3..08f64d64bd3 100644
--- a/sql/updates/world/2014_11_08_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_08_00_world.sql
diff --git a/sql/updates/world/2014_11_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_09_00_world.sql
index 3cb00316183..3cb00316183 100644
--- a/sql/updates/world/2014_11_09_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_09_00_world.sql
diff --git a/sql/updates/world/2014_11_10_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_00_world.sql
index e4397cd6bde..e4397cd6bde 100644
--- a/sql/updates/world/2014_11_10_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_00_world.sql
diff --git a/sql/updates/world/2014_11_10_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_01_world.sql
index a00c24ab57b..a00c24ab57b 100644
--- a/sql/updates/world/2014_11_10_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_01_world.sql
diff --git a/sql/updates/world/2014_11_10_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_02_world.sql
index dd854fea9be..dd854fea9be 100644
--- a/sql/updates/world/2014_11_10_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_02_world.sql
diff --git a/sql/updates/world/2014_11_10_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_03_world.sql
index 41044e8c7ef..41044e8c7ef 100644
--- a/sql/updates/world/2014_11_10_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_03_world.sql
diff --git a/sql/updates/world/2014_11_10_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_04_world.sql
index 1b4857e4724..1b4857e4724 100644
--- a/sql/updates/world/2014_11_10_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_04_world.sql
diff --git a/sql/updates/world/2014_11_10_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_05_world.sql
index 2ffd85afa5e..2ffd85afa5e 100644
--- a/sql/updates/world/2014_11_10_05_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_05_world.sql
diff --git a/sql/updates/world/2014_11_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_00_world.sql
index addb4092f44..addb4092f44 100644
--- a/sql/updates/world/2014_11_11_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_00_world.sql
diff --git a/sql/updates/world/2014_11_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_01_world.sql
index 346459b9556..346459b9556 100644
--- a/sql/updates/world/2014_11_11_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_01_world.sql
diff --git a/sql/updates/world/2014_11_13_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_13_00_world.sql
index baa87a86e7e..baa87a86e7e 100644
--- a/sql/updates/world/2014_11_13_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_13_00_world.sql
diff --git a/sql/updates/world/2014_11_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_16_00_world.sql
index 939c43f7056..939c43f7056 100644
--- a/sql/updates/world/2014_11_16_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_16_00_world.sql
diff --git a/sql/updates/world/2014_11_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_17_00_world.sql
index f96248d0f64..f96248d0f64 100644
--- a/sql/updates/world/2014_11_17_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_17_00_world.sql
diff --git a/sql/updates/world/2014_11_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_00_world.sql
index d2b188cbf69..d2b188cbf69 100644
--- a/sql/updates/world/2014_11_19_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_00_world.sql
diff --git a/sql/updates/world/2014_11_19_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_01_world.sql
index d034a50789f..d034a50789f 100644
--- a/sql/updates/world/2014_11_19_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_01_world.sql
diff --git a/sql/updates/world/2014_11_19_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_02_world.sql
index 635c31be96c..635c31be96c 100644
--- a/sql/updates/world/2014_11_19_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_02_world.sql
diff --git a/sql/updates/world/2014_11_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_00_world.sql
index 5425c1acad0..5425c1acad0 100644
--- a/sql/updates/world/2014_11_20_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_00_world.sql
diff --git a/sql/updates/world/2014_11_20_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_01_world.sql
index 75474e72596..75474e72596 100644
--- a/sql/updates/world/2014_11_20_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_01_world.sql
diff --git a/sql/updates/world/2014_11_20_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_02_world.sql
index c96d6dd9100..c96d6dd9100 100644
--- a/sql/updates/world/2014_11_20_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_02_world.sql
diff --git a/sql/updates/world/2014_11_20_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_03_world.sql
index eab63880696..eab63880696 100644
--- a/sql/updates/world/2014_11_20_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_03_world.sql
diff --git a/sql/updates/world/2014_11_20_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_04_world.sql
index aa5b1641320..aa5b1641320 100644
--- a/sql/updates/world/2014_11_20_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_04_world.sql
diff --git a/sql/updates/world/2014_11_20_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_05_world.sql
index 1a8ac671e94..1a8ac671e94 100644
--- a/sql/updates/world/2014_11_20_05_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_05_world.sql
diff --git a/sql/updates/world/2014_11_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_00_world.sql
index f8b1962bf1d..f8b1962bf1d 100644
--- a/sql/updates/world/2014_11_21_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_00_world.sql
diff --git a/sql/updates/world/2014_11_21_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_01_world.sql
index ad93939dd52..ad93939dd52 100644
--- a/sql/updates/world/2014_11_21_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_01_world.sql
diff --git a/sql/updates/world/2014_11_21_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_02_world.sql
index 52a6ddc10f2..52a6ddc10f2 100644
--- a/sql/updates/world/2014_11_21_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_02_world.sql
diff --git a/sql/updates/world/2014_11_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_22_00_world.sql
index 0fa71070aef..0fa71070aef 100644
--- a/sql/updates/world/2014_11_22_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_22_00_world.sql
diff --git a/sql/updates/world/2014_11_23_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_00_world.sql
index 3e1d466583f..3e1d466583f 100644
--- a/sql/updates/world/2014_11_23_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_00_world.sql
diff --git a/sql/updates/world/2014_11_23_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_01_world.sql
index 193795acf99..193795acf99 100644
--- a/sql/updates/world/2014_11_23_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_01_world.sql
diff --git a/sql/updates/world/2014_11_23_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_02_world.sql
index d5263274bdc..d5263274bdc 100644
--- a/sql/updates/world/2014_11_23_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_02_world.sql
diff --git a/sql/updates/world/2014_11_23_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_03_world.sql
index f8dbb95dbf7..f8dbb95dbf7 100644
--- a/sql/updates/world/2014_11_23_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_03_world.sql
diff --git a/sql/updates/world/2014_11_23_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_04_world.sql
index 6dc657b39e9..6dc657b39e9 100644
--- a/sql/updates/world/2014_11_23_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_04_world.sql
diff --git a/sql/updates/world/2014_11_24_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_00_world.sql
index 0c6d5735165..0c6d5735165 100644
--- a/sql/updates/world/2014_11_24_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_00_world.sql
diff --git a/sql/updates/world/2014_11_24_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_01_world.sql
index 77f8ca71f5e..77f8ca71f5e 100644
--- a/sql/updates/world/2014_11_24_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_01_world.sql
diff --git a/sql/updates/world/2014_11_24_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_02_world.sql
index 97e5a9abaa4..97e5a9abaa4 100644
--- a/sql/updates/world/2014_11_24_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_02_world.sql
diff --git a/sql/updates/world/2014_11_24_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_03_world.sql
index afde0f04e51..afde0f04e51 100644
--- a/sql/updates/world/2014_11_24_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_03_world.sql
diff --git a/sql/updates/world/2014_11_24_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_04_world.sql
index bbca1631efe..bbca1631efe 100644
--- a/sql/updates/world/2014_11_24_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_04_world.sql
diff --git a/sql/updates/world/2014_11_25_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_00_world.sql
index 584a96f9511..584a96f9511 100644
--- a/sql/updates/world/2014_11_25_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_00_world.sql
diff --git a/sql/updates/world/2014_11_25_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_01_world.sql
index 8e06833d54d..8e06833d54d 100644
--- a/sql/updates/world/2014_11_25_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_01_world.sql
diff --git a/sql/updates/world/2014_11_26_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_26_00_world.sql
index e2aae9d8249..e2aae9d8249 100644
--- a/sql/updates/world/2014_11_26_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_26_00_world.sql
diff --git a/sql/updates/world/2014_11_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_00_world.sql
index c114aa6e848..c114aa6e848 100644
--- a/sql/updates/world/2014_11_27_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_00_world.sql
diff --git a/sql/updates/world/2014_11_27_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_01_world.sql
index df6a3f69c5e..df6a3f69c5e 100644
--- a/sql/updates/world/2014_11_27_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_01_world.sql
diff --git a/sql/updates/world/2014_11_28_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_00_world.sql
index fbcca049d0b..fbcca049d0b 100644
--- a/sql/updates/world/2014_11_28_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_00_world.sql
diff --git a/sql/updates/world/2014_11_28_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_01_world.sql
index f89267d71b6..f89267d71b6 100644
--- a/sql/updates/world/2014_11_28_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_01_world.sql
diff --git a/sql/updates/world/2014_11_29_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_29_00_world.sql
index 066ee2c2610..066ee2c2610 100644
--- a/sql/updates/world/2014_11_29_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_29_00_world.sql
diff --git a/sql/updates/world/2014_12_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_02_00_world.sql
index 780315fc9d8..780315fc9d8 100644
--- a/sql/updates/world/2014_12_02_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_02_00_world.sql
diff --git a/sql/updates/world/2014_12_03_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_03_00_world.sql
index c6a38c49220..c6a38c49220 100644
--- a/sql/updates/world/2014_12_03_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_03_00_world.sql
diff --git a/sql/updates/world/2014_12_04_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_04_00_world.sql
index 50b5d63d4b6..50b5d63d4b6 100644
--- a/sql/updates/world/2014_12_04_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_04_00_world.sql
diff --git a/sql/updates/world/2014_12_05_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_00_world.sql
index 6bce51ddb2b..6bce51ddb2b 100644
--- a/sql/updates/world/2014_12_05_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_00_world.sql
diff --git a/sql/updates/world/2014_12_05_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_01_world.sql
index 913ae3552a2..913ae3552a2 100644
--- a/sql/updates/world/2014_12_05_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_01_world.sql
diff --git a/sql/updates/world/2014_12_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_00_world.sql
index 92a6caabb4c..92a6caabb4c 100644
--- a/sql/updates/world/2014_12_09_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_00_world.sql
diff --git a/sql/updates/world/2014_12_09_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_01_world.sql
index 80bb200d19b..80bb200d19b 100644
--- a/sql/updates/world/2014_12_09_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_01_world.sql
diff --git a/sql/updates/world/2014_12_09_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_02_world.sql
index c5e9d832266..c5e9d832266 100644
--- a/sql/updates/world/2014_12_09_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_02_world.sql
diff --git a/sql/updates/world/2014_12_09_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_03_world.sql
index 2d4d7454b09..2d4d7454b09 100644
--- a/sql/updates/world/2014_12_09_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_03_world.sql
diff --git a/sql/updates/world/2014_12_09_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_04_world.sql
index db6fd4dc8c4..db6fd4dc8c4 100644
--- a/sql/updates/world/2014_12_09_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_04_world.sql
diff --git a/sql/updates/world/2014_12_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_00_world.sql
index cf0b3f80eb0..cf0b3f80eb0 100644
--- a/sql/updates/world/2014_12_11_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_00_world.sql
diff --git a/sql/updates/world/2014_12_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_01_world.sql
index 9306d27f68b..9306d27f68b 100644
--- a/sql/updates/world/2014_12_11_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_01_world.sql
diff --git a/sql/updates/world/2014_12_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_00_world.sql
index bf1854689b3..bf1854689b3 100644
--- a/sql/updates/world/2014_12_12_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_00_world.sql
diff --git a/sql/updates/world/2014_12_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_01_world.sql
index 740e6e962aa..740e6e962aa 100644
--- a/sql/updates/world/2014_12_12_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_01_world.sql
diff --git a/sql/updates/world/2014_12_13_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_13_00_world.sql
index 3be9f73a293..3be9f73a293 100644
--- a/sql/updates/world/2014_12_13_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_13_00_world.sql
diff --git a/sql/updates/world/2014_12_14_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_00_world.sql
index 3d6bf2d473d..3d6bf2d473d 100644
--- a/sql/updates/world/2014_12_14_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_00_world.sql
diff --git a/sql/updates/world/2014_12_14_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_01_world.sql
index 3a66e2ce72f..3a66e2ce72f 100644
--- a/sql/updates/world/2014_12_14_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_01_world.sql
diff --git a/sql/updates/world/2014_12_14_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_02_world.sql
index 25f4ed66880..25f4ed66880 100644
--- a/sql/updates/world/2014_12_14_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_02_world.sql
diff --git a/sql/updates/world/2014_12_15_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_15_00_world.sql
index 8ed026454c6..8ed026454c6 100644
--- a/sql/updates/world/2014_12_15_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_15_00_world.sql
diff --git a/sql/updates/world/2014_12_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_16_00_world.sql
index b67691cee8d..b67691cee8d 100644
--- a/sql/updates/world/2014_12_16_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_16_00_world.sql
diff --git a/sql/updates/world/2014_12_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_17_00_world.sql
index fd1e88f9c1a..fd1e88f9c1a 100644
--- a/sql/updates/world/2014_12_17_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_17_00_world.sql
diff --git a/sql/updates/world/2014_12_18_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_18_00_world.sql
index 18ab9f47256..18ab9f47256 100644
--- a/sql/updates/world/2014_12_18_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_18_00_world.sql
diff --git a/sql/updates/world/2014_12_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_21_00_world.sql
index 857d7286352..857d7286352 100644
--- a/sql/updates/world/2014_12_21_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_21_00_world.sql
diff --git a/sql/updates/world/2014_12_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_22_00_world.sql
index ec1776e5c5b..ec1776e5c5b 100644
--- a/sql/updates/world/2014_12_22_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_22_00_world.sql
diff --git a/sql/updates/world/2014_12_26_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_00_world.sql
index 101ed3c08be..101ed3c08be 100644
--- a/sql/updates/world/2014_12_26_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_00_world.sql
diff --git a/sql/updates/world/2014_12_26_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_01_world.sql
index 90ee138a237..90ee138a237 100644
--- a/sql/updates/world/2014_12_26_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_01_world.sql
diff --git a/sql/updates/world/2014_12_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_00_world.sql
index d1273193738..d1273193738 100644
--- a/sql/updates/world/2014_12_27_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_00_world.sql
diff --git a/sql/updates/world/2014_12_27_01_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_01_world_335.sql
index 961e9a0523d..961e9a0523d 100644
--- a/sql/updates/world/2014_12_27_01_world_335.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_01_world_335.sql
diff --git a/sql/updates/world/2014_12_27_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_02_world.sql
index 3ce1d97df0e..3ce1d97df0e 100644
--- a/sql/updates/world/2014_12_27_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_02_world.sql
diff --git a/sql/updates/world/2014_12_27_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_03_world.sql
index ba883f29e66..ba883f29e66 100644
--- a/sql/updates/world/2014_12_27_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_03_world.sql
diff --git a/sql/updates/world/2014_12_27_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_04_world.sql
index 3ca4f69f591..3ca4f69f591 100644
--- a/sql/updates/world/2014_12_27_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_04_world.sql
diff --git a/sql/updates/world/2014_12_27_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_05_world.sql
index 01743ff30c3..01743ff30c3 100644
--- a/sql/updates/world/2014_12_27_05_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_05_world.sql
diff --git a/sql/updates/world/2014_12_27_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_06_world.sql
index bc19a755a9b..bc19a755a9b 100644
--- a/sql/updates/world/2014_12_27_06_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_06_world.sql
diff --git a/sql/updates/world/2014_12_27_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_07_world.sql
index 78d9ee848a5..78d9ee848a5 100644
--- a/sql/updates/world/2014_12_27_07_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_07_world.sql
diff --git a/sql/updates/world/2014_12_27_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_08_world.sql
index ac4a228c154..ac4a228c154 100644
--- a/sql/updates/world/2014_12_27_08_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_08_world.sql
diff --git a/sql/updates/world/2014_12_27_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_09_world.sql
index 89371fff954..89371fff954 100644
--- a/sql/updates/world/2014_12_27_09_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_09_world.sql
diff --git a/sql/updates/world/2014_12_27_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_10_world.sql
index 590be4a9adc..590be4a9adc 100644
--- a/sql/updates/world/2014_12_27_10_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_10_world.sql
diff --git a/sql/updates/world/2014_12_27_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_11_world.sql
index 8474f056f5e..8474f056f5e 100644
--- a/sql/updates/world/2014_12_27_11_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_11_world.sql
diff --git a/sql/updates/world/2014_12_27_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_12_world.sql
index acc0a8fb619..acc0a8fb619 100644
--- a/sql/updates/world/2014_12_27_12_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_12_world.sql
diff --git a/sql/updates/world/2014_12_28_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_00_world.sql
index 467115a2de2..467115a2de2 100644
--- a/sql/updates/world/2014_12_28_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_00_world.sql
diff --git a/sql/updates/world/2014_12_28_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_01_world.sql
index e580a29f1f0..e580a29f1f0 100644
--- a/sql/updates/world/2014_12_28_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_01_world.sql
diff --git a/sql/updates/world/2014_12_28_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_02_world.sql
index bc44ddd1cd1..bc44ddd1cd1 100644
--- a/sql/updates/world/2014_12_28_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_02_world.sql
diff --git a/sql/updates/world/2014_12_28_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_03_world.sql
index fe3b786b23a..fe3b786b23a 100644
--- a/sql/updates/world/2014_12_28_03_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_03_world.sql
diff --git a/sql/updates/world/2014_12_28_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_04_world.sql
index 8a1b29a8169..8a1b29a8169 100644
--- a/sql/updates/world/2014_12_28_04_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_04_world.sql
diff --git a/sql/updates/world/2014_12_28_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_05_world.sql
index f3fd0021214..f3fd0021214 100644
--- a/sql/updates/world/2014_12_28_05_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_05_world.sql
diff --git a/sql/updates/world/2014_12_29_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_00_world.sql
index f58c76137b1..f58c76137b1 100644
--- a/sql/updates/world/2014_12_29_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_00_world.sql
diff --git a/sql/updates/world/2014_12_29_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_01_world.sql
index 06af046dc68..06af046dc68 100644
--- a/sql/updates/world/2014_12_29_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_01_world.sql
diff --git a/sql/updates/world/2014_12_29_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_02_world.sql
index 2872d26acd1..2872d26acd1 100644
--- a/sql/updates/world/2014_12_29_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_02_world.sql
diff --git a/sql/updates/world/2014_12_30_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_00_world.sql
index c977412e5d3..c977412e5d3 100644
--- a/sql/updates/world/2014_12_30_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_00_world.sql
diff --git a/sql/updates/world/2014_12_30_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_01_world.sql
index 51c93e32be9..51c93e32be9 100644
--- a/sql/updates/world/2014_12_30_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_01_world.sql
diff --git a/sql/updates/world/2014_12_31_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_31_00_world.sql
index 62d9c4e8f94..62d9c4e8f94 100644
--- a/sql/updates/world/2014_12_31_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_31_00_world.sql
diff --git a/sql/updates/world/2015_01_01_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_01_00_world.sql
index 3d78439fed5..3d78439fed5 100644
--- a/sql/updates/world/2015_01_01_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_01_00_world.sql
diff --git a/sql/updates/world/2015_01_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_07_00_world.sql
index 3cf6056964d..3cf6056964d 100644
--- a/sql/updates/world/2015_01_07_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_07_00_world.sql
diff --git a/sql/updates/world/2015_01_08_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_08_00_world.sql
index 7d5a19751e3..7d5a19751e3 100644
--- a/sql/updates/world/2015_01_08_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_08_00_world.sql
diff --git a/sql/updates/world/2015_01_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_00_world.sql
index 861584cab4d..861584cab4d 100644
--- a/sql/updates/world/2015_01_09_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_00_world.sql
diff --git a/sql/updates/world/2015_01_09_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_01_world.sql
index d07bd8b4162..6c7f42580d3 100644
--- a/sql/updates/world/2015_01_09_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_01_world.sql
@@ -1,5 +1,5 @@
--- Replace the previously spawned chests with sniffed ones
-DELETE FROM `gameobject` WHERE `id` IN (185168, 185169) AND `guid` IN (20499, 20496);
-INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
-(20496, 185168, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243), -- 185168 (Area: 3562)
-(20499, 185169, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243); -- 185169 (Area: 3562)
+-- Replace the previously spawned chests with sniffed ones
+DELETE FROM `gameobject` WHERE `id` IN (185168, 185169) AND `guid` IN (20499, 20496);
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(20496, 185168, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243), -- 185168 (Area: 3562)
+(20499, 185169, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243); -- 185169 (Area: 3562)
diff --git a/sql/updates/world/2015_01_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_00_world.sql
index 8fa014fa744..8fa014fa744 100644
--- a/sql/updates/world/2015_01_11_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_00_world.sql
diff --git a/sql/updates/world/2015_01_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_01_world.sql
index dca46b515bc..dca46b515bc 100644
--- a/sql/updates/world/2015_01_11_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_01_world.sql
diff --git a/sql/updates/world/2015_01_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_00_world.sql
index deaff903974..deaff903974 100644
--- a/sql/updates/world/2015_01_12_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_00_world.sql
diff --git a/sql/updates/world/2015_01_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_01_world.sql
index c5513f01c1d..c5513f01c1d 100644
--- a/sql/updates/world/2015_01_12_01_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_01_world.sql
diff --git a/sql/updates/world/2015_01_12_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_02_world.sql
index 154c6e2596a..154c6e2596a 100644
--- a/sql/updates/world/2015_01_12_02_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_02_world.sql
diff --git a/sql/updates/world/2015_01_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_16_00_world.sql
index 3488d508a2f..3488d508a2f 100644
--- a/sql/updates/world/2015_01_16_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_16_00_world.sql
diff --git a/sql/updates/world/2015_01_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_17_00_world.sql
index 0509dba10f2..0509dba10f2 100644
--- a/sql/updates/world/2015_01_17_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_17_00_world.sql
diff --git a/sql/updates/world/2015_01_18_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_18_00_world.sql
index 0a9e3e38aad..fe054c39cda 100644
--- a/sql/updates/world/2015_01_18_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_18_00_world.sql
@@ -1,3 +1,3 @@
---
-UPDATE `gameobject` SET `spawnMask` = 1 WHERE `guid` = 20496 AND `id` = 185168;
-UPDATE `gameobject` SET `spawnMask` = 2 WHERE `guid` = 20499 AND `id` = 185169;
+--
+UPDATE `gameobject` SET `spawnMask` = 1 WHERE `guid` = 20496 AND `id` = 185168;
+UPDATE `gameobject` SET `spawnMask` = 2 WHERE `guid` = 20499 AND `id` = 185169;
diff --git a/sql/updates/world/2015_01_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_21_00_world.sql
index 2a63274ce1e..2a63274ce1e 100644
--- a/sql/updates/world/2015_01_21_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_21_00_world.sql
diff --git a/sql/updates/world/2015_01_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_22_00_world.sql
index 6392ea2abe6..6392ea2abe6 100644
--- a/sql/updates/world/2015_01_22_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_22_00_world.sql
diff --git a/sql/updates/world/2015_01_25_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_25_00_world.sql
index d089fff4cc5..d089fff4cc5 100644
--- a/sql/updates/world/2015_01_25_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_25_00_world.sql
diff --git a/sql/updates/world/2015_01_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_27_00_world.sql
index 5b964110846..5b964110846 100644
--- a/sql/updates/world/2015_01_27_00_world.sql
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_27_00_world.sql
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_01_30_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_30_00_world.sql
new file mode 100644
index 00000000000..4393b38ddd2
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_30_00_world.sql
@@ -0,0 +1,32 @@
+DELETE FROM `creature_text` WHERE `entry` IN(37158,37704);
+DELETE FROM `creature_text` WHERE `entry`=37225 AND `groupid` > 15;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(37158, 0, 0, '%s prepares to attack!', 41, 0, 100, 0, 0, 0, 'Quel''Delar', 37211),
+(37704, 0, 0, 'Quel''Delar leaps to life in the presence of Frostmourne!', 41, 0, 100, 0, 0, 0, 'Frostmourne Altar Bunny (Quel''Delar)', 37645),
+-- Uther
+(37225, 16, 0, 'Halt! Do not carry that blade any further!', 14, 0, 100, 25, 0, 16675, 'Uther the Lightbringer', 37201),
+(37225, 17, 0, 'Do you realize what you''ve done?', 14, 0, 100, 5, 0, 16676, 'Uther the Lightbringer', 37202),
+(37225, 18, 0, 'You have forged this blade from saronite, the very blood of an old god. The power of the Lich King calls to this weapon.', 12, 0, 100, 1, 0, 16677, 'Uther the Lightbringer', 37204),
+(37225, 19, 0, 'Each moment you tarry here, Quel''Delar drinks in the evil of this place.', 12, 0, 100, 1, 0, 16678, 'Uther the Lightbringer', 38442),
+(37225, 20, 0, 'There is only one way to cleanse this sword. Make haste for the Sunwell and immerse the blade in its waters.', 12, 0, 100, 25, 0, 16679, 'Uther the Lightbringer', 37205),
+(37225, 21, 0, 'I can resist Frostmourne''s call no more...', 12, 0, 100, 1, 0, 16680, 'Uther the Lightbringer', 37206);
+
+UPDATE `creature_template` SET `unit_flags`=768, `flags_extra`=0, `ScriptName`='npc_quel_delar_sword', `InhabitType`=7 WHERE `entry`=37158;
+UPDATE `creature_template` SET `ScriptName`='npc_uther_quel_delar' WHERE `entry`=37225;
+
+DELETE FROM `areatrigger_scripts` WHERE `entry`=5660;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
+(5660, 'at_hor_uther_quel_delar_start');
+
+DELETE FROM `spell_target_position` WHERE `id` IN(70719,70700);
+INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(70719, 668, 5302, 1989, 708, 0),
+(70700, 668, 5298, 1995, 708, 0);
+
+DELETE FROM `creature_loot_template` WHERE `entry` = 37158 AND `item` = 50254;
+INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Chance`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`) VALUES
+(37158, 50254, 100, 1, 0, 1, 1);
+
+DELETE FROM `conditions` WHERE `SourceEntry` = 73035 AND `SourceTypeOrReferenceId` = 13;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `Comment`) VALUES
+(13,1,73035,0,0,31,0,3,37704,0,0,0,0,'Essence of the Captured (73035) only hits Frostmourne Altar Bunny (Quel''Delar)');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_01_31_00_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_31_00_335.sql
new file mode 100644
index 00000000000..8aaa026154a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_31_00_335.sql
@@ -0,0 +1,3 @@
+DELETE FROM `gameobject_template` WHERE `entry` = 180856;
+INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `data0`, `data1`, `data2`, `data3`, `size`, `VerifiedBuild`) VALUES
+(180856, 10, 6522, 'Firework Rocket, Type 1 Purple', 0, 0, 0, 3000, 1, -18019);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_02_00_world.sql
new file mode 100644
index 00000000000..84d31ef7be1
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_02_00_world.sql
@@ -0,0 +1,16 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN(29491,28994,28721,28725,33027,28727,28715,28714,28726,29523,28989,28997,28723,28718);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 29491, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Karandonna - Only run SAI if invoker is player'),
+(22, 1, 28994, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Abra Cadabra - Only run SAI if invoker is player'),
+(22, 1, 28721, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Tiffany Cartier - Only run SAI if invoker is player'),
+(22, 1, 28725, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Patricia Egan - Only run SAI if invoker is player'),
+(22, 1, 33027, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Jessica Sellers - Only run SAI if invoker is player'),
+(22, 1, 28727, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Edward Egan - Only run SAI if invoker is player'),
+(22, 1, 28714, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Ildine Sorrowspear - Only run SAI if invoker is player'),
+(22, 1, 28715, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Endora Moorehead - Only run SAI if invoker is player'),
+(22, 1, 28726, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Dominique Stefano - Only run SAI if invoker is player'),
+(22, 1, 29523, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Bragund Brightlink - Only run SAI if invoker is player'),
+(22, 1, 28997, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Griselda Hunderland - Only run SAI if invoker is player'),
+(22, 1, 28989, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Aemara - Only run SAI if invoker is player'),
+(22, 1, 28723, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Larana Drome - Only run SAI if invoker is player'),
+(22, 1, 28718, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Ranid Glowergold - Only run SAI if invoker is player');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_05_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_05_00_world.sql
new file mode 100644
index 00000000000..77bc4fd8b53
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_05_00_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `skill_fishing_base_level` WHERE `entry`=4710;
+INSERT INTO `skill_fishing_base_level` (`entry`, `skill`) VALUES
+(4710, 480);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_00_world.sql
new file mode 100644
index 00000000000..96eb6a65f28
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_00_world.sql
@@ -0,0 +1,27 @@
+-- The Brewmaiden SAI
+SET @ENTRY := 36021;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@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,22,0,100,0,101,0,0,0,11,48249,1,0,0,0,0,7,0,0,0,0,0,0,0,'The Brewmaiden - Received Emote 101 - Cast ''Brewfest Brew Toss''');
+
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES
+(@ENTRY,0x1,'68269');
+
+
+-- The Brewmaiden SAI
+SET @ENTRY := 27166;
+
+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,22,0,100,0,101,0,0,0,11,48249,1,0,0,0,0,7,0,0,0,0,0,0,0,'The Brewmaiden - Received Emote 101 - Cast ''Brewfest Brew Toss''');
+
+DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES
+(@ENTRY,0x1,'51847');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_01_world.sql
new file mode 100644
index 00000000000..3b16d7a367c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_01_world.sql
@@ -0,0 +1,40 @@
+-- Fel Portal Alarm SAI
+SET @ENTRY := 23310;
+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,11,0,100,1,0,0,0,0,11,46907,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fel Portal Alarm - On Respawn - Cast 'Boss Fel Portal State' (No Repeat)"),
+(@ENTRY,0,1,0,38,0,100,0,1,1,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fel Portal Alarm - On Data Set 1 1 - Increment Phase"),
+(@ENTRY,0,2,3,1,32,100,0,1000,1000,0,0,12,25003,5,120000,0,0,0,1,0,0,0,0,0,0,0,"Fel Portal Alarm - Out of Combat - Summon Creature 'Emissary of Hate' (Phase 32)"),
+(@ENTRY,0,3,0,61,32,100,0,1000,1000,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fel Portal Alarm - Out of Combat - Set Event Phase 0 (Phase 32)");
+
+DELETE FROM `creature` WHERE `id`=25003;
+
+-- Irespeaker SAI
+SET @ENTRY := 24999;
+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,0,0,100,0,1500,3000,10000,15000,11,35913,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Fel Fireball'"),
+(@ENTRY,0,1,0,0,0,100,0,13000,16000,20000,35000,11,18267,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Curse of Weakness'"),
+(@ENTRY,0,2,0,6,0,100,1,0,0,0,0,33,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Irespeaker - On Just Died - Quest Credit 'Kanrethad's Quest' (No Repeat)"),
+(@ENTRY,0,3,0,6,0,100,0,5000,5000,10000,10000,45,1,1,0,0,0,0,10,79450,23310,0,0,0,0,0,"Irespeaker - On Just Died - Set Data 1 1");
+
+-- Unleashed Hellion SAI
+SET @ENTRY := 25002;
+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,6,0,100,1,0,0,0,0,33,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Unleashed Hellion - On Just Died - Quest Credit 'Kanrethad's Quest' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,4000,5000,18000,35000,11,11876,0,0,0,0,0,2,0,0,0,0,0,0,0,"Unleashed Hellion - In Combat - Cast 'War Stomp'"),
+(@ENTRY,0,2,0,0,0,100,0,6000,9000,12600,16000,11,20754,0,0,0,0,0,2,0,0,0,0,0,0,0,"Unleashed Hellion - In Combat - Cast 'Rain of Fire'"),
+(@ENTRY,0,3,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,79450,23310,0,0,0,0,0,"Unleashed Hellion - On Just Died - Set Data 1 1");
+
+-- Emissary of Hate SAI
+SET @ENTRY := 25003;
+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,0,0,100,0,2000,5000,15000,20000,11,25003,0,0,0,0,0,2,0,0,0,0,0,0,0,"Emissary of Hate - In Combat - Cast 'Mortar'"),
+(@ENTRY,0,1,0,0,0,100,0,8000,10000,15000,20000,11,38611,0,0,0,0,0,2,0,0,0,0,0,0,0,"Emissary of Hate - In Combat - Cast 'Flame Wave'"),
+(@ENTRY,0,2,0,54,0,100,0,0,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Emissary of Hate - On Just Summoned - Start Random Movement");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_02_world.sql
new file mode 100644
index 00000000000..4c514ea95d4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_02_world.sql
@@ -0,0 +1,33 @@
+-- Master Gadrin SAI
+SET @ENTRY := 3188;
+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,20,0,100,0,808,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Master Gadrin - On Quest 'Minshina's Skull' Finished - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 318800;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,2000,2000,0,0,12,3289,5,14000,0,0,0,8,0,0,0,-822.91,-4923.33,19.6365,3.41642,"Master Gadrin - On Script - Summon Creature 'Spirit of Minshina'"),
+(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,66,0,0,0,0,0,0,21,20,0,0,0,0,0,0,"Master Gadrin - On Script - Set Orientation Closest Player"),
+(@ENTRY,9,2,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,21,20,0,0,0,0,0,0,"Master Gadrin - On Script - Say Line 0");
+
+-- Spirit of Minshina SAI
+SET @ENTRY := 3289;
+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,0,0,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spirit of Minshina - On Just Summoned - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 328900;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,2000,2000,0,0,66,0,0,0,0,0,0,21,20,0,0,0,0,0,0,"Spirit of Minshina - On Script - Set Orientation Closest Player"),
+(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,5,2,0,0,0,0,0,1,2000,2000,0,0,0,0,0,"Spirit of Minshina - On Script - Play Emote 2"),
+(@ENTRY,9,2,0,0,0,100,0,11000,11000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spirit of Minshina - On Script - Despawn Instant");
+
+DELETE FROM `creature_text` WHERE `entry`=3188;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(3188, 0, 0, 'I thank you, $n. And my brother thanks you.', 12, 0, 100, 0, 0, 0, 'Master Gadrin', 983);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_03_world.sql
new file mode 100644
index 00000000000..83aedd75069
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_03_world.sql
@@ -0,0 +1,62 @@
+--
+DELETE FROM `waypoints` WHERE `entry`=16856;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(16856, 1,-807.327,2739.82,115.447, 'Caretaker Dilandrus'),
+(16856, 2,-798.86,2719.21,111.628, 'Caretaker Dilandrus'),
+(16856, 3,-785.502,2706.21,107.293, 'Caretaker Dilandrus'),
+(16856, 4,-785.546,2702.16,106.208, 'Caretaker Dilandrus'),
+(16856, 5,-787.652,2700.58,105.792, 'Caretaker Dilandrus'),
+(16856, 6,-791.771,2694.26,104.589, 'Caretaker Dilandrus'),
+(16856, 7,-793.482,2693.76,104.592, 'Caretaker Dilandrus'),
+(16856, 8,-794.696,2691.44,104.35, 'Caretaker Dilandrus'),
+(16856, 9,-797.951,2691.02,104.535, 'Caretaker Dilandrus'),
+(16856, 10,-798.984,2693.63,104.891, 'Caretaker Dilandrus'),
+(16856, 11,-797.778,2697.53,105.43, 'Caretaker Dilandrus'),
+(16856, 12,-792.678,2705.64,106.948, 'Caretaker Dilandrus'),
+(16856, 13,-792.409,2708.46,107.754, 'Caretaker Dilandrus'),
+(16856, 14,-794.25,2710.38,108.384, 'Caretaker Dilandrus'),
+(16856, 15,-799.924,2706.66,107.387, 'Caretaker Dilandrus'),
+(16856, 16,-807.92,2692.9,104.856, 'Caretaker Dilandrus'),
+(16856, 17,-811.612,2690.9,104.36, 'Caretaker Dilandrus'),
+(16856, 18,-814.837,2692.26,104.736, 'Caretaker Dilandrus'),
+(16856, 19,-814.33,2696.03,105.773, 'Caretaker Dilandrus'),
+(16856, 20,-809.779,2704.45,107.63, 'Caretaker Dilandrus'),
+(16856, 21,-801.425,2715.06,109.679, 'Caretaker Dilandrus'),
+(16856, 22,-801.359,2718.11,110.676, 'Caretaker Dilandrus'),
+(16856, 23,-804.433,2720.69,111.13, 'Caretaker Dilandrus'),
+(16856, 24,-810.324,2717.67,110.329, 'Caretaker Dilandrus'),
+(16856, 25,-814.433,2712.14,109.487, 'Caretaker Dilandrus'),
+(16856, 26,-820.17,2701.35,107.506, 'Caretaker Dilandrus'),
+(16856, 27,-823.067,2699.77,107.458, 'Caretaker Dilandrus'),
+(16856, 28,-824.921,2701.38,107.939, 'Caretaker Dilandrus'),
+(16856, 29,-824.739,2706.05,108.591, 'Caretaker Dilandrus'),
+(16856, 30,-820.185,2714.8,110.056, 'Caretaker Dilandrus'),
+(16856, 31,-814.476,2725.61,111.567, 'Caretaker Dilandrus'),
+(16856, 32,-807.327,2739.82,115.447, 'Caretaker Dilandrus'),
+(16856, 33,-807.327,2739.82,115.447, 'Caretaker Dilandrus');
+
+UPDATE `creature` SET `position_x`=-807.327, `position_y`=2739.82, `position_z`=115.447, `orientation`=2.611, `MovementType`=2 WHERE `guid`=58021;
+
+-- Caretaker Dilandrus SAI
+SET @ENTRY := 16856;
+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,25,0,100,0,0,0,0,0,53,0,16856,1,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Reset - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,5,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 5 Reached - Run Script"),
+(@ENTRY,0,2,0,40,0,100,0,7,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 7 Reached - Run Script"),
+(@ENTRY,0,3,0,40,0,100,0,11,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 11 Reached - Run Script"),
+(@ENTRY,0,4,0,40,0,100,0,15,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 15 Reached - Run Script"),
+(@ENTRY,0,5,0,40,0,100,0,20,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 20 Reached - Run Script"),
+(@ENTRY,0,6,0,40,0,100,0,24,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 24 Reached - Run Script"),
+(@ENTRY,0,7,0,40,0,100,0,30,16856,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 30 Reached - Run Script"),
+(@ENTRY,0,8,0,40,0,100,0,33,16856,0,0,54,300000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Waypoint 33 Reached - Pause Waypoint");
+
+-- Actionlist SAI
+SET @ENTRY := 1685601;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Script - Pause Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,2.75976,"Caretaker Dilandrus - On Script - Set Orientation Home Position"),
+(@ENTRY,9,2,0,0,0,100,0,3000,3000,0,0,5,66,0,0,0,0,0,1,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Script - Play Emote 66"),
+(@ENTRY,9,3,0,0,0,100,0,3000,3000,0,0,5,68,0,0,0,0,0,0,0,0,0,0,0,0,0,"Caretaker Dilandrus - On Script - Play Emote 68");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_04_world.sql
new file mode 100644
index 00000000000..1a4484df5a3
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_04_world.sql
@@ -0,0 +1,32 @@
+-- Areatrigger SAI
+SET @ENTRY := 1447;
+DELETE FROM `areatrigger_scripts` WHERE `entry`=@ENTRY;
+INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES (@ENTRY,"SmartTrigger");
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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
+(@ENTRY,2,0,0,46,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,81519,8127,0,0,0,0,0,"Areatrigger - On Trigger - Set Data 1 1");
+
+-- Antu'sul SAI
+SET @ENTRY := 8127;
+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,1,0,0,50,2,11600,11600,13300,21700,11,8376,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - In Combat - Cast 'Earthgrab Totem' (Normal Dungeon)"),
+(@ENTRY,0,1,0,61,0,50,3,11600,11600,13300,21700,11,11899,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - In Combat - Cast 'Healing Ward' (Normal Dungeon)"),
+(@ENTRY,0,2,6,4,0,100,3,0,0,0,0,11,11894,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - On Aggro - Cast 'Antu'sul's Minion' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,20,0,0,11,11895,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - Between 0-20% Health - Cast 'Healing Wave of Antu'sul' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,4,5,2,0,100,3,0,25,0,0,11,11894,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - Between 0-25% Health - Cast 'Antu'sul's Minion' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,5,0,61,0,100,3,0,25,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - Between 0-25% Health - Say Line 0 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,6,0,61,0,100,3,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - On Aggro - Say Line 1 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,7,8,2,0,100,3,0,75,0,0,11,11894,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - Between 0-75% Health - Cast 'Antu'sul's Minion' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,8,0,61,0,100,3,0,75,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Antu'sul - Between 0-75% Health - Say Line 2 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,9,0,0,0,100,2,5000,5000,12000,14000,11,16006,0,0,0,0,0,5,0,0,0,0,0,0,0,"Antu'sul - In Combat - Cast 'Chain Lightning' (Normal Dungeon)"),
+(@ENTRY,0,10,0,0,0,100,2,3000,3000,9000,11000,11,15501,0,0,0,0,0,2,0,0,0,0,0,0,0,"Antu'sul - In Combat - Cast 'Earth Shock' (Normal Dungeon)"),
+(@ENTRY,0,11,0,38,0,100,0,1,1,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"Antu'sul - On Data Set 1 1 - Start Attacking");
+
+SET @ENTRY := 8127;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(@ENTRY,0,0, 'The children of Sul will protect their master. Rise once more Sul\'lithuz!',14,0,100,0,0,0, 4178, 0, 'Antu\'sul'),
+(@ENTRY,1,0, 'Lunch has arrived, my beautiful children. Tear them to pieces!',14,0,100,0,0,0, 4166, 0, 'Antu\'sul'),
+(@ENTRY,2,0, 'Rise and defend your master!',14,0,100,0,0,0, 4177, 0, 'Antu\'sul');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_05_world.sql
new file mode 100644
index 00000000000..bd04efd9c66
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_05_world.sql
@@ -0,0 +1,45 @@
+-- Commander Hogarth SAI
+SET @ENTRY := 19937;
+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,11,0,100,1,0,0,0,0,11,33900,0,0,0,0,0,1,0,0,0,0,0,0,0,"Commander Hogarth - On Respawn - Cast 'Shroud of Death' (No Repeat)"),
+(@ENTRY,0,1,2,20,0,100,0,10258,0,0,0,12,20117,6,0,0,0,0,8,0,0,0,-1186.95,2608.81,27.702,5.38523,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding Knight'"),
+(@ENTRY,0,2,3,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1192.14,2602.7,29.2625,0.0820243,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,3,4,61,0,100,0,10258,0,0,0,12,20117,6,0,0,0,0,8,0,0,0,-1181.95,2611.13,27.3004,4.61566,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding Knight'"),
+(@ENTRY,0,4,5,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1183.65,2603.66,29.4927,6.09219,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,5,6,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1184.48,2609.26,27.7192,5.01103,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,6,7,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1175.39,2607.4,28.853,3.63473,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,7,8,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1178.36,2609.96,27.8814,4.12375,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,8,9,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1182.51,2608.35,28.1201,4.67383,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,9,10,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1189.12,2601.88,29.6988,0.242659,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,10,11,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1179.46,2606.03,29.0216,3.81031,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,11,12,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1180.6,2598.15,35.2317,1.94692,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,12,13,61,0,100,0,10258,0,0,0,12,20117,6,0,0,0,0,8,0,0,0,-1190.87,2607.06,27.9991,5.86898,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding Knight'"),
+(@ENTRY,0,13,14,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1179.81,2603.43,29.8027,3.12637,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,14,15,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1184.47,2606.9,28.4442,5.18881,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,15,16,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1186.63,2605.58,28.7169,5.79079,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,16,17,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1189.03,2604.6,28.8694,6.10697,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,17,18,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1185.68,2603.39,29.4476,5.18881,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'"),
+(@ENTRY,0,18,0,61,0,100,0,10258,0,0,0,12,19863,6,0,0,0,0,8,0,0,0,-1181.97,2605.76,28.9476,4.40683,"Commander Hogarth - On Quest 'Honor the Fallen' Finished - Summon Creature 'Vengeful Unyielding'");
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (20117, 19863);
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(20117, 0, 0, 0, 0, 0, '33900'),
+(19863, 0, 0, 0, 0, 0, '33900');
+
+-- Vengeful Unyielding Knight SAI
+SET @ENTRY := 20117;
+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,0,0,0,0,0,41,15000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Vengeful Unyielding Knight - On Just Summoned - Despawn In 15000 ms"),
+(@ENTRY,0,1,0,54,0,100,0,0,0,0,0,5,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Vengeful Unyielding Knight - On Just Summoned - Play Emote 2");
+
+-- Vengeful Unyielding SAI
+SET @ENTRY := 19863;
+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,0,0,0,0,0,41,15000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Vengeful Unyielding - On Just Summoned - Despawn In 15000 ms"),
+(@ENTRY,0,1,0,54,0,100,0,0,0,0,0,5,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Vengeful Unyielding - On Just Summoned - Play Emote 2");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_06_world.sql
new file mode 100644
index 00000000000..0d7b75a72cc
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_06_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_questender` SET `id` =38017 WHERE `quest` =24880;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_07_world.sql
new file mode 100644
index 00000000000..ab3eb6ae454
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_07_world.sql
@@ -0,0 +1,6 @@
+-- Tiny Snowman SAI
+SET @ENTRY := 15710;
+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,22,0,100,0,34,0,0,0,5,94,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tiny Snowman - Received Emote 34 - Play Emote 94");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_08_world.sql
new file mode 100644
index 00000000000..e05c5e15c8e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_08_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=20206 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
+(20206, 0, 0, 0, 20, 0, 100, 0, 10919, 0, 0, 0, 53, 0, 20206, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fei Fei - On Quest \'Fei Fei\'s Treat\' Finished - Start Waypoint (Phase 1) (No Repeat)');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_09_world.sql
new file mode 100644
index 00000000000..94696444dd4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_09_world.sql
@@ -0,0 +1,11 @@
+--
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (4131, 4133);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=4131 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
+(4131, 0, 0, 0, 0, 0, 100, 1, 4000, 7000, 22000, 25000, 11, 6016, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Silithid Invader - IC - Cast Pierce Armor'),
+(4131, 0, 1, 0, 0, 0, 100, 1, 10000, 16000, 0, 0, 11, 8137, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Silithid Invader - IC - Cast Pierce Armor'),
+(4131, 0, 2, 0, 2, 0, 100, 1, 0, 15, 0, 0, 39, 20, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Silithid Invader - on hp below 15 % - call for help');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=4133 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
+(4133, 0, 2, 0, 2, 0, 100, 1, 0, 15, 0, 0, 39, 20, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Silithid Hive Drone - on hp below 15 % - call for help');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_10_world.sql
new file mode 100644
index 00000000000..428a0c7e8ca
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_10_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE creature_template SET mechanic_immune_mask = mechanic_immune_mask | 0x20 WHERE entry = 31464;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_11_world.sql
new file mode 100644
index 00000000000..5a385218931
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_11_world.sql
@@ -0,0 +1,7 @@
+--
+DELETE FROM `disables` WHERE `entry` IN (649,650) AND `sourceType` = 7;
+DELETE FROM `disables` WHERE `entry` = 650 AND `sourceType` = 2;
+INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES
+(7, 649, 0, '', '', 'Disable mmaps - Trial of the Crusader'),
+(7, 650, 0, '', '', 'Disable mmaps - Trial of the Champion'),
+(2, 650, 3, '', '', 'Disable Trial of the Champion, broken instance');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_12_world.sql
new file mode 100644
index 00000000000..f6a95a7c010
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_12_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `gameobject_template` SET `flags`=32 WHERE `entry` IN (175611,175612,175613,175614);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_13_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_13_world_335.sql
new file mode 100644
index 00000000000..8cd8df2147e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_13_world_335.sql
@@ -0,0 +1,372 @@
+UPDATE `locales_item` SET `description_loc6` = '', `description_loc7` = '' WHERE `entry` IN (42469, 42734, 42739, 42740, 42747, 42750, 43357, 43420, 43426, 43429);
+UPDATE `locales_item` SET `description_loc7` = `description_loc6` WHERE `entry` IN (40142, 40143, 40144, 40145, 40146, 40147, 40149, 40150, 40152, 40154, 40155, 40156, 40158, 40159, 40160, 40161, 40163);
+
+CREATE TEMPORARY TABLE `locales_update` (
+ `entry` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `name_loc6` varchar(100) NOT NULL DEFAULT '',
+ `name_loc7` varchar(100) NOT NULL DEFAULT '',
+ `description_loc6` varchar(255) DEFAULT NULL,
+ `description_loc7` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`entry`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+INSERT INTO `locales_update` (`entry`, `name_loc6`, `name_loc7`, `description_loc6`, `description_loc7`) VALUES
+ (40143, 'Ametrino con grabados', 'Ametrino con grabados', 'Encaja en una ranura de color rojo o amarillo.', 'Encaja en una ranura de color rojo o amarillo.'),
+ (40148, 'Ametrino destellante', 'Ametrino destellante', 'Encaja en una ranura de color rojo o amarillo.', 'Encaja en una ranura de color rojo o amarillo.'),
+ (40151, 'Ametrino luminoso', 'Ametrino luminoso', 'Encaja en una ranura de color rojo o amarillo.', 'Encaja en una ranura de color rojo o amarillo.'),
+ (40153, 'Ametrino velado', 'Ametrino velado', 'Encaja en una ranura de color rojo o amarillo.', 'Encaja en una ranura de color rojo o amarillo.'),
+ (40157, 'Ametrino prístino', 'Ametrino prístino', 'Encaja en una ranura de color rojo o amarillo.', 'Encaja en una ranura de color rojo o amarillo.'),
+ (40162, 'Ametrino de precisión', 'Ametrino de precisión', 'Encaja en una ranura de color rojo o amarillo.', 'Encaja en una ranura de color rojo o amarillo.'),
+ (46947, 'Boceto: ametrino luminoso', 'Boceto: ametrino luminoso', 'Te enseña a tallar un ametrino luminoso.', 'Te enseña a tallar un ametrino luminoso.'),
+ (46951, 'Boceto: ametrino velado', 'Boceto: ametrino velado', 'Te enseña a tallar un ametrino velado.', 'Te enseña a tallar un ametrino velado.'),
+ (46953, 'Boceto: ametrino con grabados', 'Boceto: ametrino con grabados', 'Te enseña a tallar un ametrino con grabados.', ' Te enseña a tallar un ametrino con grabados.'),
+ (46956, 'Boceto: ametrino prístino', 'Boceto: ametrino prístino', 'Te enseña a tallar un ametrino prístino.', ' Te enseña a tallar un ametrino prístino.'),
+ (47008, 'Boceto: ametrino destellante', 'Boceto: ametrino destellante', 'Te enseña a tallar un ametrino destellante.', ' Te enseña a tallar un ametrino destellante.'),
+ (47010, 'Boceto: ametrino de precisión', 'Boceto: ametrino de precisión', 'Te enseña a tallar un ametrino de precisión.', ' Te enseña a tallar un ametrino de precisión.'),
+ (46900, 'Boceto: ojo de Zul deslumbrante', 'Boceto: ojo de Zul deslumbrante', 'Te enseña a tallar un ojo de Zul deslumbrante.', 'Te enseña a tallar un ojo de Zul deslumbrante.'),
+ (46902, 'Boceto: ojo de Zul intemporal', 'Boceto: ojo de Zul intemporal', 'Te enseña a tallar un ojo de Zul intemporal.', 'Te enseña a tallar un ojo de Zul intemporal.'),
+ (46903, 'Boceto: ojo de Zul vidente', 'Boceto: ojo de Zul vidente', 'Te enseña a tallar un ojo de Zul vidente.', 'Te enseña a tallar un ojo de Zul vidente.'),
+ (41101,'Glifo de Escudo de vengador','Glifo de Escudo de vengador','',''),
+ (41107,'Glifo de Cólera vengativa','Glifo de Cólera vengativa','',''),
+ (45743,'Glifo de Tormenta divina','Glifo de Tormenta divina','',''),
+ (41105,'Glifo de Destello de Luz','Glifo de Destello de Luz','',''),
+ (41106,'Glifo de Luz Sagrada','Glifo de Luz Sagrada','',''),
+ (41100,'Glifo de Defensa recta','Glifo de Defensa recta','',''),
+ (41094,'Glifo de Sello de orden','Glifo de Sello de orden','',''),
+ (41110,'Glifo de Sello de Luz','Glifo de Sello de Luz','',''),
+ (43868,'Glifo de Sello de rectitud','Glifo de Sello de rectitud','',''),
+ (43869,'Glifo de Sello de venganza','Glifo de Sello de venganza','',''),
+ (41109,'Glifo de Sello de sabiduría','Glifo de Sello de sabiduría','',''),
+ (45744,'Glifo de Escudo de rectitud','Glifo de Escudo de rectitud','',''),
+ (45760,'Glifo de Supresión de dolor','Glifo de Supresión de dolor','',''),
+ (42407,'Glifo de sombra','Glifo de sombra','',''),
+ (42417,'Glifo de Espíritu redentor','Glifo de Espíritu redentor','',''),
+ (42965,'Glifo de Golpe fantasmal','Glifo de Golpe fantasmal','',''),
+ (45761,'Glifo de Hambre de sangre','Glifo de Hambre de sangre','',''),
+ (42971,'Glifo de vigor','Glifo de vigor','',''),
+ (43380,'Glifo de Esfumarse','Glifo de Esfumarse','',''),
+ (48720,'Glifo de Zarpa','Glifo de Zarpa','',''),
+ (40899,'Glifo de Bramido','Glifo de Bramido','',''),
+ (46372,'Glifo de Instintos de supervivencia','Glifo de Instintos de supervivencia','',''),
+ (50125,'Glifo de Rejuvenecimiento rápido','Glifo de Rejuvenecimiento rápido','',''),
+ (40903,'Glifo de Arañazo','Glifo de Arañazo','',''),
+ (45603,'Glifo de Nutrir','Glifo de Nutrir','',''),
+ (43335,'Glifo de lo Salvaje','Glifo de lo Salvaje','',''),
+ (42899,'Glifo de la bestia','Glifo de la bestia','',''),
+ (42901,'Glifo de Aspecto de la víbora','Glifo de Aspecto de la víbora','',''),
+ (45733,'Glifo de Trampa explosiva','Glifo de Trampa explosiva','',''),
+ (42906,'Glifo de Trampa de Escarcha','Glifo de Trampa de Escarcha','',''),
+ (42907,'Glifo de Marca del cazador','Glifo de Marca del cazador','',''),
+ (42909,'Glifo de halcón','Glifo de halcón','',''),
+ (42910,'Glifo de Multidisparo','Glifo de Multidisparo','',''),
+ (42915,'Glifo de Aura de disparo certero','Glifo de Aura de disparo certero','',''),
+ (42916,'Glifo de Salva','Glifo de Salva','',''),
+ (43350,'Glifo de Aliviar mascota','Glifo de Aliviar mascota','',''),
+ (43354,'Glifo de fuerza poseída','Glifo de fuerza poseída','',''),
+ (43355,'Glifo de la manada','Glifo de la manada','',''),
+ (42734,'Glifo de Deflagración Arcana','Glifo de Deflagración Arcana','',''),
+ (50045,'Glifo de Agua eterna','Glifo de Agua eterna','',''),
+ (42740,'Glifo de Explosión de Fuego','Glifo de Explosión de Fuego','',''),
+ (42743,'Glifo de Armadura de hielo','Glifo de Armadura de hielo','',''),
+ (42747,'Glifo de Agostar','Glifo de Agostar','',''),
+ (45737,'Glifo de Bomba viva','Glifo de Bomba viva','',''),
+ (42750,'Glifo de Gema de maná','Glifo de Gema de maná','',''),
+ (42753,'Glifo de Eliminar maldición','Glifo de Eliminar maldición','',''),
+ (42754,'Glifo de Elemental de agua','Glifo de Elemental de agua','',''),
+ (43339,'Glifo de Intelecto Arcano','Glifo de Intelecto Arcano','',''),
+ (43357,'Glifo de Resguardo contra el Fuego','Glifo de Resguardo contra el Fuego','',''),
+ (43359,'Glifo de Armadura de Escarcha','Glifo de Armadura de Escarcha','',''),
+ (43360,'Glifo de Resguardo contra la Escarcha','Glifo de Resguardo contra la Escarcha','',''),
+ (41096,'Glifo de Protección divina','Glifo de Protección divina','',''),
+ (43366,'Glifo de Bendición de sabiduría','Glifo de Bendición de sabiduría','',''),
+ (43368,'Glifo de Captar no-muertos','Glifo de Captar no-muertos','',''),
+ (43369,'Glifo del Sabio','Glifo del Sabio','',''),
+ (45758,'Glifo de Himno de esperanza','Glifo de Himno de esperanza','',''),
+ (42405,'Glifo de Control mental','Glifo de Control mental','',''),
+ (45757,'Glifo de Abrasamiento mental','Glifo de Abrasamiento mental','',''),
+ (41541,'Glifo de Maestría en Agua','Glifo de Maestría en Agua','',''),
+ (45776,'Glifo de Tótem de cólera','Glifo de Tótem de cólera','',''),
+ (41538,'Glifo de Tótem Marea de maná','Glifo de Tótem Marea de maná','',''),
+ (41535,'Glifo de Ola de sanación inferior','Glifo de Ola de sanación inferior','',''),
+ (41524,'Glifo de Lava','Glifo de Lava','',''),
+ (43386,'Glifo de Escudo de agua','Glifo de Escudo de agua','',''),
+ (42456,'Glifo de Maldición de agonía','Glifo de Maldición de agonía','',''),
+ (50077,'Glifo de descomposición presurosa','Glifo de descomposición presurosa','',''),
+ (42466,'Glifo de Dolor abrasador','Glifo de Dolor abrasador','',''),
+ (42469,'Glifo de Succionar vida','Glifo de Succionar vida','',''),
+ (43394,'Glifo de almas','Glifo de almas','',''),
+ (43391,'Glifo de Kilrogg','Glifo de Kilrogg','',''),
+ (43420,'Glifo de insultos barbáricos','Glifo de insultos barbáricos','',''),
+ (43425,'Glifo de Bloqueo','Glifo de Bloqueo','',''),
+ (43412,'Glifo de Sed de sangre','Glifo de Sed de sangre','',''),
+ (45794,'Glifo de Regeneración iracunda','Glifo de Regeneración iracunda','',''),
+ (43416,'Glifo de Ejecutar','Glifo de Ejecutar','',''),
+ (43417,'Glifo de Seccionar','Glifo de Seccionar','',''),
+ (43418,'Glifo de Golpe heroico','Glifo de Golpe heroico','',''),
+ (43426,'Glifo de Última carga','Glifo de Última carga','',''),
+ (43423,'Glifo de Desgarrar','Glifo de Desgarrar','',''),
+ (43429,'Glifo de Provocar','Glifo de Provocar','',''),
+ (45793,'Glifo de Vigilancia','Glifo de Vigilancia','',''),
+ (43432,'Glifo de Torbellino','Glifo de Torbellino','',''),
+ (43398,'Glifo de Falsa arremetida','Glifo de Falsa arremetida','',''),
+ (49084,'Glifo de orden','Glifo de orden','',''),
+ (43397,'Glifo de Cargar','Glifo de Cargar','',''),
+ (43396,'Glifo de Ira rabiosa','Glifo de Ira rabiosa','',''),
+ (40114,'Rubí cárdeno brillante','Rubí cárdeno brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (40117,'Rubí cárdeno fracturado','Rubí cárdeno fracturado','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (40113,'Rubí cárdeno rúnico','Rubí cárdeno rúnico','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (40115,'Rubí cárdeno sutil','Rubí cárdeno sutil','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (32197,'Espinela carmesí brillante','Espinela carmesí brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (32196,'Espinela carmesí rúnica','Espinela carmesí rúnica','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (32198,'Espinela carmesí sutil','Espinela carmesí sutil','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (32195,'Lágrima de espinela carmesí','Lágrima de espinela carmesí','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (39999,'Rubí escarlata brillante','Rubí escarlata brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (40002,'Rubí escarlata fracturado','Rubí escarlata fracturado','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (39998,'Rubí escarlata rúnico','Rubí escarlata rúnico','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (24031,'Rubí vivo brillante','Rubí vivo brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (24030,'Rubí vivo rúnico','Rubí vivo rúnico','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (24032,'Rubí vivo sutil','Rubí vivo sutil','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (24029,'Lágrima de rubí vivo','Lágrima de rubí vivo','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (39907,'Sangrita sutil','Sangrita sutil','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (39906,'Sangrita brillante','Sangrita brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (39909,'Sangrita fracturada','Sangrita fracturada','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (39911,'Sangrita rúnica','Sangrita rúnica','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (23096,'Granate de sangre rúnico','Granate de sangre rúnico','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (28595,'Granate de sangre brillante','Granate de sangre brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (23094,'Lágrima de granate de sangre','Lágrima de granate de sangre','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (40175,'Ojo de Zul deslumbrante','Ojo de Zul deslumbrante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40167,'Ojo de Zul duradero','Ojo de Zul duradero','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40174,'Ojo de Zul intrincado','Ojo de Zul intrincado','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40165,'Ojo de Zul irregular','Ojo de Zul irregular','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40177,'Ojo de Zul luminiscente','Ojo de Zul luminiscente','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40178,'Ojo de Zul opaco','Ojo de Zul opaco','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40170,'Ojo de Zul vidente','Ojo de Zul vidente','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40172,'Ojo de Zul brillante','Ojo de Zul brillante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40176,'Ojo de Zul hendido','Ojo de Zul hendido','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40181,'Ojo de Zul tenso','Ojo de Zul tenso','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40164,'Ojo de Zul intemporal','Ojo de Zul intemporal','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40166,'Ojo de Zul vívido','Ojo de Zul vívido','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (32225,'Esmeralda de espuma marina deslumbrante','Esmeralda de espuma marina deslumbrante.','Encaja en una ranura de color amarillo o azul','Encaja en una ranura de color amarillo o azul.'),
+ (32223,'Esmeralda de espuma marina duradera','Esmeralda de espuma marina duradera.','Encaja en una ranura de color amarillo o azul','Encaja en una ranura de color amarillo o azul.'),
+ (32226,'Esmeralda de espuma marina irregular','Esmeralda de espuma marina irregular.','Encaja en una ranura de color amarillo o azul','Encaja en una ranura de color amarillo o azul.'),
+ (40094,'Esmeralda del bosque deslumbrante','Esmeralda del bosque deslumbrante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40089,'Esmeralda del bosque duradera','Esmeralda del bosque duradera','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40104,'Esmeralda del bosque intrincada','Esmeralda del bosque intrincada','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40100,'Esmeralda del bosque luminiscente','Esmeralda del bosque luminiscente','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40103,'Esmeralda del bosque opaca','Esmeralda del bosque opaca','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40092,'Esmeralda del bosque de vidente','Esmeralda del bosque de vidente','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40099,'Esmeralda del bosque brillante','Esmeralda del bosque brillante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40096,'Esmeralda del bosque hendida','Esmeralda del bosque hendida','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40101,'Esmeralda del bosque tensa','Esmeralda del bosque tensa','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40085,'Esmeralda del bosque intemporal','Esmeralda del bosque intemporal','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40088,'Esmeralda del bosque vívida','Esmeralda del bosque vívida','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (24065,'Talasita deslumbrante','Talasita deslumbrante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (24062,'Talasita duradera','Talasita duradera','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (24067,'Talasita irregular','Talasita irregular','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39984,'Jade oscuro deslumbrante','Jade oscuro deslumbrante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39976,'Jade oscuro duradero','Jade oscuro duradero','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39983,'Jade oscuro intrincado','Jade oscuro intrincado','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39986,'Jade oscuro luminiscente','Jade oscuro luminiscente','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39988,'Jade oscuro opaco','Jade oscuro opaco','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39979,'Jade oscuro vidente','Jade oscuro vidente','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39981,'Jade oscuro brillante','Jade oscuro brillante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39985,'Jade oscuro hendido','Jade oscuro hendido','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39991,'Jade oscuro tenso','Jade oscuro tenso','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39968,'Jade oscuro intemporal','Jade oscuro intemporal','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (39975,'Jade oscuro vívido','Jade oscuro vívido','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (23106,'Peridoto intenso deslumbrante','Peridoto intenso deslumbrante','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (23105,'Peridoto intenso duradero','Peridoto intenso duradero','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (23104,'Peridoto intenso irregular','Peridoto intenso irregular','Encaja en una ranura de color amarillo o azul.','Encaja en una ranura de color amarillo o azul.'),
+ (40154,'Ametrino durable','Ametrino durable','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40158,'Ametrino potenciado','Ametrino potenciado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40161,'Ametrino de luz trémula','Ametrino de luz trémula','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40149,'Ametrino iluminado','Ametrino iluminado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40145,'Ametrino resplandeciente','Ametrino resplandeciente','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40159,'Ametrino diestro','Ametrino diestro','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40156,'Ametrino maligno','Ametrino maligno','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (32220,'Piropiedra destelleante','Piropiedra destelleante','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (32219,'Piropiedra luminosa','Piropiedra luminosa','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo'),
+ (32221,'Piropiedra velada','Piropiedra velada','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (32222,'Piropiedra maligna','Piropiedra maligna','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40058,'Topacio monarca de precisión','Topacio monarca de precisión','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40046,'Topacio monarca diestro','Topacio monarca diestro','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40050,'Topacio monarca durable','Topacio monarca durable','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40054,'Topacio monarca potenciado','Topacio monarca potenciado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40038,'Topacio monarca grabado','Topacio monarca grabado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40057,'Topacio monarca de luz trémula','Topacio monarca de luz trémula','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40044,'Topacio monarca destellante','Topacio monarca destellante','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40045,'Topacio monarca iluminado','Topacio monarca iluminado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40047,'Topacio monarca luminoso','Topacio monarca luminoso','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40053,'Topacio monarca prístino','Topacio monarca prístino','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40055,'Topacio monarca completo','Topacio monarca completo','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40049,'Topacio monarca velado','Topacio monarca velado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40052,'Topacio monarca maligno','Topacio monarca maligno','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (24061,'Topacio noble destellante','Topacio noble destellante','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (24060,'Topacio noble temerario','Topacio noble temerario','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (31867,'Topacio noble velado','Topacio noble velado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (31868,'Topacio noble maligno','Topacio noble maligno','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39965,'Citrino enorme de luz trémula','Citrino enorme de luz trémula','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39966,'Citrino enorme de precisión','Citrino enorme de precisión','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39958,'Citrino enorme durable','Citrino enorme durable','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39962,'Citrino enorme potenciado','Citrino enorme potenciado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39948,'Citrino enorme grabado','Citrino enorme grabado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39953,'Citrino enorme destellante','Citrino enorme destellante','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39954,'Citrino enorme iluminado','Citrino enorme iluminado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39946,'Citrino enorme luminoso','Citrino enorme luminoso','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39961,'Citrino enorme prístino','Citrino enorme prístino','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39963,'Citrino enorme completo','Citrino enorme completo','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39957,'Citrino enorme velado','Citrino enorme velado','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (39960,'Citrino enorme maligno','Citrino enorme maligno','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (31866,'Espesartita de llamas velada','Espesartita de llamas velada','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (31869,'Espesartita de llamas maligna','Espesartita de llamas maligna','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (23100,'Espesartita de llamas destellante','Espesartita de llamas destellante','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (23099,'Espesartita de llamas luminosa','Espesartita de llamas luminosa','Encaja en una ranura de color rojo o amarillo.','Encaja en una ranura de color rojo o amarillo.'),
+ (40136,'Piedra de terror equilibrada','Piedra de terror equilibrada','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40132,'Piedra de terror resplandeciente','Piedra de terror resplandeciente','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40137,'Piedra de terror imbuida','Piedra de terror imbuida','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40138,'Piedra de terror regia','Piedra de terror regia','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40134,'Piedra de terror real','Piedra de terror real','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40131,'Piedra de terror de tenuidad','Piedra de terror de tenuidad','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (32213,'Amatista Cantosombrío equilibrada','Amatista Cantosombrío equilibrada','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (32215,'Amatista Cantosombrío resplandeciente','Amatista Cantosombrío resplandeciente','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (32214,'Amatista Cantosombrío imbuida','Amatista Cantosombrío imbuida','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (32216,'Amatista Cantosombrío real','Amatista Cantosombrío real','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40029,'Ópalo crepuscular equilibrado','Ópalo crepuscular equilibrado','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40025,'Ópalo crepuscular resplandeciente','Ópalo crepuscular resplandeciente','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40030,'Ópalo crepuscular imbuido','Ópalo crepuscular imbuido','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40033,'Ópalo crepuscular enjundioso','Ópalo crepuscular enjundioso','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40031,'Ópalo crepuscular regio','Ópalo crepuscular regio','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40027,'Ópalo crepuscular real','Ópalo crepuscular real','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (40024,'Ópalo crepuscular de tenuidad','Ópalo crepuscular de tenuidad','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (31863,'Ojo de noche equilibrado','Ojo de noche equilibrado','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (24056,'Ojo de noche resplandeciente','Ojo de noche resplandeciente','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (31865,'Ojo de noche imbuido','Ojo de noche imbuido','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (35707,'Ojo de noche regio','Ojo de noche regio','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (24057,'Ojo de noche real','Ojo de noche real','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39938,'Cristal de Sombras regio','Cristal de Sombras regio','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39937,'Cristal de Sombras equilibrado','Cristal de Sombras equilibrado','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39936,'Cristal de Sombras resplandeciente','Cristal de Sombras resplandeciente','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39944,'Cristal de Sombras imbuido','Cristal de Sombras imbuido','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39933,'Cristal de Sombras enjudioso','Cristal de Sombras enjudioso','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39943,'Cristal de Sombras real','Cristal de Sombras real','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (39942,'Cristal de Sombras de tenuidad','Cristal de Sombras de tenuidad','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (31862,'Draenita de Sombras equilibrada','Draenita de Sombras equilibrada','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (31864,'Draenita de Sombras imbuida','Draenita de Sombras imbuida','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (23109,'Draenita de Sombras real','Draenita de Sombras real','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (23108,'Draenita de Sombras resplandeciente','Draenita de Sombras resplandeciente','Encaja en una ranura de color rojo o azul.','Encaja en una ranura de color rojo o azul.'),
+ (42701,'Perla encantada','Perla encantada','Encaja en una ranura de color rojo, amarillo o azul. Solo puedes encajar una en tu equipo.','Encaja en una ranura de color rojo, amarillo o azul. Solo puedes encajar una en tu equipo.'),
+ (36766,'Ojo de dragón brillante','Ojo de dragón brillante','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (42153,'Ojo de dragón fracturado','Ojo de dragón fracturado','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (42146,'Ojo de dragón lustroso','Ojo de dragón lustroso','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (42144,'Ojo de dragón rúnico','Ojo de dragón rúnico','Encaja en una ranura de color rojo.','Encaja en una ranura de color rojo.'),
+ (42157,'Ojo de dragón grueso','Ojo de dragón grueso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (41377,'Diamante de llama celeste refulgente','Diamante de llama celeste refulgente','Solo encaja en una ranura de gema meta.','Solo encaja en una ranura de gema meta.'),
+ (32202,'Zafiro empíreo luciente','Zafiro empíreo luciente','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (32200,'Zafiro empíreo sólido','Zafiro empíreo sólido','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (40123,'Ámbar del rey luminoso','Ámbar del rey luminoso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (39349,'Vitela de arma','Vitela de arma','Se puede marcar como el objetivo de varios encantamientos de armas para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos sin restricciones de nivel.','Se puede marcar como el objetivo de varios encantamientos de armas para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos sin restricciones de nivel.'),
+ (39350,'Vitela de arma II','Vitela de arma II','Se puede marcar como el objetivo de varios encantamientos de armas para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 35 o inferior.','Se puede marcar como el objetivo de varios encantamientos de armas para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 35 o inferior.'),
+ (43146,'Vitela de arma III','Vitela de arma III','Se puede marcar como el objetivo de varios encantamientos de armas para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 60 o inferior.','Se puede marcar como el objetivo de varios encantamientos de armas para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 60 o inferior.'),
+ (38682,'Vitela de armadura','Vitela de armadura','Se puede marcar como el objetivo de varios encantamientos de armadura para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos sin restricciones de nivel.','Se puede marcar como el objetivo de varios encantamientos de armadura para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos sin restricciones de nivel.'),
+ (37602,'Vitela de armadura II','Vitela de armadura II','Se puede marcar como el objetivo de varios encantamientos de armadura para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 35 o inferior.','Se puede marcar como el objetivo de varios encantamientos de armadura para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 35 o inferior.'),
+ (43145,'Vitela de armadura III','Vitela de armadura III','Se puede marcar como el objetivo de varios encantamientos de armadura para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 60 o inferior.','Se puede marcar como el objetivo de varios encantamientos de armadura para almacenar el encantamiento y usarlo más tarde. Solo puede absorber encantamientos con restricciones de nivel 60 o inferior.'),
+ (40121,'Circón majestuoso luciente','Circón majestuoso luciente','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (40010,'Zafiro celestial luciente','Zafiro celestial luciente','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (24037,'Estrella de Eluna luciente','Estrella de Eluna luciente','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (39927,'Calcedonia lustrosa','Calcedonia lustrosa','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (39920,'Calcedonia brillante','Calcedonia brillante','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (23121,'Piedra lunar azur luciente','Piedra lunar azur luciente','Encaja en una ranura de color azul.','Encaja en una ranura de color azul.'),
+ (40125,'Ámbar del rey rígido','Ámbar del rey rígido','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (40126,'Ámbar del rey grueso','Ámbar del rey grueso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (32204,'Ojo de león luminoso','Ojo de león luminoso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (32207,'Ojo de león reluciente','Ojo de león reluciente','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (32210,'Gran ojo de león','Gran ojo de león','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (32206,'Ojo de león rígido','Ojo de león rígido','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (32208,'Ojo de león grueso','Ojo de león grueso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (40012,'Brillo de otoño luminoso','Brillo de otoño luminoso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (40014,'Brillo de otoño rígido','Brillo de otoño rígido','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (40015,'Brillo de otoño grueso','Brillo de otoño grueso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (24047,'Piedra del alba luminosa','Piedra del alba luminosa','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (24050,'Piedra del alba reluciente','Piedra del alba reluciente','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (31861,'Gran piedra del alba ','Gran piedra del alba ','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (24051,'Piedra del alba rígida','Piedra del alba rígida','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (24052,'Piedra del alba gruesa','Piedra del alba gruesa','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (39912,'Cristal de sol luminoso','Cristal de sol luminoso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (39915,'Cristal de sol rígido','Cristal de sol rígido','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (39916,'Cristal de sol grueso','Cristal de sol grueso','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (31860,'Gran draenita dorada','Gran draenita dorada','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (23116,'Draenita dorada rígida','Draenita dorada rígida','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (23115,'Draenita dorada gruesa','Draenita dorada gruesa','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (23114,'Draenita dorada reluciente','Draenita dorada reluciente','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.'),
+ (23113,'Draenita dorada luminosa','Draenita dorada luminosa','Encaja en una ranura de color amarillo.','Encaja en una ranura de color amarillo.');
+
+INSERT INTO `locales_update` (`entry`, `name_loc6`, `name_loc7`, `description_loc6`) VALUES
+ (41580,'Boceto: brillo de otoño rígido','Boceto: brillo de otoño rígido','Te enseña a tallar un brillo de otoño rígido.'),
+ (41581,'Boceto: zafiro celestial luciente','Boceto: zafiro celestial luciente','Te enseña a tallar un zafiro celestial luciente.'),
+ (41582,'Boceto: topacio monarca destellante','Boceto: topacio monarca destellante','Te enseña a tallar un topacio monarca destellante.'),
+ (41687,'Boceto: topacio monarca completo','Boceto: topacio monarca completo','Te enseña a tallar un topacio monarca completo.'),
+ (41688,'Boceto: topacio monarca velado','Boceto: topacio monarca velado','Te enseña a tallar un topacio monarca velado.'),
+ (41689,'Boceto: topacio monarca luminoso','Boceto: topacio monarca luminoso','Te enseña a tallar un topacio monarca luminoso.'),
+ (41696,'Boceto: esmeralda del bosque luminiscente','Boceto: esmeralda del bosque luminiscente','Te enseña a tallar una esmeralda del bosque luminiscente.'),
+ (41694,'Boceto: esmeralda del bosque intrincada','Boceto: esmeralda del bosque intrincada','Te enseña a tallar una esmeralda del bosque intrincada.'),
+ (40140,'Piedra de terror enjundiosa','Piedra de terror enjundiosa','Encaja en una ranura de color rojo o azul.'),
+ (41697,'Boceto: esmeralda del bosque duradera','Boceto: esmeralda del bosque duradera','Te enseña a tallar una esmeralda del bosque duradera.'),
+ (41699,'Boceto: esmeralda del bosque de vidente','Boceto: esmeralda del bosque de vidente','Te enseña a tallar una esmeralda del bosque de vidente.'),
+ (41701,'Boceto: ópalo crepuscular real','Boceto: ópalo crepuscular real','Te enseña a tallar un ópalo crepuscular real.'),
+ (41702,'Boceto: ópalo crepuscular enjundioso','Boceto: ópalo crepuscular enjundioso','Te enseña a tallar un ópalo crepuscular enjundioso.'),
+ (41703,'Boceto: ópalo crepuscular regio','Boceto: ópalo crepuscular regio','Te enseña a tallar un ópalo crepuscular regio.'),
+ (41705,'Boceto: diamante de llama celeste refulgente','Boceto: diamante de llama celeste refulgente','Te enseña a tallar un diamante de llama celeste refulgente.'),
+ (42299,'Boceto: ojo de dragón brillante','Boceto: ojo de dragón brillante','Te enseña a tallar un ojo de dragón brillante.'),
+ (42303,'Boceto: ojo de dragón fracturado','Boceto: ojo de dragón fracturado','Te enseña a tallar un ojo de dragón fracturado.'),
+ (42304,'Boceto: ojo de dragón lustroso','Boceto: ojo de dragón lustroso','Te enseña a tallar un ojo de dragón lustroso.'),
+ (42309,'Boceto: ojo de dragón rúnico','Boceto: ojo de dragón rúnico','Te enseña a tallar un ojo de dragón rúnico.'),
+ (42315,'Boceto: ojo de dragón grueso','Boceto: ojo de dragón grueso','Te enseña a tallar un ojo de dragón grueso.'),
+ (46934,'Boceto: piedra de terror equilibrada','Boceto: piedra de terror equilibrada','Te enseña a tallar una piedra de terror equilibrada.'),
+ (46952,'Boceto: ametrino durable','Boceto: ametrino durable','Te enseña a tallar un ametrino durable.'),
+ (47016,'Boceto: ametrino potenciado','Boceto: ametrino potenciado','Te enseña a tallar un ametrino potenciado.'),
+ (46921,'Boceto: rubí cárdeno fracturado','Boceto: rubí cárdeno fracturado','Te enseña a tallar un rubí cárdeno fracturado.'),
+ (47012,'Boceto: ametrino de luz trémula','Boceto: ametrino de luz trémula','Te enseña a tallar un ametrino de luz trémula.'),
+ (46945,'Boceto: piedra de terror imbuida','Boceto: piedra de terror imbuida','Te enseña a tallar una piedra de terror imbuida.'),
+ (46901,'Boceto: ojo de Zul irregular','Boceto: ojo de Zul irregular','Te enseña a tallar un ojo de Zul irregular.'),
+ (46909,'Boceto: ojo de Zul luminiscente','Boceto: ojo de Zul luminiscente','Te enseña a tallar un ojo de Zul luminiscente.'),
+ (47021,'Boceto: ametrino iluminado','Boceto: ametrino iluminado','Te enseña a tallar un ametrino iluminado.'),
+ (46927,'Boceto: circón majestuoso luciente','Boceto: circón majestuoso luciente','Te enseña a tallar un circón majestuoso luciente.'),
+ (49112,'Boceto: Lágrima de pesadilla','Boceto: Lágrima de pesadilla','Te enseña a tallar una Lágrima de pesadilla.'),
+ (46914,'Boceto: ojo de Zul opaco','Boceto: ojo de Zul opaco','Te enseña a tallar un ojo de Zul opaco.'),
+ (46944,'Boceto: piedra de terror enjundiosa','Boceto: piedra de terror enjundiosa','Te enseña a tallar una piedra de terror enjundiosa.'),
+ (46940,'Boceto: piedra de terror regia','Boceto: piedra de terror regia','Te enseña a tallar una piedra de terror regia.'),
+ (47018,'Boceto: ametrino resplandeciente','Boceto: ametrino resplandeciente','Te enseña a tallar un ametrino resplandeciente.'),
+ (46928,'Boceto: ámbar del rey rígido','Boceto: ámbar del rey rígido','Te enseña a tallar un ámbar del rey rígido.'),
+ (46939,'Boceto: piedra de terror real','Boceto: piedra de terror real','Te enseña a tallar una piedra de terror real.'),
+ (46916,'Boceto: rubí cárdeno rúnico','Boceto: rubí cárdeno rúnico','Te enseña a tallar un rubí cárdeno rúnico.'),
+ (46907,'Boceto: ojo de Zul brillante','Boceto: ojo de Zul brillante','Te enseña a tallar un ojo de Zul brillante.'),
+ (46922,'Boceto: rubí cárdeno sutil','Boceto: rubí cárdeno sutil','Te enseña a tallar un rubí cárdeno sutil.'),
+ (46906,'Boceto: ojo de Zul hendido','Boceto: ojo de Zul hendido','Te enseña a tallar un ojo de Zul hendido.'),
+ (46908,'Boceto: ojo de Zul tenso','Boceto: ojo de Zul tenso','Te enseña a tallar un ojo de Zul tenso.'),
+ (46946,'Boceto: piedra de terror de tenuidad','Boceto: piedra de terror de tenuidad','Te enseña a tallar una piedra de terror de tenuidad.'),
+ (46931,'Boceto: ámbar del rey grueso','Boceto: ámbar del rey grueso','Te enseña a tallar un ámbar del rey grueso.'),
+ (46899,'Boceto: ojo de Zul vívido','Boceto: ojo de Zul vívido','Te enseña a tallar un ojo de Zul vívido.'),
+ (47011,'Boceto: ametrino maligno','Boceto: ametrino maligno','Te enseña a tallar un ametrino maligno.'),
+ (52023,'Diseño: Flecha de hoja de hielo','Diseño: Flecha de hoja de hielo','Te enseña a hacer flechas de hoja de hielo.'),
+ (52022,'Diseño: Balas destrozadoras','Diseño: Balas destrozadoras','Te enseña a hacer balas destrozadoras.'),
+ (50166,'Técnica: Glifo de Agua eterna','Técnica: Glifo de Agua eterna','Te enseña a inscribir un Glifo de Agua eterna.'),
+ (50168,'Técnica: Glifo de descomposición presurosa','Técnica: Glifo de descomposición presurosa','Te enseña a inscribir un Glifo de descomposición presurosa.'),
+ (50167,'Técnica: Glifo de Rejuvenecimiento rápido','Técnica: Glifo de Rejuvenecimiento rápido','Te enseña a inscribir un Glifo de Rejuvenecimiento rápido.'),
+ (43826,'Glifo de Golpe sangriento','Glifo de Golpe sangriento',''),
+ (43538,'Glifo de Orden oscura','Glifo de Orden oscura',''),
+ (45804,'Glifo de muerte oscura','Glifo de muerte oscura',''),
+ (45805,'Glifo de enfermedad','Glifo de enfermedad',''),
+ (43545,'Glifo de Entereza ligada al hielo','Glifo de Entereza ligada al hielo',''),
+ (43548,'Glifo de Golpe de peste','Glifo de Golpe de peste',''),
+ (43549,'Glifo del necrófago','Glifo del necrófago',''),
+ (43553,'Glifo de Armadura inquebrantable','Glifo de Armadura inquebrantable',''),
+ (45803,'Glifo de Añublo profano','Glifo de Añublo profano',''),
+ (43671,'Glifo de Deflagración de cadáver','Glifo de Deflagración de cadáver',''),
+ (43672,'Glifo de Pestilencia','Glifo de Pestilencia',''),
+ (43673,'Glifo de Levantar a muerto','Glifo de Levantar a muerto','');
+
+UPDATE `locales_item`, `locales_update` SET `locales_item`.`name_loc6` = `locales_update`.`name_loc6`, `locales_item`.`name_loc7` = `locales_update`.`name_loc7`, `locales_item`.`description_loc6` = `locales_update`.`description_loc6`, `locales_item`.`description_loc7` = `locales_update`.`description_loc7`
+ WHERE `locales_item`.`entry` = `locales_update`.`entry`;
+
+DROP TABLE `locales_update`;
+UPDATE `locales_item` SET `description_loc7` = `description_loc6` WHERE `entry` IN (41580,41581,41582,41687,41688,41689,41696,41694,41697,41699,41701,41702,41703,41705,42299,42303,42304,42309,42315,46934,46952,47016,46921,47012,46945,46901,46909,47021,46927,49112,46914,46944,46940,47018,46928,46939,46916,46907,46922,46906,46908,46946,46931,46899,47011,52023,52022,50166,50168,50167,43826,43538,45804,45805,43545,43548,43549,43553,45803,43671,43672,43673);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_00_world.sql
new file mode 100644
index 00000000000..c0616f833ea
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_00_world.sql
@@ -0,0 +1,14 @@
+-- A Friendly Chat... (24576, 24657)
+-- Snivel Rustrocket set gossip flag
+UPDATE `creature_template` SET `npcflag` = 1, `AIName`='SmartAI' WHERE `entry` = 37715;
+
+-- Quest credit SAI
+DELETE FROM `smart_scripts` WHERE (`entryorguid`=37715 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
+(37715,0,0,0,62,0,100,0,10946,0,0,0,11,70646,2,0,0,0,0,7,0,0,0,0,0,0,0, "Snivel Rustrocket - on gosip 10947 - cast Love - Create Snivel's Ledger");
+
+-- Gossip option conditions
+DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId`=15 AND `SourceGroup`=10929);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,10929,0,0,9,24576,0,0,0,'','Show gossip only if plaer have A Friendly Chat... Horde quest'),
+(15,10929,0,1,9,24657,0,0,0,'','Show gossip only if plaer have A Friendly Chat... Alliance quest');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_01_world.sql
new file mode 100644
index 00000000000..742d833352e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry`=24938;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_00_world.sql
new file mode 100644
index 00000000000..dcfd5ddf029
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_00_world.sql
@@ -0,0 +1,10 @@
+-- Irespeaker SAI
+SET @ENTRY := 24999;
+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,0,0,100,0,1500,3000,10000,15000,11,35913,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Fel Fireball'"),
+(@ENTRY,0,1,0,0,0,100,0,13000,16000,20000,35000,11,18267,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Curse of Weakness'"),
+(@ENTRY,0,2,0,6,0,100,1,0,0,0,0,33,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Irespeaker - On Just Died - Quest Credit 'Kanrethad's Quest' (No Repeat)"),
+(@ENTRY,0,3,0,6,0,100,0,5000,5000,10000,10000,45,1,1,0,0,0,0,10,79450,23310,0,0,0,0,0,"Irespeaker - On Just Died - Set Data 1 1"),
+(@ENTRY,0,4,0,25,0,100,0,0,0,0,0,11,45023,0,0,0,0,0,19,25953,13,0,0,0,0,0,"Irespeaker - On Reset - Cast 'Fel Consumption'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_01_world.sql
new file mode 100644
index 00000000000..f844fcce5d0
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_text` SET `type`=14 WHERE `entry`=20977;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_02_world.sql
new file mode 100644
index 00000000000..46ff767997f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `quest_template` SET `PrevQuestId`=3451 WHERE `Id`=3483;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_03_world.sql
new file mode 100644
index 00000000000..2bef0c6b1f5
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_03_world.sql
@@ -0,0 +1,204 @@
+--
+UPDATE `creature` SET `position_x`=1772.803833, `position_y`=848.654846, `position_z`=123.192604, `orientation`=1.649258 WHERE `guid`=127067;
+UPDATE `creature` SET `position_x`=1772.699585, `position_y`=852.786560, `position_z`=123.192734, `orientation`=4.675874 WHERE `guid`=127068;
+
+DELETE FROM `creature_addon` WHERE `guid` IN (127051, 127062, 127065, 127059, 127047);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(127051, 0, 0, 0, 1, 4, ''),
+(127062, 0, 0, 0, 1, 4, ''),
+(127065, 0, 0, 0, 1, 4, ''),
+(127059, 0, 0, 0, 1, 4, ''),
+(127047, 0, 0, 0, 1, 4, '');
+
+DELETE FROM `creature_addon` WHERE `guid` IN (127067, 127068);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(127067, 0, 0, 0, 1, 36, ''),
+(127068, 0, 0, 0, 1, 36, '');
+
+UPDATE `creature_addon` SET `emote`=20 WHERE `guid`=127043;
+
+/* emotes for these creatures. http://pokit.org/get/?2ee8b0b514852adc528b2543f704fdcd.jpg*/
+
+-- Pathing for Entry: 29830 'TDB FORMAT'
+SET @NPC := 127079;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1580.776,`position_y`=726.0986,`position_z`=143.0329 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1580.776,726.0986,143.0329,0,0,0,0,100,0),
+(@PATH,2,1601.526,726.0986,143.0329,0,0,0,0,100,0),
+(@PATH,3,1580.776,726.0986,143.0329,0,0,0,0,100,0),
+(@PATH,4,1601.526,726.0986,143.0329,0,0,0,0,100,0);
+-- 0x1C3AE04B801D2180006CCE0002D7B1EE .go 1580.776 726.0986 143.0329
+
+-- Pathing for Entry: 29830 'TDB FORMAT'
+SET @NPC := 127077;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1634.252,`position_y`=750.1481,`position_z`=143.0402 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1634.252,750.1481,143.0402,0,0,0,0,100,0),
+(@PATH,2,1645.534,749.2593,143.062,0,0,0,0,100,0),
+(@PATH,3,1646.846,740.0786,143.036,0,0,0,0,100,0),
+(@PATH,4,1643.028,738.3261,143.0428,0,0,0,0,100,0),
+(@PATH,5,1634.346,729.3132,143.0253,0,0,0,0,100,0),
+(@PATH,6,1629.24,728.4056,143.036,0,0,0,0,100,0),
+(@PATH,7,1625.434,724.1005,143.033,0,0,0,0,100,0),
+(@PATH,8,1625.066,724.9523,143.0346,0,0,0,0,100,0),
+(@PATH,9,1633.39,728.2556,143.0207,0,0,0,0,100,0),
+(@PATH,10,1634.352,731.7579,143.036,0,0,0,0,100,0),
+(@PATH,11,1642.503,738.0968,143.036,0,0,0,0,100,0),
+(@PATH,12,1646.744,748.6193,143.0608,0,0,0,0,100,0);
+-- 0x1C3AE04B801D2180006CCE0003D7B1EE .go 1634.252 750.1481 143.0402
+
+-- Pathing for Entry: 29830 'TDB FORMAT'
+SET @NPC := 127078;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1624.936,`position_y`=762.2312,`position_z`=143.0362 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1624.936,762.2312,143.0362,0,0,0,0,100,0),
+(@PATH,2,1624.857,762.3463,143.0362,0,0,0,0,100,0),
+(@PATH,3,1616.904,760.4952,143.0778,0,0,0,0,100,0),
+(@PATH,4,1616.059,757.1263,143.036,0,0,0,0,100,0),
+(@PATH,5,1615.883,751.8171,143.036,0,0,0,0,100,0),
+(@PATH,6,1612.587,742.8907,143.036,0,0,0,0,100,0),
+(@PATH,7,1615.973,735.1326,143.036,0,0,0,0,100,0),
+(@PATH,8,1616.567,728.8411,143.0389,0,0,0,0,100,0),
+(@PATH,9,1616.565,728.8934,143.0389,0,0,0,0,100,0),
+(@PATH,10,1616.015,735.0688,143.036,0,0,0,0,100,0),
+(@PATH,11,1612.599,741.9441,143.036,0,0,0,0,100,0),
+(@PATH,12,1612.643,745.9359,143.036,0,0,0,0,100,0),
+(@PATH,13,1615.984,759.0609,143.0375,0,0,0,0,100,0),
+(@PATH,14,1620.861,760.4977,143.036,0,0,0,0,100,0),
+(@PATH,15,1624.961,762.2328,143.0362,0,0,0,0,100,0),
+(@PATH,16,1624.857,762.3463,143.0362,0,0,0,0,100,0),
+(@PATH,17,1616.904,760.5043,143.0776,0,0,0,0,100,0);
+-- 0x1C3AE04B801D2180006CCE000357B1EE .go 1624.936 762.2312 143.0362
+
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid` IN (29774, 29820) AND `source_type`=0 AND `id`=0 AND `link`=1;
+-- Pathing for Entry: 29774 'TDB FORMAT'
+SET @NPC := 127023;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1642.346,`position_y`=653.1481,`position_z`=125.2523 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1642.346,653.1481,125.2523,0,0,0,0,100,0),
+(@PATH,2,1639.856,642.3232,125.6559,0,0,0,0,100,0),
+(@PATH,3,1642.258,637.7573,126.032,0,0,0,0,100,0),
+(@PATH,4,1647.147,632.4925,126.6323,0,0,0,0,100,0),
+(@PATH,5,1657.781,625.1252,128.0753,0,0,0,0,100,0),
+(@PATH,6,1664.838,624.4281,127.6226,0,0,0,0,100,0),
+(@PATH,7,1669.714,625.9705,127.4224,0,0,0,0,100,0),
+(@PATH,8,1674.736,633.4069,127.3273,0,0,0,0,100,0),
+(@PATH,9,1673.877,644.5715,126.3829,0,0,0,0,100,0),
+(@PATH,10,1668.756,649.8423,126.1618,0,0,0,0,100,0),
+(@PATH,11,1662.11,654.2892,125.6076,0,0,0,0,100,0),
+(@PATH,12,1655.857,656.4763,125.5904,0,0,0,0,100,0),
+(@PATH,13,1645.618,656.3919,125.2844,0,0,0,0,100,0),
+(@PATH,14,1642.373,653.2665,125.2903,0,0,0,0,100,0);
+-- 0x1C3AE04B801D1380006CCE0000D7B1EE .go 1642.346 653.1481 125.2523
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=127023;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(127023, 127023, 0, 0, 2, 0, 0),
+(127023, 127013, 4, 50, 2, 0, 0),
+(127023, 127024, 4, 310, 2, 0, 0);
+
+-- Pathing for Entry: 29829 'TDB FORMAT'
+SET @NPC := 127069;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1592.818,`position_y`=817.3067,`position_z`=149.783 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1592.818,817.3067,149.783,0,0,0,0,100,0),
+(@PATH,2,1601.493,805.8055,146.3105,0,0,0,0,100,0),
+(@PATH,3,1609.685,802.7231,145.2017,0,0,0,0,100,0),
+(@PATH,4,1623.651,794.6301,143.8499,0,0,0,0,100,0),
+(@PATH,5,1615.21,801.1007,144.687,0,0,0,0,100,0),
+(@PATH,6,1605.104,803.2402,145.5161,0,0,0,0,100,0),
+(@PATH,7,1597.137,810.431,147.7381,0,0,0,0,100,0),
+(@PATH,8,1591.998,822.5156,150.5477,0,0,0,0,100,0),
+(@PATH,9,1586.166,840.6243,153.7294,0,0,0,0,100,0),
+(@PATH,10,1584.692,843.8578,154.2673,0,0,0,0,100,0),
+(@PATH,11,1584.178,844.4227,154.4869,0,0,0,0,100,0),
+(@PATH,12,1590.102,830.2843,152.1621,0,0,0,0,100,0);
+-- 0x1C3AE04B801D2140006CCE0000D7B1EE .go 1592.818 817.3067 149.783
+
+-- Pathing for Entry: 29829 'TDB FORMAT'
+SET @NPC := 127070;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1706.755,`position_y`=857.1785,`position_z`=129.9813 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1706.755,857.1785,129.9813,0,0,0,0,100,0),
+(@PATH,2,1707.281,867.1033,130.2534,0,0,0,0,100,0),
+(@PATH,3,1704.177,879.5166,130.7884,0,0,0,0,100,0),
+(@PATH,4,1691.342,892.488,132.9258,0,0,0,0,100,0),
+(@PATH,5,1679.412,891.944,134.244,0,0,0,0,100,0),
+(@PATH,6,1668.286,882.3208,137.746,0,0,0,0,100,0),
+(@PATH,7,1673.63,888.4031,136.1639,0,0,0,0,100,0),
+(@PATH,8,1687.955,893.6246,133.4256,0,0,0,0,100,0),
+(@PATH,9,1701.138,885.8834,131.8191,0,0,0,0,100,0),
+(@PATH,10,1706.935,871.8005,130.679,0,0,0,0,100,0);
+-- 0x1C3AE04B801D2140006CCE000057B1EE .go 1706.755 857.1785 129.9813
+
+-- Pathing for Entry: 29820 'TDB FORMAT'
+SET @NPC := 127054;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1627.05,`position_y`=895.2917,`position_z`=145.9627 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1627.05,895.2917,145.9627,0,0,0,0,100,0),
+(@PATH,2,1641.819,895.4995,144.4391,0,0,0,0,100,0),
+(@PATH,3,1646.381,886.3206,142.0332,0,0,0,0,100,0),
+(@PATH,4,1648.376,877.1378,140.8607,0,0,0,0,100,0),
+(@PATH,5,1651.261,870.6509,139.9442,0,0,0,0,100,0),
+(@PATH,6,1648.879,874.7926,140.348,0,0,0,0,100,0),
+(@PATH,7,1648.431,879.759,140.6906,0,0,0,0,100,0),
+(@PATH,8,1643.23,894.2725,143.7524,0,0,0,0,100,0),
+(@PATH,9,1633.633,896.613,144.9795,0,0,0,0,100,0),
+(@PATH,10,1628.168,895.5144,145.8911,0,0,0,0,100,0),
+(@PATH,11,1608.678,886.468,148.1761,0,0,0,0,100,0),
+(@PATH,12,1600.244,880.922,149.9891,0,0,0,0,100,0),
+(@PATH,13,1583.596,870.7088,152.9289,0,0,0,0,100,0),
+(@PATH,14,1593.538,876.7352,151.3219,0,0,0,0,100,0),
+(@PATH,15,1606.508,885.0313,148.7535,0,0,0,0,100,0),
+(@PATH,16,1616.299,891.1467,147.5494,0,0,0,0,100,0),
+(@PATH,17,1627.23,895.3035,145.926,0,0,0,0,100,0),
+(@PATH,18,1641.784,895.3555,144.6143,0,0,0,0,100,0);
+-- 0x1C3AE04B801D1F00006CCE000257B1EE .go 1627.05 895.2917 145.9627
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=127054;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(127054, 127054, 0, 0, 2, 0, 0),
+(127054, 127064, 4, 90, 2, 0, 0);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (127057, 127053, 127063, 127052, 127060, 127055, 127066, 127048, 127049, 127061, 127056, 127050);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(127057, 0, 0, 0, 1, 1, ''),
+(127053, 0, 0, 0, 1, 1, ''),
+(127063, 0, 0, 0, 1, 1, ''),
+(127052, 0, 0, 0, 1, 1, ''),
+(127060, 0, 0, 0, 1, 1, ''),
+(127055, 0, 0, 0, 1, 1, ''),
+(127066, 0, 0, 0, 1, 1, ''),
+(127048, 0, 0, 0, 1, 1, ''),
+(127049, 0, 0, 0, 1, 1, ''),
+(127061, 0, 0, 0, 1, 1, ''),
+(127056, 0, 0, 0, 1, 1, ''),
+(127050, 0, 0, 0, 1, 1, '');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_04_world.sql
new file mode 100644
index 00000000000..7ad7c3411af
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_04_world.sql
@@ -0,0 +1,85 @@
+--
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=27963 AND `source_type`=0 AND `id`=0 AND `link`=0;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126709;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126709, 126709, 0, 0, 2, 0, 0),
+(126709, 126692, 4, 50, 2, 0, 0),
+(126709, 126693, 4, 310, 2, 0, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126687;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126687, 126687, 0, 0, 2, 0, 0),
+(126687, 126705, 3, 50, 2, 0, 0),
+(126687, 126700, 3, 310, 2, 0, 0);
+
+UPDATE `creature_addon` SET `path_id`=0 WHERE `guid` IN (126711, 126701, 126703);
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126690;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126690, 126690, 0, 0, 2, 0, 0),
+(126690, 126707, 3, 50, 2, 0, 0),
+(126690, 126701, 3, 310, 2, 0, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126691;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126691, 126691, 0, 0, 2, 0, 0),
+(126691, 126708, 3, 50, 2, 0, 0),
+(126691, 126702, 3, 310, 2, 0, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126695;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126695, 126695, 0, 0, 2, 0, 0),
+(126695, 126713, 3, 50, 2, 0, 0),
+(126695, 126703, 3, 310, 2, 0, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126696;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126696, 126696, 0, 0, 2, 0, 0),
+(126696, 126714, 3, 50, 2, 0, 0),
+(126696, 126704, 3, 310, 2, 0, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126696;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1266960, 1, 1180.73, 659.129, 196.233, 0, 0, 0, 0, 100, 3108493),
+(1266960, 2, 1181.3, 667.947, 196.233, 0, 0, 0, 0, 100, 3108495),
+(1266960, 3, 1180.7, 675.583, 196.235, 0, 0, 0, 0, 100, 3108497),
+(1266960, 4, 1177.06, 683.484, 196.235, 0, 0, 0, 0, 100, 3108499),
+(1266960, 7, 1180.73, 659.129, 196.233, 0, 0, 0, 0, 100, 3108493),
+(1266960, 6, 1181.3, 667.947, 196.233, 0, 0, 0, 0, 100, 3108495),
+(1266960, 5, 1180.7, 675.583, 196.235, 0, 0, 0, 0, 100, 3108497),
+(1266960, 8, 1177.75, 651.607, 196.235, 0, 0, 0, 0, 100, 3108501);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126715;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126715, 126715, 0, 0, 2, 0, 0),
+(126715, 126716, 5, 270, 2, 0, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126694;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126694, 126694, 0, 0, 2, 0, 0),
+(126694, 126711, 3, 50, 2, 0, 0),
+(126694, 126712, 3, 310, 2, 0, 0);
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=28055;
+-- Dark Rune Shaper SAI
+SET @ENTRY := 27965;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=14;
+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,14,0,1,0,100,0,2000,2000,4000,4000,11,50563,0,0,0,0,0,19,28055,50,0,0,0,0,0,"Dark Rune Shaper - On Reset - Cast 'Carve Stone'");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=50563;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 50563, 0, 0, 31, 0, 3, 28055, 0, 0, 0, 0, '', 'Carve Stone - only targets Dummy');
+
+DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=50563;
+INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES
+(0, 50563, 64, '', '', 'Ignore LOS for Carve Stone');
+
+UPDATE `creature` SET `spawndist`=8, `MovementType`=1 WHERE `guid` IN (126738, 126745, 126739, 126744);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_05_world.sql
new file mode 100644
index 00000000000..2486927a2cf
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_05_world.sql
@@ -0,0 +1,52 @@
+-- Scourge Reanimator SAI
+SET @GUID := -127410;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26626;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,1,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,127435,26635,0,0,0,0,0,"Scourge Reanimator - On Just Died - Set Data 1 1"),
+(@GUID,0,1,0,61,0,100,0,0,0,0,0,45,1,2,0,0,0,0,10,127426,26635,0,0,0,0,0,"Scourge Reanimator - On Just Died - Set Data 1 2");
+
+
+-- Risen Drakkari Warrior SAI
+SET @ENTRY := 26635;
+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,0,0,100,6,1000,3000,5000,9500,11,36093,0,0,0,0,0,2,0,0,0,0,0,0,0,"Risen Drakkari Warrior - In Combat - Cast 'Ghost Strike' (Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,6,1000,3000,7250,10000,11,33661,0,0,0,0,0,2,0,0,0,0,0,0,0,"Risen Drakkari Warrior - In Combat - Cast 'Crush Armor' (Dungeon)"),
+(@ENTRY,0,2,0,54,0,100,0,0,0,0,0,89,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Risen Drakkari Warrior - On Just Summoned - Start Random Movement"),
+(@ENTRY,0,3,7,38,0,100,0,1,1,0,0,53,1,@ENTRY*100+00,0,0,0,2,1,0,0,0,0,0,0,0,"Risen Drakkari Warrior - On Data Set 1 1 - Start Waypoint"),
+(@ENTRY,0,4,8,38,0,100,0,1,2,0,0,53,1,@ENTRY*100+01,0,0,0,2,1,0,0,0,0,0,0,0,"Risen Drakkari Warrior - On Data Set 1 2 - Start Waypoint"),
+(@ENTRY,0,5,0,40,0,100,0,9,@ENTRY*100+00,0,0,12,26635,3,600000,0,0,0,8,0,0,0,-358.38,-592.396,4.37907,3.71398,"Risen Drakkari Warrior - On Waypoint 9 Reached - Summon Creature 'Risen Drakkari Warrior'"),
+(@ENTRY,0,6,0,40,0,100,0,9,@ENTRY*100+01,0,0,12,26636,3,600000,0,0,0,8,0,0,0,-362.385162,-609.420288,2.467764,2.788083,"Risen Drakkari Warrior - On Waypoint 9 Reached - Summon Creature 'Risen Drakkari Soulmage'"),
+(@ENTRY,0,7,0,61,0,100,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Risen Drakkari Warrior - On Data Set 1 1 - Say Line 0"),
+(@ENTRY,0,8,0,61,0,100,0,1,2,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Risen Drakkari Warrior - On Data Set 1 2 - Say Line 1");
+
+DELETE FROM `waypoints` WHERE `entry`=2663500;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(2663500, 1, -358.149, -591.396, 4.8929, 'Risen Drakkari Warrior'),
+(2663500, 2, -355.111, -588.661, 7.43521, 'Risen Drakkari Warrior'),
+(2663500, 3, -351.322, -585.026, 10.995, 'Risen Drakkari Warrior'),
+(2663500, 4, -345.376, -579.253, 11.012, 'Risen Drakkari Warrior'),
+(2663500, 5, -343.792, -579.642, 11.012, 'Risen Drakkari Warrior'),
+(2663500, 6, -346.169, -582.965, 11.012, 'Risen Drakkari Warrior'),
+(2663500, 7, -350.619, -586.543, 10.6995, 'Risen Drakkari Warrior'),
+(2663500, 8, -356.449, -591.583, 5.55874, 'Risen Drakkari Warrior'),
+(2663500, 9, -363.399, -595.822, 2.26113, 'Risen Drakkari Warrior');
+
+DELETE FROM `waypoints` WHERE `entry`=2663501;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(2663501, 1, -361.498, -611.317, 2.82481, 'Risen Drakkari Warrior'),
+(2663501, 2, -358.749, -613.483, 4.91993, 'Risen Drakkari Warrior'),
+(2663501, 3, -351.531, -619.59, 11.0096, 'Risen Drakkari Warrior'),
+(2663501, 4, -349.112, -623.42, 11.0119, 'Risen Drakkari Warrior'),
+(2663501, 5, -347.686, -624.43, 11.0119, 'Risen Drakkari Warrior'),
+(2663501, 6, -346.433, -620.963, 11.0119, 'Risen Drakkari Warrior'),
+(2663501, 7, -350.655, -617.858, 10.8491, 'Risen Drakkari Warrior'),
+(2663501, 8, -356.367, -613.813, 6.09785, 'Risen Drakkari Warrior'),
+(2663501, 9, -366.529, -607.86, 2.26056, 'Risen Drakkari Warrior');
+
+DELETE FROM `creature_text` WHERE `entry`=26635;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(26635, 0, 0, 'Help mon! There''s too many of dem!', 14, 0, 100, 0, 0, 0, 26538, 0, 'Risen Drakkari Warrior'),
+(26635, 1, 0, 'Backup! We need backup!', 14, 0, 100, 0, 0, 0, 26537, 0, 'Risen Drakkari Warrior');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_06_world.sql
new file mode 100644
index 00000000000..f4dd026d790
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_06_world.sql
@@ -0,0 +1,340 @@
+--
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid` IN (26626, 26637) AND `source_type`=0 AND `id`=0 AND `link`=1;
+UPDATE `creature` SET `spawndist`=5, `MovementType`=1 WHERE `id` IN (26636 ,26625);
+UPDATE `creature` SET `spawndist`=5, `MovementType`=1 WHERE `guid`=127430; /*31261 */
+
+UPDATE `creature_addon` SET `auras`='31261 49852' WHERE `guid` IN (127571, 127569, 127568, 127583, 127567, 127570, 127584);
+
+DELETE FROM `creature_template_addon` WHERE `entry`=26621;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(26621, 0, 0, 0, 1, 418, '');
+
+
+-- Pathing for Entry: 26624 'TDB FORMAT'
+SET @NPC := 127403;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-321.1793,`position_y`=-660.2445,`position_z`=10.63094 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-321.1793,-660.2445,10.63094,0,0,0,0,100,0),
+(@PATH,2,-314.265,-658.299,10.85989,0,0,0,0,100,0),
+(@PATH,3,-308.3121,-663.0262,10.8531,0,0,0,0,100,0),
+(@PATH,4,-312.3275,-667.5159,10.43025,0,0,0,0,100,0),
+(@PATH,5,-323.8721,-672.2502,11.15234,0,0,0,0,100,0),
+(@PATH,6,-325.2265,-672.576,11.07057,0,0,0,0,100,0),
+(@PATH,7,-324.1945,-665.3568,10.65234,0,0,0,0,100,0),
+(@PATH,8,-321.2054,-660.1317,10.51689,0,0,0,0,100,0),
+(@PATH,9,-314.2662,-658.2737,10.85989,0,0,0,0,100,0),
+(@PATH,10,-308.2971,-663.0308,10.85604,0,0,0,0,100,0),
+(@PATH,11,-312.3167,-667.5278,10.43211,0,0,0,0,100,0),
+(@PATH,12,-323.8912,-672.2682,11.15234,0,0,0,0,100,0),
+(@PATH,13,-325.2353,-672.5774,11.0714,0,0,0,0,100,0),
+(@PATH,14,-324.1946,-665.3556,10.65234,0,0,0,0,100,0),
+(@PATH,15,-321.2102,-660.1342,10.51981,0,0,0,0,100,0),
+(@PATH,16,-314.2662,-658.2732,10.85989,0,0,0,0,100,0),
+(@PATH,17,-308.2755,-663.0374,10.86023,0,0,0,0,100,0),
+(@PATH,18,-312.2948,-667.5519,10.43588,0,0,0,0,100,0),
+(@PATH,19,-323.9076,-672.2837,11.15234,0,0,0,0,100,0),
+(@PATH,20,-325.265,-672.582,11.07419,0,0,0,0,100,0);
+-- 0x1C16DC4B001A0000005B0C0000578386 .go -321.1793 -660.2445 10.63094
+
+-- Pathing for Entry: 26624 'TDB FORMAT'
+SET @NPC := 127404;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-318.1556,`position_y`=-640.515,`position_z`=11.95144 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-318.1556,-640.515,11.95144,0,0,0,0,100,0),
+(@PATH,2,-311.1296,-643.6861,11.3687,0,0,0,0,100,0),
+(@PATH,3,-306.9548,-646.1841,10.92374,0,0,0,0,100,0),
+(@PATH,4,-300.4054,-650.3721,11.09798,0,0,0,0,100,0),
+(@PATH,5,-298.4008,-658.082,10.63272,0,0,0,0,100,0),
+(@PATH,6,-298.8151,-659.7013,10.62173,0,0,0,0,100,0),
+(@PATH,7,-310.1207,-661.3427,10.63743,0,0,0,0,100,0),
+(@PATH,8,-314.2844,-659.1246,10.57358,0,0,0,0,100,0),
+(@PATH,9,-316.9409,-657.6439,10.68161,0,0,0,0,100,0),
+(@PATH,10,-325.1304,-655.4464,10.74956,0,0,0,0,100,0),
+(@PATH,11,-329.8129,-650.3148,12.10803,0,0,0,0,100,0),
+(@PATH,12,-329.9256,-647.5079,12.01005,0,0,0,0,100,0),
+(@PATH,13,-328.6924,-642.873,12.058,0,0,0,0,100,0);
+-- 0x1C16DC4B001A0000005B0C0000D78386 .go -318.1556 -640.515 11.95144
+
+-- Pathing for Entry: 26637 'TDB FORMAT'
+SET @NPC := 127444;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-466.2595,`position_y`=-652.3038,`position_z`=28.78722 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,6469,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-466.2595,-652.3038,28.78722,0,0,0,0,100,0),
+(@PATH,2,-478.2595,-652.0538,28.78722,0,0,0,0,100,0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=127444;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(127444, 127444, 0, 0, 2, 0, 0),
+(127444, 127456, 4, 90, 2, 0, 0),
+(127444, 127457, 4, 270, 2, 0, 0);
+
+-- Pathing for Entry: 26637 'TDB FORMAT'
+SET @NPC := 127442;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-499.8308,`position_y`=-705.9434,`position_z`=30.6214 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,6469,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-499.8308,-705.9434,30.6214,0,0,0,0,100,0),
+(@PATH,2,-502.4009,-683.0112,30.58796,0,0,0,0,100,0),
+(@PATH,3,-502.3382,-683.26,30.3714,0,0,0,0,100,0),
+(@PATH,4,-502.022,-683.1946,30.61549,0,0,0,0,100,0),
+(@PATH,5,-499.6927,-706.1716,30.6214,0,0,0,0,100,0),
+(@PATH,6,-496.0414,-714.49,30.6214,0,0,0,0,100,0),
+(@PATH,7,-496.3022,-714.5132,30.3714,0,0,0,0,100,0),
+(@PATH,8,-496.2182,-714.349,30.6214,0,0,0,0,100,0),
+(@PATH,9,-499.8963,-705.8741,30.6214,0,0,0,0,100,0);
+-- 0x1C16DC4B001A0340005B0C0000578386 .go -499.8308 -705.9434 30.6214
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=127442;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(127442, 127442, 0, 0, 2, 0, 0),
+(127442, 127443, 4, 90, 2, 0, 0);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (127617, 127589, 127438, 127590, 127428, 127427, 127580, 127579, 127432, 127578, 127433);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(127427, 0, 0, 0, 1, 36, ''),
+(127428, 0, 0, 0, 1, 36, ''),
+(127432, 0, 0, 0, 1, 36, ''),
+(127433, 0, 0, 0, 1, 36, ''),
+(127578, 0, 0, 0, 1, 36, ''),
+(127579, 0, 0, 0, 1, 36, ''),
+(127580, 0, 0, 0, 1, 36, ''),
+(127589, 0, 0, 0, 1, 36, ''),
+(127590, 0, 0, 0, 1, 36, ''),
+(127617, 0, 0, 0, 1, 36, '');
+
+-- Pathing for Entry: 26637 'TDB FORMAT'
+SET @NPC := 127446;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-458.184,`position_y`=-595.712,`position_z`=93.7567 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,26751,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, -431.004, -599.244, 96.6243, 0, 0, 1, 0, 100, 0),
+(@PATH, 2, -397.542, -607.933, 89.8221, 0, 0, 1, 0, 100, 0),
+(@PATH, 3, -380.795, -608.944, 84.5094, 0, 0, 1, 0, 100, 0),
+(@PATH, 4, -366.926, -609.622, 86.2929, 0, 0, 1, 0, 100, 0),
+(@PATH, 5, -335.819, -610.248, 92.769, 0, 0, 1, 0, 100, 0),
+(@PATH, 6, -324.31, -610.248, 94.3711, 0, 0, 1, 0, 100, 0),
+(@PATH, 7, -313.428, -610.467, 95.2595, 0, 0, 1, 0, 100, 0),
+(@PATH, 8, -331.964, -610.102, 92.3899, 0, 0, 1, 0, 100, 0),
+(@PATH, 9, -343.592, -609.99, 90.6398, 0, 0, 1, 0, 100, 0),
+(@PATH, 10, -367.122, -609.527, 87.0978, 0, 0, 1, 0, 100, 0),
+(@PATH, 11, -381.21, -609.16, 84.9903, 0, 0, 1, 0, 100, 0),
+(@PATH, 12, -399.507, -608.891, 89.1199, 0, 0, 1, 0, 100, 0),
+(@PATH, 13, -428.922, -609.198, 91.8185, 0, 0, 1, 0, 100, 0);
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (26638, 31351);
+
+-- Pathing for Entry: 29237 'TDB FORMAT'
+SET @NPC := 203549;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=6709.566,`position_y`=-4355.494,`position_z`=440.7194 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,6709.566,-4355.494,440.7194,0,0,0,0,100,0),
+(@PATH,2,6711.722,-4357.65,440.7194,0,0,0,0,100,0),
+(@PATH,3,6713.885,-4359.814,440.7194,0,0,0,0,100,0),
+(@PATH,4,6716.069,-4361.999,440.7194,0,0,0,0,100,0),
+(@PATH,5,6718.223,-4364.154,440.7194,0,0,0,0,100,0),
+(@PATH,6,6720.4,-4366.332,440.7194,0,0,0,0,100,0),
+(@PATH,7,6722.556,-4368.488,440.7025,0,0,0,0,100,0),
+(@PATH,8,6724.659,-4370.592,440.7025,0,0,0,0,100,0),
+(@PATH,9,6726.705,-4372.757,440.7025,0,0,0,0,100,0),
+(@PATH,10,6728.782,-4374.959,440.7025,0,0,0,0,100,0),
+(@PATH,11,6730.868,-4377.171,440.7025,0,0,0,0,100,0),
+(@PATH,12,6732.948,-4379.376,440.7025,0,0,0,0,100,0),
+(@PATH,13,6735.021,-4381.573,440.6158,0,0,0,0,100,0),
+(@PATH,14,6737.099,-4383.777,440.6158,0,0,0,0,100,0),
+(@PATH,15,6738.558,-4385.286,440.6158,0,0,0,0,100,0),
+(@PATH,16,6740.794,-4387.498,440.6158,0,0,0,0,100,0),
+(@PATH,17,6743.027,-4389.707,440.6158,0,0,0,0,100,0),
+(@PATH,18,6745.267,-4391.922,440.6158,0,0,0,0,100,0),
+(@PATH,19,6747.505,-4394.136,440.6158,0,0,0,0,100,0),
+(@PATH,20,6749.747,-4396.354,440.6158,0,0,0,0,100,0),
+(@PATH,21,6752.003,-4398.586,440.6158,0,0,0,0,100,0),
+(@PATH,22,6754.265,-4400.824,440.6158,0,0,0,0,100,0),
+(@PATH,23,6756.507,-4403.042,440.6158,0,0,0,0,100,0),
+(@PATH,24,6758.502,-4405.03,440.6158,0,0,0,0,100,0),
+(@PATH,25,6760.651,-4407.223,440.6158,0,0,0,0,100,0),
+(@PATH,26,6762.793,-4409.409,440.6158,0,0,0,0,100,0),
+(@PATH,27,6764.924,-4411.583,440.6158,0,0,0,0,100,0),
+(@PATH,28,6767.083,-4413.788,440.7194,0,0,0,0,100,0),
+(@PATH,29,6769.217,-4415.966,440.7194,0,0,0,0,100,0),
+(@PATH,30,6771.352,-4418.145,440.7194,0,0,0,0,100,0),
+(@PATH,31,6773.472,-4420.309,440.7194,0,0,0,0,100,0),
+(@PATH,32,6775.598,-4422.479,440.7194,0,0,0,0,100,0),
+(@PATH,33,6776.916,-4423.868,440.7194,0,0,0,0,100,0),
+(@PATH,34,6779.079,-4426.187,440.7194,0,0,0,0,100,0),
+(@PATH,35,6781.248,-4428.51,440.7194,0,0,0,0,100,0),
+(@PATH,36,6783.421,-4430.838,440.7194,0,0,0,0,100,0),
+(@PATH,37,6785.586,-4433.158,440.7194,0,0,0,0,100,0),
+(@PATH,38,6787.766,-4435.493,440.7009,0,0,0,0,100,0),
+(@PATH,39,6789.926,-4437.807,440.7009,0,0,0,0,100,0),
+(@PATH,40,6791.934,-4439.958,440.7009,0,0,0,0,100,0),
+(@PATH,41,6794.533,-4442.054,440.7009,0,0,0,0,100,0),
+(@PATH,42,6796.933,-4443.941,440.7009,0,0,0,0,100,0),
+(@PATH,43,6799.326,-4445.824,440.7009,0,0,0,0,100,0),
+(@PATH,44,6801.72,-4447.708,440.7194,0,0,0,0,100,0),
+(@PATH,45,6804.107,-4449.586,440.7194,0,0,0,0,100,0),
+(@PATH,46,6805.872,-4450.974,440.7194,0,0,0,0,100,0),
+(@PATH,47,6805.872,-4450.974,440.7194,0,0,0,0,100,0),
+(@PATH,48,6802.628,-4448.422,440.7194,0,0,0,0,100,0),
+(@PATH,49,6801.03,-4447.165,440.7194,0,0,0,0,100,0),
+(@PATH,50,6798.649,-4445.292,440.7009,0,0,0,0,100,0),
+(@PATH,51,6796.252,-4443.406,440.7009,0,0,0,0,100,0),
+(@PATH,52,6793.855,-4441.521,440.7009,0,0,0,0,100,0),
+(@PATH,53,6791.484,-4439.477,440.7009,0,0,0,0,100,0),
+(@PATH,54,6789.404,-4437.248,440.7009,0,0,0,0,100,0),
+(@PATH,55,6787.313,-4435.008,440.7009,0,0,0,0,100,0),
+(@PATH,56,6785.237,-4432.784,440.7194,0,0,0,0,100,0),
+(@PATH,57,6783.164,-4430.563,440.7194,0,0,0,0,100,0),
+(@PATH,58,6781.085,-4428.335,440.7194,0,0,0,0,100,0),
+(@PATH,59,6778.998,-4426.099,440.7194,0,0,0,0,100,0),
+(@PATH,60,6776.91,-4423.862,440.7194,0,0,0,0,100,0),
+(@PATH,61,6775.327,-4422.202,440.7194,0,0,0,0,100,0),
+(@PATH,62,6773.147,-4419.977,440.7194,0,0,0,0,100,0),
+(@PATH,63,6770.978,-4417.763,440.7194,0,0,0,0,100,0),
+(@PATH,64,6768.798,-4415.538,440.7194,0,0,0,0,100,0),
+(@PATH,65,6766.607,-4413.302,440.6158,0,0,0,0,100,0),
+(@PATH,66,6764.424,-4411.074,440.6158,0,0,0,0,100,0),
+(@PATH,67,6762.253,-4408.858,440.6158,0,0,0,0,100,0),
+(@PATH,68,6760.07,-4406.629,440.6158,0,0,0,0,100,0),
+(@PATH,69,6757.998,-4404.517,440.6158,0,0,0,0,100,0),
+(@PATH,70,6755.836,-4402.378,440.6158,0,0,0,0,100,0),
+(@PATH,71,6753.682,-4400.247,440.6158,0,0,0,0,100,0),
+(@PATH,72,6751.511,-4398.099,440.6158,0,0,0,0,100,0),
+(@PATH,73,6749.368,-4395.979,440.6158,0,0,0,0,100,0),
+(@PATH,74,6747.188,-4393.823,440.6158,0,0,0,0,100,0),
+(@PATH,75,6745.053,-4391.711,440.6158,0,0,0,0,100,0),
+(@PATH,76,6742.909,-4389.59,440.6158,0,0,0,0,100,0),
+(@PATH,77,6740.754,-4387.458,440.6158,0,0,0,0,100,0),
+(@PATH,78,6738.592,-4385.319,440.6158,0,0,0,0,100,0),
+(@PATH,79,6736.751,-4383.408,440.6158,0,0,0,0,100,0),
+(@PATH,80,6734.615,-4381.143,440.6158,0,0,0,0,100,0),
+(@PATH,81,6732.473,-4378.873,440.7025,0,0,0,0,100,0),
+(@PATH,82,6730.346,-4376.617,440.7025,0,0,0,0,100,0),
+(@PATH,83,6728.218,-4374.362,440.7025,0,0,0,0,100,0),
+(@PATH,84,6729.046,-4370.898,440.9525,0,0,0,0,100,0),
+(@PATH,85,6724.064,-4369.998,440.7025,0,0,0,0,100,0),
+(@PATH,86,6721.935,-4367.867,440.7025,0,0,0,0,100,0),
+(@PATH,87,6719.804,-4365.736,440.7194,0,0,0,0,100,0),
+(@PATH,88,6717.628,-4363.559,440.7194,0,0,0,0,100,0),
+(@PATH,89,6715.489,-4361.419,440.7194,0,0,0,0,100,0),
+(@PATH,90,6713.351,-4359.279,440.7194,0,0,0,0,100,0),
+(@PATH,91,6711.217,-4357.145,440.7194,0,0,0,0,100,0),
+(@PATH,92,6709.114,-4355.041,440.7194,0,0,0,0,100,0),
+(@PATH,93,6706.909,-4353.476,440.7194,0,0,0,0,100,0),
+(@PATH,94,6704.445,-4351.718,440.7194,0,0,0,0,100,0),
+(@PATH,95,6701.982,-4349.961,440.7194,0,0,0,0,100,0),
+(@PATH,96,6699.487,-4348.182,440.7194,0,0,0,0,100,0),
+(@PATH,97,6697.032,-4346.43,440.7194,0,0,0,0,100,0),
+(@PATH,98,6696.491,-4345.139,440.7194,0,0,0,0,100,0),
+(@PATH,99,6693.5,-4346.004,440.7194,0,0,0,0,100,0),
+(@PATH,100,6690.534,-4346.862,440.7194,0,0,0,0,100,0),
+(@PATH,101,6687.572,-4347.719,440.7582,0,0,0,0,100,0),
+(@PATH,102,6684.732,-4348.541,440.7194,0,0,0,0,100,0),
+(@PATH,103,6683.093,-4349.978,440.7194,0,0,0,0,100,0),
+(@PATH,104,6680.785,-4351.966,440.7194,0,0,0,0,100,0),
+(@PATH,105,6678.49,-4353.942,440.7194,0,0,0,0,100,0),
+(@PATH,106,6676.195,-4355.919,440.7194,0,0,0,0,100,0),
+(@PATH,107,6673.887,-4357.907,440.7194,0,0,0,0,100,0),
+(@PATH,108,6672.325,-4359.7,440.7194,0,0,0,0,100,0),
+(@PATH,109,6670.341,-4362.154,440.7194,0,0,0,0,100,0),
+(@PATH,110,6668.408,-4364.545,440.7194,0,0,0,0,100,0),
+(@PATH,111,6666.455,-4366.962,440.8546,0,0,0,0,100,0),
+(@PATH,112,6664.507,-4369.371,440.9098,0,0,0,0,100,0),
+(@PATH,113,6663.903,-4370.801,441.0089,0,0,0,0,100,0),
+(@PATH,114,6663.605,-4373.883,440.7194,0,0,0,0,100,0),
+(@PATH,115,6663.312,-4376.927,440.7194,0,0,0,0,100,0),
+(@PATH,116,6663.017,-4379.976,440.7194,0,0,0,0,100,0),
+(@PATH,117,6663.048,-4380.506,440.7194,0,0,0,0,100,0),
+(@PATH,118,6665.024,-4382.971,440.7194,0,0,0,0,100,0),
+(@PATH,119,6667.013,-4385.452,440.7194,0,0,0,0,100,0),
+(@PATH,120,6669.01,-4387.943,440.7194,0,0,0,0,100,0),
+(@PATH,121,6670.983,-4390.403,440.7194,0,0,0,0,100,0),
+(@PATH,122,6672.976,-4392.888,440.7194,0,0,0,0,100,0),
+(@PATH,123,6674.643,-4394.981,440.7194,0,0,0,0,100,0),
+(@PATH,124,6676.801,-4397.127,440.7194,0,0,0,0,100,0),
+(@PATH,125,6678.959,-4399.274,440.7194,0,0,0,0,100,0),
+(@PATH,126,6681.114,-4401.417,440.7194,0,0,0,0,100,0),
+(@PATH,127,6683.27,-4403.563,440.7194,0,0,0,0,100,0),
+(@PATH,128,6685.439,-4405.72,440.7194,0,0,0,0,100,0),
+(@PATH,129,6687.588,-4407.858,440.7194,0,0,0,0,100,0),
+(@PATH,130,6689.752,-4410.01,440.7194,0,0,0,0,100,0),
+(@PATH,131,6691.524,-4411.785,440.7194,0,0,0,0,100,0),
+(@PATH,132,6693.658,-4414.005,440.7194,0,0,0,0,100,0),
+(@PATH,133,6695.81,-4416.244,440.7194,0,0,0,0,100,0),
+(@PATH,134,6697.947,-4418.468,440.7194,0,0,0,0,100,0),
+(@PATH,135,6700.072,-4420.679,440.6158,0,0,0,0,100,0),
+(@PATH,136,6702.215,-4422.909,440.6158,0,0,0,0,100,0),
+(@PATH,137,6704.354,-4425.135,440.6158,0,0,0,0,100,0),
+(@PATH,138,6706.516,-4427.385,440.6158,0,0,0,0,100,0),
+(@PATH,139,6708.664,-4429.62,440.6158,0,0,0,0,100,0),
+(@PATH,140,6710.82,-4431.864,440.6158,0,0,0,0,100,0),
+(@PATH,141,6713.229,-4433.922,440.7194,0,0,0,0,100,0),
+(@PATH,142,6715.676,-4436.133,440.7194,0,0,0,0,100,0),
+(@PATH,143,6718.125,-4438.346,440.7194,0,0,0,0,100,0),
+(@PATH,144,6720.556,-4440.542,440.7194,0,0,0,0,100,0),
+(@PATH,145,6722.997,-4442.747,440.7194,0,0,0,0,100,0),
+(@PATH,146,6725.418,-4444.934,440.7194,0,0,0,0,100,0),
+(@PATH,147,6727.87,-4447.148,440.7194,0,0,0,0,100,0),
+(@PATH,148,6730.146,-4449.292,440.7194,0,0,0,0,100,0),
+(@PATH,149,6730.788,-4452.639,440.7194,0,0,0,0,100,0),
+(@PATH,150,6731.166,-4454.971,440.7194,0,0,0,0,100,0),
+(@PATH,151,6731.166,-4457.63,440.7194,0,0,0,0,100,0),
+(@PATH,152,6732.197,-4457.931,440.7194,0,0,0,0,100,0),
+(@PATH,153,6734.809,-4459.646,440.7194,0,0,0,0,100,0),
+(@PATH,154,6737.403,-4461.349,440.7194,0,0,0,0,100,0),
+(@PATH,155,6740.015,-4463.064,440.7194,0,0,0,0,100,0),
+(@PATH,156,6742.618,-4464.773,440.7194,0,0,0,0,100,0),
+(@PATH,157,6745.232,-4466.489,440.7194,0,0,0,0,100,0),
+(@PATH,158,6747.178,-4467.969,440.7194,0,0,0,0,100,0),
+(@PATH,159,6749.505,-4470.075,440.7194,0,0,0,0,100,0),
+(@PATH,160,6751.848,-4472.194,440.7194,0,0,0,0,100,0),
+(@PATH,161,6754.179,-4474.303,440.7194,0,0,0,0,100,0),
+(@PATH,162,6756.502,-4476.405,440.7194,0,0,0,0,100,0),
+(@PATH,163,6758.849,-4478.528,440.7194,0,0,0,0,100,0),
+(@PATH,164,6761.196,-4480.651,440.7194,0,0,0,0,100,0),
+(@PATH,165,6763.529,-4482.762,440.7194,0,0,0,0,100,0),
+(@PATH,166,6765.672,-4484.701,440.7194,0,0,0,0,100,0),
+(@PATH,167,6765.672,-4484.701,440.7194,0,0,0,0,100,0),
+(@PATH,168,6762.613,-4481.934,440.7194,0,0,0,0,100,0),
+(@PATH,169,6761.11,-4480.573,440.7194,0,0,0,0,100,0),
+(@PATH,170,6758.854,-4478.532,440.7194,0,0,0,0,100,0),
+(@PATH,171,6756.6,-4476.493,440.7194,0,0,0,0,100,0),
+(@PATH,172,6754.358,-4474.465,440.7194,0,0,0,0,100,0),
+(@PATH,173,6752.123,-4472.442,440.7194,0,0,0,0,100,0),
+(@PATH,174,6749.883,-4470.417,440.7194,0,0,0,0,100,0),
+(@PATH,175,6747.618,-4468.367,440.7194,0,0,0,0,100,0),
+(@PATH,176,6747.454,-4468.149,440.7194,0,0,0,0,100,0),
+(@PATH,177,6745.778,-4463.783,440.7194,0,0,0,0,100,0),
+(@PATH,178,6743.626,-4461.631,440.7194,0,0,0,0,100,0),
+(@PATH,179,6741.465,-4459.471,440.7194,0,0,0,0,100,0),
+(@PATH,180,6739.305,-4457.311,440.7194,0,0,0,0,100,0),
+(@PATH,181,6737.125,-4455.129,440.7194,0,0,0,0,100,0),
+(@PATH,182,6734.964,-4452.969,440.7194,0,0,0,0,100,0),
+(@PATH,183,6731.37,-4451.403,440.7194,0,0,0,0,100,0);
+-- 0x1C091047601C8D4000000B0000572225 .go 6709.566 -4355.494 440.7194
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=203549;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(203549, 203549, 0, 0, 2, 0, 0),
+(203549, 203562, 3, 270, 2, 0, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_07_world.sql
new file mode 100644
index 00000000000..89c125a9c2e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_07_world.sql
@@ -0,0 +1,461 @@
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126942;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269420, 1, 1336.35, 97.1842, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 2, 1337.76, 97.2226, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 3, 1339.43, 101.827, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 4, 1337.51, 102.338, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 5, 1337.45, 101.881, 40.1805, 0, 4000, 0, 0, 100, 0),
+(1269420, 6, 1327.41, 101.553, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 7, 1327.35, 100.975, 40.1805, 0, 4000, 0, 0, 100, 0),
+(1269420, 8, 1325.64, 100.623, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 9, 1325.01, 96.4632, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 10, 1327.11, 96.4808, 40.1805, 0, 0, 0, 0, 100, 0),
+(1269420, 11, 1327.07, 96.8291, 40.1805, 0, 4000, 0, 0, 100, 0);
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (28582, 30974);
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(28582, 0, 0, 0, 0, 69, ''),
+(30974, 0, 0, 0, 0, 69, '');
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126926;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269260, 1, 1377.28, 64.533, 48.8931, 0, 0, 0, 0, 100, 0),
+(1269260, 2, 1377.69, 64.9436, 48.8931, 0, 6000, 0, 0, 100, 0),
+(1269260, 3, 1359.25, 81.9585, 41.0455, 0, 0, 0, 0, 100, 0),
+(1269260, 4, 1359.68, 82.5069, 41.0204, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126915;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269150, 1, 1393.45, 47.8648, 50.0383, 0, 6000, 0, 0, 100, 0),
+(1269150, 2, 1401.61, 46.3271, 50.0383, 0, 0, 0, 0, 100, 0),
+(1269150, 3, 1401.81, 45.7834, 50.0383, 0, 6000, 0, 0, 100, 0),
+(1269150, 4, 1394.37, 48.5111, 50.0383, 0, 0, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126925;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269250, 1, 1414.64, 32.7402, 50.2271, 0, 0, 0, 0, 100, 0),
+(1269250, 2, 1419.4, 32.7552, 53.1143, 0, 0, 0, 0, 100, 0),
+(1269250, 3, 1429.45, 32.845, 58.7644, 0, 0, 0, 0, 100, 0),
+(1269250, 4, 1433.53, 32.8176, 58.7671, 0, 0, 0, 0, 100, 0),
+(1269250, 5, 1434.02, 32.0269, 58.7671, 0, 6000, 0, 0, 100, 0),
+(1269250, 6, 1430.18, 32.2594, 58.7671, 0, 0, 0, 0, 100, 0),
+(1269250, 7, 1422.24, 32.287, 54.8356, 0, 0, 0, 0, 100, 0),
+(1269250, 8, 1414.43, 32.6758, 50.0945, 0, 0, 0, 0, 100, 0),
+(1269250, 9, 1407.78, 32.7916, 50.0383, 0, 0, 0, 0, 100, 0),
+(1269250, 10, 1406.76, 32.718, 50.0383, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126924;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269240, 1, 1358.66, -8.12641, 41.1612, 0, 0, 0, 0, 100, 0),
+(1269240, 2, 1359.22, -8.72624, 41.1518, 0, 6000, 0, 0, 100, 0),
+(1269240, 3, 1376.27, 9.68446, 48.9541, 0, 0, 0, 0, 100, 0),
+(1269240, 4, 1376.68, 9.25245, 48.95, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126933;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269330, 1, 1353.19, 3.42894, 42.4993, 0, 0, 0, 0, 100, 0),
+(1269330, 2, 1352.77, 3.83879, 42.4978, 0, 6000, 0, 0, 100, 0),
+(1269330, 3, 1368.11, 18.3238, 49.0597, 0, 0, 0, 0, 100, 0),
+(1269330, 4, 1367.63, 18.8363, 49.0662, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126939;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269390, 1, 1324.11, -36.4178, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 2, 1320.59, -33.3142, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 3, 1322.34, -31.4373, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 4, 1323.13, -32.1258, 40.1806, 0, 6000, 0, 0, 100, 0),
+(1269390, 5, 1321.68, -35.1774, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 6, 1324.78, -37.6497, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 7, 1340.48, -36.3091, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 8, 1341.82, -34.5498, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 9, 1342.51, -31.7143, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 10, 1343.71, -26.8389, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 11, 1343.06, -26.1627, 40.1806, 0, 6000, 0, 0, 100, 0),
+(1269390, 12, 1341.99, -31.7877, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 13, 1341.6, -32.2199, 40.1806, 0, 6000, 0, 0, 100, 0),
+(1269390, 14, 1341.2, -36.4011, 40.1806, 0, 0, 0, 0, 100, 0),
+(1269390, 15, 1325.72, -38.8983, 40.1806, 0, 0, 0, 0, 100, 0);
+
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126941;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269410, 1, 1267.08, -35.0841, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269410, 2, 1253.98, -31.204, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269410, 3, 1252.76, -28.9487, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269410, 4, 1255.2, -33.8478, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269410, 5, 1256.82, -34.5311, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269410, 6, 1256.49, -38.1348, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269410, 7, 1259.85, -39.4856, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269410, 8, 1264.16, -36.9788, 33.5057, 0, 0, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126917;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269170, 1, 1268.62, 32.3739, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269170, 2, 1270.03, 32.3423, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269170, 3, 1269.46, 0.489199, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269170, 4, 1269.81, 0.525176, 33.5057, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126940;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269400, 1, 1269.07, 39.2463, 33.5055, 0, 0, 0, 0, 100, 0),
+(1269400, 2, 1269.94, 39.279, 33.5055, 0, 6000, 0, 0, 100, 0),
+(1269400, 3, 1269, 68.7823, 33.5055, 0, 0, 0, 0, 100, 0),
+(1269400, 4, 1269.8, 68.7924, 33.5055, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126919;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269190, 1, 1254.43, 38.9632, 33.5056, 0, 0, 0, 0, 100, 0),
+(1269190, 2, 1254.33, 32.6571, 35.0186, 0, 0, 0, 0, 100, 0),
+(1269190, 3, 1254.73, 9.53858, 33.5056, 0, 0, 0, 0, 100, 0),
+(1269190, 4, 1254.26, 9.55597, 33.5056, 0, 6000, 0, 0, 100, 0),
+(1269190, 5, 1254.61, 28.5055, 33.8212, 0, 0, 0, 0, 100, 0),
+(1269190, 6, 1254.59, 33.0582, 35.0141, 0, 0, 0, 0, 100, 0),
+(1269190, 7, 1254.56, 55.7588, 33.5058, 0, 0, 0, 0, 100, 0),
+(1269190, 8, 1254.14, 55.7403, 33.5058, 0, 6000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28582 'TDB FORMAT'
+SET @NPC := 126918;
+SET @PATH := 1269180;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1269180, 1, 1252.42, 106.457, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 2, 1249.45, 101.782, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 3, 1250.39, 100.591, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 4, 1251.37, 101.803, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269180, 5, 1250.43, 104.446, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 6, 1259.91, 113.097, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 7, 1265.25, 112.968, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 8, 1273.82, 106.516, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 9, 1274.95, 101.531, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 10, 1272.59, 100.018, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 11, 1272.4, 100.808, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269180, 12, 1275.02, 103.29, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 13, 1273.92, 106.241, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 14, 1267.23, 108.337, 33.5057, 0, 0, 0, 0, 100, 0),
+(1269180, 15, 1264.99, 108.96, 33.5057, 0, 6000, 0, 0, 100, 0),
+(1269180, 16, 1263.4, 112.342, 33.5057, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `spawndist`=8, `MovementType`=1 WHERE `id`=28585;
+UPDATE `creature` SET `spawndist`=5, `MovementType`=1 WHERE `id` IN (28825, 28547, 28584, 28583);
+
+-- Pathing for Entry: 28583 'TDB FORMAT'
+SET @NPC := 126954;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1311.234,`position_y`=-158.9818,`position_z`=52.27496 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1311.234,-158.9818,52.27496,0,0,0,0,100,0),
+(@PATH,2,1312.317,-174.7872,52.27221,0,0,0,0,100,0),
+(@PATH,3,1328.705,-186.7419,52.27302,0,0,0,0,100,0),
+(@PATH,4,1341.044,-184.8856,52.27322,0,0,0,0,100,0),
+(@PATH,5,1354.387,-173.1809,52.27328,0,0,0,0,100,0),
+(@PATH,6,1354.742,-169.7169,52.27325,0,0,0,0,100,0),
+(@PATH,7,1348.927,-148.5091,52.27411,0,0,0,0,100,0),
+(@PATH,8,1335.543,-142.5214,52.27379,0,0,0,0,100,0),
+(@PATH,9,1318.144,-146.4185,52.31124,0,0,0,0,100,0),
+(@PATH,10,1311.167,-158.8409,52.27437,0,0,0,0,100,0);
+-- 0x1C307C4B401BE9C000021700025672BB .go 1311.234 -158.9818 52.27496
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126954;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126954, 126954, 0, 0, 2, 0, 0),
+(126954, 126955, 3, 0, 2, 0, 0);
+
+-- Pathing for Entry: 28583 'TDB FORMAT'
+SET @NPC := 76296;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(762960, 1, 1176.14, -298.09, 52.3436, 0, 0, 0, 0, 100, 0),
+(762960, 2, 1176.3, -246.576, 52.3528, 0, 0, 0, 0, 100, 0);
+
+-- Pathing for Entry: 28583 'TDB FORMAT'
+SET @NPC := 76297;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(762970, 1, 1180.57, -315.473, 52.3378, 0, 0, 0, 0, 100, 0),
+(762970, 2, 1171.95, -315.333, 52.3378, 0, 0, 0, 0, 100, 0),
+(762970, 3, 1171.02, -327.394, 52.6927, 0, 0, 0, 0, 100, 0),
+(762970, 4, 1183.75, -330.38, 52.3378, 0, 0, 0, 0, 100, 0),
+(762970, 5, 1183.62, -317.868, 52.3378, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `spawndist`=8,`MovementType`=1 WHERE `guid`=76298;
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=28547 AND `source_type`=0 AND `id`=0 AND `link`=0;
+
+-- Pathing for Entry: 28583 'TDB FORMAT'
+SET @NPC := 126874;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(1268740, 1, 1118.22, -248.207, 56.8882, 0, 0, 1, 0, 100, 0),
+(1268740, 2, 1118.62, -274.988, 56.8831, 0, 0, 1, 0, 100, 0);
+
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+
+DELETE FROM `creature_addon` WHERE `guid` IN (126904, 126921, 126903, 126911, 126928, 126929, 126930, 126931, 126912);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(126911, 0, 0, 0, 1, 69, ''),
+(126928, 0, 0, 0, 1, 69, ''),
+(126929, 0, 0, 0, 1, 69, ''),
+(126930, 0, 0, 0, 1, 69, ''),
+(126931, 0, 0, 0, 1, 69, ''),
+(126912, 0, 0, 0, 1, 69, ''),
+(126903, 0, 0, 0, 1, 69, ''),
+(126921, 0, 0, 0, 1, 69, ''),
+(126904, 0, 0, 0, 1, 69, '');
+
+
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=28838 AND `source_type`=0 AND `id`=0 AND `link`=1;
+-- Pathing for Entry: 28838 'TDB FORMAT'
+SET @NPC := 126938;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1096.845,`position_y`=-166.1139,`position_z`=58.68692 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1096.845,-166.1139,58.68692,0,0,0,0,100,0),
+(@PATH,2,1091.599,-152.8187,61.33255,0,0,0,0,100,0),
+(@PATH,3,1076.235,-141.8798,61.18824,0,0,0,0,100,0),
+(@PATH,4,1060.763,-145.9723,61.39173,0,0,0,0,100,0),
+(@PATH,5,1049.471,-171.0271,58.53773,0,0,0,0,100,0),
+(@PATH,6,1055.509,-189.0143,58.94555,0,0,0,0,100,0),
+(@PATH,7,1073.278,-198.3343,59.91864,0,0,0,0,100,0),
+(@PATH,8,1091.632,-153.0076,61.24912,0,0,0,0,100,0),
+(@PATH,9,1076.185,-141.7971,61.18842,0,0,0,0,100,0),
+(@PATH,10,1060.682,-145.9083,61.35257,0,0,0,0,100,0),
+(@PATH,11,1049.497,-171.1528,58.5324,0,0,0,0,100,0),
+(@PATH,12,1055.636,-188.8313,58.83115,0,0,0,0,100,0),
+(@PATH,13,1073.335,-198.4241,59.88276,0,0,0,0,100,0),
+(@PATH,14,1083.434,-195.9087,59.84556,0,0,0,0,100,0),
+(@PATH,15,1095.76,-180.6208,58.73315,0,0,0,0,100,0),
+(@PATH,16,1096.683,-166.0892,58.71755,0,0,0,0,100,0),
+(@PATH,17,1091.595,-152.9597,61.3679,0,0,0,0,100,0),
+(@PATH,18,1076.179,-141.7626,61.18819,0,0,0,0,100,0),
+(@PATH,19,1060.637,-145.9161,61.39425,0,0,0,0,100,0),
+(@PATH,20,1049.585,-171.0794,58.53699,0,0,0,0,100,0),
+(@PATH,21,1055.467,-188.91,58.98404,0,0,0,0,100,0),
+(@PATH,22,1073.328,-198.439,59.93514,0,0,0,0,100,0),
+(@PATH,23,1083.423,-195.8686,59.93195,0,0,0,0,100,0),
+(@PATH,24,1095.775,-180.6299,58.52916,0,0,0,0,100,0),
+(@PATH,25,1096.451,-166.0939,58.80622,0,0,0,0,100,0),
+(@PATH,26,1091.409,-152.9162,61.46411,0,0,0,0,100,0),
+(@PATH,27,1076.1,-141.8916,61.18857,0,0,0,0,100,0),
+(@PATH,28,1060.651,-145.9504,61.40473,0,0,0,0,100,0),
+(@PATH,29,1049.581,-171.0241,58.53423,0,0,0,0,100,0),
+(@PATH,30,1055.498,-188.95,59.02743,0,0,0,0,100,0),
+(@PATH,31,1073.29,-198.3899,60.07246,0,0,0,0,100,0),
+(@PATH,32,1083.527,-195.7341,59.79642,0,0,0,0,100,0),
+(@PATH,33,1095.63,-180.5483,58.69926,0,0,0,0,100,0),
+(@PATH,34,1096.488,-165.9498,58.67723,0,0,0,0,100,0),
+(@PATH,35,1091.622,-152.8619,61.2616,0,0,0,0,100,0),
+(@PATH,36,1076.115,-141.9001,61.18835,0,0,0,0,100,0),
+(@PATH,37,1060.789,-145.8449,61.36668,0,0,0,0,100,0),
+(@PATH,38,1049.622,-171.201,58.53172,0,0,0,0,100,0),
+(@PATH,39,1055.608,-188.9287,58.85689,0,0,0,0,100,0),
+(@PATH,40,1073.355,-198.4655,59.88638,0,0,0,0,100,0),
+(@PATH,41,1083.45,-195.9156,59.8475,0,0,0,0,100,0),
+(@PATH,42,1095.778,-180.6123,58.73478,0,0,0,0,100,0),
+(@PATH,43,1096.679,-166.0957,58.71638,0,0,0,0,100,0),
+(@PATH,44,1091.597,-152.9846,61.35995,0,0,0,0,100,0),
+(@PATH,45,1076.191,-141.7885,61.1882,0,0,0,0,100,0),
+(@PATH,46,1060.679,-145.9348,61.39341,0,0,0,0,100,0),
+(@PATH,47,1049.618,-171.0668,58.53717,0,0,0,0,100,0),
+(@PATH,48,1055.49,-188.8295,58.96278,0,0,0,0,100,0),
+(@PATH,49,1073.294,-198.3665,59.92146,0,0,0,0,100,0),
+(@PATH,50,1083.419,-195.9023,59.84375,0,0,0,0,100,0),
+(@PATH,51,1095.709,-180.6607,58.52328,0,0,0,0,100,0),
+(@PATH,52,1096.673,-166.108,58.71417,0,0,0,0,100,0),
+(@PATH,53,1091.596,-152.9702,61.36453,0,0,0,0,100,0),
+(@PATH,54,1076.134,-141.7107,61.1886,0,0,0,0,100,0),
+(@PATH,55,1060.718,-145.7299,61.40303,0,0,0,0,100,0),
+(@PATH,56,1049.66,-170.9935,58.53466,0,0,0,0,100,0),
+(@PATH,57,1055.598,-189.0659,59.09127,0,0,0,0,100,0),
+(@PATH,58,1073.295,-198.3694,59.92171,0,0,0,0,100,0),
+(@PATH,59,1083.648,-195.8578,59.9237,0,0,0,0,100,0),
+(@PATH,60,1095.808,-180.5819,58.69283,0,0,0,0,100,0),
+(@PATH,61,1096.681,-166.0555,58.68321,0,0,0,0,100,0),
+(@PATH,62,1091.416,-153.0063,61.45639,0,0,0,0,100,0),
+(@PATH,63,1076.171,-141.768,61.18841,0,0,0,0,100,0),
+(@PATH,64,1060.65,-145.894,61.35575,0,0,0,0,100,0),
+(@PATH,65,1049.462,-171.1664,58.5322,0,0,0,0,100,0),
+(@PATH,66,1055.634,-188.8381,58.83295,0,0,0,0,100,0),
+(@PATH,67,1073.464,-198.508,59.93453,0,0,0,0,100,0),
+(@PATH,68,1083.448,-195.6998,59.78678,0,0,0,0,100,0),
+(@PATH,69,1095.786,-180.5919,58.69092,0,0,0,0,100,0),
+(@PATH,70,1096.673,-166.0698,58.68402,0,0,0,0,100,0),
+(@PATH,71,1091.631,-152.9937,61.25031,0,0,0,0,100,0),
+(@PATH,72,1076.178,-141.7825,61.18841,0,0,0,0,100,0),
+(@PATH,73,1060.676,-145.9058,61.35313,0,0,0,0,100,0),
+(@PATH,74,1049.458,-171.1682,58.53218,0,0,0,0,100,0),
+(@PATH,75,1055.627,-188.8615,58.83912,0,0,0,0,100,0),
+(@PATH,76,1070.503,-200.296,61.23225,0,0,0,0,100,0);
+-- 0x1C16DC4B401C2980000A1E0001563CBC .go 1096.845 -166.1139 58.68692
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126938;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126938, 126938, 0, 0, 2, 0, 0),
+(126938, 126937, 5, 90, 2, 0, 0);
+
+-- Pathing for Entry: 28838 'TDB FORMAT'
+SET @NPC := 126935;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1049.899,`position_y`=-99.5955,`position_z`=59.38226 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1049.899,-99.5955,59.38226,0,0,0,0,100,0),
+(@PATH,2,1050.742,-83.34245,58.92643,0,0,0,0,100,0),
+(@PATH,3,1055.898,-75.28898,59.04939,0,0,0,0,100,0),
+(@PATH,4,1066.186,-64.55377,61.31993,0,0,0,0,100,0),
+(@PATH,5,1083.335,-68.16859,59.77402,0,0,0,0,100,0),
+(@PATH,6,1095.981,-92.44127,57.85799,0,0,0,0,100,0),
+(@PATH,7,1097.756,-106.9242,61.43462,0,0,0,0,100,0),
+(@PATH,8,1097.813,-109.0895,61.5177,0,0,0,0,100,0),
+(@PATH,9,1073.511,-124.8458,61.22898,0,0,0,0,100,0),
+(@PATH,10,1063.165,-119.7333,61.23046,0,0,0,0,100,0),
+(@PATH,11,1052.941,-108.3153,61.3854,0,0,0,0,100,0);
+-- 0x1C307C4B401C29800002170000D672BB .go 1049.899 -99.5955 59.38226
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126935;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126935, 126935, 0, 0, 2, 0, 0),
+(126935, 126936, 5, 270, 2, 0, 0);
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=29048;
+UPDATE `creature` SET `spawndist`=40 WHERE `id`=29048;
+
+-- Pathing for Entry: 28835 'TDB FORMAT'
+SET @NPC := 126892;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1053.155,`position_y`=78.30748,`position_z`=61.44365 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1053.155,78.30748,61.44365,0,0,0,0,100,0),
+(@PATH,2,1050.469,75.66108,61.44365,0,0,0,0,100,0),
+(@PATH,3,1034.158,48.75368,59.26595,0,0,0,0,100,0),
+(@PATH,4,1033.885,12.18762,61.27556,0,0,0,0,100,0),
+(@PATH,5,1041.208,0.1274123,61.39244,0,0,0,0,100,0),
+(@PATH,6,1052.702,-9.815857,61.43917,0,0,0,0,100,0),
+(@PATH,7,1053.008,-10.01389,61.44186,0,0,0,0,100,0),
+(@PATH,8,1041.027,0.347192,61.39876,0,0,0,0,100,0),
+(@PATH,9,1032.457,20.25849,58.73366,0,0,0,0,100,0),
+(@PATH,10,1050.469,75.66108,61.44365,0,0,0,0,100,0),
+(@PATH,11,1034.158,48.75368,59.26595,0,0,0,0,100,0);
+-- 0x1C307C4B401C28C000021700015672BB .go 1053.155 78.30748 61.44365
+
+-- Pathing for Entry: 28920 'TDB FORMAT'
+SET @NPC := 126984;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1098.968,`position_y`=19.55447,`position_z`=53.64101 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1098.968,19.55447,53.64101,0,0,0,0,100,0),
+(@PATH,2,1080.878,7.88341,53.63377,0,0,0,0,100,0),
+(@PATH,3,1066.863,12.70812,53.63047,0,0,0,0,100,0),
+(@PATH,4,1078.049,8.259874,53.6311,0,0,0,0,100,0),
+(@PATH,5,1091.877,12.4073,53.63206,0,0,0,0,100,0);
+-- 0x1C307C4B401C3E0000021700005672BB .go 1098.968 19.55447 53.64101
+
+-- Pathing for Entry: 28920 'TDB FORMAT'
+SET @NPC := 126983;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1098.049,`position_y`=54.05235,`position_z`=53.65234 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1098.049,54.05235,53.65234,0,0,0,0,100,0),
+(@PATH,2,1085.831,60.05393,53.65328,0,0,0,0,100,0),
+(@PATH,3,1067.126,53.06633,53.64429,0,0,0,0,100,0),
+(@PATH,4,1068.714,55.26102,53.64336,0,0,0,0,100,0),
+(@PATH,5,1090.947,60.23857,53.65356,0,0,0,0,100,0),
+(@PATH,6,1100.346,51.25973,53.65813,0,0,0,0,100,0);
+-- 0x1C307C4B401C3E000002170000D672BB .go 1098.049 54.05235 53.65234
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_08_world.sql
new file mode 100644
index 00000000000..4699da2c181
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_08_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (21440, 21438, 21437, 21436, 21439);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_09_world.sql
new file mode 100644
index 00000000000..ef2b8bb9b1d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_09_world.sql
@@ -0,0 +1,2 @@
+-- Update rotation of Ru'zah
+UPDATE `creature` SET `orientation`=5.026751 WHERE `guid`=74329;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_10_world.sql
new file mode 100644
index 00000000000..67fd1112e47
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_10_world.sql
@@ -0,0 +1,32 @@
+--
+/* SAI for Burning Exile */
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=2760;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2760;
+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
+(2760, 0, 0, 0, 8, 0, 100, 0, 4130, 0, 0, 0, 41, 500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Burning Exile - on spellhit - Despawn');
+
+/* SAI for Cresting Exile */
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=2761;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2761;
+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
+(2761, 0, 0, 0, 1, 0, 100, 1, 1000, 1000, 1800000, 1800000, 11, 12544, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cresting Exile - Out Of Combat - Cast Frost Armor'),
+(2761, 0, 1, 0, 0, 0, 100, 0, 1400, 7300, 25600, 32300, 11, 865, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Cresting Exile - In Combat - Cast Frost Nova'),
+(2761, 0, 2, 0, 8, 0, 100, 0, 4131, 0, 0, 0, 41, 500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cresting Exile - on spellhit - Despawn');
+
+/* SAI for Thundering Exile */
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=2762;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2762;
+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
+(2762, 0, 0, 0, 1, 0, 100, 1, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - Out Of Combat - Allow Combat Movement'),
+(2762, 0, 1, 2, 4, 0, 100, 0, 0, 0, 0, 0, 11, 9532, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - On Aggro - Cast Lightning Bolt'),
+(2762, 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, 'Thundering Exile - On Aggro - Increment Phase'),
+(2762, 0, 3, 0, 9, 0, 100, 0, 0, 40, 3300, 6600, 11, 9532, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 0 - 40 Range - Cast Lightning Bolt'),
+(2762, 0, 4, 5, 3, 0, 100, 0, 0, 15, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 15% Mana - Allow Combat Movement'),
+(2762, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 15% Mana - Increment Phase'),
+(2762, 0, 6, 0, 9, 0, 100, 1, 35, 80, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 35 - 80 Range - Allow Combat Movement'),
+(2762, 0, 7, 0, 9, 0, 100, 1, 0, 5, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 0 - 5 Range - Allow Combat Movement'),
+(2762, 0, 8, 0, 9, 0, 100, 0, 5, 15, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 5 - 15 Range - Allow Combat Movement'),
+(2762, 0, 9, 10, 3, 0, 100, 0, 30, 100, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 100% Mana - Allow Combat Movement'),
+(2762, 0, 10, 0, 61, 0, 100, 0, 0, 0, 0, 0, 23, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - At 100% Mana - Increment Phase'),
+(2762, 0, 11, 0, 0, 0, 100, 0, 1600, 15100, 18900, 25400, 11, 11824, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - In Combat - Cast Shock'),
+(2762, 0, 12, 0, 8, 0, 100, 0, 4132, 0, 0, 0, 41, 500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thundering Exile - on spellhit - Despawn');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_11_world.sql
new file mode 100644
index 00000000000..d0838a1b31d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_11_world.sql
@@ -0,0 +1,252 @@
+-- Theradrim Shardling SAI
+SET @ENTRY := 11783;
+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,9,0,50,0,0,5,7000,11000,11,13584,0,0,0,0,0,2,0,0,0,0,0,0,0,"Theradrim Shardling - Within 0-5 Range - Cast 'Strike'"),
+(@ENTRY,0,1,0,54,0,100,0,0,0,0,0,29,2,90,0,0,0,0,19,11784,10,0,0,0,0,0,"Theradrim Shardling - On Just Summoned - Start Follow Closest Creature 'Theradrim Guardian'");
+
+-- Theradrim Guardian SAI
+SET @ENTRY := 11784;
+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,9,0,100,2,0,5,7000,12000,11,16790,0,0,0,0,0,2,0,0,0,0,0,0,0,"Theradrim Guardian - Within 0-5 Range - Cast 'Knockdown' (Normal Dungeon)"),
+(@ENTRY,0,1,0,1,0,100,3,1000,1000,0,0,11,21057,0,0,0,0,0,1,0,0,0,0,0,0,0,"Theradrim Guardian - Out of Combat - Cast 'Summon Theradrim Shardling' (No Repeat) (Normal Dungeon)");
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=55465;
+DELETE FROM `creature_addon` WHERE `guid`=55465;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(55465, 554650, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=554650;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(554650, 1, 248.538, -93.024, -129.62, 0, 0, 0, 0, 100, 0),
+(554650, 2, 219.021, -92.1171, -129.607, 0, 0, 0, 0, 100, 0),
+(554650, 3, 258.14, -97.1733, -129.619, 0, 0, 0, 0, 100, 0),
+(554650, 4, 246.967, -145.304, -130.844, 0, 0, 0, 0, 100, 0),
+(554650, 5, 213.934, -199.873, -131.159, 0, 0, 0, 0, 100, 0),
+(554650, 6, 248.627, -140.739, -131.005, 0, 0, 0, 0, 100, 0),
+(554650, 7, 259.8, -98.2245, -129.619, 0, 0, 0, 0, 100, 0);
+
+DELETE FROM `creature` WHERE `guid` IN (55466, 56518, 56516, 56517, 56504, 56502, 56505, 56503, 56488, 56487, 56486, 88993, 88991, 88990, 88992, 56343, 56341, 55472);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=55471;
+DELETE FROM `creature_addon` WHERE `guid`=55471;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(55471, 554710, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=554710;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(554710, 1, 200.354, -133.505, -101.058, 0, 0, 0, 0, 100, 0),
+(554710, 2, 230.841, -109.688, -88.8687, 0, 0, 0, 0, 100, 0),
+(554710, 3, 278.173, -121.002, -83.4807, 0, 0, 0, 0, 100, 0),
+(554710, 4, 300.187, -149.075, -69.7502, 0, 0, 0, 0, 100, 0),
+(554710, 5, 298.76, -178.312, -59.8991, 0, 0, 0, 0, 100, 0),
+(554710, 6, 299.577, -148.794, -69.9433, 0, 0, 0, 0, 100, 0),
+(554710, 7, 276.408, -121.048, -83.6496, 0, 0, 0, 0, 100, 0),
+(554710, 8, 226.955, -112.811, -89.7437, 0, 0, 0, 0, 100, 0),
+(554710, 9, 199.686, -134.684, -101.541, 0, 0, 0, 0, 100, 0),
+(554710, 10, 183.329, -185.544, -111.375, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=88989;
+DELETE FROM `creature_addon` WHERE `guid`=88989;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(88989, 889890, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=889890;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(889890, 1, 109.037, -268.553, -108.677, 0, 0, 0, 0, 100, 0),
+(889890, 2, 151.884, -275.712, -108.677, 0, 0, 0, 0, 100, 0),
+(889890, 3, 143.666, -231.173, -108.852, 0, 0, 0, 0, 100, 0),
+(889890, 4, 156.17, -275.286, -108.676, 0, 0, 0, 0, 100, 0),
+(889890, 5, 138.876, -278.577, -108.676, 0, 0, 0, 0, 100, 0),
+(889890, 6, 79.5604, -259.988, -108.678, 0, 0, 0, 0, 100, 0),
+(889890, 7, 62.416, -207.188, -109.659, 0, 0, 0, 0, 100, 0),
+(889890, 8, 8.187, -127.348, -123.845, 0, 0, 0, 0, 100, 0),
+(889890, 9, 28.705, -38.025, -128.761, 0, 0, 0, 0, 100, 0),
+(889890, 10, 8.187, -127.348, -123.845, 0, 0, 0, 0, 100, 0),
+(889890, 11, 62.416, -207.188, -109.659, 0, 0, 0, 0, 100, 0),
+(889890, 12, 79.0383, -255.555, -108.677, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=56485;
+DELETE FROM `creature_addon` WHERE `guid`=56485;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(56485, 564850, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=564850;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(564850, 1, 150.49, -193.898, -171.747, 0, 0, 0, 0, 100, 0),
+(564850, 2, 152.233, -231.891, -170.382, 0, 0, 0, 0, 100, 0),
+(564850, 3, 125.841, -257.66, -168.113, 0, 0, 0, 0, 100, 0),
+(564850, 4, 155.987, -284.034, -168.989, 0, 0, 0, 0, 100, 0),
+(564850, 5, 148.455, -238.759, -169.543, 0, 0, 0, 0, 100, 0),
+(564850, 6, 155.062, -199.53, -171.957, 0, 0, 0, 0, 100, 0),
+(564850, 7, 104.937, -185.658, -167.457, 0, 0, 0, 0, 100, 0),
+(564850, 8, 100.198, -176.082, -167.457, 0, 0, 0, 0, 100, 0),
+(564850, 9, 111.893, -160.596, -167.328, 0, 0, 0, 0, 100, 0),
+(564850, 10, 121.304, -176.939, -167.457, 0, 0, 0, 0, 100, 0),
+(564850, 11, 128.284, -191.12, -168.26, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=56501;
+DELETE FROM `creature_addon` WHERE `guid`=56501;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(56501, 565010, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=565010;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(565010, 1, 177.079, -304.031, -172.328, 0, 0, 0, 0, 100, 0),
+(565010, 2, 146.519, -316.403, -174.591, 0, 0, 0, 0, 100, 0),
+(565010, 3, 153.733, -376.576, -175.003, 0, 0, 0, 0, 100, 0),
+(565010, 4, 211.381, -381.672, -160.691, 0, 0, 0, 0, 100, 0),
+(565010, 5, 156.615, -376.11, -175.002, 0, 0, 0, 0, 100, 0),
+(565010, 6, 148.461, -317.13, -174.589, 0, 0, 0, 0, 100, 0);
+
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=56515;
+DELETE FROM `creature_addon` WHERE `guid`=56515;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(56515, 565150, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=565150;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(565150, 1, 312.737, -343.241, -117.348, 0, 0, 0, 0, 100, 0),
+(565150, 2, 328.91, -288.013, -118.069, 0, 0, 0, 0, 100, 0),
+(565150, 3, 320.637, -268.75, -117.912, 0, 0, 0, 0, 100, 0),
+(565150, 4, 337.697, -262.309, -118.049, 0, 0, 0, 0, 100, 0),
+(565150, 5, 345.634, -276.933, -117.941, 0, 0, 0, 0, 100, 0),
+(565150, 6, 331.665, -290.395, -118.061, 0, 0, 0, 0, 100, 0),
+(565150, 7, 317.848, -331.827, -116.777, 0, 0, 0, 0, 100, 0),
+(565150, 8, 325.14, -394.223, -124.867, 0, 0, 0, 0, 100, 0),
+(565150, 9, 250.345, -396.668, -139.555, 0, 0, 0, 0, 100, 0),
+(565150, 10, 256.965, -328.427, -140.451, 0, 0, 0, 0, 100, 0),
+(565150, 11, 251.778, -396.72, -139.555, 0, 0, 0, 0, 100, 0),
+(565150, 12, 319.125, -403.751, -124.866, 0, 0, 0, 0, 100, 0);
+
+SET @GUID := 160506;
+SET @ENTRY := 1211;
+-- Placed NPC 12237 (Meshlok the Harvester) into a pool with its placeholder
+DELETE FROM `pool_creature` WHERE `guid` IN (@GUID, @GUID +3, 54652);
+INSERT INTO `pool_creature` VALUES
+(@GUID, @ENTRY, 30, 'Meshlok the Harvester (Maraudon)'),
+(@GUID + 3, @ENTRY, 0, 'Meshlok the Harvester placeholder (Maraudon)'),
+(54652, @ENTRY, 0, 'Meshlok the Harvester placeholder (Maraudon)');
+
+DELETE FROM `pool_template` WHERE `entry` = @ENTRY;
+INSERT INTO `pool_template` VALUES
+(@ENTRY, 1, 'Meshlok the Harvester (Maraudon)');
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @GUID AND @GUID + 7;
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES
+(@GUID, 12237, 349, 0, 0, 1, 1, 0, 1, 632.101, -92.409, -57.4999, 3.49563, 7200, 0, 0, 5757, 0, 0, 0, 0, 0, 0),
+(@GUID + 1, 12224, 349, 0, 0, 1, 1, 0, 1, 748.725, -81.8362, -57.4696, 0.620471, 7200, 0, 0, 4434, 2301, 0, 0, 0, 0, 0),
+(@GUID + 2, 12224, 349, 0, 0, 1, 1, 0, 1, 632.101, -92.409, -57.4999, 3.49563, 7200, 0, 0, 4434, 2301, 0, 0, 0, 0, 0),
+(@GUID + 3, 12224, 349, 0, 0, 1, 1, 0, 1, 818.573, -215.097, -77.1489, 4.14281, 7200, 0, 0, 4434, 2301, 0, 0, 0, 0, 0),
+(@GUID + 4, 12224, 349, 0, 0, 1, 1, 0, 1, 813.453, -370.449, -59.2094, 6.02488, 7200, 0, 0, 4434, 2301, 0, 0, 0, 0, 0),
+(@GUID + 5, 12224, 349, 0, 0, 1, 1, 0, 1, 719.899, -83.8715, -57.2155, 3.48941, 7200, 0, 0, 4434, 2301, 0, 0, 0, 0, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=@GUID + 1;
+DELETE FROM `creature_addon` WHERE `guid`=@GUID + 1;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@GUID+1, (@GUID+1) * 10, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=(@GUID+1) * 10;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+((@GUID+1) * 10, 1, 747.806, -79.9688, -57.4744, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 2, 750.866, -86.8807, -57.4595, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 3, 741.016, -94.8653, -57.4978, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 4, 745.803, -84.0748, -57.4833, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 5, 738.607, -70.5452, -57.4977, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 6, 751.253, -70.6902, -57.3912, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 7, 744.367, -78.7708, -57.4887, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 8, 756.588, -80.4979, -57.3727, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 9, 736.461, -89.3428, -57.4996, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 10, 734.7, -80.3283, -57.4996, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 11, 744.209, -79.5844, -57.4915, 0, 0, 0, 0, 100, 0),
+((@GUID+1) * 10, 12, 734.044, -71.701, -57.4977, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=@GUID + 2;
+DELETE FROM `creature_addon` WHERE `guid`=@GUID + 2;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@GUID+2, (@GUID+2) * 10, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=(@GUID+2) * 10;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+((@GUID+2) * 10, 1, 632.101, -92.409, -57.4999, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 2, 642.895, -89.225, -57.4999, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 3, 654.193, -88.5337, -57.4999, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 4, 666.728, -91.7718, -57.4999, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 5, 675.549, -93.9197, -57.4999, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 6, 690.764, -89.7546, -57.4999, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 7, 702.83, -84.753, -57.4631, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 8, 715.159, -83.791, -57.1193, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 9, 708.503, -83.9885, -57.2554, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 10, 699.353, -86.647, -57.5, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 11, 681.834, -93.4817, -57.5, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 12, 674.938, -93.0037, -57.5, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 13, 665.508, -90.6338, -57.5, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 14, 652.935, -87.6942, -57.5, 0, 0, 0, 0, 100, 0),
+((@GUID+2) * 10, 15, 634.167, -92.0013, -57.5, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=@GUID + 3;
+DELETE FROM `creature_addon` WHERE `guid`=@GUID + 3;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@GUID+3, (@GUID+3) * 10, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=(@GUID+3) * 10;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+((@GUID+3) * 10, 1, 818.873, -216.343, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 2, 813.487, -210.328, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 3, 806.875, -204.634, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 4, 804.811, -193.5, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 5, 806.356, -184.124, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 6, 813.319, -173.6, -77.2995, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 7, 808.847, -175.006, -77.3074, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 8, 805.501, -182.277, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 9, 804.538, -193.051, -77.1489, 0, 0, 0, 0, 100, 0),
+((@GUID+3) * 10, 10, 807.906, -203.501, -77.1489, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=203506;
+DELETE FROM `creature_addon` WHERE `guid`=203506;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(203506, 203506 * 10, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=203506 * 10;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(203506 * 10, 1, 632.101, -92.409, -57.4999, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 2, 642.895, -89.225, -57.4999, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 3, 654.193, -88.5337, -57.4999, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 4, 666.728, -91.7718, -57.4999, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 5, 675.549, -93.9197, -57.4999, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 6, 690.764, -89.7546, -57.4999, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 7, 702.83, -84.753, -57.4631, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 8, 715.159, -83.791, -57.1193, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 9, 708.503, -83.9885, -57.2554, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 10, 699.353, -86.647, -57.5, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 11, 681.834, -93.4817, -57.5, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 12, 674.938, -93.0037, -57.5, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 13, 665.508, -90.6338, -57.5, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 14, 652.935, -87.6942, -57.5, 0, 0, 0, 0, 100, 0),
+(203506 * 10, 15, 634.167, -92.0013, -57.5, 0, 0, 0, 0, 100, 0);
+
+UPDATE `creature_template` SET `speed_walk`=0.3, `speed_run`=0.4 WHERE `entry`=12222;
+
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=55118;
+DELETE FROM `creature_addon` WHERE `guid`=55118;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(55118, 55118 * 10, 0, 0, 0, 0, '');
+DELETE FROM `waypoint_data` WHERE `id`=55118 * 10;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(55118 * 10, 1, 560.44, 74.1416, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 2, 556.001, 97.5598, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 3, 562.821, 116.938, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 4, 558.737, 80.2023, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 5, 567.894, 47.7771, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 6, 573.623, 24.1758, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 7, 583.107, 6.90322, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 8, 597.509, 5.07898, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 9, 600.013, 21.6183, -96.3128, 0, 0, 0, 0, 100, 0),
+(55118 * 10, 10, 575.202, 46.2133, -96.3128, 0, 0, 0, 0, 100, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=55118;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(55118, 55118, 0, 0, 2, 0, 0),
+(55118, 55115, 3, 0, 2, 0, 0),
+(55118, 55116, 3, 70, 2, 0, 0),
+(55118, 55117, 3, 290, 2, 0, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=54579;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(54579, 54579, 0, 0, 2, 0, 0),
+(54579, 54675, 16, 270, 2, 0, 0),
+(54579, 54676, 16, 90, 2, 0, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_12_world.sql
new file mode 100644
index 00000000000..0306b11fa79
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_12_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE guid=85587 AND `id`=17318;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_13_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_13_world.sql
new file mode 100644
index 00000000000..96d4237bd0d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_13_world.sql
@@ -0,0 +1,43 @@
+--
+UPDATE `creature_template` SET `unit_flags`=0, `flags_extra`=0, `npcflag`=0 WHERE `entry`=17587;
+-- Timberstrider Fledgling SAI
+SET @ENTRY := 17372;
+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,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,17587,10,0,0,0,0,0,"Timberstrider Fledgling - On Just Died - Set Data 1 1");
+
+-- Draenei Youngling SAI
+SET @ENTRY := 17587;
+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,3,1,0,100,0,60000,60000,60000,60000,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - Out of Combat - Set Event Phase 0"),
+(@ENTRY,0,1,0,8,0,100,0,28880,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1"),
+(@ENTRY,0,2,0,38,1,100,0,1,1,0,0,81,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Data Set 1 1 - Set Npc Flag Questgiver (Phase 1)"),
+(@ENTRY,0,3,0,61,0,100,0,60000,60000,60000,60000,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - Out of Combat - Set Npc Flag "),
+(@ENTRY,0,5,0,8,0,100,0,59547,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1"),
+(@ENTRY,0,6,0,8,0,100,0,59545,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1"),
+(@ENTRY,0,7,0,8,0,100,0,59544,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1"),
+(@ENTRY,0,8,0,8,0,100,0,59542,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1"),
+(@ENTRY,0,9,0,8,0,100,0,59548,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1"),
+(@ENTRY,0,10,0,8,0,100,0,59543,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Spellhit 'Gift of the Naaru' - Set Event Phase 1");
+
+DELETE FROM `creature_text` WHERE `entry`IN (17587);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES
+(17587,0,0, 'Help! I think this creature might be too tough for me to handle alone.',12,35,100,0,0,0, '17587',14167), -- player IC_LOS
+(17587,0,1, 'Can anyone hear me? I need help! This creature is going to kill me!',12,35,100,0,0,0, '17587',14168), -- player IC_LOS
+(17587,0,2, 'I can''t hold it off any longer! Tell the exarch that I gave it my best.',12,35,100,0,0,0, '17587',14169), -- player IC_LOS
+(17587,1,0, 'Thanks again!',12,35,100,0,0,0, '17587',14170), -- heal received
+(17587,1,1, 'Thanks for the heal, $n!',12,35,100,0,0,0, '17587',14166), -- heal received
+(17587,2,0, 'Another victory for the Draenei!',12,35,100,0,0,0, '17587',14171), -- target dies
+(17587,2,1, 'Another infected beast destroyed!',12,35,100,0,0,0, '17587',14172), -- target dies
+(17587,2,2, 'Hah! This is easy.',12,35,100,0,0,0, '17587',14174), -- target dies
+(17587,2,3, 'How could you think yourself a match for the draenei champion!',12,35,100,0,0,0, '17587',14173), -- target dies
+(17587,3,0, 'Kill as many infected nightstalkers as I can find... This should be easy.',12,35,100,0,0,0, '17587',14165), -- random ooc
+(17587,3,1, 'I''m supposed to be hunting infected nightstalkers... This should be easy.',12,35,100,0,0,0, '17587',14175), -- random ooc
+(17587,3,2, 'Where in the nether are these damnable lashers??',12,35,100,0,0,0, '17587',14176), -- random ooc
+(17587,3,3, 'Hrm, azure snapdragons? Where do they come up with these names? Daedal has gone mad!',12,35,100,0,0,0, '17587',14177), -- random ooc
+(17587,3,4, 'These stags look nothing like talbuks.',12,35,100,0,0,0, '17587',14178), -- random ooc
+(17587,3,5, 'I wonder what that little purple creature at the village is... It''s certainly beautiful.',12,35,100,0,0,0, '17587',14179), -- random ooc
+(17587,4,0, 'Time to meet your maker, $n!',12,35,100,0,0,0, '17587',14180); -- on aggro
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_14_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_14_world.sql
new file mode 100644
index 00000000000..4a2d1bba7df
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_14_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `item_template` SET `HolidayId`=423, `ScriptName`='' WHERE `entry`=49867;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_15_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_15_world.sql
new file mode 100644
index 00000000000..d2495cf0270
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_15_world.sql
@@ -0,0 +1 @@
+DELETE FROM `skill_discovery_template` WHERE `spellId`=54020 AND `reqSpell`=60893;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_00_world.sql
new file mode 100644
index 00000000000..bfa25d8982b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_00_world.sql
@@ -0,0 +1,18 @@
+-- Magmoth Shaman SAI
+SET @ENTRY := 25428;
+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,4,0,5,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magmoth Shaman - On Aggro - Say Line 0 (No Repeat)"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Magmoth Shaman - Between 0-15% Health - Flee For Assist (No Repeat)"),
+(@ENTRY,0,2,0,25,0,100,0,0,0,0,0,11,45575,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magmoth Shaman - On Reset - Cast 'Magmoth Fire Totem'");
+
+-- Magmoth Fire Totem SAI
+SET @ENTRY := 25444;
+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,0,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magmoth Fire Totem - On Just Summoned - Enable Combat Movement"),
+(@ENTRY,0,1,0,0,0,100,0,3000,4000,4000,4000,11,45580,0,0,0,0,0,2,0,0,0,0,0,0,0,"Magmoth Fire Totem - In Combat - Cast 'Fireball'"),
+(@ENTRY,0,2,0,1,0,100,0,100,100,20000,20000,11,45576,0,0,0,0,0,19,24021,30,0,0,0,0,0,"Magmoth Fire Totem - Out of Combat - Cast 'Cosmetic - New Fire Beam Channel (Mouth)'"),
+(@ENTRY,0,3,0,7,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magmoth Fire Totem - On Evade - Despawn Instant");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_01_world.sql
new file mode 100644
index 00000000000..835ac05343b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_01_world.sql
@@ -0,0 +1,12 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=45465;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 45465, 0, 0, 31, 0, 3, 24862, 0, 0, 0, 0, '', 'Mage Hunter Channel - targets Bunny');
+
+-- Beryl Treasure Hunter SAI
+SET @ENTRY := 25353;
+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,0,0,100,0,0,1000,12500,15500,11,50658,0,0,0,0,0,2,0,0,0,0,0,0,0,"Beryl Treasure Hunter - In Combat - Cast 'Focus Beam'"),
+(@ENTRY,0,1,0,1,0,100,0,5000,5000,15000,15000,11,45465,0,0,0,0,0,19,24862,60,0,0,0,0,0,"Beryl Treasure Hunter - Out of Combat - Cast 'Mage Hunter Channel'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_02_world.sql
new file mode 100644
index 00000000000..62c0f960123
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_02_world.sql
@@ -0,0 +1,41 @@
+-- Kvaldir Mist Lord SAI
+SET @GUID := -110298;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=25496;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,25,0,100,0,0,0,0,0,53,0,2549600,1,0,0,2,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Reset - Start Waypoint"),
+(@GUID,0,1,0,40,0,100,0,2,2549600,0,0,80,2549600,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Waypoint 2 Reached - Run Script"),
+(@GUID,0,2,0,40,0,100,0,4,2549600,0,0,80,2549600,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Waypoint 4 Reached - Run Script"),
+(@GUID,0,3,0,40,0,100,0,6,2549600,0,0,80,2549600,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Waypoint 6 Reached - Run Script"),
+(@GUID,0,4,0,40,0,100,0,8,2549600,0,0,80,2549600,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Waypoint 8 Reached - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 2549600;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,54,7000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Script - Pause Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,10,110382,25242,0,0,0,0,0,"Kvaldir Mist Lord - On Script - Set Orientation Closest Creature 'Warsong Battleguard'"),
+(@ENTRY,9,2,0,0,0,100,0,1000,1000,0,0,5,53,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Script - Play Emote 53"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Lord - On Script - Say Line 0"),
+(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,11,45667,0,0,0,0,0,19,25244,50,0,0,0,0,0,"Kvaldir Mist Lord - On Script - Cast 'Torch Corpse'");
+
+DELETE FROM `waypoints` WHERE `entry`=2549600;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(2549600, 1, 2943.3, 6805.71, 6.86362, 'Kvaldir Mist Lord'),
+(2549600, 2, 2946.38, 6808.99, 6.89997, 'Kvaldir Mist Lord'),
+(2549600, 3, 2952.22, 6815.03, 5.49191, 'Kvaldir Mist Lord'),
+(2549600, 4, 2956.26, 6811.33, 5.7004, 'Kvaldir Mist Lord'),
+(2549600, 5, 2959.27, 6809.55, 5.73998, 'Kvaldir Mist Lord'),
+(2549600, 6, 2958.56, 6804.6, 6.10027, 'Kvaldir Mist Lord'),
+(2549600, 7, 2958.36, 6799.58, 6.55177, 'Kvaldir Mist Lord'),
+(2549600, 8, 2953.32, 6798.66, 6.69609, 'Kvaldir Mist Lord');
+
+DELETE FROM `creature_text` WHERE `entry`=25496;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(25496, 0, 0, 'You are dismissed, $n.', 12, 0, 100, 113, 0, 0, 1242, 0, 'Marshal McBride');
+
+DELETE FROM `creature_text` WHERE `entry`=25496;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(25496, 0, 0, 'Become ashes in the mist!', 12, 0, 50, 53, 0, 0, 24719, 'Kvaldir Mist Lord'),
+(25496, 0, 1, 'The subjugation of these people has only just begun... so much time for fun and games.', 12, 0, 50, 53, 0, 0, 24718, 'Kvaldir Mist Lord'),
+(25496, 0, 2, 'Burn, land dweller! BURN!', 12, 0, 50, 53, 0, 0, 24717, 'Kvaldir Mist Lord');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_03_world.sql
new file mode 100644
index 00000000000..6b2ed183c1d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_03_world.sql
@@ -0,0 +1,7 @@
+-- Fireguard Destroyer SAI
+SET @ENTRY := 8911;
+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,9,0,100,2,0,30,9000,11000,11,15243,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fireguard Destroyer - Within 0-30 Range - Cast 'Fireball Volley' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,0,5000,8000,5000,8000,11,16788,64,0,0,0,0,2,0,0,0,0,0,0,0,"Fireguard Destroyer - In Combat - Cast 'Fireball'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_04_world.sql
new file mode 100644
index 00000000000..27debf9fb46
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_04_world.sql
@@ -0,0 +1,15 @@
+--
+UPDATE `conditions` SET `ConditionValue1`=11332 WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9546 AND `SourceEntry`=1 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=9 AND `ConditionTarget`=0 AND `ConditionValue1`=12298 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
+UPDATE `gossip_menu_option` SET `npc_option_npcflag`=8195 WHERE `menu_id`=9546 AND `id`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=23859;
+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
+(23859, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 80, 2385900, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Greer Orehammer - On aggro - Run Script'),
+(23859, 0, 1, 0, 62, 0, 100, 0, 9546, 1, 0, 0, 56, 33634, 10, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Greer Orehammer - On gossip option select - give player 10 Orehammer\'s Precision Bombs'),
+(23859, 0, 2, 0, 62, 0, 100, 0, 9546, 1, 0, 0, 52, 745, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Greer Orehammer - On gossip option select - Plague This Taxi Start');
+
+-- New Agamand Plague Tank Bunny SAI
+SET @ENTRY := 24290;
+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,8,0,100,0,43404,0,0,0,33,24290,0,0,0,0,0,7,0,0,0,0,0,0,0,"New Agamand Plague Tank Bunny - On Spellhit 'Mission: Plague This!: Orehammer's Precision Bombs Dummy' - Quest Credit 'Mission: Plague This!'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_05_world.sql
new file mode 100644
index 00000000000..20c36c24585
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_05_world.sql
@@ -0,0 +1,911 @@
+-- Pathing for Entry: 25979 'TDB FORMAT'
+SET @NPC := 107300;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3289.213,`position_y`=5620.369,`position_z`=51.0953 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3289.213,5620.369,51.0953,0,0,0,0,100,0),
+(@PATH,2,3289.156,5612.807,51.6523,0,0,0,0,100,0),
+(@PATH,3,3285.626,5645.205,51.53279,0,0,0,0,100,0),
+(@PATH,4,3283.541,5652.846,52.70237,0,0,0,0,100,0),
+(@PATH,5,3280.611,5683.929,54.8549,0,0,0,0,100,0),
+(@PATH,6,3303.37,5707.606,60.20351,0,0,0,0,100,0),
+(@PATH,7,3282.027,5687.42,56.04992,0,0,0,0,100,0),
+(@PATH,8,3279.962,5672.618,53.23326,0,0,0,0,100,0),
+(@PATH,9,3284.723,5649.133,52.33985,0,0,0,0,100,0);
+-- 0x1C09144760195EC000000C0000579A79 .go 3289.213 5620.369 51.0953
+-- Inquisitor Salrand SAI
+SET @ENTRY := 25584;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=6;
+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,6,0,1,0,100,0,5000,5000,10000,10000,11,45777,0,0,0,0,0,10,119586,25594,0,0,0,0,0,"Inquisitor Salrand - Out of Combat - Cast 'Salrand's Beam'");
+
+-- Pathing for Entry: 25217 'TDB FORMAT'
+SET @NPC := 122872;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4113.013,`position_y`=6276.871,`position_z`=25.68058 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4113.013,6276.871,25.68058,0,0,0,0,100,0),
+(@PATH,2,4090.676,6280.604,27.56935,0,0,0,0,100,0),
+(@PATH,3,4074.31,6276.669,26.26191,0,0,0,0,100,0),
+(@PATH,4,4063.338,6284.883,23.54415,0,0,0,0,100,0),
+(@PATH,5,4060.495,6308.033,24.63371,0,0,0,0,100,0),
+(@PATH,6,4064.796,6325.54,25.33357,0,0,0,0,100,0),
+(@PATH,7,4062.167,6349.621,24.96839,0,0,0,0,100,0),
+(@PATH,8,4055.423,6363.151,27.49203,0,0,0,0,100,0),
+(@PATH,9,4061.251,6351.451,25.36894,0,0,0,0,100,0),
+(@PATH,10,4064.368,6335.375,25.38478,0,0,0,0,100,0),
+(@PATH,11,4061.08,6310.811,24.90634,0,0,0,0,100,0),
+(@PATH,12,4059.284,6298.654,24.53846,0,0,0,0,100,0),
+(@PATH,13,4069.346,6279.003,24.92667,0,0,0,0,100,0),
+(@PATH,14,4084.886,6280.17,27.70065,0,0,0,0,100,0),
+(@PATH,15,4107.833,6280.248,25.45559,0,0,0,0,100,0);
+-- 0x1C0914476018A04000000C000057EEC0 .go 4113.013 6276.871 25.68058
+
+-- Pathing for Entry: 25611 'TDB FORMAT'
+SET @NPC := 57031;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2797.154,`position_y`=6620.249,`position_z`=48.24942 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2797.154,6620.249,48.24942,0,0,0,0,100,0),
+(@PATH,2,2807.472,6623.047,46.9419,0,0,0,0,100,0),
+(@PATH,3,2822.777,6620.003,48.07745,0,0,0,0,100,0),
+(@PATH,4,2828.091,6608.199,49.87174,0,0,0,0,100,0),
+(@PATH,5,2829.904,6600.112,50.43536,0,0,0,0,100,0),
+(@PATH,6,2825.405,6583.044,51.32146,0,0,0,0,100,0),
+(@PATH,7,2812.032,6576.637,50.3959,0,0,0,0,100,0),
+(@PATH,8,2808.558,6575.663,49.55042,0,0,0,0,100,0),
+(@PATH,9,2791.914,6578.114,49.39709,0,0,0,0,100,0),
+(@PATH,10,2790.871,6579.394,49.35609,0,0,0,0,100,0),
+(@PATH,11,2793.273,6598.499,49.21821,0,0,0,0,100,0),
+(@PATH,12,2797.287,6620.314,48.24408,0,0,0,0,100,0);
+-- 0x1C091447601902C000000C0000588B21 .go 2797.154 6620.249 48.24942
+
+-- Pathing for Entry: 25611 'TDB FORMAT'
+SET @NPC := 97489;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2755.648,`position_y`=6516.167,`position_z`=52.22083 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2755.648,6516.167,52.22083,0,0,0,0,100,0),
+(@PATH,2,2739.121,6534.617,51.25744,0,0,0,0,100,0),
+(@PATH,3,2736.37,6540.505,50.52654,0,0,0,0,100,0),
+(@PATH,4,2736.999,6568.931,49.45178,0,0,0,0,100,0),
+(@PATH,5,2745.165,6582.929,49.87815,0,0,0,0,100,0),
+(@PATH,6,2749.685,6588.33,49.43536,0,0,0,0,100,0),
+(@PATH,7,2764.539,6590.529,49.07096,0,0,0,0,100,0),
+(@PATH,8,2783.451,6578.873,49.38116,0,0,0,0,100,0),
+(@PATH,9,2790.408,6542.078,51.47867,0,0,0,0,100,0),
+(@PATH,10,2781.756,6526.21,53.26818,0,0,0,0,100,0),
+(@PATH,11,2759.35,6514.721,52.89858,0,0,0,0,100,0);
+-- 0x1C091447601902C000000C0001588AE6 .go 2755.648 6516.167 52.22083
+
+-- Pathing for Entry: 25611 'TDB FORMAT'
+SET @NPC := 97486;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2959.18,`position_y`=6518.749,`position_z`=72.95694 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2959.18,6518.749,72.95694,0,0,0,0,100,0),
+(@PATH,2,2943.816,6531.531,70.15851,0,0,0,0,100,0),
+(@PATH,3,2922.839,6548.202,66.36589,0,0,0,0,100,0),
+(@PATH,4,2905.143,6556.469,64.68446,0,0,0,0,100,0),
+(@PATH,5,2886.449,6562.177,61.95524,0,0,0,0,100,0),
+(@PATH,6,2870.039,6568.242,58.85592,0,0,0,0,100,0),
+(@PATH,7,2849.421,6573.922,54.75926,0,0,0,0,100,0),
+(@PATH,8,2864.578,6570.402,57.7508,0,0,0,0,100,0),
+(@PATH,9,2880.555,6564.39,60.65393,0,0,0,0,100,0),
+(@PATH,10,2900.065,6558.482,64.16826,0,0,0,0,100,0),
+(@PATH,11,2916.618,6552.232,65.66638,0,0,0,0,100,0),
+(@PATH,12,2939.966,6534.6,69.45979,0,0,0,0,100,0),
+(@PATH,13,2950.899,6526.294,71.31409,0,0,0,0,100,0),
+(@PATH,14,2978.666,6499.601,75.67303,0,0,0,0,100,0),
+(@PATH,15,2959.18,6518.749,72.95694,0,0,0,0,100,0);
+-- 0x1C091447601902C000000C00005893B1 .go 2959.18 6518.749 72.95694
+
+-- Pathing for Entry: 25611 'TDB FORMAT'
+SET @NPC := 97472;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3132.141,`position_y`=6364.85,`position_z`=87.00642 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3132.141,6364.85,87.00642,0,0,0,0,100,0),
+(@PATH,2,3145.254,6377.429,86.04013,0,0,0,0,100,0),
+(@PATH,3,3150.995,6384.529,85.66245,0,0,0,0,100,0),
+(@PATH,4,3150.954,6413.424,86.59067,0,0,0,0,100,0),
+(@PATH,5,3148.383,6418.564,87.16897,0,0,0,0,100,0),
+(@PATH,6,3127.888,6445.25,85.42545,0,0,0,0,100,0),
+(@PATH,7,3125.299,6448.726,84.63122,0,0,0,0,100,0),
+(@PATH,8,3098.482,6453.096,86.2816,0,0,0,0,100,0),
+(@PATH,9,3092.813,6430.465,86.18443,0,0,0,0,100,0),
+(@PATH,10,3092.439,6429.254,86.16457,0,0,0,0,100,0),
+(@PATH,11,3090.803,6416.944,86.47922,0,0,0,0,100,0),
+(@PATH,12,3080.703,6420.038,86.92494,0,0,0,0,100,0),
+(@PATH,13,3066.926,6403.042,89.00624,0,0,0,0,100,0),
+(@PATH,14,3071.34,6388.575,89.95999,0,0,0,0,100,0),
+(@PATH,15,3071.793,6387.598,89.86023,0,0,0,0,100,0),
+(@PATH,16,3092.656,6366.145,89.73042,0,0,0,0,100,0),
+(@PATH,17,3109.781,6356.525,88.38365,0,0,0,0,100,0),
+(@PATH,18,3114.204,6357.174,87.74312,0,0,0,0,100,0),
+(@PATH,19,3132.181,6364.944,87.00461,0,0,0,0,100,0);
+-- 0x1C091447601902C000000A000058AB81 .go 3132.141 6364.85 87.00642
+
+-- Pathing for Entry: 25475 'TDB FORMAT'
+SET @NPC := 107800;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2814.188,`position_y`=6720.133,`position_z`=9.794792 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2814.188,6720.133,9.794792,0,0,0,0,100,0),
+(@PATH,2,2810.317,6723.547,9.082146,0,0,0,0,100,0);
+-- 0x1C0914476018E0C000000C00005660EE .go 2814.188 6720.133 9.794792
+
+-- Pathing for Entry: 25496 'TDB FORMAT'
+SET @NPC := 110300;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3067.602,`position_y`=6705.609,`position_z`=6.230121 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3067.602,6705.609,6.230121,0,0,0,0,100,0),
+(@PATH,2,3051.766,6718.588,6.615577,0,0,0,0,100,0),
+(@PATH,3,3024.569,6720.975,9.706598,0,0,0,0,100,0),
+(@PATH,4,3031.904,6726.806,7.207738,0,0,0,0,100,0),
+(@PATH,5,3033.154,6727.66,6.58389,0,0,0,0,100,0),
+(@PATH,6,3068.976,6704.811,5.953619,0,0,0,0,100,0),
+(@PATH,7,3095.539,6680.229,6.846659,0,0,0,0,100,0),
+(@PATH,8,3095.83,6662.607,9.923321,0,0,0,0,100,0),
+(@PATH,9,3099.785,6674.892,7.75151,0,0,0,0,100,0),
+(@PATH,10,3090.089,6685.671,6.213068,0,0,0,0,100,0),
+(@PATH,11,3067.523,6705.942,6.221252,0,0,0,0,100,0);
+-- 0x1C0914476018E60000000C000058AEB8 .go 3067.602 6705.609 6.230121
+
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id` IN (25244);
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid`=57067;
+
+-- Pathing for Entry: 25496 'TDB FORMAT'
+SET @NPC := 57066;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2431.173,`position_y`=6827.691,`position_z`=4.434509 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2431.173,6827.691,4.434509,0,0,0,0,100,0),
+(@PATH,2,2417.92,6818.268,3.808835,0,0,0,0,100,0),
+(@PATH,3,2401.83,6806.687,1.444491,0,0,0,0,100,0),
+(@PATH,4,2397.053,6803.022,1.261812,0,0,0,0,100,0),
+(@PATH,5,2415.603,6771.807,2.460288,0,0,0,0,100,0),
+(@PATH,6,2444.461,6781.449,6.446399,0,0,0,0,100,0),
+(@PATH,7,2448.987,6792.239,6.01413,0,0,0,0,100,0),
+(@PATH,8,2466.415,6808.424,4.947993,0,0,0,0,100,0),
+(@PATH,9,2479.129,6823.808,2.68948,0,0,0,0,100,0),
+(@PATH,10,2480.822,6831.567,1.405943,0,0,0,0,100,0),
+(@PATH,11,2481.074,6846.526,1.077314,0,0,0,0,100,0),
+(@PATH,12,2453.165,6857.935,1.077329,0,0,0,0,100,0),
+(@PATH,13,2438.796,6843.509,1.671256,0,0,0,0,100,0);
+-- 0x1C0914476018E60000000A0000586C4C .go 2431.173 6827.691 4.434509
+
+-- Pathing for Entry: 25496 'TDB FORMAT'
+SET @NPC := 57059;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2414.351,`position_y`=6738.811,`position_z`=2.7648 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2414.351,6738.811,2.7648,0,0,0,0,100,0),
+(@PATH,2,2411.604,6704.709,6.068311,0,0,0,0,100,0),
+(@PATH,3,2411.347,6702.018,6.760894,0,0,0,0,100,0),
+(@PATH,4,2452.357,6721.351,6.010249,0,0,0,0,100,0),
+(@PATH,5,2466.691,6738.082,6.927616,0,0,0,0,100,0),
+(@PATH,6,2495.109,6765.589,6.517776,0,0,0,0,100,0),
+(@PATH,7,2513.06,6790.916,4.482207,0,0,0,0,100,0),
+(@PATH,8,2523.949,6806.354,1.703682,0,0,0,0,100,0),
+(@PATH,9,2532.222,6817.983,1.145756,0,0,0,0,100,0),
+(@PATH,10,2546.355,6838.362,1.049538,0,0,0,0,100,0),
+(@PATH,11,2548.539,6846.931,0.8498411,0,0,0,0,100,0),
+(@PATH,12,2506.485,6784.912,5.38059,0,0,0,0,100,0),
+(@PATH,13,2483.945,6763.865,6.803366,0,0,0,0,100,0),
+(@PATH,14,2480.173,6760.685,6.7745,0,0,0,0,100,0),
+(@PATH,15,2419.531,6764.058,3.010518,0,0,0,0,100,0),
+(@PATH,16,2414.283,6738.649,2.879114,0,0,0,0,100,0);
+-- 0x1C0914476018E60000000C0000587988 .go 2414.351 6738.811 2.7648
+
+DELETE FROM `creature_addon` WHERE `guid` IN (110289,57070,57063, 57065, 57067,57064,57062,57068,57060,57058,57057, 57056,57061,110291,110301,110290,110285,57072);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(57063, 0, 0, 0, 0, 69, ''),
+(57065, 0, 0, 0, 0, 234, ''),
+(57067, 0, 0, 0, 0, 234, ''),
+(57064, 0, 0, 0, 0, 234, ''),
+(57062, 0, 0, 0, 0, 69, ''),
+(57068, 0, 0, 0, 0, 234, ''),
+(57060, 0, 0, 0, 0, 234, ''),
+(57058, 0, 0, 0, 0, 234, ''),
+(57057, 0, 0, 0, 0, 234, ''),
+(57056, 0, 0, 0, 0, 234, ''),
+(57061, 0, 0, 0, 0, 27, ''),
+(110291, 0, 0, 0, 0, 27, ''),
+(110301, 0, 0, 0, 0, 69, ''),
+(110290, 0, 0, 0, 0, 27, ''),
+(110285, 0, 0, 0, 0, 27, ''),
+(57072, 0, 0, 0, 0, 69, ''),
+(110289, 0, 0, 0, 0, 27, ''),
+(57070, 0, 0, 0, 0, 27, '');
+
+DELETE FROM `creature_addon` WHERE `guid` IN (112665,112663,112662,112660,112659,112666,112679,112673,112678,112671,112667,112672,56752,112741,56327,112661,112658,56325, 112668, 112670, 112669, 56322);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(56325, 0, 0, 0, 0, 4, ''),
+(112668, 0, 0, 0, 0, 4, ''),
+(112670, 0, 0, 0, 0, 4, ''),
+(112669, 0, 0, 0, 0, 4, ''),
+(56322, 0, 0, 0, 0, 4, ''),
+(112661, 0, 0, 0, 0, 234, ''),
+(112658, 0, 0, 0, 0, 234, ''),
+(56327, 0, 0, 0, 0, 234, ''),
+(112741, 0, 0, 0, 0, 27, ''),
+(56752, 0, 0, 0, 0, 27, ''),
+(112672, 0, 0, 1, 0, 0, ''),
+--
+(112678, 0, 0, 0, 0, 4, ''),
+(112671, 0, 0, 0, 0, 4, ''),
+(112667, 0, 0, 0, 0, 4, ''),
+--
+(112673, 0, 0, 1, 0, 0, ''),
+(112679, 0, 0, 1, 0, 0, ''),
+(112666, 0, 0, 0, 0, 234, ''),
+(112665, 0, 0, 0, 0, 234, ''),
+(112659, 0, 0, 0, 0, 234, ''),
+(112660, 0, 0, 0, 0, 234, ''),
+(112663, 0, 0, 0, 0, 234, ''),
+(112662, 0, 0, 0, 0, 234, '');
+
+-- Pathing for Entry: 25522 'TDB FORMAT'
+SET @NPC := 112755;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1863.071,`position_y`=5721.263,`position_z`=0.5444731 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1863.071,5721.263,0.5444731,0,0,0,0,100,0),
+(@PATH,2,1871.592,5727.264,0.5210824,0,0,0,0,100,0),
+(@PATH,3,1865.804,5766.675,0.8066133,0,0,0,0,100,0),
+(@PATH,4,1861.19,5769.085,0.636929,0,0,0,0,100,0),
+(@PATH,5,1853.291,5777.555,0.8031902,0,0,0,0,100,0),
+(@PATH,6,1838.134,5783.222,0.6275423,0,0,0,0,100,0),
+(@PATH,7,1838.138,5783.196,0.5076787,0,0,0,0,100,0),
+(@PATH,8,1838.279,5783.279,0.609849,0,0,0,0,100,0),
+(@PATH,9,1853.601,5777.178,0.8158144,0,0,0,0,100,0),
+(@PATH,10,1872.918,5754.421,0.8373558,0,0,0,0,100,0),
+(@PATH,11,1873.445,5750.554,0.7919877,0,0,0,0,100,0),
+(@PATH,12,1857.673,5717.76,0.05196175,0,0,0,0,100,0),
+(@PATH,13,1863.071,5721.263,0.5444731,0,0,0,0,100,0),
+(@PATH,14,1871.617,5727.281,0.5215871,0,0,0,0,100,0),
+(@PATH,15,1865.804,5766.67,0.806583,0,0,0,0,100,0),
+(@PATH,16,1861.121,5769.259,0.6014363,0,0,0,0,100,0),
+(@PATH,17,1853.309,5777.537,0.8029698,0,0,0,0,100,0),
+(@PATH,18,1838.146,5783.217,0.6276386,0,0,0,0,100,0),
+(@PATH,19,1838.138,5783.196,0.5076787,0,0,0,0,100,0),
+(@PATH,20,1838.511,5783.279,0.6102685,0,0,0,0,100,0),
+(@PATH,21,1853.596,5777.181,0.8157681,0,0,0,0,100,0),
+(@PATH,22,1872.897,5754.442,0.837615,0,0,0,0,100,0),
+(@PATH,23,1873.44,5750.595,0.7921225,0,0,0,0,100,0),
+(@PATH,24,1857.677,5717.557,0.05224757,0,0,0,0,100,0),
+(@PATH,25,1863.071,5721.263,0.5444731,0,0,0,0,100,0),
+(@PATH,26,1871.631,5727.291,0.5218816,0,0,0,0,100,0),
+(@PATH,27,1865.809,5766.73,0.8069472,0,0,0,0,100,0),
+(@PATH,28,1861.136,5769.112,0.6354876,0,0,0,0,100,0);
+-- 0x1C0914476018EC8000000B0000D90C39 .go 1863.071 5721.263 0.5444731
+
+-- Pathing for Entry: 25522 'TDB FORMAT'
+SET @NPC := 112671;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1853.63,`position_y`=5846.966,`position_z`=2.740726 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1853.63,5846.966,2.740726,0,0,0,0,100,0),
+(@PATH,2,1874.7,5836.919,4.813838,0,0,0,0,100,0),
+(@PATH,3,1876.592,5812.892,4.801723,0,0,0,0,100,0),
+(@PATH,4,1872.844,5797.556,3.118221,0,0,0,0,100,0),
+(@PATH,5,1875.815,5806.438,3.974422,0,0,0,0,100,0),
+(@PATH,6,1876.563,5816.451,5.334268,0,0,0,0,100,0),
+(@PATH,7,1877.032,5828.594,4.914,0,0,0,0,100,0),
+(@PATH,8,1862.273,5842.986,4.152772,0,0,0,0,100,0),
+(@PATH,9,1853.646,5846.958,2.74155,0,0,0,0,100,0),
+(@PATH,10,1849.364,5848.809,2.105818,0,0,0,0,100,0);
+-- 0x1C0914476018EC8000000B0000D90AF7 .go 1853.63 5846.966 2.740726
+
+
+-- Pathing for Entry: 25522 'TDB FORMAT'
+SET @NPC := 112766;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1821.645,`position_y`=5874.956,`position_z`=2.705887 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1821.645,5874.956,2.705887,0,0,0,0,100,0),
+(@PATH,2,1824.808,5874.413,2.800447,0,0,0,0,100,0),
+(@PATH,3,1827.45,5854.379,1.631521,0,0,0,0,100,0),
+(@PATH,4,1822.537,5840.488,1.119883,0,0,0,0,100,0),
+(@PATH,5,1819.79,5826.655,0.8782115,0,0,0,0,100,0),
+(@PATH,6,1816.417,5813.835,0.7204496,0,0,0,0,100,0),
+(@PATH,7,1816.219,5813.744,0.5043496,0,0,0,0,100,0),
+(@PATH,8,1816.581,5813.962,0.5907121,0,0,0,0,100,0),
+(@PATH,9,1820.05,5826.836,0.8006111,0,0,0,0,100,0),
+(@PATH,10,1828.175,5856.271,1.831071,0,0,0,0,100,0),
+(@PATH,11,1828.932,5859.332,2.491501,0,0,0,0,100,0),
+(@PATH,12,1816.584,5895.463,0.9250998,0,0,0,0,100,0),
+(@PATH,13,1821.645,5874.956,2.705887,0,0,0,0,100,0);
+-- 0x1C0914476018EC8000000B000159120F .go 1821.645 5874.956 2.705887
+
+UPDATE `creature` SET `spawndist`=10 WHERE `guid` IN (112682, 112762);
+
+-- Pathing for Entry: 25522 'TDB FORMAT'
+SET @NPC := 112761;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1869.091,`position_y`=5953.953,`position_z`=6.38201 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1869.091,5953.953,6.38201,0,0,0,0,100,0),
+(@PATH,2,1879.48,5943.066,7.114405,0,0,0,0,100,0),
+(@PATH,3,1905.42,5926.519,12.31866,0,0,0,0,100,0),
+(@PATH,4,1907.966,5924.864,12.90823,0,0,0,0,100,0),
+(@PATH,5,1907.694,5924.906,12.73229,0,0,0,0,100,0),
+(@PATH,6,1888.924,5936.15,8.416003,0,0,0,0,100,0),
+(@PATH,7,1885.86,5938.519,7.107553,0,0,0,0,100,0),
+(@PATH,8,1879.301,5943.302,7.06257,0,0,0,0,100,0),
+(@PATH,9,1863.642,5963.351,5.116355,0,0,0,0,100,0),
+(@PATH,10,1848.166,5986.37,2.711081,0,0,0,0,100,0),
+(@PATH,11,1856.702,5973.741,4.321182,0,0,0,0,100,0),
+(@PATH,12,1868.008,5955.694,6.300377,0,0,0,0,100,0),
+(@PATH,13,1869.092,5953.951,6.382379,0,0,0,0,100,0);
+-- 0x1C0914476018EC8000000B00005916B8 .go 1869.091 5953.953 6.38201
+
+-- Pathing for Entry: 25522 'TDB FORMAT'
+SET @NPC := 112764;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1949.82,`position_y`=5779.809,`position_z`=10.0687 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1949.82,5779.809,10.0687,0,0,0,0,100,0),
+(@PATH,2,1949.888,5780.269,10.04539,0,0,0,0,100,0),
+(@PATH,3,1959.407,5805.928,11.8103,0,0,0,0,100,0),
+(@PATH,4,1955.581,5821.07,13.57725,0,0,0,0,100,0),
+(@PATH,5,1949.136,5832.18,12.86915,0,0,0,0,100,0),
+(@PATH,6,1947.718,5833.966,12.66496,0,0,0,0,100,0),
+(@PATH,7,1944.919,5838.312,12.17096,0,0,0,0,100,0),
+(@PATH,8,1945.014,5838.031,12.05043,0,0,0,0,100,0),
+(@PATH,9,1945.333,5838.103,12.31259,0,0,0,0,100,0),
+(@PATH,10,1950.632,5829.593,14.2812,0,0,0,0,100,0),
+(@PATH,11,1959.209,5813.076,12.95494,0,0,0,0,100,0),
+(@PATH,12,1958.309,5800.833,11.20766,0,0,0,0,100,0),
+(@PATH,13,1953.69,5789.138,10.24553,0,0,0,0,100,0),
+(@PATH,14,1952.009,5763.52,9.059128,0,0,0,0,100,0),
+(@PATH,15,1949.82,5779.809,10.0687,0,0,0,0,100,0);
+-- 0x1C0914476018EC8000000B0001D91590 .go 1949.82 5779.809 10.0687
+
+-- Pathing for Entry: 25464 'TDB FORMAT'
+SET @NPC := 132708;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2822.261,`position_y`=5519.366,`position_z`=53.74162 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2822.261,5519.366,53.74162,0,0,0,0,100,0),
+(@PATH,2,2823.339,5522.105,53.3661,0,0,0,0,100,0),
+(@PATH,3,2816.756,5522.176,52.7483,0,0,0,0,100,0),
+(@PATH,4,2815.625,5523.958,52.19855,0,0,0,0,100,0),
+(@PATH,5,2815.16,5520.309,52.78535,0,0,0,0,100,0),
+(@PATH,6,2820.333,5521.584,53.39899,0,0,0,0,100,0),
+(@PATH,7,2824.778,5510.136,55.34394,0,0,0,0,100,0),
+(@PATH,8,2815.103,5518.417,53.53315,0,0,0,0,100,0),
+(@PATH,9,2819.598,5522.154,52.91368,0,0,0,0,100,0),
+(@PATH,10,2822.082,5521.53,53.60404,0,0,0,0,100,0),
+(@PATH,11,2818.371,5523.108,52.66743,0,0,0,0,100,0),
+(@PATH,12,2819.409,5516.978,53.96194,0,0,0,0,100,0),
+(@PATH,13,2823.384,5522.104,53.37409,0,0,0,0,100,0),
+(@PATH,14,2825.392,5523.739,52.87629,0,0,0,0,100,0),
+(@PATH,15,2815.691,5521.912,52.45197,0,0,0,0,100,0),
+(@PATH,16,2814.33,5518.599,52.92414,0,0,0,0,100,0),
+(@PATH,17,2815.653,5522.167,52.41706,0,0,0,0,100,0),
+(@PATH,18,2821.683,5522.525,53.24909,0,0,0,0,100,0),
+(@PATH,19,2822.436,5520.497,53.40412,0,0,0,0,100,0),
+(@PATH,20,2822.451,5523.602,53.0274,0,0,0,0,100,0),
+(@PATH,21,2815.243,5522.016,52.44831,0,0,0,0,100,0),
+(@PATH,22,2818.638,5521.292,53.17999,0,0,0,0,100,0),
+(@PATH,23,2822.181,5517.789,54.00129,0,0,0,0,100,0),
+(@PATH,24,2822.296,5519.241,53.7021,0,0,0,0,100,0),
+(@PATH,25,2816.71,5523.35,52.70033,0,0,0,0,100,0),
+(@PATH,26,2819.778,5520.425,53.55138,0,0,0,0,100,0),
+(@PATH,27,2824.004,5522.665,53.19855,0,0,0,0,100,0),
+(@PATH,28,2822.11,5517.678,54.01472,0,0,0,0,100,0),
+(@PATH,29,2823.61,5518.823,53.80622,0,0,0,0,100,0),
+(@PATH,30,2824.499,5512.02,55.12739,0,0,0,0,100,0),
+(@PATH,31,2824.968,5518.775,54.21228,0,0,0,0,100,0),
+(@PATH,32,2822.294,5517.814,53.99824,0,0,0,0,100,0),
+(@PATH,33,2818.368,5520.58,53.24421,0,0,0,0,100,0),
+(@PATH,34,2822.198,5523.147,52.89338,0,0,0,0,100,0),
+(@PATH,35,2819.597,5521.721,53.0246,0,0,0,0,100,0),
+(@PATH,36,2822.367,5519.021,53.98109,0,0,0,0,100,0),
+(@PATH,37,2826.401,5522.089,53.23542,0,0,0,0,100,0),
+(@PATH,38,2816.553,5521.619,52.96187,0,0,0,0,100,0),
+(@PATH,39,2825.091,5521.14,53.50007,0,0,0,0,100,0),
+(@PATH,40,2822.17,5524.09,52.63996,0,0,0,0,100,0),
+(@PATH,41,2823.85,5520.973,53.41511,0,0,0,0,100,0),
+(@PATH,42,2823.884,5524.132,52.88813,0,0,0,0,100,0),
+(@PATH,43,2823.595,5521.119,53.4554,0,0,0,0,100,0),
+(@PATH,44,2822.149,5521.591,53.26643,0,0,0,0,100,0),
+(@PATH,45,2825.091,5523.302,52.98078,0,0,0,0,100,0);
+-- 0x1C0914476018DE0000000B00005919F4 .go 2822.261 5519.366 53.74162
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122683;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3856.668,`position_y`=6592.438,`position_z`=165.8591 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3856.668,6592.438,165.8591,0,0,0,0,100,0),
+(@PATH,2,3845.146,6580.313,167.2839,0,0,0,0,100,0),
+(@PATH,3,3819.979,6552.679,171.2212,0,0,0,0,100,0),
+(@PATH,4,3834.785,6568.925,168.5641,0,0,0,0,100,0),
+(@PATH,5,3856.229,6592.091,166.1844,0,0,0,0,100,0),
+(@PATH,6,3856.884,6592.668,166.1273,0,0,0,0,100,0),
+(@PATH,7,3856.668,6592.438,165.8591,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C00005923F6 .go 3856.668 6592.438 165.8591
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122683;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122683, 122683, 0, 0, 2, 0, 0),
+(122683, 122668, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122679;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3877.737,`position_y`=6617.055,`position_z`=165.4812 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3877.737,6617.055,165.4812,0,0,0,0,100,0),
+(@PATH,2,3876.591,6615.319,165.2154,0,0,0,0,100,0),
+(@PATH,3,3876.513,6615.291,165.0491,0,0,0,0,100,0),
+(@PATH,4,3881.765,6622.608,165.9126,0,0,0,0,100,0),
+(@PATH,5,3887.004,6630.904,166.6272,0,0,0,0,100,0),
+(@PATH,6,3890.648,6642.739,166.3096,0,0,0,0,100,0),
+(@PATH,7,3895.043,6655.15,167.9105,0,0,0,0,100,0),
+(@PATH,8,3892.582,6650.448,166.6568,0,0,0,0,100,0),
+(@PATH,9,3890.725,6641.271,166.7931,0,0,0,0,100,0),
+(@PATH,10,3886.259,6630.026,166.4984,0,0,0,0,100,0),
+(@PATH,11,3877.767,6616.941,165.558,0,0,0,0,100,0),
+(@PATH,12,3876.568,6615.188,165.1826,0,0,0,0,100,0),
+(@PATH,13,3876.513,6615.291,165.0491,0,0,0,0,100,0),
+(@PATH,14,3881.689,6622.583,165.9073,0,0,0,0,100,0),
+(@PATH,15,3886.83,6631.109,166.6665,0,0,0,0,100,0),
+(@PATH,16,3890.699,6642.743,166.3585,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C00005923E0 .go 3877.737 6617.055 165.4812
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122679;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122679, 122679, 0, 0, 2, 0, 0),
+(122679, 122664, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122682;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3802.633,`position_y`=6610.85,`position_z`=160.9254 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3802.633,6610.85,160.9254,0,0,0,0,100,0),
+(@PATH,2,3814.249,6608.161,162.6728,0,0,0,0,100,0),
+(@PATH,3,3817.92,6607.578,162.962,0,0,0,0,100,0),
+(@PATH,4,3817.757,6607.444,162.8091,0,0,0,0,100,0),
+(@PATH,5,3809.16,6609.176,161.7681,0,0,0,0,100,0),
+(@PATH,6,3794.561,6613.893,159.8145,0,0,0,0,100,0),
+(@PATH,7,3787.977,6622.479,157.1806,0,0,0,0,100,0),
+(@PATH,8,3777.748,6635.708,153.5259,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C000059215B .go 3802.633 6610.85 160.9254
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122682;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122682, 122682, 0, 0, 2, 0, 0),
+(122682, 122667, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122671;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3876.684,`position_y`=6542.924,`position_z`=175.354 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3876.684,6542.924,175.354,0,0,0,0,100,0),
+(@PATH,2,3865.112,6532.595,176.6299,0,0,0,0,100,0),
+(@PATH,3,3868.344,6534.336,176.2356,0,0,0,0,100,0),
+(@PATH,4,3880.712,6554.647,173.5269,0,0,0,0,100,0),
+(@PATH,5,3880.566,6581.678,168.6076,0,0,0,0,100,0),
+(@PATH,6,3881.85,6561.938,171.8416,0,0,0,0,100,0),
+(@PATH,7,3876.725,6542.939,175.2055,0,0,0,0,100,0),
+(@PATH,8,3864.951,6532.556,176.746,0,0,0,0,100,0),
+(@PATH,9,3868.344,6534.336,176.2356,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C0000592014 .go 3876.684 6542.924 175.354
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122671;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122671, 122671, 0, 0, 2, 0, 0),
+(122671, 122660, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122681;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3856.668,`position_y`=6592.438,`position_z`=165.8591 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3856.668,6592.438,165.8591,0,0,0,0,100,0),
+(@PATH,2,3845.146,6580.313,167.2839,0,0,0,0,100,0),
+(@PATH,3,3819.979,6552.679,171.2212,0,0,0,0,100,0),
+(@PATH,4,3834.785,6568.925,168.5641,0,0,0,0,100,0),
+(@PATH,5,3856.229,6592.091,166.1844,0,0,0,0,100,0),
+(@PATH,6,3856.884,6592.668,166.1273,0,0,0,0,100,0),
+(@PATH,7,3856.668,6592.438,165.8591,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C00005923F6 .go 3856.668 6592.438 165.8591
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122681;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122681, 122681, 0, 0, 2, 0, 0),
+(122681, 122666, 4, 0, 2, 0, 0);
+
+UPDATE `creature` SET `spawndist`=15 WHERE `guid`=122549;
+UPDATE `creature` SET `spawndist`=20 WHERE `guid`=122548;
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122675;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3772.382,`position_y`=6700.643,`position_z`=150.745 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3772.382,6700.643,150.745,0,0,0,0,100,0),
+(@PATH,2,3765.955,6706.445,152.0959,0,0,0,0,100,0),
+(@PATH,3,3760.302,6711.588,152.1358,0,0,0,0,100,0),
+(@PATH,4,3750.747,6726.564,151.7103,0,0,0,0,100,0),
+(@PATH,5,3749.879,6729.181,151.658,0,0,0,0,100,0),
+(@PATH,6,3750.81,6726.225,151.6613,0,0,0,0,100,0),
+(@PATH,7,3771.484,6701.582,151.0565,0,0,0,0,100,0),
+(@PATH,8,3772.745,6700.572,150.9297,0,0,0,0,100,0),
+(@PATH,9,3772.382,6700.643,150.745,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C0000592493 .go 3772.382 6700.643 150.745
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122675;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122675, 122675, 0, 0, 2, 0, 0),
+(122675, 122661, 4, 0, 2, 0, 0);
+
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122678;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3765.189,`position_y`=6646.188,`position_z`=152.2007 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3765.189,6646.188,152.2007,0,0,0,0,100,0),
+(@PATH,2,3761.339,6649.458,151.591,0,0,0,0,100,0),
+(@PATH,3,3761.412,6649.275,151.5081,0,0,0,0,100,0),
+(@PATH,4,3775.332,6638.132,152.7523,0,0,0,0,100,0),
+(@PATH,5,3784.681,6626.98,155.8878,0,0,0,0,100,0),
+(@PATH,6,3791.935,6616.86,158.9415,0,0,0,0,100,0),
+(@PATH,7,3802.772,6610.692,160.7068,0,0,0,0,100,0),
+(@PATH,8,3814.205,6608.264,162.5391,0,0,0,0,100,0),
+(@PATH,9,3817.96,6607.651,162.9075,0,0,0,0,100,0),
+(@PATH,10,3817.757,6607.444,162.8091,0,0,0,0,100,0),
+(@PATH,11,3809.104,6609.054,161.8425,0,0,0,0,100,0),
+(@PATH,12,3794.503,6613.823,159.8757,0,0,0,0,100,0),
+(@PATH,13,3788.144,6622.311,157.2462,0,0,0,0,100,0),
+(@PATH,14,3777.916,6635.792,153.5504,0,0,0,0,100,0),
+(@PATH,15,3765.363,6646.322,152.2002,0,0,0,0,100,0),
+(@PATH,16,3761.535,6649.459,151.5641,0,0,0,0,100,0),
+(@PATH,17,3761.412,6649.275,151.5081,0,0,0,0,100,0),
+(@PATH,18,3775.165,6638.005,152.7578,0,0,0,0,100,0),
+(@PATH,19,3784.59,6626.891,155.6862,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C0000592B08 .go 3765.189 6646.188 152.2007
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122678;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122678, 122678, 0, 0, 2, 0, 0),
+(122678, 122663, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122684;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3726.047,`position_y`=6604.721,`position_z`=171.6309 WHERE `guid` IN (@NPC, 122669);
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3726.047,6604.721,171.6309,0,0,0,0,100,0),
+(@PATH,2,3737.404,6582.727,172.9987,0,0,0,0,100,0),
+(@PATH,3,3752.602,6559.511,175.07,0,0,0,0,100,0),
+(@PATH,4,3757.825,6548.518,176.1503,0,0,0,0,100,0),
+(@PATH,5,3741.299,6576.517,173.8608,0,0,0,0,100,0),
+(@PATH,6,3731.644,6593.12,172.3642,0,0,0,0,100,0),
+(@PATH,7,3725.372,6606.514,171.4347,0,0,0,0,100,0),
+(@PATH,8,3726.047,6604.721,171.6309,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C0000592BE0 .go 3726.047 6604.721 171.6309
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122684;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122684, 122684, 0, 0, 2, 0, 0),
+(122684, 122669, 4, 0, 2, 0, 0);
+
+-- Coldarra Spellweaver SAI
+SET @ENTRY := 25722;
+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,0,0,100,0,0,0,600,5300,11,34447,64,0,0,0,0,2,0,0,0,0,0,0,0,"Coldarra Spellweaver - In Combat - Cast 'Arcane Missiles'"),
+(@ENTRY,0,1,0,1,0,100,0,100,100,45000,45000,11,39550,0,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Spellweaver - Out of Combat - Cast 'Arcane Channeling'");
+
+-- Coldarra Spellbinder SAI
+SET @ENTRY := 25719;
+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,0,0,100,0,0,0,3900,5800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Coldarra Spellbinder - In Combat - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,0,0,100,0,1700,13500,172100,172100,11,50583,1,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Spellbinder - In Combat - Cast 'Summon Frozen Spheres'"),
+(@ENTRY,0,2,0,1,0,100,0,100,100,45000,45000,11,39550,0,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Spellbinder - Out of Combat - Cast 'Arcane Channeling'");
+
+-- Inquisitor Caleras SAI
+SET @ENTRY := 25720;
+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,0,0,100,0,0,0,3400,6200,11,15043,64,0,0,0,0,2,0,0,0,0,0,0,0,"Inquisitor Caleras - In Combat - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,0,0,100,0,9800,21300,18400,18400,11,32192,1,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Caleras - In Combat - Cast 'Frost Nova'"),
+(@ENTRY,0,2,0,1,0,100,0,100,100,45000,45000,11,39550,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Caleras - Out of Combat - Cast 'Arcane Channeling'");
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122676;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3839.049,`position_y`=6746.131,`position_z`=150.8772 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3839.049,6746.131,150.8772,0,0,0,0,100,0),
+(@PATH,2,3838.777,6746.075,150.6292,0,0,0,0,100,0),
+(@PATH,3,3838.793,6746.344,150.9143,0,0,0,0,100,0),
+(@PATH,4,3826.649,6753.63,150.9941,0,0,0,0,100,0),
+(@PATH,5,3811.169,6750.051,150.4951,0,0,0,0,100,0),
+(@PATH,6,3811.172,6750.112,150.299,0,0,0,0,100,0),
+(@PATH,7,3811.489,6750.411,150.5408,0,0,0,0,100,0),
+(@PATH,8,3826.923,6753.677,150.8951,0,0,0,0,100,0),
+(@PATH,9,3839.046,6746.012,150.8834,0,0,0,0,100,0),
+(@PATH,10,3838.777,6746.075,150.6292,0,0,0,0,100,0),
+(@PATH,11,3838.828,6746.229,150.9149,0,0,0,0,100,0),
+(@PATH,12,3826.723,6753.648,150.7468,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C00005924AC .go 3839.049 6746.131 150.8772
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122676;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122676, 122676, 0, 0, 2, 0, 0),
+(122676, 122662, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122680;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3863.127,`position_y`=6753.518,`position_z`=150.5189 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3863.127,6753.518,150.5189,0,0,0,0,100,0),
+(@PATH,2,3860.453,6741.29,150.7381,0,0,0,0,100,0),
+(@PATH,3,3875.973,6736.009,151.0474,0,0,0,0,100,0),
+(@PATH,4,3886.431,6727.403,151.3167,0,0,0,0,100,0),
+(@PATH,5,3886.167,6727.198,151.1895,0,0,0,0,100,0),
+(@PATH,6,3886.265,6727.485,151.3074,0,0,0,0,100,0),
+(@PATH,7,3875.836,6736.28,151.0612,0,0,0,0,100,0),
+(@PATH,8,3860.38,6741.66,150.7448,0,0,0,0,100,0),
+(@PATH,9,3862.974,6753.514,150.6811,0,0,0,0,100,0),
+(@PATH,10,3867.98,6753.716,150.6562,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C00005924B3 .go 3863.127 6753.518 150.5189
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122680;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122680, 122680, 0, 0, 2, 0, 0),
+(122680, 122665, 4, 0, 2, 0, 0);
+
+-- Pathing for Entry: 25719 'TDB FORMAT'
+SET @NPC := 122685;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3908.275,`position_y`=6757.146,`position_z`=150.8441 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3908.275,6757.146,150.8441,0,0,0,0,100,0),
+(@PATH,2,3893.045,6770.693,150.8547,0,0,0,0,100,0),
+(@PATH,3,3880.528,6782.54,150.7091,0,0,0,0,100,0),
+(@PATH,4,3880.478,6782.537,150.6073,0,0,0,0,100,0),
+(@PATH,5,3880.76,6782.527,150.8653,0,0,0,0,100,0),
+(@PATH,6,3893.34,6770.562,150.8441,0,0,0,0,100,0),
+(@PATH,7,3908.603,6756.879,150.896,0,0,0,0,100,0),
+(@PATH,8,3925.911,6721.284,153.766,0,0,0,0,100,0),
+(@PATH,9,3920.531,6713.925,153.515,0,0,0,0,100,0),
+(@PATH,10,3906.757,6706.551,151.9455,0,0,0,0,100,0),
+(@PATH,11,3894.688,6701.577,151.5052,0,0,0,0,100,0),
+(@PATH,12,3894.756,6701.676,151.4043,0,0,0,0,100,0),
+(@PATH,13,3916.371,6709.826,152.6267,0,0,0,0,100,0),
+(@PATH,14,3921.297,6714.496,153.5745,0,0,0,0,100,0),
+(@PATH,15,3929.399,6745.379,151.6542,0,0,0,0,100,0),
+(@PATH,16,3919.581,6752.038,150.9705,0,0,0,0,100,0),
+(@PATH,17,3908.269,6757.149,150.8441,0,0,0,0,100,0),
+(@PATH,18,3893.047,6770.691,150.8547,0,0,0,0,100,0),
+(@PATH,19,3880.51,6782.556,150.7091,0,0,0,0,100,0);
+-- 0x1C09144760191DC000000C00005932EB .go 3908.275 6757.146 150.8441
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=122685;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(122685, 122685, 0, 0, 2, 0, 0),
+(122685, 122670, 4, 0, 2, 0, 0);
+
+UPDATE `creature` SET `spawndist`=20 WHERE `guid`=122550;
+
+UPDATE `creature` SET `spawndist`=15 WHERE `id`=25721;
+
+-- Pathing for Entry: 25717 'TDB FORMAT'
+SET @NPC := 122652;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4071.958,`position_y`=7059.748,`position_z`=166.7365 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4071.958,7059.748,166.7365,0,0,0,0,100,0),
+(@PATH,2,4072.932,7060.661,166.5419,0,0,0,0,100,0),
+(@PATH,3,4087.155,7066.582,166.7904,0,0,0,0,100,0),
+(@PATH,4,4086.809,7066.466,166.6568,0,0,0,0,100,0),
+(@PATH,5,4086.776,7066.416,166.7174,0,0,0,0,100,0),
+(@PATH,6,4062.645,7049.889,167.7236,0,0,0,0,100,0),
+(@PATH,7,4054.082,7027.509,166.672,0,0,0,0,100,0),
+(@PATH,8,4059.144,7041.778,167.9961,0,0,0,0,100,0),
+(@PATH,9,4071.981,7059.813,166.7345,0,0,0,0,100,0);
+-- 0x1C09144760191D4000000C00005932C9 .go 4071.958 7059.748 166.7365
+
+-- General Cerulean SAI
+SET @ENTRY := 25716;
+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,0,0,100,0,10200,13600,10000,12000,11,15499,0,0,0,0,0,2,0,0,0,0,0,0,0,"General Cerulean - In Combat - Cast 'Frost Shock'"),
+(@ENTRY,0,1,0,1,0,100,0,100,100,45000,45000,11,39550,0,0,0,0,0,1,0,0,0,0,0,0,0,"General Cerulean - Out of Combat - Cast 'Arcane Channeling'");
+
+UPDATE `creature` SET `spawndist`=20 WHERE `guid` IN (122547, 122551);
+
+-- Pathing for Entry: 25713 'TDB FORMAT'
+SET @NPC := 122611;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3820.672,`position_y`=7153.959,`position_z`=163.4258 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3820.672,7153.959,163.4258,0,0,0,0,100,0),
+(@PATH,2,3816.873,7173.65,161.3409,0,0,0,0,100,0),
+(@PATH,3,3819.527,7160.829,162.4046,0,0,0,0,100,0),
+(@PATH,4,3821.152,7145.412,164.2622,0,0,0,0,100,0),
+(@PATH,5,3820.075,7133.457,165.5549,0,0,0,0,100,0),
+(@PATH,6,3819.108,7129.334,166.0357,0,0,0,0,100,0),
+(@PATH,7,3819.164,7129.457,165.8505,0,0,0,0,100,0),
+(@PATH,8,3820.722,7140.354,165.1108,0,0,0,0,100,0),
+(@PATH,9,3820.762,7154.072,163.3669,0,0,0,0,100,0),
+(@PATH,10,3816.832,7173.758,161.5131,0,0,0,0,100,0);
+-- 0x1C09144760191C4000000C0000590957 .go 3820.672 7153.959 163.4258
+
+-- Pathing for Entry: 25713 'TDB FORMAT'
+SET @NPC := 122643;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3715.234,`position_y`=7159.224,`position_z`=160.5815 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3715.234,7159.224,160.5815,0,0,0,0,100,0),
+(@PATH,2,3712.465,7168.071,160.3927,0,0,0,0,100,0),
+(@PATH,3,3711.697,7180.112,160.1553,0,0,0,0,100,0),
+(@PATH,4,3712.53,7195.874,160.5102,0,0,0,0,100,0),
+(@PATH,5,3712.202,7195.61,160.2491,0,0,0,0,100,0),
+(@PATH,6,3712.354,7195.505,160.5099,0,0,0,0,100,0),
+(@PATH,7,3711.637,7179.952,160.1052,0,0,0,0,100,0),
+(@PATH,8,3712.478,7167.976,160.2884,0,0,0,0,100,0),
+(@PATH,9,3715.501,7158.848,160.5296,0,0,0,0,100,0),
+(@PATH,10,3715.303,7158.94,160.4226,0,0,0,0,100,0),
+(@PATH,11,3715.255,7159.067,160.5904,0,0,0,0,100,0),
+(@PATH,12,3712.359,7168.119,160.3639,0,0,0,0,100,0),
+(@PATH,13,3711.62,7180.215,160.1398,0,0,0,0,100,0),
+(@PATH,14,3712.332,7195.925,160.5264,0,0,0,0,100,0);
+-- 0x1C09144760191C4000000C0000592DB7 .go 3715.234 7159.224 160.5815
+
+-- Warbringer Goredrak SAI
+SET @ENTRY := 25712;
+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,0,0,100,0,0,200,16900,21200,11,50534,0,0,0,0,0,2,0,0,0,0,0,0,0,"Warbringer Goredrak - In Combat - Cast 'Power Sap'"),
+(@ENTRY,0,1,0,0,0,100,0,5900,6700,16800,21200,11,50545,1,0,0,0,0,2,0,0,0,0,0,0,0,"Warbringer Goredrak - In Combat - Cast 'Arcane Blast'"),
+(@ENTRY,0,2,0,1,0,100,0,100,100,45000,45000,11,39550,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warbringer Goredrak - Out of Combat - Cast 'Arcane Channeling'");
+
+UPDATE `creature` SET `spawndist`=10 WHERE `guid`=122806;
+UPDATE `creature` SET `spawndist`=15 WHERE `guid` IN (122824, 122545);
+-- Pathing for Entry: 25709 'TDB FORMAT'
+SET @NPC := 122562;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3821.72,`position_y`=7226.874,`position_z`=165.7941 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3821.72,7226.874,165.7941,0,0,0,0,100,0),
+(@PATH,2,3840.45,7225.532,167.5351,0,0,0,0,100,0),
+(@PATH,3,3854.693,7219.692,168.801,0,0,0,0,100,0),
+(@PATH,4,3872.789,7201.074,168.0432,0,0,0,0,100,0),
+(@PATH,5,3877.849,7192.911,167.4686,0,0,0,0,100,0),
+(@PATH,6,3853.227,7162.686,166.2984,0,0,0,0,100,0),
+(@PATH,7,3831.403,7190.82,162.3192,0,0,0,0,100,0),
+(@PATH,8,3821.685,7226.815,165.7664,0,0,0,0,100,0);
+-- 0x1C09144760191B4000000C00005929B2 .go 3821.72 7226.874 165.7941
+
+-- Pathing for Entry: 25717 'TDB FORMAT'
+SET @NPC := 122655;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4158.797,`position_y`=7025.598,`position_z`=165.7506 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4158.797,7025.598,165.7506,0,0,0,0,100,0),
+(@PATH,2,4158.771,7025.846,166.0288,0,0,0,0,100,0),
+(@PATH,3,4149.362,7040.18,166.0216,0,0,0,0,100,0),
+(@PATH,4,4141.375,7046.86,165.9186,0,0,0,0,100,0),
+(@PATH,5,4128.7,7050.973,165.6986,0,0,0,0,100,0),
+(@PATH,6,4128.795,7050.833,165.5718,0,0,0,0,100,0),
+(@PATH,7,4129.043,7050.743,165.6772,0,0,0,0,100,0),
+(@PATH,8,4141.438,7046.565,166.0175,0,0,0,0,100,0),
+(@PATH,9,4149.486,7040.006,166.0294,0,0,0,0,100,0),
+(@PATH,10,4159.022,7025.654,165.9743,0,0,0,0,100,0);
+-- 0x1C09144760191D4000000C000059272B .go 4158.797 7025.598 165.7506
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_06_world.sql
new file mode 100644
index 00000000000..bcd42994ee2
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_06_world.sql
@@ -0,0 +1,58 @@
+--
+SET @NPC:= 25968;
+UPDATE `creature_template` SET `VehicleId`=30 WHERE `entry`=@NPC;
+DELETE FROM `vehicle_template_accessory` where `entry` in (@NPC) AND `accessory_entry` IN (25801);
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`) VALUES
+(@NPC,25801,0,0,'Lunchbox',8,0);
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` = @NPC;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
+(@NPC, 46598, 1, 0);
+
+-- Nedar, Lord of Rhinos SAI
+SET @ENTRY := 25801;
+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,4,0,100,1,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - On Aggro - Set Event Phase 1 (No Repeat)"),
+(@ENTRY,0,1,0,4,1,100,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - On Aggro - Say Line 0 (Phase 1) (No Repeat)"),
+(@ENTRY,0,2,0,4,1,100,1,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - On Aggro - Disable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,3,0,4,1,100,1,0,0,0,0,11,41440,0,0,0,0,0,2,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - On Aggro - Cast 'Shoot' (Phase 1) (No Repeat)"),
+(@ENTRY,0,4,0,9,1,100,0,5,30,3500,4100,11,41440,0,0,0,0,0,2,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - Within 5-30 Range - Cast 'Shoot' (Phase 1)"),
+(@ENTRY,0,5,0,9,1,100,0,30,100,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - Within 30-100 Range - Enable Combat Movement (Phase 1)"),
+(@ENTRY,0,6,0,9,1,100,0,9,15,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - Within 9-15 Range - Disable Combat Movement (Phase 1)"),
+(@ENTRY,0,7,0,9,1,100,0,0,5,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - Within 0-5 Range - Enable Combat Movement (Phase 1)"),
+(@ENTRY,0,8,0,9,1,100,0,5,30,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nedar, Lord of Rhinos - Within 5-30 Range - Disable Combat Movement (Phase 1)");
+-- Complete the Broadcast_text
+DELETE FROM `creature_text` WHERE `entry` IN (@ENTRY);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(@ENTRY, 0, 0, 'Your impetuousness will be your end!', 12, 0, 100, 0, 0, 0, 'Nedar', 25103),
+(@ENTRY, 0, 1, 'You dare challenge Nedar, lord of the tundral!?', 12, 0, 100, 0, 0, 0, 'Nedar', 25102),
+(@ENTRY, 0, 2, 'You don''t stand a chance!', 12, 0, 100, 0, 0, 0, 'Nedar', 25104);
+
+-- Pathing for Entry: 25968 'TDB FORMAT'
+SET @NPC := 106302;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3170.232,`position_y`=5968.757,`position_z`=96.36165 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3170.232,5968.757,96.36165,0,0,0,0,100,0),
+(@PATH,2,3159.33,5950.815,95.96857,0,0,0,0,100,0),
+(@PATH,3,3162.685,5902.838,96.0918,0,0,0,0,100,0),
+(@PATH,4,3169.452,5888.983,97.71611,0,0,0,0,100,0),
+(@PATH,5,3204.079,5874.618,97.02065,0,0,0,0,100,0),
+(@PATH,6,3238.726,5868.98,94.07452,0,0,0,0,100,0),
+(@PATH,7,3266.804,5867.507,86.87187,0,0,0,0,100,0),
+(@PATH,8,3300.308,5874.12,83.72194,0,0,0,0,100,0),
+(@PATH,9,3328.993,5853.078,78.86817,0,0,0,0,100,0),
+(@PATH,10,3344.677,5812.18,67.82541,0,0,0,0,100,0),
+(@PATH,11,3341.184,5774.667,61.2993,0,0,0,0,100,0),
+(@PATH,12,3357.205,5767.466,65.42284,0,0,0,0,100,0),
+(@PATH,13,3357.227,5799.264,67.74834,0,0,0,0,100,0),
+(@PATH,14,3359.967,5824.072,71.90356,0,0,0,0,100,0),
+(@PATH,15,3354.479,5873.997,76.9686,0,0,0,0,100,0),
+(@PATH,16,3341.863,5907.724,79.92758,0,0,0,0,100,0),
+(@PATH,17,3316.034,5925.089,85.70946,0,0,0,0,100,0),
+(@PATH,18,3293.812,5947.116,82.76896,0,0,0,0,100,0);
+-- 0x2009144760195C0000000C000057E949 .go 3170.232 5968.757 96.36165
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_07_world.sql
new file mode 100644
index 00000000000..87a59e4440e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_07_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `creature` SET `MovementType`=0 WHERE `guid` IN (126701,126703,126711);
+UPDATE `creature` SET `equipment_id`=0 WHERE `id` IN (12237, 12224);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_08_world.sql
new file mode 100644
index 00000000000..647e89253f5
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_08_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `creature` SET `MovementType`=0 WHERE `guid` = 58021;
+UPDATE `creature` SET `MovementType`=1 WHERE `guid` IN (122545, 122824);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_09_world.sql
new file mode 100644
index 00000000000..9ba05c77e41
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_09_world.sql
@@ -0,0 +1,4 @@
+--
+UPDATE `creature_template` SET `unit_class`=4 WHERE `entry`=32535;
+UPDATE `creature_template_addon` SET`auras`="" WHERE`entry` IN (26608, 31306); -- vehicle auras appear only when the npc ride a vehicle or when he's mounted
+UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry`=35427;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_00_world.sql
new file mode 100644
index 00000000000..271a5b8be94
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_00_world.sql
@@ -0,0 +1,12 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=49947;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 49947, 0, 0, 31, 0, 3, 19871, 0, 0, 0, 0, '', 'Laser - only targets Bunny');
+
+-- Scavenge-bot 004-A8 SAI
+SET @ENTRY := 25752;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id` >=3;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,3,0,1,0,100,0,5000,5000,15000,20000,11,49947,0,0,0,0,0,19,19871,25,0,0,0,0,0,"Scavenge-bot 004-A8 - Out of Combat - Cast 'Cutting Laser'"),
+(@ENTRY,0,4,0,1,0,100,0,20000,25000,35000,40000,5,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scavenge-bot 004-A8 - Out of Combat - Play Emote 35");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_01_world.sql
new file mode 100644
index 00000000000..5932d48ef5e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_01_world.sql
@@ -0,0 +1,100 @@
+-- Pathing for Stonebreaker Grunt Entry: 18973 'TDB FORMAT'
+SET @NPC := 68131;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2562.284,`position_y`=4397.473,`position_z`=58.68661 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2562.284,4397.473,58.68661,0,0,0,0,100,0),
+(@PATH,2,-2551.224,4407.652,53.44283,0,0,0,0,100,0),
+(@PATH,3,-2547.335,4405.842,52.35535,0,0,0,0,100,0),
+(@PATH,4,-2543.202,4397.742,52.17545,0,0,0,0,100,0),
+(@PATH,5,-2547.734,4388.876,52.18408,0,0,0,0,100,0),
+(@PATH,6,-2556.611,4386.977,52.1886,0,0,0,0,100,0),
+(@PATH,7,-2556.627,4386.753,51.9386,0,0,0,0,100,0),
+(@PATH,8,-2556.481,4387.06,52.1886,0,0,0,0,100,0),
+(@PATH,9,-2543.486,4397,52.17455,0,0,0,0,100,0),
+(@PATH,10,-2547.152,4405.732,52.17457,0,0,0,0,100,0),
+(@PATH,11,-2558.628,4405.742,57.89645,0,0,0,0,100,0),
+(@PATH,12,-2562.429,4397.533,58.73559,0,0,0,0,100,0),
+(@PATH,13,-2562.816,4394.701,58.72124,0,0,0,0,100,0),
+(@PATH,14,-2547.645,4388.162,58.39926,0,0,0,0,100,0),
+(@PATH,15,-2545.306,4391.472,58.38942,0,0,0,0,100,0),
+(@PATH,16,-2543.268,4397.77,58.69866,0,0,0,0,100,0),
+(@PATH,17,-2543.174,4397.481,58.44216,0,0,0,0,100,0),
+(@PATH,18,-2545.374,4391.247,58.40757,0,0,0,0,100,0),
+(@PATH,19,-2554.22,4387.671,58.65759,0,0,0,0,100,0),
+(@PATH,20,-2562.223,4394.01,58.45053,0,0,0,0,100,0),
+(@PATH,21,-2562.396,4397.497,58.69535,0,0,0,0,100,0),
+(@PATH,22,-2551.103,4407.721,53.44612,0,0,0,0,100,0),
+(@PATH,23,-2547.447,4405.818,52.24909,0,0,0,0,100,0),
+(@PATH,24,-2543.19,4397.657,52.17642,0,0,0,0,100,0),
+(@PATH,25,-2547.777,4388.548,52.18584,0,0,0,0,100,0),
+(@PATH,26,-2556.725,4387.103,52.1886,0,0,0,0,100,0),
+(@PATH,27,-2556.627,4386.753,51.9386,0,0,0,0,100,0),
+(@PATH,28,-2556.351,4386.949,52.1886,0,0,0,0,100,0),
+(@PATH,29,-2543.485,4397.102,52.17455,0,0,0,0,100,0),
+(@PATH,30,-2547.133,4405.784,52.17457,0,0,0,0,100,0),
+(@PATH,31,-2558.618,4405.514,57.89614,0,0,0,0,100,0),
+(@PATH,32,-2562.308,4397.42,58.72334,0,0,0,0,100,0),
+(@PATH,33,-2562.909,4394.518,58.71896,0,0,0,0,100,0),
+(@PATH,34,-2547.697,4388.187,58.39987,0,0,0,0,100,0),
+(@PATH,35,-2545.525,4391.353,58.41209,0,0,0,0,100,0),
+(@PATH,36,-2543.177,4397.777,58.7028,0,0,0,0,100,0),
+(@PATH,37,-2543.174,4397.481,58.44216,0,0,0,0,100,0),
+(@PATH,38,-2545.295,4391.392,58.40459,0,0,0,0,100,0),
+(@PATH,39,-2554.367,4387.682,58.65977,0,0,0,0,100,0),
+(@PATH,40,-2562.382,4393.967,58.45837,0,0,0,0,100,0);
+-- 0x1C3930424012874000002C0003BF2EBC .go -2562.284 4397.473 58.68661
+
+-- Pathing for Stonebreaker Grunt Entry: 18973 'TDB FORMAT'
+SET @NPC := 68132;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2582.699,`position_y`=4367.507,`position_z`=27.14433 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2582.699,4367.507,27.14433,240000,0,0,0,100,0),
+(@PATH,2,-2595.828,4382.915,29.9575,0,0,0,0,100,0),
+(@PATH,3,-2613.849,4391.314,33.12907,0,0,0,0,100,0),
+(@PATH,4,-2632.729,4386.462,35.28672,0,0,0,0,100,0),
+(@PATH,5,-2636.813,4385.448,35.57519,0,0,0,0,100,0),
+(@PATH,6,-2667.237,4407.722,35.60794,0,0,0,0,100,0),
+(@PATH,7,-2701.92,4386.847,28.3668,0,0,0,0,100,0),
+(@PATH,8,-2708.737,4383.311,26.62656,0,0,0,0,100,0),
+(@PATH,9,-2671.687,4406.917,35.27893,0,0,0,0,100,0),
+(@PATH,10,-2638.984,4412.332,35.20811,0,0,0,0,100,0),
+(@PATH,11,-2613.415,4394.945,33.2278,0,0,0,0,100,0),
+(@PATH,12,-2591.59,4381.07,29.3395,0,0,0,0,100,0);
+-- 0x1C3930424012874000002C00023F2EBA .go -2582.699 4367.507 27.14433
+
+-- Pathing for Stonebreaker Peon Entry: 19048 'TDB FORMAT'
+SET @NPC := 68353;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2607.763,`position_y`=4381.312,`position_z`=33.58602 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2607.763,4381.312,33.58602,0,0,0,0,100,0),
+(@PATH,2,-2633.11,4379.769,35.77549,0,0,0,0,100,0),
+(@PATH,3,-2634.318,4379.514,35.83887,0,0,0,0,100,0),
+(@PATH,4,-2647.237,4382.08,36.08328,0,240000,0,0,100,0),
+(@PATH,5,-2642.319,4381.9,35.72264,0,0,0,0,100,0),
+(@PATH,6,-2642.08,4381.872,35.9688,0,0,0,0,100,0),
+(@PATH,7,-2607.333,4387.602,31.9885,0,0,0,0,100,0),
+(@PATH,8,-2603.056,4389.318,31.18134,0,0,0,0,100,0),
+(@PATH,9,-2598.985,4391.519,30.64458,0,240000,0,0,100,0),
+(@PATH,10,-2592.19,4391.983,30.50177,0,240000,0,0,100,0),
+(@PATH,11,-2568.814,4388.118,33.5708,0,0,0,0,100,0),
+(@PATH,12,-2567.081,4387.359,34.20564,0,240000,0,0,100,0);
+-- 0x1C39304240129A0000002C00023F2EBC .go -2607.763 4381.312 33.58602
+
+-- Update Keb'ezil's movement, he should be running around as an imp.
+UPDATE `creature` SET `MovementType`=1 WHERE `guid`=66944;
+UPDATE `creature` SET `spawndist`=5 WHERE `guid`=66944;
+
+-- Update coordinates of Ru'zah
+UPDATE `creature` SET `position_x`=-2627.9, `position_y`=4486.034, `position_z`=36.21471 WHERE `guid`=74329;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_02_world.sql
new file mode 100644
index 00000000000..8db79bc0c8f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_02_world.sql
@@ -0,0 +1,153 @@
+-- Urdak SAI
+SET @ENTRY := 18541;
+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,1,0,100,1,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Out of Combat - Enable Combat Movement (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,1,0,0,0,0,11,32924,1,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - In Combat - Cast 'Power of Kran'aish' (No Repeat)"),
+(@ENTRY,0,2,3,4,0,100,1,0,0,0,0,11,38465,0,0,0,0,0,2,0,0,0,0,0,0,0,"Urdak - On Aggro - Cast 'Lightning Bolt' (No Repeat)"),
+(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - On Aggro - Increment Phase By 1 (No Repeat)"),
+(@ENTRY,0,4,0,9,1,100,0,0,40,2400,3800,11,38465,0,0,0,0,0,2,0,0,0,0,0,0,0,"Urdak - Within 0-40 Range - Cast 'Lightning Bolt' (No Repeat)"),
+(@ENTRY,0,5,6,3,1,100,1,0,15,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Between 0-15% Mana - Enable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,6,0,61,1,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Between 0-15% Mana - Increment Phase By 1 (Phase 1) (No Repeat)"),
+(@ENTRY,0,7,0,9,1,100,1,35,80,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Within 35-80 Range - Enable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,8,0,9,1,100,1,5,15,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Within 5-15 Range - Disable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,9,0,9,1,100,1,0,5,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Within 0-5 Range - Enable Combat Movement (Phase 1) (No Repeat)"),
+(@ENTRY,0,10,0,3,2,100,0,30,100,100,100,23,0,1,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Between 30-100% Mana - Decrement Phase By 1 (Phase 1) (No Repeat)"),
+(@ENTRY,0,11,0,0,0,100,0,6000,10000,12000,16000,11,32907,1,0,0,0,0,2,0,0,0,0,0,0,0,"Urdak - In Combat - Cast 'Arakkoa Blast' (Phase 1) (No Repeat)"),
+(@ENTRY,0,12,0,0,0,100,0,10000,14000,18000,25000,11,6728,1,0,0,0,0,6,0,0,0,0,0,0,0,"Urdak - In Combat - Cast 'Enveloping Winds' (Phase 1) (No Repeat)"),
+(@ENTRY,0,13,14,2,0,100,1,0,15,0,0,22,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Between 0-15% Health - Set Event Phase 3 (No Repeat)"),
+(@ENTRY,0,14,15,61,0,100,0,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Urdak - Between 0-15% Health - Enable Combat Movement (No Repeat)"),
+(@ENTRY,0,15,0,61,0,100,0,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Urdak - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Pathing for Urdak Entry: 18541 'TDB FORMAT'
+SET @NPC := 66701;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2531.757,`position_y`=5367.723,`position_z`=27.48038 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2531.757,5367.723,27.48038,0,0,0,0,100,0),
+(@PATH,2,-2522.244,5363.866,27.5043,0,0,0,0,100,0),
+(@PATH,3,-2511.568,5370.136,27.19551,0,0,0,0,100,0),
+(@PATH,4,-2509.842,5376.426,27.17996,0,0,0,0,100,0),
+(@PATH,5,-2514.843,5388.665,27.42471,0,0,0,0,100,0),
+(@PATH,6,-2525.896,5389.706,27.21724,0,0,0,0,100,0),
+(@PATH,7,-2531.956,5386.355,27.44649,0,0,0,0,100,0),
+(@PATH,8,-2535.825,5377.078,27.48491,0,0,0,0,100,0);
+-- 0x1C39304240121B400000D00000395D5F .go -2531.757 5367.723 27.48038
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=66960;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(66960, 66960, 0, 0, 2),
+(66960, 57334, 3, 270, 2);
+
+-- Pathing for Shadowy Hunter Entry: 18718 'TDB FORMAT'
+SET @NPC := 66960;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2399.251,`position_y`=4948.647,`position_z`=33.51818 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2399.251,4948.647,33.51818,0,0,0,0,100,0),
+(@PATH,2,-2382.013,4957.111,36.26661,0,0,0,0,100,0),
+(@PATH,3,-2386.387,4964.082,33.5477,0,0,0,0,100,0),
+(@PATH,4,-2396.421,4967.332,32.63216,0,0,0,0,100,0),
+(@PATH,5,-2404.207,4968.344,32.13279,0,0,0,0,100,0),
+(@PATH,6,-2411.476,4973.782,31.9511,0,0,0,0,100,0),
+(@PATH,7,-2419.75,5004.045,29.51139,0,0,0,0,100,0),
+(@PATH,8,-2423.043,5009.497,29.88427,0,0,0,0,100,0),
+(@PATH,9,-2425.305,5012.542,29.87346,0,0,0,0,100,0),
+(@PATH,10,-2452.268,5014.185,28.21556,0,0,0,0,100,0),
+(@PATH,11,-2455.99,5026.977,25.38416,0,0,0,0,100,0),
+(@PATH,12,-2461.66,5046.541,20.78516,0,0,0,0,100,0),
+(@PATH,13,-2468.601,5062.008,17.91999,0,0,0,0,100,0),
+(@PATH,14,-2471.484,5074.755,15.08363,0,0,0,0,100,0),
+(@PATH,15,-2462.648,5034.314,23.94722,0,0,0,0,100,0),
+(@PATH,16,-2458.38,5013.544,27.85468,0,0,0,0,100,0),
+(@PATH,17,-2460.833,5004.856,28.65945,0,0,0,0,100,0),
+(@PATH,18,-2468.316,4978.999,31.72539,0,0,0,0,100,0),
+(@PATH,19,-2469.694,4960.631,33.31852,0,0,0,0,100,0),
+(@PATH,20,-2466.243,4944.808,34.89827,0,0,0,0,100,0),
+(@PATH,21,-2466.676,4930.218,36.72472,0,0,0,0,100,0),
+(@PATH,22,-2473.81,4922.928,38.69386,0,0,0,0,100,0),
+(@PATH,23,-2476.339,4921.196,39.03951,0,0,0,0,100,0),
+(@PATH,24,-2486.696,4911.087,38.99028,0,0,0,0,100,0),
+(@PATH,25,-2488.085,4899.312,39.16518,0,0,0,0,100,0),
+(@PATH,26,-2466.59,4887.837,36.24532,0,0,0,0,100,0),
+(@PATH,27,-2459.039,4893.131,34.30416,0,0,0,0,100,0),
+(@PATH,28,-2456.6,4895.325,33.89172,0,0,0,0,100,0),
+(@PATH,29,-2455.763,4912.572,33.6131,0,0,0,0,100,0),
+(@PATH,30,-2459.973,4922.549,33.84817,0,0,0,0,100,0),
+(@PATH,31,-2454.409,4941.216,34.89568,0,0,0,0,100,0),
+(@PATH,32,-2453.032,4942.258,34.88249,0,0,0,0,100,0),
+(@PATH,33,-2441.288,4944.204,34.91498,0,0,0,0,100,0),
+(@PATH,34,-2424.706,4957.187,34.11639,0,0,0,0,100,0),
+(@PATH,35,-2420.334,4960.088,33.7532,0,0,0,0,100,0),
+(@PATH,36,-2399.827,4949.04,33.55933,0,0,0,0,100,0);
+-- 0x1C393042401247800000D80000395139 .go -2399.251 4948.647 33.51818
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=66959;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(66959, 66959, 0, 0, 2),
+(66959, 57324, 3, 270, 2);
+
+-- Pathing for Shadowy Hunter Entry: 18718 'TDB FORMAT'
+SET @NPC := 66959;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2458.59,`position_y`=4883.933,`position_z`=34.63649 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2458.59,4883.933,34.63649,0,0,0,0,100,0),
+(@PATH,2,-2454.139,4881.942,34.18031,0,0,0,0,100,0),
+(@PATH,3,-2441.338,4867.939,34.96668,0,0,0,0,100,0),
+(@PATH,4,-2447.259,4881.18,33.54724,0,0,0,0,100,0),
+(@PATH,5,-2454.204,4888.805,33.82166,0,0,0,0,100,0),
+(@PATH,6,-2455.784,4897.667,33.77719,0,0,0,0,100,0),
+(@PATH,7,-2455.145,4910.682,33.57897,0,0,0,0,100,0),
+(@PATH,8,-2459.188,4921.684,33.73078,0,0,0,0,100,0),
+(@PATH,9,-2455.591,4939.817,34.61909,0,0,0,0,100,0),
+(@PATH,10,-2453.116,4941.684,35.0243,0,0,0,0,100,0),
+(@PATH,11,-2443.437,4943.616,34.76263,0,0,0,0,100,0),
+(@PATH,12,-2431.095,4940.732,36.18304,0,0,0,0,100,0),
+(@PATH,13,-2422.104,4931.316,35.36322,0,0,0,0,100,0),
+(@PATH,14,-2418.187,4924.916,36.3769,0,0,0,0,100,0),
+(@PATH,15,-2425.994,4937.722,36.55001,0,0,0,0,100,0),
+(@PATH,16,-2430.061,4945.802,35.26893,0,0,0,0,100,0),
+(@PATH,17,-2429.3,4947.917,34.86908,0,0,0,0,100,0),
+(@PATH,18,-2424.078,4963.271,33.09982,0,0,0,0,100,0),
+(@PATH,19,-2421.393,4974.704,31.43381,0,0,0,0,100,0),
+(@PATH,20,-2421.332,4975.644,31.21901,0,0,0,0,100,0),
+(@PATH,21,-2418.137,5000.565,30.00104,0,0,0,0,100,0),
+(@PATH,22,-2417.527,5002.019,29.37036,0,0,0,0,100,0),
+(@PATH,23,-2416.402,5010.205,29.2325,0,0,0,0,100,0),
+(@PATH,24,-2417.669,5014.722,28.97691,0,0,0,0,100,0),
+(@PATH,25,-2428.226,5012.224,29.9898,0,0,0,0,100,0),
+(@PATH,26,-2444.966,5008.044,29.51899,0,0,0,0,100,0),
+(@PATH,27,-2453.993,5013.485,28.19345,0,0,0,0,100,0),
+(@PATH,28,-2456.664,5023.554,26.07574,0,0,0,0,100,0),
+(@PATH,29,-2459.761,5038.568,22.79576,0,0,0,0,100,0),
+(@PATH,30,-2465.731,5053.402,19.17121,0,0,0,0,100,0),
+(@PATH,31,-2467.348,5032.213,24.09672,0,0,0,0,100,0),
+(@PATH,32,-2467.405,5023.126,25.73068,0,0,0,0,100,0),
+(@PATH,33,-2467.814,5012.714,28.07976,0,0,0,0,100,0),
+(@PATH,34,-2470.525,4997.041,29.28029,0,0,0,0,100,0),
+(@PATH,35,-2471.126,4980.461,31.38793,0,0,0,0,100,0),
+(@PATH,36,-2477.811,4974.808,32.3695,0,0,0,0,100,0),
+(@PATH,37,-2497.777,4966.848,35.28411,0,0,0,0,100,0),
+(@PATH,38,-2506.064,4953.317,38.70324,0,0,0,0,100,0),
+(@PATH,39,-2510.001,4942.142,39.95487,0,0,0,0,100,0),
+(@PATH,40,-2510.834,4938.938,40.30884,0,0,0,0,100,0),
+(@PATH,41,-2510.035,4921.547,39.56293,0,0,0,0,100,0),
+(@PATH,42,-2510.577,4918.453,39.31087,0,0,0,0,100,0),
+(@PATH,43,-2507.691,4905.567,39.31522,0,0,0,0,100,0),
+(@PATH,44,-2500.221,4899.546,39.09933,0,0,0,0,100,0),
+(@PATH,45,-2490.795,4896.659,39.47167,0,0,0,0,100,0);
+-- 0x1C393042401247800000D800003955BB .go -2458.59 4883.933 34.63649
+
+-- Remove 1 too many 'Shadowy Executioner'
+DELETE FROM `creature` WHERE `guid`=57323;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_03_world.sql
new file mode 100644
index 00000000000..d748355d624
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_03_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `disables` WHERE `sourceType` =0 AND `entry` IN (71599, 71024) AND `flags`=64;
+INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES
+(0, 71599, 64, '', '', 'Ignore LOS for Cosmetic - Explosion (Chemical Wagon)'),
+(0, 71024, 64, '', '', 'Ignore LOS for Throw Bomb');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_04_world.sql
new file mode 100644
index 00000000000..f94edb80882
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_04_world.sql
@@ -0,0 +1,44 @@
+--
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=26191;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
+(26191, 46978, 2, 0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=26191 AND `SourceEntry`=46978;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(18, 26191, 46978, 0, 0, 9, 0, 11956, 0, 0, 0, 0, 0, '', 'Required quest ''Finding the Phylactery'' active for spellclick');
+
+UPDATE `creature_template` SET `minlevel`=80, `maxlevel`=80, `rank`=3, `speed_walk`=2.5, `speed_run`=2.5 WHERE `entry`=28182;
+
+-- Dusk SAI
+SET @ENTRY := 28182;
+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,0,0,0,0,0,53,1,28182,0,0,0,0,1,0,0,0,0,0,0,0,"Dusk - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,21,28182,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dusk - On Waypoint 21 Reached - Despawn Instant"),
+(@ENTRY,0,2,0,54,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dusk - On Just Summoned - Set Reactstate Passive"),
+(@ENTRY,0,3,0,28,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dusk - On Passenger Removed - Despawn Instant");
+
+DELETE FROM `waypoints` WHERE `entry`=28182;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(28182, 1,3137.103,3835.605,23.80482, 'Dusk'),
+(28182, 2,3151.105,3841.837,26.15598, 'Dusk'),
+(28182, 3,3190.882,3844.668,28.8679, 'Dusk'),
+(28182, 4,3232.1,3838.992,27.33721, 'Dusk'),
+(28182, 5,3282.762,3832.855,27.20968, 'Dusk'),
+(28182, 6,3307.908,3829.667,28.43119, 'Dusk'),
+(28182, 7,3340.627,3826.012,25.35527, 'Dusk'),
+(28182, 8,3352.079,3823.348,27.22523, 'Dusk'),
+(28182, 9,3399.218,3818.613,27.66385, 'Dusk'),
+(28182, 10,3439.386,3828.509,27.79152, 'Dusk'),
+(28182, 11,3456.517,3835.027,29.58427, 'Dusk'),
+(28182, 12,3482.749,3841.445,32.40864, 'Dusk'),
+(28182, 13,3531.002,3843.39,33.53048, 'Dusk'),
+(28182, 14,3549.508,3830.051,39.22393, 'Dusk'),
+(28182, 15,3561.163,3818.268,40.28746, 'Dusk'),
+(28182, 16,3573.922,3785.856,36.752, 'Dusk'),
+(28182, 17,3574.622,3781.316,36.74898, 'Dusk'),
+(28182, 18,3583.712,3758.963,36.55262, 'Dusk'),
+(28182, 19,3603.148,3712.664,36.74012, 'Dusk'),
+(28182, 20,3605.655,3702.697,36.80239, 'Dusk'),
+(28182, 21,3618.601,3670.745,35.97186, 'Dusk');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_05_world.sql
new file mode 100644
index 00000000000..3f0d52d3054
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_05_world.sql
@@ -0,0 +1,4 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=10 AND `SourceGroup`=10016 AND `SourceEntry`=46004;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(10, 10016, 46004, 0, 0, 8, 0, 13845, 0, 0, 1, 0, 0, '', 'Sealed vial of poison only drops if player is not rewarded for quest sealed vial of poison');
+UPDATE `gossip_menu_option` SET `npc_option_npcflag`=1 WHERE `menu_id`=9546 AND `id`=1;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_00_world.sql
new file mode 100644
index 00000000000..ee05a6eb020
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `target_type`=2 WHERE `entryorguid`=28557 AND `source_type`=0 AND `id`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_01_world.sql
new file mode 100644
index 00000000000..8ce5742c7a3
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_01_world.sql
@@ -0,0 +1,4 @@
+-- Fix 'Teleport to Lake Wintergrasp'
+DELETE FROM `spell_scripts` WHERE `id`=58622;
+INSERT INTO `spell_scripts` (`id`, `effIndex`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES
+(58622, 0, 1, 6, 571, 0, 0, 5386.05, 2840.97, 418.675, 3.14159);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_02_world.sql
new file mode 100644
index 00000000000..8b9ed71efea
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_02_world.sql
@@ -0,0 +1,6 @@
+-- Magnataur Huntress SAI
+SET @ENTRY := 24469;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,2,0,8,0,100,0,46012,0,0,0,36,25788,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magnataur Huntress - On Spellhit 'Bloodspore Poison' - Update Template To 'Weakened Magnataur Huntress'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_03_world.sql
new file mode 100644
index 00000000000..e8759e9037a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_03_world.sql
@@ -0,0 +1,14 @@
+-- Festering Corpse SAI
+SET @ENTRY := 31130;
+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,8,0,100,1,58641,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Festering Corpse - On Spellhit 'Olakin's Torch' - Run Script (No Repeat)");
+
+-- Actionlist SAI
+SET @ENTRY := 3113000;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,11,59216,0,0,0,0,0,1,0,0,0,0,0,0,0,"Festering Corpse - On Script - Cast 'Burning Corpse'"),
+(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,33,31130,0,0,0,0,0,7,0,0,0,0,0,0,0,"Festering Corpse - On Script - Quest Credit 'By Fire Be Purged'"),
+(@ENTRY,9,2,0,0,0,100,0,6000,9000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Festering Corpse - On Script - Despawn Instant");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_04_world.sql
new file mode 100644
index 00000000000..d841e98f914
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_04_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `event_scripts` WHERE `id` = 14394;
+INSERT INTO `event_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES
+(14394,0,8,22395,0,0,0,0,0,0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_05_world.sql
new file mode 100644
index 00000000000..1d7d3bb3cf7
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_05_world.sql
@@ -0,0 +1,37 @@
+--
+UPDATE `creature_template` SET `npcflag`=16777217, `InhabitType`=4 WHERE `entry`=27923;
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=27923;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES
+(27923,46598,1,1);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9045 AND `SourceEntry`=0 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=8 AND `ConditionTarget`=0 AND `ConditionValue1`=11509 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9045 AND `SourceEntry`=0 AND `SourceId`=0 AND `ElseGroup`=1 AND `ConditionTypeOrReference`=28 AND `ConditionTarget`=0 AND `ConditionValue1`=11509 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES (15, 9045, 0, 0, 0, 8, 0, 11509, 0, 0, 0, 0, 0, '', 'Lou the Cabin Boy - Show gossip option only if player has taken quest 11509');
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES (15, 9045, 0, 0, 1, 28, 0, 11509, 0, 0, 0, 0, 0, '', 'Lou the Cabin Boy - Show gossip option only if player has taken quest 11509');
+
+-- Lou the Cabin Boy SAI
+SET @ENTRY := 27923;
+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,0,0,0,0,0,53,1,27923,0,0,0,0,1,0,0,0,0,0,0,0,"Lou the Cabin Boy - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,1,0,28,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lou the Cabin Boy - On Passenger Removed - Despawn Instant"),
+(@ENTRY,0,2,0,54,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lou the Cabin Boy - On Just Summoned - Set Reactstate Passive"),
+(@ENTRY,0,3,0,40,0,100,0,13,27923,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lou the Cabin Boy - On Waypoint 13 Reached - Despawn Instant");
+
+DELETE FROM `waypoints` WHERE `entry`=27923;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(27923, 1, 556.8802, -2811.598, -0.076807, 'Lou'),
+(27923, 2, 482.0306, -2834.213, -0.049029, 'Lou'),
+(27923, 3, 454.4951, -2891.859, -0.049029, 'Lou'),
+(27923, 4, 335.4129, -2946.441, -0.049029, 'Lou'),
+(27923, 5, 262.8804, -3016.949, -0.021251, 'Lou'),
+(27923, 6, 147.2193, -3176.037, -0.049029, 'Lou'),
+(27923, 7, 86.28928, -3239.844, -0.021251, 'Lou'),
+(27923, 8, -22.49794, -3241.448, -0.076807, 'Lou'),
+(27923, 9, -151.2886, -3296.966, 0.006526, 'Lou'),
+(27923, 10, -195.9667, -3366.19, -0.132362, 'Lou'),
+(27923, 11, -255.5049, -3519.14, -0.021251, 'Lou'),
+(27923, 12, -217.6928, -3555.593, -0.076807, 'Lou'),
+(27923, 13, -201.783, -3548.484, -0.021251, 'Lou');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_06_world.sql
new file mode 100644
index 00000000000..d6eaf64d14e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_06_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `spell1`=52331,`spell2`=52358,`spell3`=53032,`spell4`=52327,`spell5`=52321 WHERE `entry`=28115;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_07_world.sql
new file mode 100644
index 00000000000..7fc438ed015
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_07_world.sql
@@ -0,0 +1,53 @@
+-- Dawnblade Marksman SAI
+SET @ENTRY := 24979;
+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,10,0,100,0,0,70,7000,13000,11,45101,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dawnblade Marksman - Within 0-70 Range Out of Combat LoS - Cast 'Flaming Arrow'"),
+(@ENTRY,0,1,0,1,0,100,0,3000,3000,5000,5000,11,45101,0,0,0,0,0,19,5202,26,0,0,0,0,0,"Dawnblade Marksman - Out of Combat - Cast 'Flaming Arrow'");
+
+-- Pathing for Entry: 25001 'TDB FORMAT'
+SET @NPC := 93967;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=12616.02,`position_y`=-6826.477,`position_z`=13.30631 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,12616.02,-6826.477,13.30631,0,0,0,0,100,0),
+(@PATH,2,12615.95,-6826.547,13.58466,0,0,0,0,100,0),
+(@PATH,3,12607.38,-6830.652,13.76608,0,0,0,0,100,0),
+(@PATH,4,12591.51,-6834.896,13.87594,0,0,0,0,100,0),
+(@PATH,5,12566.56,-6827.448,16.54662,0,0,0,0,100,0),
+(@PATH,6,12579.94,-6832.642,14.98803,0,0,0,0,100,0),
+(@PATH,7,12584.21,-6834.116,14.20888,0,0,0,0,100,0),
+(@PATH,8,12591.75,-6834.886,13.74139,0,0,0,0,100,0),
+(@PATH,9,12607.81,-6830.203,13.69277,0,0,0,0,100,0),
+(@PATH,10,12616.39,-6826.547,13.49831,0,0,0,0,100,0),
+(@PATH,11,12616.02,-6826.477,13.30631,0,0,0,0,100,0),
+(@PATH,12,12615.95,-6826.547,13.5846,0,0,0,0,100,0),
+(@PATH,13,12607.6,-6830.664,13.76679,0,0,0,0,100,0),
+(@PATH,14,12591.65,-6834.927,13.87652,0,0,0,0,100,0),
+(@PATH,15,12566.47,-6827.438,16.55291,0,0,0,0,100,0),
+(@PATH,16,12579.94,-6832.642,14.98803,0,0,0,0,100,0),
+(@PATH,17,12584.21,-6834.114,14.20937,0,0,0,0,100,0),
+(@PATH,18,12591.73,-6834.884,13.74244,0,0,0,0,100,0),
+(@PATH,19,12607.78,-6830.21,13.69292,0,0,0,0,100,0),
+(@PATH,20,12616.38,-6826.549,13.49841,0,0,0,0,100,0),
+(@PATH,21,12616.02,-6826.477,13.30631,0,0,0,0,100,0),
+(@PATH,22,12615.95,-6826.547,13.58466,0,0,0,0,100,0),
+(@PATH,23,12607.59,-6830.418,13.76704,0,0,0,0,100,0);
+-- 0x1C09084240186A4000002E000055E86A .go 12616.02 -6826.477 13.30631
+
+-- Pathing for Entry: 25001 'TDB FORMAT'
+SET @NPC := 93966;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=12488.71,`position_y`=-6887.34,`position_z`=16.40788 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,12488.71,-6887.34,16.40788,0,0,0,0,100,0),
+(@PATH,2,12495.96,-6887.744,16.62086,0,0,0,0,100,0),
+(@PATH,3,12491.32,-6874.924,17.07642,0,0,0,0,100,0);
+-- 0x1C09084240186A4000002E0000558FDB .go 12488.71 -6887.34 16.40788
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_08_world.sql
new file mode 100644
index 00000000000..70c51199c8c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_08_world.sql
@@ -0,0 +1,68 @@
+--
+SET @Ameer :=20482; -- Image of Commander Ameer
+SET @SpellSummon:=35679; -- Summons Protectorate.
+SET @Protectorate:=20802; -- Protectorate Demolitionist
+SET @Cleave :=30619; -- Protectorate Demolitionist's Cleave
+SET @Hamstring :=31553; -- Protectorate Demolitionist's Hamstring
+SET @Strike :=16856; -- Protectorate Demolitionist's Mortal Striket
+SET @Stalker :=20474; -- Ethereum Nexus-Stalker
+SET @Sshadowtouched:=36515; -- Ethereum Nexus-Stalker's Shadowtouched
+SET @Sshadowsurge:=36517; -- Ethereum Nexus-Stalker's Shadowsurge
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Ameer,@Protectorate,@Stalker);
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`= @Ameer AND id IN (5,6);
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (@Protectorate,@Stalker);
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (@Protectorate*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
+(@Ameer,0,5,0,19,0,100,0,10406,0,0,0,85,@SpellSummon,2,0,0,0,0,7,0,0,0,0,0,0,0,'Image of Commander Ameer - On Quest 10406 accepted - Cast Summon Protectorate Demolitionist'),
+(@Ameer,0,6,0,20,0,100,0,10406,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Image of Commander Ameer - On Quest 10406 accepted - Cast Summon Protectorate Demolitionist'),
+(@Protectorate,0,0,0,54,0,100,0,0,0,0,0,1,0,4000,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Just Summoned - Say 0'),
+(@Protectorate,0,1,0,52,0,100,0,0,@Protectorate,0,0,53,0,@Protectorate,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Text Over - Start Wp'),
+(@Protectorate,0,2,3,40,0,100,0,3,@Protectorate,0,0,54,4000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Reached WP 3 - Pause Wp'),
+(@Protectorate,0,3,0,61,0,100,0,0,0,0,0,1,1,5000,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Link Event - Say 1'),
+(@Protectorate,0,4,5,40,0,100,0,5,@Protectorate,0,0,54,4000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Reached WP 5 - Pause Wp'),
+(@Protectorate,0,5,0,61,0,100,0,0,0,0,0,1,2,4000,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Link Event - Say 2'),
+(@Protectorate,0,6,7,40,0,100,0,7,@Protectorate,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Reached WP 7 - Pause Wp'),
+(@Protectorate*100,9,0,0,0,0,100,0,0,0,0,0,1,3,14000,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Script - Say 3'),
+(@Protectorate*100,9,1,0,0,0,100,0,500,500,0,0,5,28,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Script - Emote Work'),
+(@Protectorate*100,9,2,0,0,0,100,0,3500,3500,0,0,12,@Stalker,2,30000,1,0,0,8,0,0,0,3866.837402,2321.753418,113.736206,0.120686,'Protectorate Demolitionist - Script - Summon Nexus-Stalker'),
+(@Protectorate*100,9,3,0,0,0,100,0,0,0,0,0,12,@Stalker,2,30000,1,0,0,8,0,0,0,3879.268799,2321.939209,115.065338,3.137270,'Protectorate Demolitionist - Script - Summon Nexus-Stalker'),
+(@Protectorate*100,9,4,0,0,0,100,0,6000,6000,0,0,1,4,4000,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Script - Say 4'),
+(@Protectorate*100,9,5,0,0,0,100,0,0,0,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Script - Run'),
+(@Protectorate*100,9,6,0,0,0,100,0,0,0,0,0,65,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Script - Resume WP'),
+(@Protectorate*100,9,7,0,0,0,100,0,0,0,0,0,5,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Script - Emote Work'),
+(@Protectorate,0,7,0,61,0,100,0,0,0,0,0,80,@Protectorate*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Link - Start Script'),
+(@Protectorate,0,8,9,40,0,100,0,8,@Protectorate,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Reached WP 8 - Pause Wp'),
+(@Protectorate,0,9,10,61,0,100,0,0,0,0,0,1,5,6000,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Link - Say 5'),
+(@Protectorate,0,10,0,61,0,100,0,0,0,0,0,15,10406,0,0,0,0,0,21,15,0,0,0,0,0,0,'Protectorate Demolitionist - Link - Complete Quest'),
+(@Protectorate,0,11,12,52,0,100,0,5,@Protectorate,0,0,11,35517,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Text Over - cast teleportaion visual'),
+(@Protectorate,0,12,0,61,0,100,0,0,0,0,0,41,2000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - Text Over - despawn'),
+(@Protectorate,0,13,0,4,0,100,0,0,0,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Protectorate Demolitionist - On aggro - talk'),
+(@Stalker,0,0,0,54,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ethereum Nexus-Stalker - On respawn - Say 0'),
+(@Stalker,0,1,0,0,0,100,0,200,200,5000,5000,11,@Sshadowtouched,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ethereum Nexus-Stalker - IC - Cast Shadowtouched'),
+(@Stalker,0,2,0,0,0,100,0,500,2000,10000,12000,11,@Sshadowsurge,0,0,0,0,0,2,0,0,0,0,0,0,0,'Ethereum Nexus-Stalker -IC - Cast Shadowsurge');
+
+DELETE FROM `creature_text` WHERE `entry` IN (@Protectorate,@Stalker, @Ameer);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextID`) VALUES
+(@Protectorate,0,0,'Let''s do this... Just keep me covered and I''ll deliver the package.',12,0,100,0,0,0,'Protectorate Demolitionist - Comienza escort', 18432),
+(@Protectorate,1,0,'By the second sun of K''aresh, look at this place! I can only imagine what Salhadaar is planning. Come on, let''s keep going.',12,0,100,0,0,0,'Protectorate Demolitionist - Waypoint 1', 18433),
+(@Protectorate,2,0,'Look there, fleshling! Salhadaar''s conduits! He''s keeping well fed...',12,0,100,0,0,0,'Protectorate Demolitionist - Waypoint 4', 18435),
+(@Protectorate,3,0,'Alright, keep me protected while I plant this disruptor. This shouldn''t take very long..',12,0,100,0,0,0,'Protectorate Demolitionist - Waypoint 6', 18436),
+(@Protectorate,4,0,'Done! Back up! Back up!',12,0,100,0,0,0,'Protectorate Demolitionist - Disruptor', 18437),
+(@Protectorate,5,0,'Looks like my work here is done. Report to the holo-image of Ameer over at the transporter.',12,0,100,0,0,0,'Protectorate Demolitionist - Waypoint 7', 18442),
+(@Protectorate,6,0,'I''m under attack! I repeat, I am under attack!',12,0,100,0,0,0,'Protectorate Demolitionist - Being attacked', 18439),
+(@Protectorate,6,1,'Keep these things off me!',12,0,100,0,0,0,'Protectorate Demolitionist - Being attacked', 18438),
+(@Stalker,0,0,'Protect the conduit! Stop the intruders!',12,0,100,0,0,0,'Ethereum Nexus-Stalker - Protect Conduct',18441),
+(@Ameer,0,0,'Hostiles detected. Ending transmission.',12,0,100,15,0,0,'Image of Commander Ameer - On aggro', 18190),
+(@Ameer,1,0,'Protectorate transmission complete.',12,0,100,0,0,0,'Ameer - Quest rewarded',18191);
+
+DELETE FROM `waypoints` WHERE `entry`=@Protectorate;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@Protectorate,1,4006.368652,2323.582520,111.407501,'Protectorate Demolitionist'),
+(@Protectorate,2,3946.502441,2329.601074,113.647179,'Protectorate Demolitionist'),
+(@Protectorate,3,3934.442383,2333.215088,110.971733,'Protectorate Demolitionist'),
+(@Protectorate,4,3912.811035,2339.968018,113.876434,'Protectorate Demolitionist'),
+(@Protectorate,5,3887.416748,2408.539063,113.081406,'Protectorate Demolitionist'),
+(@Protectorate,6,3863.596191,2348.160645,115.446754,'Protectorate Demolitionist'),
+(@Protectorate,7,3872.944580,2321.384766,114.501541,'Protectorate Demolitionist'),
+(@Protectorate,8,3859.826416,2360.402588,114.603340,'Protectorate Demolitionist');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_09_world.sql
new file mode 100644
index 00000000000..36c11d35ee8
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_09_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE creature_template SET npcflag=0 WHERE entry=6776;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_10_world.sql
new file mode 100644
index 00000000000..cb8f0e95b39
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_10_world.sql
@@ -0,0 +1,62 @@
+--
+UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=2983;
+-- The Plains Vision SAI
+SET @ENTRY := 2983;
+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,0,0,0,0,0,53,1,2983,0,0,0,0,1,0,0,0,0,0,0,0,"The Plains Vision - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,50,2983,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"The Plains Vision - On Waypoint 50 Reached - Despawn In 1000 ms");
+
+DELETE FROM `waypoints` WHERE `entry`=@ENTRY;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@ENTRY, 1, -2226.32, -408.095, -9.36235, 'The Plains Vision'),
+(@ENTRY, 2, -2203.04, -437.212, -5.72498, 'The Plains Vision'),
+(@ENTRY, 3, -2163.91, -457.851, -7.09049, 'The Plains Vision'),
+(@ENTRY, 4, -2123.87, -448.137, -9.29591, 'The Plains Vision'),
+(@ENTRY, 5, -2104.66, -427.166, -6.49513, 'The Plains Vision'),
+(@ENTRY, 6, -2101.48, -422.826, -5.3567, 'The Plains Vision'),
+(@ENTRY, 7, -2097.56, -417.083, -7.16716, 'The Plains Vision'),
+(@ENTRY, 8, -2084.87, -398.626, -9.88973, 'The Plains Vision'),
+(@ENTRY, 9, -2072.71, -382.324, -10.2488, 'The Plains Vision'),
+(@ENTRY, 10, -2054.05, -356.728, -6.22468, 'The Plains Vision'),
+(@ENTRY, 11, -2051.8, -353.645, -5.35791, 'The Plains Vision'),
+(@ENTRY, 12, -2049.08, -349.912, -6.15723, 'The Plains Vision'),
+(@ENTRY, 13, -2030.6, -310.724, -9.59302, 'The Plains Vision'),
+(@ENTRY, 14, -2002.15, -249.308, -10.8124, 'The Plains Vision'),
+(@ENTRY, 15, -1972.85, -195.811, -10.6316, 'The Plains Vision'),
+(@ENTRY, 16, -1940.93, -147.652, -11.7055, 'The Plains Vision'),
+(@ENTRY, 17, -1888.06, -81.943, -11.4404, 'The Plains Vision'),
+(@ENTRY, 18, -1837.05, -34.0109, -12.258, 'The Plains Vision'),
+(@ENTRY, 19, -1796.12, -14.6462, -10.3581, 'The Plains Vision'),
+(@ENTRY, 20, -1732.61, -4.27746, -10.0213, 'The Plains Vision'),
+(@ENTRY, 21, -1688.94, -0.829945, -11.7103, 'The Plains Vision'),
+(@ENTRY, 22, -1681.32, 13.0313, -9.48056, 'The Plains Vision'),
+(@ENTRY, 23, -1677.04, 36.8349, -7.10318, 'The Plains Vision'),
+(@ENTRY, 24, -1675.2, 68.559, -8.95384, 'The Plains Vision'),
+(@ENTRY, 25, -1676.57, 89.023, -9.65104, 'The Plains Vision'),
+(@ENTRY, 26, -1678.16, 110.939, -10.1782, 'The Plains Vision'),
+(@ENTRY, 27, -1677.86, 128.681, -5.73869, 'The Plains Vision'),
+(@ENTRY, 28, -1675.27, 144.324, -3.47916, 'The Plains Vision'),
+(@ENTRY, 29, -1671.7, 163.169, -1.23098, 'The Plains Vision'),
+(@ENTRY, 30, -1666.61, 181.584, 5.26145, 'The Plains Vision'),
+(@ENTRY, 31, -1661.51, 196.154, 8.95252, 'The Plains Vision'),
+(@ENTRY, 32, -1655.47, 210.811, 8.38727, 'The Plains Vision'),
+(@ENTRY, 33, -1647.07, 226.947, 5.27755, 'The Plains Vision'),
+(@ENTRY, 34, -1621.65, 232.91, 2.69579, 'The Plains Vision'),
+(@ENTRY, 35, -1600.23, 237.641, 2.98539, 'The Plains Vision'),
+(@ENTRY, 36, -1576.07, 242.546, 4.66541, 'The Plains Vision'),
+(@ENTRY, 37, -1554.57, 248.494, 6.60377, 'The Plains Vision'),
+(@ENTRY, 38, -1547.53, 259.302, 10.6741, 'The Plains Vision'),
+(@ENTRY, 39, -1541.7, 269.847, 16.4418, 'The Plains Vision'),
+(@ENTRY, 40, -1539.83, 278.989, 21.0597, 'The Plains Vision'),
+(@ENTRY, 41, -1540.16, 290.219, 27.8247, 'The Plains Vision'),
+(@ENTRY, 42, -1538.99, 298.983, 34.0032, 'The Plains Vision'),
+(@ENTRY, 43, -1540.38, 307.337, 41.3557, 'The Plains Vision'),
+(@ENTRY, 44, -1536.61, 314.884, 48.0179, 'The Plains Vision'),
+(@ENTRY, 45, -1532.42, 323.277, 55.6667, 'The Plains Vision'),
+(@ENTRY, 46, -1528.77, 329.774, 61.1525, 'The Plains Vision'),
+(@ENTRY, 47, -1525.65, 333.18, 63.2161, 'The Plains Vision'),
+(@ENTRY, 48, -1517.01, 350.713, 62.4286, 'The Plains Vision'),
+(@ENTRY, 49, -1511.39, 362.537, 62.4539, 'The Plains Vision'),
+(@ENTRY, 50, -1508.68, 366.822, 62.733, 'The Plains Vision');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_00_world.sql
new file mode 100644
index 00000000000..c36958c180d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_00_world.sql
@@ -0,0 +1,58 @@
+SET @NPC_BLACK_KNIGHT := 33785;
+SET @NPC_CAVIN := 33522;
+SET @SPELL_CHARGE := 63003;
+SET @SPELL_SHIELD_BREAKER := 65147;
+SET @SPELL_DARK_SHIELD := 64505;
+SET @SPELL_BLACK_NIGHT_TRANSFORM := 64490; -- Apply Aura: Change Model (34104)
+SET @SPELL_BLACK_NIGHT_TRANSFORM_2 := 64498; -- Apply Aura: Increase Max Health
+SET @SPELL_FULL_HEAL := 25840;
+SET @GOSSIP := 10383;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@NPC_BLACK_KNIGHT, @NPC_CAVIN);
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@NPC_BLACK_KNIGHT;
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@NPC_BLACK_KNIGHT*100;
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@NPC_BLACK_KNIGHT*100+1;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@NPC_CAVIN;
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@NPC_CAVIN*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
+(@NPC_CAVIN,0,0,1,62,0,100,0,@GOSSIP,0,0,0,80,@NPC_CAVIN*100,0,2,0,0,0,1,0,0,0,0,0,0,0,'Cavin - On gossip option select - Run script'),
+(@NPC_CAVIN,0,1,2,61,0,100,0,0,0,0,0,12,@NPC_BLACK_KNIGHT,1,120000,0,0,0,8,0,0,0,8482.370117, 964.506653, 547.292908, 3.253865,'Cavin - On gossip option select - Summon the Black Knight'),
+(@NPC_CAVIN,0,2,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Cavin - On gossip option select - Close gossip'),
+(@NPC_CAVIN*100,9,0,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cavin - On Script - Turn off Gossip & Gossip flags'),
+(@NPC_CAVIN*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,'Cavin - On Script - Say text 0'),
+(@NPC_CAVIN*100,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Cavin - On Script - Say text 1'),
+(@NPC_BLACK_KNIGHT,0,0,0,54,0,100,1,0,0,0,0,80,@NPC_BLACK_KNIGHT*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - Just Summoned - Mount to entry'),
+(@NPC_BLACK_KNIGHT*100+1,9,0,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,8426.153320, 962.307861, 544.675293, 6.273711,'Blackknight - On Script - MOVE TO POS'),
+(@NPC_BLACK_KNIGHT*100+1,9,1,0,0,0,100,0,10000,10000,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - REMOVE IMMUNE TO PC'),
+(@NPC_BLACK_KNIGHT*100+1,9,2,0,0,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - REMOVE IMMUNE TO PC'),
+(@NPC_BLACK_KNIGHT*100+1,9,3,0,0,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,33782,25,0,0,0,0,0,'Blackknight - On Script - attack'),
+(@NPC_BLACK_KNIGHT,0,1,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,'Blackknight - On Aggro - Cast Charge'),
+(@NPC_BLACK_KNIGHT,0,2,0,4,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Aggro - Set Phase 1'),
+(@NPC_BLACK_KNIGHT,0,3,0,0,1,100,0,10000,10000,15000,15000,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - In Phase 1 - Flee for assist'),
+(@NPC_BLACK_KNIGHT,0,4,0,9,1,100,0,5,30,1000,1000,11,@SPELL_CHARGE,0,0,0,0,0,2,0,0,0,0,0,0,0,'Blackknight - In Phase 1& On Range - Cast Charge'),
+(@NPC_BLACK_KNIGHT,0,5,0,9,1,100,0,3,30,1500,2000,11,@SPELL_SHIELD_BREAKER,0,0,0,0,0,2,0,0,0,0,0,0,0,'Blackknight - In Phase 1 & On Range - Cast Shield Breaker'),
+(@NPC_BLACK_KNIGHT,0,6,0,6,0,100,0,0,0,0,0,81,1,0,0,0,0,0,10,85140,@NPC_CAVIN,0,0,0,0,0,'Blackknight - On Death - Turn on Gossip & Gossip flags on Cavin'),
+(@NPC_BLACK_KNIGHT,0,7,8,1,0,100,0,20000,20000,20000,20000,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - Out Of Combat after 20s - Despawn'),
+(@NPC_BLACK_KNIGHT,0,8,0,61,0,100,0,0,0,0,0,81,1,0,0,0,0,0,10,85140,@NPC_CAVIN,0,0,0,0,0,'Blackknight - Out Of Combat after 20s - Turn on Gossip & Gossip flags on Cavin'),
+(@NPC_BLACK_KNIGHT,0,9,0,2,1,100,1,0,25,0,0,80,@NPC_BLACK_KNIGHT*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On 25% health - Run script'),
+(@NPC_BLACK_KNIGHT*100,9,0,0,0,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - State passive'),
+(@NPC_BLACK_KNIGHT*100,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Say text 0'),
+(@NPC_BLACK_KNIGHT*100,9,2,0,0,0,100,0,0,0,0,0,43,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Unmount'),
+(@NPC_BLACK_KNIGHT*100,9,3,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,33782,30,0,0,0,0,0,'Blackknight - On Script - Unmount player'),
+(@NPC_BLACK_KNIGHT*100,9,4,0,0,0,100,0,0,0,0,0,11,@SPELL_DARK_SHIELD,2,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Cast Dark Shield'),
+(@NPC_BLACK_KNIGHT*100,9,5,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Aggro - Set Phase 0'),
+(@NPC_BLACK_KNIGHT*100,9,6,0,0,0,100,0,6000,6000,0,0,11,@SPELL_BLACK_NIGHT_TRANSFORM,2,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Apply Aura'),
+(@NPC_BLACK_KNIGHT*100,9,7,0,0,0,100,0,0,0,0,0,11,@SPELL_FULL_HEAL,2,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Full hp'),
+(@NPC_BLACK_KNIGHT*100,9,8,0,0,0,100,0,1000,1000,0,0,11,@SPELL_BLACK_NIGHT_TRANSFORM_2,2,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Increase Max Health'),
+(@NPC_BLACK_KNIGHT*100,9,9,0,0,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - State Aggresive'),
+(@NPC_BLACK_KNIGHT*100,9,10,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blackknight - On Script - Say text 1'),
+(@NPC_BLACK_KNIGHT*100,9,11,0,0,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,15,0,0,0,0,0,0,'Blackknight - On Script - Start Attack');
+
+DELETE FROM `creature_text` WHERE `entry`IN (@NPC_BLACK_KNIGHT, @NPC_CAVIN);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextID`) VALUES
+(@NPC_BLACK_KNIGHT,0,0,'Get off that horse and fight me man-to-man!',14,0,100,0,0,0,'yell',34169),
+(@NPC_BLACK_KNIGHT,1,0,'I will not fail you, master!',14,0,100,0,0,0,'yell',34185),
+(@NPC_CAVIN,0,0,'$N challenges the Black Knight to trial by combat!',14,0,100,0,0,0,'yell',33803),
+(@NPC_CAVIN,1,0,'Good luck, $N.',12,0,100,0,0,0,'say',33804);
+
+UPDATE `conditions` SET `ConditionValue2`=1 WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=10383 AND `SourceEntry`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=1 AND `ConditionValue1`=63663;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_01_world.sql
new file mode 100644
index 00000000000..03b117efc12
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_01_world.sql
@@ -0,0 +1,66 @@
+--
+SET @KC_FIRST_PROPHECY := 22798;
+SET @KC_SECOND_PROPHECY := 22799;
+SET @KC_THIRD_PROPHECY := 22800;
+SET @KC_FOURTH_PROPHECY := 22801;
+SET @QUEST_WHISPERS_RAVEN_GOD := 10607;
+SET @NPC_VISION_RAVEN_GOD := 21861;
+SET @SPELL_UNDERSTANDING_RAVENSPEECH := 37466;
+SET @AURA_UNDERSTANDING_RAVENSPEECH := 37642;
+SET @Falconwing := 19988;
+SET @Harbinger := 19989;
+SET @Scorncrow := 19990;
+
+UPDATE `creature_template` SET `exp`='1', `minlevel`='67', `maxlevel`='67', `unit_flags`='768', `type`='7' WHERE `entry`=@NPC_VISION_RAVEN_GOD;
+
+DELETE FROM `creature_text` WHERE `entry`=@NPC_VISION_RAVEN_GOD;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(@NPC_VISION_RAVEN_GOD,0,0,'From the darkest night shall rise again the raven, shall take flight in the shadows, shall reveal the nature of its kind. Prepare yourself for its coming, for the faithful shall be elevated to take flight with the raven, the rest be forgotten to walk upon the ground, clipped wings and shame.',15,0,100,0,0,0,'The Voice of the Raven God - The First Prophecy', 19475),
+(@NPC_VISION_RAVEN_GOD,1,0,'Steel your minds and guard your thoughts. The dark wings will cloud and consume the minds of the weak, a flock of thralls whose feet may never leave the ground.', 15,0,100,0,0,0,'The Voice of the Raven God - The Second Prophecy', 19476),
+(@NPC_VISION_RAVEN_GOD,2,0,'The Old blood will flow once again with the coming of the raven, the return of the darkness in the skies. Scarlet night, and the rise of the old.', 15,0,100,0,0,0,'The Voice of the Raven God - The Third Prophecy', 19477),
+(@NPC_VISION_RAVEN_GOD,3,0,'The raven was struck down once for flying too high, unready. The eons have prepared the Dark Watcher for its ascent, to draw the dark cloak across the horizon.', 15,0,100,0,0,0,'The Voice of the Raven God - The Fourth Prophecy', 19478);
+
+UPDATE creature_template SET AIName="SmartAI" WHERE entry IN (@Falconwing, @Harbinger, @Scorncrow,@NPC_VISION_RAVEN_GOD);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (184950,184967,184968,184969);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Falconwing, @Harbinger, @Scorncrow,@NPC_VISION_RAVEN_GOD) AND `source_type`=0; -- Npcs
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (184950,184967,184968,184969) AND `source_type`=1; -- Gameobjects (totems)
+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
+-- Npcs a matar para que te den el buff
+(@Falconwing,0,0,0,0,0,100,0,2500,5500,10000,11000,11,37587,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Grishna Falconwing - In Combat - Cast Bestial Wrath"),
+(@Falconwing,0,1,0,6,0,35,0,0,0,0,0,85,@SPELL_UNDERSTANDING_RAVENSPEECH,2,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0,"Grishna Falconwing - On Death - Cast Understanding Ravenspeech"),
+(@Harbinger,0,0,0,0,0,100,0,2500,5500,20000,21000,11,37589,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Grishna Harbinger - In Combat - Cast Shriveling Gaze"),
+(@Harbinger,0,1,0,0,0,100,0,1000,6000,10000,15000,11,9532,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Grishna Harbinger - In Combat - Cast Lightning Bolt"),
+(@Harbinger,0,2,0,6,0,35,0,0,0,0,0,85,@SPELL_UNDERSTANDING_RAVENSPEECH,2,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0,"Grishna Harbringer - On Death - Cast Understanding Ravenspeech"),
+(@Scorncrow,0,0,0,0,0,100,0,2500,5500,10000,11000,11,35321,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Grishna Scorncrow - In Combat - Cast Gushing Wound"),
+(@Scorncrow,0,1,0,6,0,35,0,0,0,0,0,85,@SPELL_UNDERSTANDING_RAVENSPEECH,2,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0,"Grishna Scorncrow - On Death - Cast Understanding Ravenspeech"),
+-- Vision Of Raven God
+(@NPC_VISION_RAVEN_GOD,0,0,1,38,0,100,0,1,1,0,0,33,@KC_FIRST_PROPHECY,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Call Killedmonster"),
+(@NPC_VISION_RAVEN_GOD,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 0"),
+(@NPC_VISION_RAVEN_GOD,0,2,3,38,0,100,0,1,2,0,0,33,@KC_SECOND_PROPHECY,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Call Killedmonster"),
+(@NPC_VISION_RAVEN_GOD,0,3,0,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 1"),
+(@NPC_VISION_RAVEN_GOD,0,4,5,38,0,100,0,1,3,0,0,33,@KC_THIRD_PROPHECY ,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Call Killedmonster"),
+(@NPC_VISION_RAVEN_GOD,0,5,0,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 2"),
+(@NPC_VISION_RAVEN_GOD,0,6,7,38,0,100,0,1,4,0,0,33,@KC_FOURTH_PROPHECY,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Call Killedmonster"),
+(@NPC_VISION_RAVEN_GOD,0,7,0,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 3"),
+-- GOB Totems
+(184950,1,0,1,64,0,100,0,0,0,0,0,12,@NPC_VISION_RAVEN_GOD,3,6000,0,0,0,8,0,0,0,3779.987061,6729.603027,180.498413,5.71490,"First Prophecy - On Gossip Hello - Summon Whisper Raven God"),
+(184950,1,1,0,61,0,100,0,0,0,0,0,45,1,1,0,0,0,0,11,@NPC_VISION_RAVEN_GOD,20,0,0,0,0,0,"First Prophecy - Link - Set Data 1 to Raven God"),
+(184967,1,0,1,64,0,100,0,0,0,0,0,12,@NPC_VISION_RAVEN_GOD,3,6000,0,0,0,8,0,0,0,3629.285889,6542.140137,155.004669,2.56267,"Second Prophecy - On Gossip Hello - Summon Whisper Raven God"),
+(184967,1,1,0,61,0,100,0,0,0,0,0,45,1,2,0,0,0,0,11,@NPC_VISION_RAVEN_GOD,20,0,0,0,0,0,"Second Prophecy - Link - Set Data 2 to Raven God"),
+(184968,1,0,1,64,0,100,0,0,0,0,0,12,@NPC_VISION_RAVEN_GOD,3,6000,0,0,0,8,0,0,0,3736.950439,6640.749023,133.674530,3.33629,"Third Prophecy - On Gossip Hello - Summon Whisper Raven God"),
+(184968,1,1,0,61,0,100,0,0,0,0,0,45,1,3,0,0,0,0,11,@NPC_VISION_RAVEN_GOD,20,0,0,0,0,0,"Third Prophecy - Link - Set Data 3 to Raven God"),
+(184969,1,0,1,64,0,100,0,0,0,0,0,12,@NPC_VISION_RAVEN_GOD,3,6000,0,0,0,8,0,0,0,3572.574219,6669.196289,128.455444,5.62290,"Four Prophecy - On Gossip Hello - Summon Whisper Raven God"),
+(184969,1,1,0,61,0,100,0,0,0,0,0,45,1,4,0,0,0,0,11,@NPC_VISION_RAVEN_GOD,20,0,0,0,0,0,"Fourth Prophecy - Link - Set Data 4 to Raven God");
+
+DELETE FROM `conditions` WHERE `ConditionValue1`=@AURA_UNDERSTANDING_RAVENSPEECH AND `sourcetypeorreferenceid`=22;
+DELETE FROM `conditions` WHERE `ConditionValue1`=@NPC_VISION_RAVEN_GOD AND `sourcetypeorreferenceid`=22;
+DELETE FROM `conditions` WHERE `SourceEntry`=@NPC_VISION_RAVEN_GOD AND `sourcetypeorreferenceid`=22;
+INSERT INTO `conditions` (SourceTypeOrReferenceId,SourceGroup,SourceEntry,SourceId,ElseGroup,ConditionTypeOrReference,ConditionTarget,ConditionValue1,ConditionValue2,ConditionValue3,NegativeCondition,ErrorType,ErrorTextId,ScriptName,`Comment`) VALUES
+(22,1,184950,1,0,1 ,0,@AURA_UNDERSTANDING_RAVENSPEECH,0,0,0,0,0,'','GOb First Prophecy - SAI 1, only if player has aura Understanding Ravenspeech'),
+(22,1,184950,1,0,29,0,@NPC_VISION_RAVEN_GOD,20,0,1,0,0,'','GOb First Prophecy - SAI 1, only if Raven God is not near'),
+(22,1,184967,1,0,1 ,0,@AURA_UNDERSTANDING_RAVENSPEECH,0,0,0,0,0,'','GOb Second Prophecy - SAI 1, only if player has aura Understanding Ravenspeech'),
+(22,1,184967,1,0,29,0,@NPC_VISION_RAVEN_GOD,20,0,1,0,0,'','GOb Second Prophecy - SAI 1, only if Raven God is not near'),
+(22,1,184968,1,0,1 ,0,@AURA_UNDERSTANDING_RAVENSPEECH,0,0,0,0,0,'','GOb Third Prophecy - SAI 1, only if player has aura Understanding Ravenspeech'),
+(22,1,184968,1,0,29,0,@NPC_VISION_RAVEN_GOD,20,0,1,0,0,'','GOb Third Prophecy - SAI 1, only if Raven God is not near'),
+(22,1,184969,1,0,1 ,0,@AURA_UNDERSTANDING_RAVENSPEECH,0,0,0,0,0,'','GOb Fourth Prophecy - SAI 1, only if player has aura Understanding Ravenspeech'),
+(22,1,184969,1,0,29,0,@NPC_VISION_RAVEN_GOD,20,0,1,0,0,'','GOb Fourth Prophecy - SAI 1, only if Raven God is not near');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_02_world.sql
new file mode 100644
index 00000000000..1780a238dca
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_02_world.sql
@@ -0,0 +1,144 @@
+--
+DELETE FROM `areatrigger_scripts` WHERE `ScriptName` IN ('at_twiggy_flathead','at_madrigosa','at_eye_of_eternity_improvised_floor');
+
+UPDATE `gameobject_template` SET `ScriptName`='' WHERE `ScriptName` IN ('go_defias_cannon','go_door_lever_dm','go_kael_orb','go_movie_orb');
+
+UPDATE `item_template` SET `ScriptName`='' WHERE `ScriptName`='internalitemhandler';
+
+UPDATE `creature_template` SET `ScriptName`='' WHERE `ScriptName` IN ('do_nothing','npc_aran_blizzard','npc_bladespire_ogre','npc_blaze','npc_crystalline_tangler','npc_demon_fire','npc_flame_crash','npc_generic_harpoon_cannon','npc_homunculus','npc_invis_legion_teleporter','npc_magnetic_core','npc_mindless_skeleton','npc_nether_vapor','npc_novos_minion','npc_sliver','npc_thuzadin_acolyte','npc_tracy_proudwell','npc_vereth_the_cunning','npc_void_zone','npc_yauj_brood');
+
+DELETE FROM `spell_script_names` WHERE `scriptname` IN ('spell_ex_463', 'spell_ex_5581', 'spell_ex_66244', 'spell_ex_absorb_aura', 'spell_mimiron_flame_suppressant');
+
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=37120 AND `source_type`=0 AND `id`=3 AND `link`=7;
+
+-- Grand Necrolord Antiok SAI
+SET @ENTRY := 28006;
+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,0,0,100,0,7000,7000,18000,18000,11,32863,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grand Necrolord Antiok - In Combat - Cast 'Seed of Corruption'"),
+(@ENTRY,0,1,0,0,0,100,0,1100,1100,20000,20000,11,50455,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grand Necrolord Antiok - In Combat - Cast 'Shadow Bolt'"),
+(@ENTRY,0,2,0,1,0,100,0,10000,10000,40000,40000,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grand Necrolord Antiok - Out of Combat - Say Line 1"),
+(@ENTRY,0,3,0,2,0,100,1,0,25,0,0,11,50497,1,0,0,0,0,2,0,0,0,0,0,0,0,"Grand Necrolord Antiok - Between 0-25% Health - Cast 'Scream of Chaos' (No Repeat)"),
+(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,11,50472,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grand Necrolord Antiok - On Just Died - Cast 'Drop Scythe of Antiok'"),
+(@ENTRY,0,5,6,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grand Necrolord Antiok - On Aggro - Say Line 0"),
+(@ENTRY,0,6,0,61,0,100,0,0,0,0,0,11,55984,1,0,0,0,0,2,0,0,0,0,0,0,0,"Grand Necrolord Antiok - On Aggro - Cast 'Shadow Bolt'"),
+(@ENTRY,0,7,8,4,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,27996,20,0,0,0,0,0,"Grand Necrolord Antiok - On Aggro - Kill Target"),
+(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,28,50494,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grand Necrolord Antiok - On Aggro - Remove Aura 'Shroud of Lightning'");
+
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=27987 AND `source_type`=0 AND `id`=0 AND `link`=1;
+UPDATE `smart_scripts` SET `link`=11 WHERE `entryorguid`=27788 AND `source_type`=0 AND `id`=2 AND `link`=12;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=26701 AND `source_type`=0 AND `id`=0 AND `link`=1;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=24035 AND `source_type`=0 AND `id`=0 AND `link`=1;
+
+-- Ara Technician SAI
+SET @ENTRY := 20438;
+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,1,38,0,100,0,4,4,0,0,8,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Data Set 4 4 - Set Reactstate Defensive"),
+(@ENTRY,0,1,0,61,0,100,0,4,4,0,0,87,2043900,2043901,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Data Set 4 4 - Run Random Script"),
+(@ENTRY,0,2,0,1,1,100,1,12000,12000,0,0,45,1,1,0,0,0,0,20,184312,0,0,0,0,0,0,"Ara Technician - Out of Combat - Set Data 1 1 (Phase 1) (No Repeat)"),
+(@ENTRY,0,3,4,40,0,100,0,1,0,0,0,11,35176,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Waypoint 1 Reached - Cast 'Interrupt Shutdown'"),
+(@ENTRY,0,4,0,61,0,100,0,1,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Waypoint 1 Reached - Set Event Phase 1"),
+(@ENTRY,0,5,6,4,0,100,0,1,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Aggro - Set Event Phase 0"),
+(@ENTRY,0,6,7,61,0,100,0,1,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Aggro - Set Reactstate Aggressive"),
+(@ENTRY,0,7,8,61,0,100,0,1,0,0,0,20,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Aggro - Start Attacking"),
+(@ENTRY,0,8,0,61,0,100,0,1,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ara Technician - On Aggro - Enable Combat Movement"),
+(@ENTRY,0,9,0,7,0,100,0,0,0,0,0,45,1,1,0,0,0,0,20,184312,0,0,0,0,0,0,"Ara Technician - On Evade - Set Data 1 1");
+
+-- Audrid SAI
+SET @ENTRY := 18903;
+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,11,0,100,0,0,0,0,0,53,0,18903,1,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Respawn - Start Waypoint"),
+(@ENTRY,0,1,11,40,0,100,0,4,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 4 Reached - Pause Waypoint"),
+(@ENTRY,0,2,12,40,0,100,0,9,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 9 Reached - Pause Waypoint"),
+(@ENTRY,0,3,13,40,0,100,0,11,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 11 Reached - Pause Waypoint"),
+(@ENTRY,0,4,14,40,0,100,0,12,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 12 Reached - Pause Waypoint"),
+(@ENTRY,0,5,15,40,0,100,0,13,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 13 Reached - Pause Waypoint"),
+(@ENTRY,0,6,16,40,0,100,0,14,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 14 Reached - Pause Waypoint"),
+(@ENTRY,0,7,17,40,0,100,0,17,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 17 Reached - Pause Waypoint"),
+(@ENTRY,0,8,18,40,0,100,0,22,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 22 Reached - Pause Waypoint"),
+(@ENTRY,0,9,19,40,0,100,0,25,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 25 Reached - Pause Waypoint"),
+(@ENTRY,0,10,20,40,0,100,0,28,18903,0,0,54,60000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 28 Reached - Pause Waypoint"),
+(@ENTRY,0,11,21,61,0,100,0,4,18903,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 4 Reached - Run Script"),
+(@ENTRY,0,12,22,61,0,100,0,9,18903,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 9 Reached - Run Script"),
+(@ENTRY,0,13,22,61,0,100,0,11,18903,0,0,80,@ENTRY*100+02,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 11 Reached - Run Script"),
+(@ENTRY,0,14,23,61,0,100,0,12,18903,0,0,80,@ENTRY*100+03,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 12 Reached - Run Script"),
+(@ENTRY,0,15,21,61,0,100,0,13,18903,0,0,80,@ENTRY*100+04,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 13 Reached - Run Script"),
+(@ENTRY,0,16,24,61,0,100,0,14,18903,0,0,80,@ENTRY*100+05,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 14 Reached - Run Script"),
+(@ENTRY,0,17,22,61,0,100,0,17,18903,0,0,80,@ENTRY*100+06,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 17 Reached - Run Script"),
+(@ENTRY,0,18,21,61,0,100,0,22,18903,0,0,80,@ENTRY*100+07,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 22 Reached - Run Script"),
+(@ENTRY,0,19,21,61,0,100,0,25,18903,0,0,80,@ENTRY*100+08,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 25 Reached - Run Script"),
+(@ENTRY,0,20,21,61,0,100,0,28,18903,0,0,80,@ENTRY*100+09,2,0,0,0,0,1,0,0,0,0,0,0,0,"Audrid - On Waypoint 28 Reached - Run Script"),
+(@ENTRY,0,21,0,61,0,100,0,4,18903,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.5,"Audrid - On Waypoint 4 Reached - Set Orientation 1,5"),
+(@ENTRY,0,22,0,61,0,100,0,9,18903,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,3,"Audrid - On Waypoint 9 Reached - Set Orientation 3"),
+(@ENTRY,0,23,0,61,0,100,0,12,18903,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.5,"Audrid - On Waypoint 12 Reached - Set Orientation 4,5"),
+(@ENTRY,0,24,0,61,0,100,0,14,18903,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,6,"Audrid - On Waypoint 14 Reached - Set Orientation 6");
+
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=26670 AND `source_type`=0 AND `id`=19 AND `link`=20;
+UPDATE `smart_scripts` SET `link`=20 WHERE `entryorguid`=17892 AND `source_type`=0 AND `id`=19 AND `link`=0;
+UPDATE `smart_scripts` SET `link`=7 WHERE `entryorguid`=17892 AND `source_type`=0 AND `id`=6 AND `link`=0;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=37952 AND `source_type`=0 AND `id`=1 AND `link`=2;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=26787 AND `source_type`=0 AND `id`=0 AND `link`=1;
+
+-- Mad Voidwalker SAI
+SET @ENTRY := 15146;
+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,11,0,100,0,0,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mad Voidwalker - On Respawn - Start Random Movement"),
+(@ENTRY,0,1,0,0,0,100,2,7000,9000,11000,13000,11,24614,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mad Voidwalker - In Combat - Cast 'Consuming Shadows' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,3000,4000,8000,8000,11,24616,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mad Voidwalker - In Combat - Cast 'Shadow Shock' (Normal Dungeon)"),
+(@ENTRY,0,3,0,1,0,100,0,0,0,0,0,41,180000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mad Voidwalker - Out of Combat - Despawn In 180000 ms");
+
+UPDATE `smart_scripts` SET `link`=9 WHERE `entryorguid`=12236 AND `source_type`=0 AND `id`=8 AND `link`=0;
+UPDATE `smart_scripts` SET `link`=9 WHERE `entryorguid`=13196 AND `source_type`=0 AND `id`=8 AND `link`=0;
+
+-- Scarlet Curate SAI
+SET @ENTRY := 9450;
+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,9,0,100,0,0,40,3400,4800,11,25054,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Curate - Within 0-40 Range - Cast 'Holy Smite'"),
+(@ENTRY,0,1,0,15,0,100,1,0,0,30,0,11,17201,1,0,0,0,0,7,0,0,0,0,0,0,0,"Scarlet Curate - On Friendly Crowd Controlled - Cast 'Dispel Magic' (No Repeat)"),
+(@ENTRY,0,2,0,74,0,100,0,0,40,25000,35000,11,17201,1,0,0,0,0,9,0,0,0,0,0,0,0,"Scarlet Curate - On Friendly Between 0-40% Health - Cast 'Dispel Magic'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Curate - Between 0-15% Health - Flee For Assist (No Repeat)");
+
+UPDATE `smart_scripts` SET `link`=25 WHERE `entryorguid`=4880 AND `source_type`=0 AND `id`=24 AND `link`=26;
+UPDATE `smart_scripts` SET `link`=22, `event_type`=61 WHERE `entryorguid`=4880 AND `source_type`=0 AND `id`=21 AND `link`=0;
+UPDATE `smart_scripts` SET `link`=16 WHERE `entryorguid`=31279 AND `source_type`=0 AND `id`=15 AND `link`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=1535 AND `source_type`=0 AND `id`=0 AND `link`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=2719 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=4484 AND `source_type`=0 AND `id`=24 AND `link`=25;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=13601 AND `source_type`=0 AND `id`=2 AND `link`=0;
+
+-- Short John Mithril SAI
+SET @ENTRY := 14508;
+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,68,0,100,0,16,0,0,0,53,0,14508,0,0,0,0,1,0,0,0,0,0,0,0,"Short John Mithril - On Game Event 16 Started - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,1,14508,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Short John Mithril - On Waypoint 1 Reached - Say Line 0"),
+(@ENTRY,0,2,3,40,0,100,0,16,14508,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Short John Mithril - On Waypoint 16 Reached - Say Line 1"),
+(@ENTRY,0,3,0,61,0,100,0,16,14508,0,0,11,23176,0,0,0,0,0,1,0,0,0,0,0,0,0,"Short John Mithril - On Waypoint 16 Reached - Cast 'Summon Pirate Booty (DND)'"),
+(@ENTRY,0,4,0,40,0,100,0,33,14508,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.41568,"Short John Mithril - On Waypoint 33 Reached - Set Orientation 4,41568");
+
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=15324 AND `source_type`=0 AND `id`=3 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=15526 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=17397 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=18554 AND `source_type`=0 AND `id`=9 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=18554 AND `source_type`=0 AND `id`=13 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=18554 AND `source_type`=0 AND `id`=14 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=18938 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5 WHERE `entryorguid`=19354 AND `source_type`=0 AND `id`=4 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=23669 AND `source_type`=0 AND `id`=3 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=24198 AND `source_type`=0 AND `id`=3 AND `link`=4;
+UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=55036 WHERE `entryorguid`=29903 AND `source_type`=0 AND `id`=6 AND `link`=7;
+UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=58190 WHERE `entryorguid`=30894 AND `source_type`=0 AND `id`=2 AND `link`=3;
+UPDATE `smart_scripts` SET `action_type`=5, `action_param1`=1 WHERE `entryorguid`=30945 AND `source_type`=0 AND `id`=9 AND `link`=0;
+
+UPDATE `creature_template_addon` SET`auras`="" WHERE`entry` IN (26608, 31306); -- vehicle auras appear only when the npc ride a vehicle or when he's mounted
+UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry`=35427;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_03_world.sql
new file mode 100644
index 00000000000..0b0548c3f78
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_03_world.sql
@@ -0,0 +1,12 @@
+DELETE FROM `gameobject_loot_template` WHERE `entry`IN (1414,1415,1417,1418,1419,1420,1421,1733,1734,2513) AND `item`=5056;
+INSERT INTO `gameobject_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
+(1414, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1415, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1417, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1418, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1419, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1420, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1421, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1733, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(1734, 5056, 0, 100, 1, 1, 0, 1, 1, NULL),
+(2513, 5056, 0, 100, 1, 1, 0, 1, 1, NULL);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_04_world.sql
new file mode 100644
index 00000000000..96db7cbf845
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_04_world.sql
@@ -0,0 +1,4 @@
+--
+UPDATE `smart_scripts` SET `target_o`=0 WHERE `entryorguid`=177490 AND `source_type`=1 AND `id`=0;
+UPDATE `smart_scripts` SET `target_o`=0 WHERE `entryorguid`=177490 AND `source_type`=1 AND `id`=2;
+UPDATE `smart_scripts` SET `target_o`=0 WHERE `entryorguid`=2749200 AND `source_type`=9 AND `id`=5;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_05_world.sql
new file mode 100644
index 00000000000..ca9b648d5eb
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_05_world.sql
@@ -0,0 +1,74 @@
+--
+UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=23616;
+UPDATE `creature` SET `MovementType`=0 WHERE `guid`=24762;
+DELETE FROM `creature_addon` WHERE `guid`=24762;
+DELETE FROM `waypoint_data` WHERE `id`=247620;
+DELETE FROM `waypoints` WHERE `entry`=23616;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(23616, 1, -2454.94, -482.136, -8.97948, 'Kyle'),
+(23616, 2, -2445.34, -476.395, -8.92086, 'Kyle'),
+(23616, 3, -2433.79, -468.785, -9.20522, 'Kyle'),
+(23616, 4, -2422.01, -460.858, -9.1759, 'Kyle'),
+(23616, 5, -2407.47, -451.07, -8.70993, 'Kyle'),
+(23616, 6, -2395.98, -443.42, -8.42222, 'Kyle'),
+(23616, 7, -2383.8, -436.212, -8.78844, 'Kyle'),
+(23616, 8, -2367.83, -425.967, -9.38671, 'Kyle'),
+(23616, 9, -2355.15, -413.835, -9.75652, 'Kyle'),
+(23616, 10, -2345.39, -403.032, -8.87064, 'Kyle'),
+(23616, 11, -2338.73, -387.213, -7.97681, 'Kyle'),
+(23616, 12, -2330.27, -374.08, -8.37519, 'Kyle'),
+(23616, 13, -2314.64, -365.663, -9.41672, 'Kyle'),
+(23616, 14, -2295.45, -360.874, -9.42468, 'Kyle'),
+(23616, 15, -2279.85, -357.148, -9.42468, 'Kyle'),
+(23616, 16, -2263.83, -363.376, -9.42468, 'Kyle'),
+(23616, 17, -2248.52, -370.238, -9.42468, 'Kyle'),
+(23616, 18, -2226.43, -386.156, -9.42468, 'Kyle'),
+(23616, 19, -2232.14, -416.578, -9.42205, 'Kyle'),
+(23616, 20, -2247.29, -439.615, -9.42475, 'Kyle'),
+(23616, 21, -2252.91, -448.416, -9.09973, 'Kyle'),
+(23616, 22, -2257.71, -455.921, -8.15442, 'Kyle'),
+(23616, 23, -2271.66, -475.713, -7.80418, 'Kyle'),
+(23616, 24, -2293.85, -483.264, -7.86093, 'Kyle'),
+(23616, 25, -2302.71, -490.694, -7.92982, 'Kyle'),
+(23616, 26, -2306.74, -494.585, -8.44247, 'Kyle'),
+(23616, 27, -2324.17, -516.494, -9.32393, 'Kyle'),
+(23616, 28, -2340.11, -535.209, -9.2326, 'Kyle'),
+(23616, 29, -2357.69, -538.25, -9.158, 'Kyle'),
+(23616, 30, -2372.68, -528.41, -9.15687, 'Kyle'),
+(23616, 31, -2391.28, -518.477, -8.4459, 'Kyle'),
+(23616, 32, -2404.81, -514.866, -7.4283, 'Kyle'),
+(23616, 33, -2418.06, -510.431, -6.09458, 'Kyle'),
+(23616, 34, -2431.22, -505.672, -6.06301, 'Kyle'),
+(23616, 35, -2443.9, -499.738, -7.60161, 'Kyle'),
+(23616, 36, -2462.4, -488.247, -9.27003, 'Kyle');
+
+SET @ENTRY := 23616;
+SET @Friendly:= 23622;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`IN (@ENTRY, @Friendly);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Friendly AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Friendly*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,25,0,100,0,0,0,0,0,53,1,23616,1,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Frenzied - On Reset - Start Waypoint"),
+(@ENTRY,0,1,2,8,0,100,0,42222,0,55000,55000,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Kyle the Frenzied - On Spellhit 'Lunch for Kyle' - Store Targetlist"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Frenzied - On Spellhit 'Lunch for Kyle' - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 2361600;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,54,55000,0,0,0,0,0,1,186265,50,0,0,0,0,0,"Kyle the Frenzied - On Script - Pause Waypoint"),
+(@ENTRY,9,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,"Kyle the Frenzied - On Script - Say Line 0 (No Repeat)"),
+(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,17,393,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Frenzied - On Script - Set Emote State 393"),
+(@ENTRY,9,3,0,0,0,100,0,5000,5000,0,0,69,0,0,0,0,0,0,20,186265,50,0,0,0,0,0,"Kyle the Frenzied - On Script - Move To Closest Gameobject 'Kyle's Lunch'"),
+(@ENTRY,9,4,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Frenzied - On Script - Say Line 1"),
+(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,17,69,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Frenzied - On Script - Set Emote State 69"),
+(@ENTRY,9,6,0,0,0,100,0,4000,4000,0,0,12,@Friendly,8,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Summon Kyle the Friendly"),
+(@ENTRY,9,7,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Despawn"),
+
+(@Friendly,0,0,0,25,0,100,0,0,0,0,0,80,@Friendly*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Friendly - On Reset - Run Script"),
+(@Friendly*100,9,0,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Friendly - On Script - Say Line 2"),
+(@Friendly*100,9,1,0,0,0,100,0,0,0,0,0,17,400,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Friendly - On Script - Set Emote State 400"),
+(@Friendly*100,9,2,0,0,0,100,0,0,0,0,0,33,23616,0,0,0,0,0,21,10,0,0,0,0,0,0,"Kyle the Friendly - On Script - Quest Credit 'Kyle's Gone Missing!'"),
+(@Friendly*100,9,3,0,0,0,100,0,30000,30000,0,0,70,0,0,0,0,0,0,10,24762,23616,0,0,0,0,0,"Kyle the Friendly - On Script - respawn Kyle the Frenzied"),
+(@Friendly*100,9,4,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kyle the Friendly -On Script - Despawn");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_06_world.sql
new file mode 100644
index 00000000000..8cc87843ad1
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_06_world.sql
@@ -0,0 +1,24 @@
+--
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=34935;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES
+(34935,43671,1,0); -- Horde Gunship Cannon - Ride Vehicle
+
+SET @NPC_VISION_RAVEN_GOD := 21861;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@NPC_VISION_RAVEN_GOD) 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_VISION_RAVEN_GOD,0,0,1,38,0,100,0,1,1,0,0,11,39426,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Cast credit"),
+(@NPC_VISION_RAVEN_GOD,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 0"),
+(@NPC_VISION_RAVEN_GOD,0,2,3,38,0,100,0,1,2,0,0,11,39428,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Cast credit"),
+(@NPC_VISION_RAVEN_GOD,0,3,0,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 1"),
+(@NPC_VISION_RAVEN_GOD,0,4,5,38,0,100,0,1,3,0,0,11,39430,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Cast credit"),
+(@NPC_VISION_RAVEN_GOD,0,5,0,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 2"),
+(@NPC_VISION_RAVEN_GOD,0,6,7,38,0,100,0,1,4,0,0,11,39431,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - On Data Set 4 - Cast credit"),
+(@NPC_VISION_RAVEN_GOD,0,7,0,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,21,20,0,0,0.0,0.0,0.0,0.0,"Vision of Raven God - Link - Say 3");
+
+SET @ENTRY := 24290;
+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,8,0,100,0,43404,0,0,0,11,43419,0,0,0,0,0,7,0,0,0,0,0,0,0,"New Agamand Plague Tank Bunny - On Spellhit 'Mission: Plague This!: Orehammer's Precision Bombs Dummy' - Quest Credit 'Mission: Plague This!'");
+
+UPDATE `smart_scripts` SET `action_param1`=25068 WHERE `entryorguid`=24999 AND `source_type`=0 AND `id`=2 AND `link`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_07_world.sql
new file mode 100644
index 00000000000..a46884162f4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_07_world.sql
@@ -0,0 +1,34 @@
+--
+SET @Zuluhed := 11980;
+SET @Portal := 22336;
+SET @Arcubus := 22338;
+SET @Infusion := 38853;
+SET @SummonPortal := 38876;
+SET @Rain := 19717;
+SET @SummonArcubus := 38877;
+
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@Zuluhed, @Portal, @Arcubus);
+
+DELETE FROM `creature_text` WHERE `entry`=@Zuluhed;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(@Zuluhed,0,0,'Indeed, the time has come to end this charade.',14,0,100,0,0,0,'Zuluhed the Whacked', 20128),
+(@Zuluhed,1,0,'Destroy them! Destroy them all!', 14,0,100,0,0,0,'Zuluhed the Whacked', 20129),
+(@Zuluhed,2,0,'Foolish mortals. Did you think that I would not strike you down for your transgressions?', 14,0,100,0,0,0,'Zuluhed the Whacked', 20127),
+(@Zuluhed,3,0,'Lord Illidan, bless me with the power of the flight!', 14,0,100,0,0,0,'Zuluhed the Whacked', 20126);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Zuluhed, @Portal, @Arcubus) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Zuluhed*100, @Zuluhed*100+1, @Portal*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
+(@Zuluhed,0,0,0,54,0,100,0,0,0,0,0,80,@Zuluhed*100,2,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Zuluhed the Whacked - Just Summoned - action list"),
+(@Zuluhed*100,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,0.0,0.0,"Zuluhed the Whacked - action list - text"),
+(@Zuluhed*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,0.0,0.0,"Zuluhed the Whacked - action list - text"),
+(@Zuluhed*100,9,2,0,0,0,100,0,4000,4000,0,0,1,1,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Zuluhed the Whacked - action list - text"),
+(@Zuluhed,0,1,0,0,0,100,0,12000,12000,12000,12000,11,@Rain,0,0,0,0,0,5,0,0,0,0.0,0.0,0.0,0.0,"Zuluhed the Whacked - IC - Cast rain"),
+(@Zuluhed,0,2,0,0,0,100,0,30000,30000,60000,60000,11,@SummonPortal,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Zuluhed the Whacked - IC - Summon portal"),
+(@Zuluhed,0,3,0,2,0,100,1,0,25,0,0,80,@Zuluhed*100+1,2,0,0,0,0,1,0,0,0,0,0,0,0,'Zuluhed the Whacked - On 25% health - ActionList'),
+(@Zuluhed*100+1,9,0,0,0,0,100,0,0,0,0,0,11,@Infusion,0,0,0,0,0,1,0,0,0,0,0,0,0,'Zuluhed the Whacked - ActionList - Cast Infusion'),
+(@Zuluhed*100+1,9,1,0,0,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Zuluhed the Whacked - ActionList - Text'),
+(@Arcubus,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,10,0,0,0.0,0.0,0.0,0.0,"Zuluhed the Whacked - Just Summoned - Attack player on 10 yards"),
+(@Portal,0,0,0,54,0,100,1,0,0,0,0,80,@Portal*100,2,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Portal - Just Summoned - action list"),
+(@Portal*100,9,0,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Portal - ActionList - SET_ROOT'),
+(@Portal*100,9,1,0,0,0,100,0,15000,15000,0,0,11,@SummonArcubus,0,0,0,0,0,1,0,0,0,0,0,0,0,'Portal - ActionList - Cast SummonArcubus');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_08_world.sql
new file mode 100644
index 00000000000..7043a9cdff8
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_08_world.sql
@@ -0,0 +1,15 @@
+--
+UPDATE `smart_scripts` SET `action_param1`=25068 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=0 AND `link`=0;
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=35427;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES
+(35427,43671,1,0);
+
+UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=38162 WHERE `entryorguid`=19937 AND `source_type`=0 AND `id` IN (1, 3, 12);
+UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=70606 WHERE `entryorguid`=37826 AND `source_type`=0 AND `id` = 0;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=25359 AND `source_type`=0 AND `id`=1;
+UPDATE `smart_scripts` SET `link`=6 WHERE `entryorguid`=25335 AND `source_type`=0 AND `id`=5;
+UPDATE `smart_scripts` SET `link`=10 WHERE `entryorguid`=25335 AND `source_type`=0 AND `id`=9;
+UPDATE `smart_scripts` SET `event_type`=61, `link`=0 WHERE `entryorguid`=4880 AND `source_type`=0 AND `id`=21;
+UPDATE `smart_scripts` SET `event_param1`=0 WHERE `entryorguid`=4880 AND `source_type`=0 AND `id`=23;
+UPDATE `smart_scripts` SET `link`=16 WHERE `entryorguid`=28122 AND `source_type`=0 AND `id`=15;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_09_world.sql
new file mode 100644
index 00000000000..7ed85568830
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_09_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` = 12752 AND `type` = 11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
+(12752, 11, 0, 0, 'achievement_bronjahm_soul_power');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_00_world.sql
new file mode 100644
index 00000000000..727aaf91e6f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_00_world.sql
@@ -0,0 +1,8 @@
+--
+UPDATE `conditions` SET `ConditionValue3`=0 WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=48363 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=29 AND `ConditionTarget`=0 AND `ConditionValue1`=27315 AND `ConditionValue2`=5 AND `ConditionValue3`=1;
+UPDATE `conditions` SET `ConditionValue3`=0 WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=48363 AND `SourceId`=0 AND `ElseGroup`=1 AND `ConditionTypeOrReference`=29 AND `ConditionTarget`=0 AND `ConditionValue1`=27336 AND `ConditionValue2`=5 AND `ConditionValue3`=1;
+UPDATE `conditions` SET `ConditionValue3`=0 WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=48397 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=29 AND `ConditionTarget`=0 AND `ConditionValue1`=27315 AND `ConditionValue2`=5 AND `ConditionValue3`=1;
+UPDATE `conditions` SET `ConditionValue3`=0 WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=48397 AND `SourceId`=0 AND `ElseGroup`=1 AND `ConditionTypeOrReference`=29 AND `ConditionTarget`=0 AND `ConditionValue1`=27336 AND `ConditionValue2`=5 AND `ConditionValue3`=1;
+UPDATE `conditions` SET `ConditionTypeOrReference`=29, `ConditionValue1`=37852, `ConditionValue2`=10 WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=70586 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=18 AND `ConditionTarget`=0 AND `ConditionValue1`=1 AND `ConditionValue2`=37852 AND `ConditionValue3`=0;
+UPDATE `conditions` SET `ConditionValue2`=0 WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=23286 AND `SourceEntry`=32726 AND `SourceId`=0 AND `ElseGroup`=2 AND `ConditionTypeOrReference`=9 AND `ConditionTarget`=0 AND `ConditionValue1`=11081 AND `ConditionValue2`=1 AND `ConditionValue3`=0;
+UPDATE `conditions` SET `ConditionValue2`=0 WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup`=23324 AND `SourceEntry`=32726 AND `SourceId`=0 AND `ElseGroup`=2 AND `ConditionTypeOrReference`=9 AND `ConditionTarget`=0 AND `ConditionValue1`=11081 AND `ConditionValue2`=1 AND `ConditionValue3`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_01_world.sql
new file mode 100644
index 00000000000..460f6b1a76f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_01_world.sql
@@ -0,0 +1,163 @@
+--
+DELETE FROM `creature_formations` WHERE `leaderGUID`=57528;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(57528, 57528, 0, 0, 2),
+(57528, 57527, 3, 90, 2);
+
+-- Pathing for Thrallmar Grunt Entry: 16580 'TDB FORMAT'
+SET @NPC := 57528;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=132.3433,`position_y`=2762.987,`position_z`=102.3826 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,132.3433,2762.987,102.3826,0,0,0,0,100,0),
+(@PATH,2,121.0521,2749.356,98.25848,0,0,0,0,100,0),
+(@PATH,3,109.0274,2741.556,94.49025,0,0,0,0,100,0),
+(@PATH,4,95.7988,2726.423,89.95798,0,0,0,0,100,0),
+(@PATH,5,83.33932,2712.466,86.36182,0,0,0,0,100,0),
+(@PATH,6,75.62203,2702.179,84.19798,0,0,0,0,100,0),
+(@PATH,7,68.19456,2688.539,81.85039,0,0,0,0,100,0),
+(@PATH,8,66.99038,2685.902,81.33047,0,0,0,0,100,0),
+(@PATH,9,82.17162,2678.548,81.62874,0,0,0,0,100,0),
+(@PATH,10,96.37463,2678.292,82.75209,0,0,0,0,100,0),
+(@PATH,11,112.1558,2676.275,83.38298,0,0,0,0,100,0),
+(@PATH,12,119.6769,2675.056,83.7209,0,0,0,0,100,0),
+(@PATH,13,111.278,2648.706,80.93124,0,0,0,0,100,0),
+(@PATH,14,109.0044,2646.347,80.20769,0,0,0,0,100,0),
+(@PATH,15,116.2792,2653.762,81.89182,0,0,0,0,100,0),
+(@PATH,16,122.4159,2660.933,84.18261,0,0,0,0,100,0),
+(@PATH,17,123.3134,2662.276,84.17096,0,0,0,0,100,0),
+(@PATH,18,103.6847,2670.964,83.00417,0,0,0,0,100,0),
+(@PATH,19,80.54628,2673.75,81.59075,0,0,0,0,100,0),
+(@PATH,20,73.74189,2676.277,80.69298,0,0,0,0,100,0),
+(@PATH,21,69.13676,2697.863,83.02922,0,0,0,0,100,0),
+(@PATH,22,75.02055,2712.901,85.39117,0,0,0,0,100,0),
+(@PATH,23,87.82365,2724.378,88.41669,0,0,0,0,100,0),
+(@PATH,24,104.5768,2742.848,93.40324,0,0,0,0,100,0),
+(@PATH,25,117.3608,2752.192,97.77188,0,0,0,0,100,0),
+(@PATH,26,129.486,2763.919,102.3025,0,0,0,0,100,0);
+-- 0x1C09E4424010310000002C00015AED53 .go 132.3433 2762.987 102.3826
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=57506;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(57506, 57506, 0, 0, 2),
+(57506, 57507, 3, 90, 2);
+
+-- Pathing for Thrallmar Grunt Entry: 16580 'TDB FORMAT'
+SET @NPC := 57506;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=160.0679,`position_y`=2783.137,`position_z`=111.3373 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,160.0679,2783.137,111.3373,0,0,0,0,100,0),
+(@PATH,2,162.4358,2778.617,110.5461,0,0,0,0,100,0),
+(@PATH,3,172.7094,2774.508,110.6423,0,0,0,0,100,0),
+(@PATH,4,186.6513,2777.03,113.5835,0,0,0,0,100,0),
+(@PATH,5,200.0523,2782.693,116.7996,0,0,0,0,100,0),
+(@PATH,6,209.4241,2784.837,118.5891,0,0,0,0,100,0),
+(@PATH,7,222.8512,2785.429,121.0061,0,0,0,0,100,0),
+(@PATH,8,233.1155,2787.613,123.6816,0,0,0,0,100,0),
+(@PATH,9,237.861,2791.877,125.6136,0,0,0,0,100,0),
+(@PATH,10,239.1323,2799.748,127.3235,0,0,0,0,100,0),
+(@PATH,11,239.1207,2795.199,126.621,0,0,0,0,100,0),
+(@PATH,12,235.6156,2789.706,124.6459,0,0,0,0,100,0),
+(@PATH,13,227.0757,2786.192,122.1876,0,0,0,0,100,0),
+(@PATH,14,212.622,2785.389,119.2345,0,0,0,0,100,0),
+(@PATH,15,205.132,2784.269,117.806,0,0,0,0,100,0),
+(@PATH,16,188.0606,2777.626,114.1675,0,0,0,0,100,0),
+(@PATH,17,175.7908,2774.627,111.4541,0,0,0,0,100,0),
+(@PATH,18,168.39,2775.401,110.4383,0,0,0,0,100,0),
+(@PATH,19,160.1083,2782.976,111.366,0,0,0,0,100,0);
+-- 0x1C09E4424010310000002C00015AED54 .go 160.0679 2783.137 111.3373
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=57965;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(57594, 57594, 0, 0, 2),
+(57594, 57595, 5, 0, 2),
+(57594, 57596, 10, 0, 2),
+(57594, 57597, 15, 0, 2);
+
+-- Pathing for Thrallmar Wolf Rider Entry: 16599 'TDB FORMAT'
+SET @NPC := 57594;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=196.28,`position_y`=2781.241,`position_z`=115.9637 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,14334,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,196.28,2781.241,115.9637,0,0,1,0,100,0),
+(@PATH,2,173.7009,2773.865,111.0617,0,0,1,0,100,0),
+(@PATH,3,144.2007,2764.989,105.126,0,0,1,0,100,0),
+(@PATH,4,113.7401,2748.569,96.21298,0,0,1,0,100,0),
+(@PATH,5,94.41273,2728.12,89.81252,0,0,1,0,100,0),
+(@PATH,6,65.77112,2693.39,82.38187,0,0,1,0,100,0),
+(@PATH,7,36.76459,2661.932,76.78915,0,0,1,0,100,0),
+(@PATH,8,17.91903,2638.404,72.61198,0,0,1,0,100,0),
+(@PATH,9,5.355525,2605.847,68.47747,0,0,1,0,100,0),
+(@PATH,10,8.97837,2575.031,65.2146,0,0,1,0,100,0),
+(@PATH,11,18.05011,2542.307,61.65181,0,0,1,0,100,0),
+(@PATH,12,20.63871,2501.002,57.12801,0,0,1,0,100,0),
+(@PATH,13,14.14331,2460.918,53.1017,0,0,1,0,100,0),
+(@PATH,14,7.45386,2419.164,52.73537,0,0,1,0,100,0),
+(@PATH,15,-14.25867,2395.82,52.69493,0,0,1,0,100,0),
+(@PATH,16,-31.19849,2384.302,53.77038,0,0,1,0,100,0),
+(@PATH,17,0.05626106,2409.986,52.19868,0,0,1,0,100,0),
+(@PATH,18,13.30882,2456.084,52.34318,0,0,1,0,100,0),
+(@PATH,19,20.00414,2492.995,56.18382,0,0,1,0,100,0),
+(@PATH,20,19.18841,2536.792,60.81985,0,0,1,0,100,0),
+(@PATH,21,11.05238,2567.616,64.15677,0,0,1,0,100,0),
+(@PATH,22,4.750309,2601.44,67.78731,0,0,1,0,100,0),
+(@PATH,23,13.32799,2630.8,71.16357,0,0,1,0,100,0),
+(@PATH,24,32.40791,2656.75,75.65665,0,0,1,0,100,0),
+(@PATH,25,62.52131,2689.98,81.53972,0,0,1,0,100,0),
+(@PATH,26,92.98247,2726.685,89.31989,0,0,1,0,100,0),
+(@PATH,27,109.4178,2744.999,94.76643,0,0,1,0,100,0),
+(@PATH,28,142.0419,2764.24,104.1994,0,0,1,0,100,0),
+(@PATH,29,171.1686,2772.708,110.2985,0,0,1,0,100,0);
+-- 0x1C09E442401035C000002C00005AED54 .go 196.28 2781.241 115.9637
+
+-- Pathing for Thrallmar Peon Entry: 16591 'TDB FORMAT'
+SET @NPC := 57575;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=55.27306,`position_y`=2654.043,`position_z`=78.42071 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,69, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,55.27306,2654.043,78.42071,0,0,0,0,100,0),
+(@PATH,2,60.95808,2657.462,79.7836,0,0,0,0,100,0),
+(@PATH,3,64.60378,2660.895,80.497,0,0,0,0,100,0),
+(@PATH,4,66.75615,2663.12,80.74207,0,0,0,0,100,0),
+(@PATH,5,65.12799,2682.579,80.74263,0,0,0,0,100,0),
+(@PATH,6,65.82681,2693.285,82.36795,0,0,0,0,100,0),
+(@PATH,7,75.21483,2707.858,84.6664,0,0,0,0,100,0),
+(@PATH,8,84.96182,2718.535,87.05235,0,0,0,0,100,0),
+(@PATH,9,95.03929,2728.742,90.13913,0,0,0,0,100,0),
+(@PATH,10,106.4619,2744.316,94.00992,0,0,0,0,100,0),
+(@PATH,11,123.8118,2755.292,99.37874,0,0,0,0,100,0),
+(@PATH,12,135.8948,2760.833,102.7533,0,0,0,0,100,0),
+(@PATH,13,155.0525,2769.579,107.7352,0,0,0,0,100,0),
+(@PATH,14,158.3794,2773.243,108.8904,0,0,0,0,100,0),
+(@PATH,15,159.9402,2783.268,111.4848,0,0,0,0,100,0),
+(@PATH,16,161.3573,2786.643,112.5604,0,0,0,0,100,0),
+(@PATH,17,165.1619,2790.098,113.5347,0,120000,0,0,100,0),
+(@PATH,18,165.2408,2775.052,109.6661,3,0,0,0,100,0),
+(@PATH,19,161.6743,2781.431,111.1523,0,0,0,0,100,0),
+(@PATH,20,161.0955,2772.586,109.2963,0,0,0,0,100,0),
+(@PATH,21,143.7382,2764.468,104.6033,0,0,0,0,100,0),
+(@PATH,22,122.8,2754.483,99.03847,0,0,0,0,100,0),
+(@PATH,23,109.0177,2745.05,94.75985,0,0,0,0,100,0),
+(@PATH,24,96.74924,2729.785,90.4996,0,0,0,0,100,0),
+(@PATH,25,83.87657,2715.537,86.72665,0,0,0,0,100,0),
+(@PATH,26,75.78943,2705.43,84.61099,0,0,0,0,100,0),
+(@PATH,27,64.73528,2690.525,81.81812,0,0,0,0,100,0),
+(@PATH,28,62.68444,2679.1,80.26672,0,0,0,0,100,0),
+(@PATH,29,62.20171,2674.227,80.11406,0,0,0,0,100,0),
+(@PATH,30,62.53893,2659.067,79.85791,0,0,0,0,100,0),
+(@PATH,31,53.87121,2650.147,77.64667,0,0,0,0,100,0),
+(@PATH,32,52.78874,2648.066,76.98107,0,120000,0,0,100,0);
+-- 0x1C09E442401033C000002C00005AED55 .go 55.27306 2654.043 78.42071
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_02_world.sql
new file mode 100644
index 00000000000..1978c7ff184
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_02_world.sql
@@ -0,0 +1,51 @@
+-- Shakes O'Breen SAI
+SET @ENTRY := 2610;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI', ScriptName='' WHERE `entry`=113531;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 113531 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,0,0,3,19,0,100,0,667,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Quest 'Death From Below' Taken - Run Script"),
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,6,667,0,0,0,0,0,18,30,0,0,0,0,0,0,"Shakes O'Breen - On Just Died - Fail Quest 'Death From Below'"),
+(@ENTRY,0,2,0,11,0,100,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Respawn - Add Npc Flag Questgiver"),
+(@ENTRY,0,3,4,61,0,100,0,667,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Quest 'Death From Below' Taken - Remove Npc Flag Questgiver"),
+(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Just Created - react agressive"),
+(113531,1,0,0,64,0,100,0,0,0,0,0,51,0,0,0,0,0,0,11,2775,50,0,0,0,0,0,"Shakes O'Breen - On gossip hello - kill");
+
+-- Actionlist SAI
+SET @ENTRY := 261000;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Script - Say Line 0"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,106,4,0,0,0,0,0,14,210721,113531,0,0,0,0,0,"Shakes O'Breen - On Script - remove flag from gob "),
+(@ENTRY,9,2,0,0,0,100,0,9000,9000,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2158.637939, -1967.593628, 15.347894, 5.525547,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2161.894531, -1968.629517, 15.641345, 5.462712,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2158.246582, -1965.681763, 15.063377, 5.600158,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2158.358643, -1971.417480, 15.596241, 4.967206,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,6,0,0,0,100,0,20000,20000,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2158.637939, -1967.593628, 15.347894, 5.525547,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,7,0,0,0,100,0,0,0,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2161.894531, -1968.629517, 15.641345, 5.462712,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,8,0,0,0,100,0,0,0,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2158.246582, -1965.681763, 15.063377, 5.600158,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,9,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Script - Say Line 1"),
+(@ENTRY,9,10,0,0,0,100,0,15000,15000,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2158.637939, -1967.593628, 15.347894, 5.525547,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,11,0,0,0,100,0,0,0,0,0,12,2775,1,60000,0,0,0,8,0,0,0,-2161.894531, -1968.629517, 15.641345, 5.462712,"Shakes O'Breen - On Script - Summon Creature 'Daggerspine Marauder'"),
+(@ENTRY,9,12,0,0,0,100,0,0,0,0,0,105,4,0,0,0,0,0,14,210721,113531,0,0,0,0,0,"Shakes O'Breen - On Script - Add Flag to gob "),
+(@ENTRY,9,13,0,0,0,100,0,30000,30000,0,0,15,667,0,0,0,0,0,17,0,100,0,0,0,0,0,"Shakes O'Breen - On Script - Quest Credit 'Death From Below'"),
+(@ENTRY,9,14,0,0,0,100,0,30000,30000,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shakes O'Breen - On Script - Add Npc Flag ");
+
+-- Daggerspine Marauder SAI
+SET @ENTRY := 2775;
+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,63,0,30,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Daggerspine Marauder - On Just Created - Say Line 0"),
+(@ENTRY,0,1,0,63,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-2086.070068, -2028.859985, 3.220880, 2.670350,"Daggerspine Marauder - On Just Created - go to pos"),
+(@ENTRY,0,2,0,63,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Daggerspine Marauder - On Just Created - react agressive"),
+(@ENTRY,0,3,0,10,0,100,0,0,30,3000,3000,49,0,0,0,0,0,0,19,2610,30,0,0,0,0,0,"Daggerspine Marauder - OOCLOS - Attack start");
+
+DELETE FROM `creature_text` WHERE `entry` IN (2775, 2610);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(2775, 0, 0, 'Nothing will stop us! You will die!', 14, 0, 100, 0, 0, 0, 855, 0, 'Daggerspine Marauder'),
+(2775, 0, 1, 'You''ve plundered our treasures too long. Prepare to meet your watery grave!', 14, 0, 100, 0, 0, 0, 854, 0, 'Daggerspine Marauder'),
+(2610, 0, 0, 'All hands to battle stations! Naga incoming!', 14, 0, 100, 0, 0, 0, 6372, 0, 'Shakes Breen'),
+(2610, 1, 0, 'If we can just hold them now, I am sure we will be in the clear.', 12, 0, 100, 0, 0, 0, 863, 0, 'Shakes Breen');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_03_world.sql
new file mode 100644
index 00000000000..e4add1c22bf
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_03_world.sql
@@ -0,0 +1 @@
+UPDATE `item_template` SET `BuyCount`=5 WHERE `entry`IN(22218,49856,49857,49858,49859,49860,49861,22200,50163);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_04_world.sql
new file mode 100644
index 00000000000..be552ca6125
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_04_world.sql
@@ -0,0 +1,111 @@
+--
+UPDATE `creature_template` SET `vehicleId`=196 WHERE `entry`=30108;
+DELETE FROM `vehicle_template_accessory` WHERE `entry`=30108 AND `accessory_entry` IN (30401);
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`)VALUES
+(30108,30401,1,1,'Stormcrest Eagle',8,0);
+
+UPDATE `creature_template` SET `ScriptName` = 'npc_stormcrest_eagle' WHERE `entry` = 30108;
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=9891 AND `id`=0;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(9891, 0, 0, 'King Stormheart sent me to be tested as a frostborn would. I am ready for my test, Fjorlin', 32929, 1, 1, 0, 0, 0, 0, '',0);
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceID`=15 AND `SourceEntry`=0 AND `SourceGroup`=9891;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`elseGroup`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`Comment`) VALUES
+(15,9891,0,9,0,12874,0,0,0,'show gossip on quest 12874 taken');
+
+-- Fjorlin Frostbrow SAI
+SET @ENTRY := 29732;
+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,1,62,0,100,0,9891,1,0,0,11,56411,0,0,0,0,0,7,0,0,0,0,0,0,0,"Fjorlin Frostbrow - On Gossip Option 1 Selected - Cast 'Forcecast Summon Scripted Eagle'"),
+(@ENTRY,0,1,0,61,0,100,0,9891,1,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Fjorlin Frostbrow - On Gossip Option 1 Selected - Close Gossip"),
+(@ENTRY,0,2,3,62,0,100,0,9891,0,0,0,85,55942,2,0,0,0,0,7,0,0,0,0,0,0,0,"Fjorlin Frostbrow - On Gossip Option 0 Selected - Invoker Cast 'Summon Battle Eagle'"),
+(@ENTRY,0,3,0,61,0,100,0,9891,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Fjorlin Frostbrow - On Gossip Option 0 Selected - Close Gossip");
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=30108;
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
+(30108,46598,1,0);
+
+UPDATE `creature_template` SET `ScriptName`='', `InhabitType`=4 WHERE `entry`=30108;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=30108;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 30108, 0, 0, 9, 0, 12874, 0, 0, 0, 0, 0, '', 'SAI triggers only if player on quest 12874');
+
+DELETE FROM `creature_text` WHERE `entry`=30401;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`,`BroadcastTextId`) VALUES
+(30401, 0, 0, 'King Stormheart is putting you to the test, eh? He must see something in you to begin with or I doubt he''d put you through such a sacred ritual.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30942),
+(30401, 1, 0, 'I know you''re new to our kind, so I''ll catch you up a bit while we''re on our way over.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30943),
+(30401, 2, 0, 'Years back, my father and several other frostborn were returning from a trek across Dragonblight. There was a heavy blizzard... far worse than we''ve ever seen since.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30944),
+(30401, 3, 0, 'They crossed a trail of blood-soaked snow and followed it to find a dwarf wandering and speaking in a dialect they couldn''t make out... and not a dwarf of our kind mind you, but a mountain dwarf - something our kind had never seen before.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30945),
+(30401, 4, 0, 'The dwarf seemed lost, having no memory of where he came from, or even of his own name. Not being the kind to leave a dwarven cousin to die in the snow, my father''s party took him in and continued back towards Frosthold.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30946),
+(30401, 5, 0, 'Not long later, out of nowhere, the snow burst before them and a jormungar the size of Veranus herself came down upon their party... one of them was swallowed whole before they even had time to react.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30947),
+(30401, 6, 0, 'My father thought they were all doomed... but behind him, a furious roar rumbled across the snow, and he turned to see the mountain dwarf growing in size, his skin taking on a stone-like texture, and his hands sizzling with lightning.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30948),
+(30401, 7, 0, 'The dwarf barreled forward with a sound like rolling thunder and hurled a shining metal hammer, lightning coursing over its surface, directly into the jormungar''s throat.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30949),
+(30401, 8, 0, 'The jormungar collapsed instantly, its head barely still attached to its convulsing body. My father turned to the dwarf in awe and raised a fist in praise...', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30950),
+(30401, 9, 0, 'The stranger having no name of his own, my father deemed \"Yorg,\" a name reserved for champions of legend. Years later, he now stands before us as Yorg Stormheart, King of the Frostborn.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30952),
+(30401, 10, 0, 'King Stormheart has trained us well... turned us into even more fearsome warriors than we could have boasted during the time of our war with the Frost Giants.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30953),
+(30401, 11, 0, 'And as one of the fiercest tests put upon a warrior of the frostborn, we are made to face a creature far larger than ourselves--giants, dragons, jormungar--as a testament to the fact that size will never be our weakness.', 12, 0, 100, 0, 0, 0, 'Velog Icebellow',30955),
+(30401, 12, 0, 'This is the test put before you this day. Return to us only once The Iron Watcher is dead, and be revered as a warrior of the frostborn.', 14, 0, 100, 0, 0, 0, 'Velog Icebellow',30956),
+(30401, 13, 0, 'He is slow from the rust of the ages... be quick on your feet and he will not best you. You have King Stormheart''s favor - do not disappoint.', 14, 0, 100, 0, 0, 0, 'Velog Icebellow',31343);
+
+DELETE FROM `creature_template_addon` WHERE `entry`=30108;
+INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(30108,0,0,0,1,0,'52211'); -- Flight Aura
+
+DELETE FROM `spell_target_position` WHERE id=55942;
+INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(55942, 571, 6610.838379, -280.558685, 984.428772, 3.598404);
+
+-- Stormcrest Eagle SAI
+SET @ENTRY := 30108;
+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,27,0,100,0,0,0,0,0,53,1,30108,0,0,0,0,1,0,0,0,0,0,0,0,"Stormcrest Eagle - On Passenger Boarded - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,1,30108,0,0,1,0,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 1 Reached - Say Line 0"),
+(@ENTRY,0,2,0,40,0,100,0,2,30108,0,0,1,1,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 2 Reached - Say Line 1"),
+(@ENTRY,0,3,0,40,0,100,0,4,30108,0,0,1,2,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 4 Reached - Say Line 2"),
+(@ENTRY,0,4,0,40,0,100,0,6,30108,0,0,1,3,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 6 Reached - Say Line 3"),
+(@ENTRY,0,5,0,40,0,100,0,8,30108,0,0,1,4,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 8 Reached - Say Line 4"),
+(@ENTRY,0,6,0,40,0,100,0,10,30108,0,0,1,5,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 10 Reached - Say Line 5"),
+(@ENTRY,0,7,0,40,0,100,0,12,30108,0,0,1,6,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 12 Reached - Say Line 6"),
+(@ENTRY,0,8,0,40,0,100,0,14,30108,0,0,1,7,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 14 Reached - Say Line 7"),
+(@ENTRY,0,9,0,40,0,100,0,16,30108,0,0,1,8,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 16 Reached - Say Line 8"),
+(@ENTRY,0,10,0,40,0,100,0,18,30108,0,0,1,9,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 18 Reached - Say Line 9"),
+(@ENTRY,0,12,0,40,0,100,0,22,30108,0,0,1,10,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 22 Reached - Say Line 10"),
+(@ENTRY,0,13,0,40,0,100,0,24,30108,0,0,1,11,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 24 Reached - Say Line 11"),
+(@ENTRY,0,14,0,40,0,100,0,25,30108,0,0,1,12,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 25 Reached - Say Line 12"),
+(@ENTRY,0,15,0,40,0,100,0,26,30108,0,0,1,13,0,0,0,0,0,19,30401,10,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 26 Reached - Say Line 13"),
+(@ENTRY,0,16,0,40,0,100,0,28,30108,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormcrest Eagle - On Waypoint 28 Reached - Despawn Instant");
+
+DELETE FROM `waypoints` WHERE `entry`=30108;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(30108, 1, 6586.2, -294.997, 989.82, 'Eagle'),
+(30108, 2, 6519.83, -384.722, 994.117, 'Eagle'),
+(30108, 3, 6519.97, -524.613, 986.315, 'Eagle'),
+(30108, 4, 6582.99, -676.868, 973.055, 'Eagle'),
+(30108, 5, 6687.48, -733.39, 964.698, 'Eagle'),
+(30108, 6, 6855.16, -744.853, 961.192, 'Eagle'),
+(30108, 7, 6994.31, -760.115, 959.543, 'Eagle'),
+(30108, 8, 7119.54, -785.058, 970.552, 'Eagle'),
+(30108, 9, 7245.46, -832.456, 982.112, 'Eagle'),
+(30108, 10, 7372.43, -884.75, 992.92, 'Eagle'),
+(30108, 11, 7451.38, -912.608, 999.791, 'Eagle'),
+(30108, 12, 7550.54, -946.482, 1008.39, 'Eagle'),
+(30108, 13, 7627.06, -969.296, 1025.31, 'Eagle'),
+(30108, 14, 7701.49, -991.429, 1041.78, 'Eagle'),
+(30108, 15, 7767.2, -1011.33, 1056.82, 'Eagle'),
+(30108, 16, 7837.09, -1032.49, 1072.82, 'Eagle'),
+(30108, 17, 7898.99, -1053.29, 1090.37, 'Eagle'),
+(30108, 18, 7944.64, -1070.18, 1112.88, 'Eagle'),
+(30108, 19, 7995.38, -1111.07, 1138.38, 'Eagle'),
+(30108, 20, 8075.38, -1184.51, 1180.87, 'Eagle'),
+(30108, 21, 8133, -1259.6, 1214.29, 'Eagle'),
+(30108, 22, 8221.79, -1381.51, 1271, 'Eagle'),
+(30108, 23, 8300.22, -1485.87, 1321.57, 'Eagle'),
+(30108, 24, 8367.07, -1592.58, 1382.36, 'Eagle'),
+(30108, 25, 8414.48, -1701.68, 1449.03, 'Eagle'),
+(30108, 26, 8456.78, -1783.6, 1462.78, 'Eagle'),
+(30108, 27, 8482.2, -1838.47, 1470, 'Eagle'),
+(30108, 28, 8526.7, -1956.21, 1473.59, 'Eagle');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_05_world.sql
new file mode 100644
index 00000000000..bb81873bf4b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_05_world.sql
@@ -0,0 +1,51 @@
+SET @Guid := 29727;
+
+UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry`=4781;
+UPDATE `gameobject_template` SET `AIName`= 'SmartGameObjectAI' WHERE`entry` =20920;
+DELETE FROM `smart_scripts` WHERE `entryorguid` =20920 AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=4781 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=478100 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
+(4781,0,0,1,54,0,100,0,0,0,0,0,1,0,0,0,0,0,0,23,0,0,0,0,0,0,0,'Snufflenose Gopher - On Just Summoned - Say Line 0'),
+(4781,0,1,0,61,0,100,0,0,0,0,0,29,1,0,0,0,0,0,23,0,0,0,0,0,0,0,'Snufflenose Gopher - On Just Summoned - Follow Summoner'),
+(4781,0,2,3,38,0,100,0,1,1,10000,10000,29,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snufflenose Gopher - On Data Set - Stop Following Invoker'),
+(4781,0,3,4,61,0,100,0,0,0,0,0,69,0,0,0,0,0,0,20,20920,0,0,0,0,0,0,'Snufflenose Gopher - On Data Set - Move to Blueleaf Tuber'),
+(4781,0,4,5,61,0,100,0,0,0,0,0,80,478100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Snufflenose Gopher - On Data Set - Run Script'),
+(4781,0,5,6,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,23,0,0,0,0,0,0,0,'Snufflenose Gopher - On Data Set - Say Line 1'),
+(4781,0,6,0,61,0,100,0,0,0,0,0,8,0,0,0,0,0,0,23,0,0,0,0,0,0,0,'Snufflenose Gopher - On Data Set - Set Passive'),
+(4781,0,7,0,8,0,100,0,8283,0,10000,10000,45,1,1,0,0,0,0,20,20920,40,0,0,0,0,0,'Snufflenose Gopher - On Spellhit (Snufflenose Command) - Set Data Blueleaf Tuber'),
+(478100,9,0,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,23,0,0,0,0,0,0,0,'Snufflenose Gopher - Script - Say Line 2'),
+(478100,9,1,0,0,0,100,0,0,0,0,0,104,0,0,0,0,0,0,20,20920,10,0,0,0,0,0,'Snufflenose Gopher - Script - Set Flags on Blueleaf Tuber'),
+(478100,9,2,0,0,0,100,0,0,0,0,0,70,300,0,0,0,0,0,20,20920,10,0,0,0,0,0,'Snufflenose Gopher - Script - Respawn Blueleaf Tuber'),
+(478100,9,3,0,0,0,100,0,5000,5000,0,0,29,1,0,0,0,0,0,23,0,0,0,0,0,0,0,'Snufflenose Gopher - Script - Follow Summoner'),
+(478100,9,4,0,0,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snufflenose Gopher - Script - Set Hostile'),
+
+(20920,1,0,0,11,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blueleaf Tuber - On Spawn - Set Phase 1'),
+(20920,1,1,2,38,1,100,0,1,1,0,0,45,1,1,0,0,0,0,19,4781,0,0,0,0,0,0,'Blueleaf Tuber - On Data Set (Phase 1) - Set Data Snufflenose Gopher'),
+(20920,1,2,0,61,0,100,0,0,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blueleaf Tuber - On Data Set (Phase 1) - Set Phase 2'),
+(20920,1,3,0,1,0,100,0,300000,300000,300000,300000,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blueleaf Tuber - OOC (Phase 2) - Set Phase 1');
+
+DELETE FROM `creature_text` WHERE `entry`=4781;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(4781, 0, 0, '%s nervously crawls from the crate.', 16, 0, 100, 0, 0, 0, 1638, 0, 'Snufflenose Gopher'),
+(4781, 1, 0, '%s wiggles his whiskers at $n.', 16, 0, 100, 0, 0, 0, 1591, 0, 'Snufflenose Gopher'),
+(4781, 2, 0, '%s sniffs at the ground...', 16, 0, 100, 0, 0, 0, 1592, 0, 'Snufflenose Gopher');
+
+DELETE FROM `gameobject` WHERE `id`=20919;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(@Guid+0, 20919, 47, 0, 0, 1, 1, 2082.74, 1671.82, 61.2396, 3.66079, 0, 0, 0.966493, -0.256693, -43200, 100, 1, 0),
+(@Guid+1, 20919, 47, 0, 0, 1, 1, 2159.43, 1687.49, 57.5433, 3.66079, 0, 0, 0.966493, -0.256693, -43200, 100, 1, 0),
+(@Guid+2, 20919, 47, 0, 0, 1, 1, 2080.89, 1703.36, 56.6447, 0.553757, 0, 0, 0.273354, 0.961913, -43200, 100, 1, 0),
+(@Guid+3, 20919, 47, 0, 0, 1, 1, 2055.28, 1767.7, 58.4559, 2.98378, 0, 0, 0.996889, 0.0788245, -43200, 100, 1, 0),
+(@Guid+4, 20919, 47, 0, 0, 1, 1, 2196.64, 1827.96, 61.4706, 2.11277, 0, 0, 0.870583, 0.492022, -43200, 100, 1, 0),
+(@Guid+5, 20919, 47, 0, 0, 1, 1, 2030.32, 1867.61, 56.2866, 5.6777, 0, 0, 0.298139, -0.954522, -43200, 100, 1, 0),
+(@Guid+6, 20919, 47, 0, 0, 1, 1, 2091.33, 1861.73, 51.0341, 1.25355, 0, 0, 0.586536, 0.809923, -43200, 100, 1, 0),
+(@Guid+7, 20919, 47, 0, 0, 1, 1, 2200.15, 1897.64, 71.3191, 2.6492, 0, 0, 0.969846, 0.243717, -43200, 100, 1, 0),
+(@Guid+8, 20919, 47, 0, 0, 1, 1, 2075.75, 1742.04, 76.7184, 1.33994, 0, 0, 0.620962, 0.78384, -43200, 100, 1, 0),
+(@Guid+9, 20919, 47, 0, 0, 1, 1, 2126, 1661.15, 82.4824, 0.0220437, 0, 0, 0.0110216, 0.999939, -43200, 100, 1, 0),
+(@Guid+10, 20919, 47, 0, 0, 1, 1, 2207.92, 1596.91, 80.7375, 3.60582, 0, 0, 0.973182, -0.230035, -43200, 100, 1, 0),
+(@Guid+11, 20919, 47, 0, 0, 1, 1, 2156.98, 1542.26, 72.849, 2.43086, 0, 0, 0.937519, 0.347934, -43200, 100, 1, 0),
+(@Guid+12, 20919, 47, 0, 0, 1, 1, 2179.95, 1514.06, 69.0709, 0.778385, 0, 0, 0.379441, 0.925216, -43200, 100, 1, 0),
+(@Guid+13, 20919, 47, 0, 0, 1, 1, 2000.85, 1533.93, 80.3971, 4.919, 0, 0, 0.630419, -0.776255, -43200, 100, 1, 0),
+(@Guid+14, 20919, 47, 0, 0, 1, 1, 1991.49, 1608.53, 81.1601, 1.1004, 0, 0, 0.522858, 0.85242, -43200, 100, 1, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_00_world.sql
new file mode 100644
index 00000000000..ba302a01484
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_00_world.sql
@@ -0,0 +1,456 @@
+-- Fix up formation from last commit
+-- https://github.com/TrinityCore/TrinityCore/commit/bbcf8f58e69d361c3df1c37fa79d1efa3e52bc54
+DELETE FROM `creature_formations` WHERE `leaderGUID`=57594;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(57594, 57594, 0, 0, 2),
+(57594, 57595, 5, 0, 2),
+(57594, 57596, 10, 0, 2),
+(57594, 57597, 15, 0, 2);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=57965;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES
+(57965, 57965, 0, 0, 2),
+(57965, 57966, 5, 0, 2),
+(57965, 57967, 10, 0, 2),
+(57965, 57968, 15, 0, 2);
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58706;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-372.7111,`position_y`=2839.348,`position_z`=3.085857 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-372.7111,2839.348,3.085857,0,0,0,0,100,0),
+(@PATH,2,-369.1973,2833.291,3.833567,0,0,0,0,100,0),
+(@PATH,3,-366.1855,2828.1,4.404455,0,0,0,0,100,0),
+(@PATH,4,-364.1777,2824.639,5.029455,0,0,0,0,100,0),
+(@PATH,5,-363.1738,2822.908,5.654455,0,0,0,0,100,0),
+(@PATH,6,-361.668,2820.313,6.279455,0,0,0,0,100,0),
+(@PATH,7,-360.6641,2818.582,7.029455,0,0,0,0,100,0),
+(@PATH,8,-357.6523,2813.391,7.904455,0,0,0,0,100,0),
+(@PATH,9,-354.6406,2808.199,8.654455,0,0,0,0,100,0),
+(@PATH,10,-352.1309,2803.873,9.279455,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C0000212A8F .go -372.7111 2839.348 3.085857
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58710;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-173.5004,`position_y`=2340.303,`position_z`=60.07005 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-173.5004,2340.303,60.07005,0,0,0,0,100,0),
+(@PATH,2,-167.5776,2345.781,59.66853,0,0,0,0,100,0),
+(@PATH,3,-168.3658,2358.138,57.73066,0,0,0,0,100,0),
+(@PATH,4,-170.6648,2371.729,55.37167,0,0,0,0,100,0),
+(@PATH,5,-176.5131,2386.787,51.77451,0,0,0,0,100,0),
+(@PATH,6,-179.7427,2391.649,50.90343,0,0,0,0,100,0),
+(@PATH,7,-179.451,2411.232,48.48401,0,0,0,0,100,0),
+(@PATH,8,-181.9889,2397.549,50.08649,0,0,0,0,100,0),
+(@PATH,9,-179.687,2391.666,50.90021,0,0,0,0,100,0),
+(@PATH,10,-172.3989,2376.937,54.03761,0,0,0,0,100,0),
+(@PATH,11,-168.9601,2362.579,56.66465,0,0,0,0,100,0),
+(@PATH,12,-167.4705,2349.302,59.07915,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C000021381E .go -173.5004 2340.303 60.07005
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58709;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-280.5386,`position_y`=2385.487,`position_z`=49.5167 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-280.5386,2385.487,49.5167,0,0,0,0,100,0),
+(@PATH,2,-274.4911,2399.897,49.77866,0,0,0,0,100,0),
+(@PATH,3,-282.391,2415.943,47.12805,0,0,0,0,100,0),
+(@PATH,4,-292.0588,2418.96,45.69984,0,0,0,0,100,0),
+(@PATH,5,-296.9233,2425.813,44.45638,0,0,0,0,100,0),
+(@PATH,6,-288.1144,2443.262,43.60903,0,0,0,0,100,0),
+(@PATH,7,-293.5082,2451.608,42.39658,0,0,0,0,100,0),
+(@PATH,8,-297.1542,2466.072,41.27671,0,0,0,0,100,0),
+(@PATH,9,-296.9443,2470.941,40.92609,0,0,0,0,100,0),
+(@PATH,10,-284.6176,2477.495,40.50471,0,0,0,0,100,0),
+(@PATH,11,-290.6595,2483.031,40.95429,0,0,0,0,100,0),
+(@PATH,12,-284.6285,2477.351,40.70044,0,0,0,0,100,0),
+(@PATH,13,-297.5089,2457.768,41.62237,0,0,0,0,100,0),
+(@PATH,14,-289.9194,2446.963,43.04158,0,0,0,0,100,0),
+(@PATH,15,-287.7819,2443.668,43.38817,0,0,0,0,100,0),
+(@PATH,16,-296.9543,2424.329,44.54842,0,0,0,0,100,0),
+(@PATH,17,-284.9567,2418.073,46.32718,0,0,0,0,100,0),
+(@PATH,18,-276.5181,2404.314,49.4864,0,0,0,0,100,0),
+(@PATH,19,-280.4977,2385.4,49.48282,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C0000213910 .go -280.5386 2385.487 49.5167
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58708;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-314.1599,`position_y`=2611.343,`position_z`=41.12054 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-314.1599,2611.343,41.12054,0,0,0,0,100,0),
+(@PATH,2,-302.6028,2572.273,41.00031,0,0,0,0,100,0),
+(@PATH,3,-297.84,2550.173,41.36596,0,0,0,0,100,0),
+(@PATH,4,-303.8246,2525.236,42.58739,0,0,0,0,100,0),
+(@PATH,5,-297.9362,2545.895,41.70477,0,0,0,0,100,0),
+(@PATH,6,-300.882,2566.604,41.32217,0,0,0,0,100,0),
+(@PATH,7,-306.6208,2578.347,41.52526,0,0,0,0,100,0),
+(@PATH,8,-312.7142,2588.381,41.36144,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C00002139B5 .go -314.1599 2611.343 41.12054
+
+-- Add missing Bonechewer Raider
+DELETE FROM `creature` WHERE `guid`=29980;
+INSERT INTO `creature` (`guid`, `id`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`, `MovementType`) VALUES
+(29980, 16925, 530, 1, -354.3998, 2663.006, 41.72623, 0, 300, 3989, 2);
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 29980;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-354.3998,`position_y`=2663.006,`position_z`=41.72623 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-354.3998,2663.006,41.72623,0,0,0,0,100,0),
+(@PATH,2,-346.7007,2672.114,38.15508,0,0,0,0,100,0),
+(@PATH,3,-332.8381,2681.229,34.02082,0,0,0,0,100,0),
+(@PATH,4,-319.6889,2687.015,31.10067,0,0,0,0,100,0),
+(@PATH,5,-318.0042,2694.25,29.72155,0,0,0,0,100,0),
+(@PATH,6,-324.0378,2716.413,25.33266,0,0,0,0,100,0),
+(@PATH,7,-319.7849,2729.284,23.22117,0,0,0,0,100,0),
+(@PATH,8,-322.0183,2746.254,18.96142,0,0,0,0,100,0),
+(@PATH,9,-322.4724,2747.062,18.86184,0,0,0,0,100,0),
+(@PATH,10,-322.3822,2746.857,18.3417,0,0,0,0,100,0),
+(@PATH,11,-319.7568,2733.282,22.47406,0,0,0,0,100,0),
+(@PATH,12,-323.8112,2718.555,24.77036,0,0,0,0,100,0),
+(@PATH,13,-317.9898,2696.302,28.92368,0,0,0,0,100,0),
+(@PATH,14,-318.5087,2690.603,30.36932,0,0,0,0,100,0),
+(@PATH,15,-329.6577,2682.807,32.7053,0,0,0,0,100,0),
+(@PATH,16,-344.2849,2674.339,36.96185,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C0000213896 .go -354.3998 2663.006 41.72623
+
+-- Only one Tagar Spinebreaker should be spawned
+DELETE FROM `creature` WHERE `guid`=85990;
+
+-- Pathing for Tagar Spinebreaker Entry: 19443 'TDB FORMAT'
+SET @NPC := 85987;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-179.7917,`position_y`=2839.993,`position_z`=23.64687 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-179.7917,2839.993,23.64687,0,0,0,0,100,0),
+(@PATH,2,-168.0662,2837.727,26.36559,0,0,0,0,100,0),
+(@PATH,3,-149.3422,2826.91,33.67762,0,0,0,0,100,0),
+(@PATH,4,-149.3403,2813.561,35.25396,0,0,0,0,100,0),
+(@PATH,5,-160.4427,2807.621,32.6923,0,0,0,0,100,0),
+(@PATH,6,-172.6706,2803.528,29.62396,0,0,0,0,100,0),
+(@PATH,7,-185.5681,2808.792,25.53679,0,0,0,0,100,0),
+(@PATH,8,-186.3388,2797.655,26.33011,0,0,0,0,100,0),
+(@PATH,9,-153.882,2788.701,36.85746,0,0,0,0,100,0),
+(@PATH,10,-134.5498,2778.104,41.05849,0,0,0,0,100,0),
+(@PATH,11,-120.4556,2753.937,49.37396,0,0,0,0,100,0),
+(@PATH,12,-110.122,2737.952,52.16914,0,0,0,0,100,0),
+(@PATH,13,-108.798,2709.016,51.00445,0,0,0,0,100,0),
+(@PATH,14,-125.7525,2695.987,46.92542,0,0,0,0,100,0),
+(@PATH,15,-165.7749,2686.863,43.39313,0,0,0,0,100,0),
+(@PATH,16,-166.924,2686.502,43.27299,0,0,0,0,100,0),
+(@PATH,17,-170.6192,2661.56,42.24799,0,0,0,0,100,0),
+(@PATH,18,-166.9141,2633.801,41.55241,0,0,0,0,100,0),
+(@PATH,19,-165.2749,2618.521,40.12231,0,0,0,0,100,0),
+(@PATH,20,-164.5241,2612.235,40.08208,0,0,0,0,100,0),
+(@PATH,21,-162.7764,2603.097,40.06981,0,0,0,0,100,0),
+(@PATH,22,-165.0483,2590.722,39.90811,0,0,0,0,100,0),
+(@PATH,23,-144.7979,2569.513,41.10892,0,0,0,0,100,0),
+(@PATH,24,-146.1405,2544.73,40.98074,0,0,0,0,100,0),
+(@PATH,25,-156.8518,2539.49,42.95174,0,0,0,0,100,0),
+(@PATH,26,-170.4912,2527.817,41.62189,0,0,0,0,100,0),
+(@PATH,27,-177.3363,2516.895,41.11181,0,0,0,0,100,0),
+(@PATH,28,-176.3846,2510.593,41.94983,0,0,0,0,100,0),
+(@PATH,29,-168.8438,2501.025,43.79488,0,0,0,0,100,0),
+(@PATH,30,-145.8467,2499.76,45.61186,0,0,0,0,100,0),
+(@PATH,31,-131.4405,2495.996,46.55548,0,0,0,0,100,0),
+(@PATH,32,-124.8685,2492.812,46.93701,0,0,0,0,100,0),
+(@PATH,33,-118.3926,2470.393,46.95731,0,0,0,0,100,0),
+(@PATH,34,-134.5914,2450.625,46.18983,0,0,0,0,100,0),
+(@PATH,35,-139.636,2439.596,48.65514,0,0,0,0,100,0),
+(@PATH,36,-153.0726,2420.765,44.33873,0,0,0,0,100,0),
+(@PATH,37,-164.3153,2415.917,48.36614,0,0,0,0,100,0),
+(@PATH,38,-176.0278,2408.138,48.95763,0,0,0,0,100,0),
+(@PATH,39,-181.3092,2397.231,50.16575,0,0,0,0,100,0),
+(@PATH,40,-174.2651,2386.537,51.88837,0,0,0,0,100,0),
+(@PATH,41,-171.3092,2382.064,53.20797,0,0,0,0,100,0),
+(@PATH,42,-168.7256,2366.751,56.15277,0,0,0,0,100,0),
+(@PATH,43,-168.0793,2352.929,58.49963,0,0,0,0,100,0),
+(@PATH,44,-168.3409,2341.554,60.14597,0,0,0,0,100,0),
+(@PATH,45,-175.721,2327.79,62.15151,0,0,0,0,100,0),
+(@PATH,46,-193.0925,2317.189,56.10988,0,0,0,0,100,0),
+(@PATH,47,-211.1901,2312.889,49.67965,0,0,0,0,100,0),
+(@PATH,48,-243.0014,2311.802,51.36759,0,0,0,0,100,0),
+(@PATH,49,-257.705,2324.297,56.98617,0,0,0,0,100,0),
+(@PATH,50,-267.8463,2334.503,54.92202,0,0,0,0,100,0),
+(@PATH,51,-284.0244,2347.267,51.85397,0,0,0,0,100,0),
+(@PATH,52,-285.5917,2348.854,51.30281,0,0,0,0,100,0),
+(@PATH,53,-277.6388,2384.371,49.04704,0,0,0,0,100,0),
+(@PATH,54,-277.4207,2389,49.55646,0,0,0,0,100,0),
+(@PATH,55,-282.4726,2415.647,47.11025,0,0,0,0,100,0),
+(@PATH,56,-290.6383,2417.861,45.76169,0,0,0,0,100,0),
+(@PATH,57,-296.9912,2425.083,44.68782,0,0,0,0,100,0),
+(@PATH,58,-297.4091,2429.13,44.28957,0,0,0,0,100,0),
+(@PATH,59,-292.8183,2446.393,42.99865,0,0,0,0,100,0),
+(@PATH,60,-297.4739,2458.016,41.8229,0,0,0,0,100,0),
+(@PATH,61,-299.0847,2461.294,41.30234,0,0,0,0,100,0),
+(@PATH,62,-291.5309,2472.148,40.82636,0,0,0,0,100,0),
+(@PATH,63,-315.7325,2479.059,38.88892,0,0,0,0,100,0),
+(@PATH,64,-333.1553,2479.061,30.43475,0,0,0,0,100,0),
+(@PATH,65,-362.027,2481.302,26.76814,0,0,0,0,100,0),
+(@PATH,66,-381.832,2489.02,35.44767,0,0,0,0,100,0),
+(@PATH,67,-383.683,2499.09,43.07095,0,0,0,0,100,0),
+(@PATH,68,-373.0249,2518.307,44.52934,0,0,0,0,100,0),
+(@PATH,69,-356.4537,2524.72,43.92796,0,0,0,0,100,0),
+(@PATH,70,-341.8646,2517.716,42.69872,0,0,0,0,100,0),
+(@PATH,71,-325.4874,2514.352,39.74596,0,0,0,0,100,0),
+(@PATH,72,-317.6911,2517.743,42.27646,0,0,0,0,100,0),
+(@PATH,73,-307.9288,2522.574,42.47154,0,0,0,0,100,0),
+(@PATH,74,-303.3547,2545.351,42.88755,0,0,0,0,100,0),
+(@PATH,75,-313.6268,2562.334,44.01721,0,0,0,0,100,0),
+(@PATH,76,-319.8146,2564.861,44.6563,0,0,0,0,100,0),
+(@PATH,77,-315.3898,2592.442,41.60535,0,0,0,0,100,0),
+(@PATH,78,-315.032,2593.062,41.37146,0,0,0,0,100,0),
+(@PATH,79,-333.1518,2616.684,42.40425,0,0,0,0,100,0),
+(@PATH,80,-352.777,2633.742,40.45049,0,0,0,0,100,0),
+(@PATH,81,-360.1994,2656.165,43.72129,0,0,0,0,100,0),
+(@PATH,82,-344.7037,2680.905,36.1579,0,0,0,0,100,0),
+(@PATH,83,-334.6349,2700.036,30.34241,0,0,0,0,100,0),
+(@PATH,84,-324.9058,2712.125,26.43651,0,0,0,0,100,0),
+(@PATH,85,-322.9779,2724.364,23.96236,0,0,0,0,100,0),
+(@PATH,86,-326.3518,2734.545,22.44383,0,0,0,0,100,0),
+(@PATH,87,-342.5912,2742.288,22.4451,0,0,0,0,100,0),
+(@PATH,88,-368.7488,2739.919,27.63747,0,0,0,0,100,0),
+(@PATH,89,-392.2097,2734.005,34.55191,0,0,0,0,100,0),
+(@PATH,90,-414.4307,2741.14,39.55831,0,0,0,0,100,0),
+(@PATH,91,-436.1942,2742.233,45.3562,0,0,0,0,100,0),
+(@PATH,92,-462.9823,2756.808,49.85812,0,0,0,0,100,0),
+(@PATH,93,-480.5942,2778.588,50.47923,0,0,0,0,100,0),
+(@PATH,94,-476.0007,2799.573,45.95654,0,0,0,0,100,0),
+(@PATH,95,-458.507,2835.351,35.33127,0,0,0,0,100,0),
+(@PATH,96,-431.757,2863.309,23.74757,0,0,0,0,100,0),
+(@PATH,97,-413.4223,2892.728,17.20714,0,0,0,0,100,0),
+(@PATH,98,-419.2291,2905.467,19.51181,0,0,0,0,100,0),
+(@PATH,99,-443.1462,2933.887,17.85199,0,0,0,0,100,0),
+(@PATH,100,-438.8401,2966.167,8.723536,0,0,0,0,100,0),
+(@PATH,101,-444.0433,2936.331,17.40722,0,0,0,0,100,0),
+(@PATH,102,-432.5814,2918.56,19.31524,0,0,0,0,100,0),
+(@PATH,103,-411.3571,2898.61,17.23361,0,0,0,0,100,0),
+(@PATH,104,-429.0982,2867.209,22.665,0,0,0,0,100,0),
+(@PATH,105,-457.4272,2836.473,34.75057,0,0,0,0,100,0),
+(@PATH,106,-474.1913,2804.114,44.81591,0,0,0,0,100,0),
+(@PATH,107,-481.0764,2783.36,50.09081,0,0,0,0,100,0),
+(@PATH,108,-465.5521,2759.48,50.03743,0,0,0,0,100,0),
+(@PATH,109,-440.5409,2744.546,46.12499,0,0,0,0,100,0),
+(@PATH,110,-420.0836,2742.421,41.1034,0,0,0,0,100,0),
+(@PATH,111,-397.9436,2734.918,35.90202,0,0,0,0,100,0),
+(@PATH,112,-372.9858,2738.609,28.64789,0,0,0,0,100,0),
+(@PATH,113,-348.4457,2742.212,23.42384,0,0,0,0,100,0),
+(@PATH,114,-333.7679,2740.035,21.81408,0,0,0,0,100,0),
+(@PATH,115,-324.9037,2731.125,22.83686,0,0,0,0,100,0),
+(@PATH,116,-323.9969,2714.816,25.20854,0,0,0,0,100,0),
+(@PATH,117,-332.7059,2702.867,29.4334,0,0,0,0,100,0),
+(@PATH,118,-343.4227,2683.021,35.1899,0,0,0,0,100,0),
+(@PATH,119,-359.6221,2658.229,43.55175,0,0,0,0,100,0),
+(@PATH,120,-353.887,2635.825,39.48611,0,0,0,0,100,0),
+(@PATH,121,-344.0572,2624.184,43.10011,0,0,0,0,100,0),
+(@PATH,122,-325.4768,2613.256,41.99747,0,0,0,0,100,0),
+(@PATH,123,-315.0096,2608.486,41.19632,0,0,0,0,100,0),
+(@PATH,124,-325.0719,2578.15,44.60706,0,0,0,0,100,0),
+(@PATH,125,-325.6835,2576.813,44.85286,0,0,0,0,100,0),
+(@PATH,126,-313.8424,2562.751,43.86629,0,0,0,0,100,0),
+(@PATH,127,-306.6296,2559.59,43.31482,0,0,0,0,100,0),
+(@PATH,128,-303.079,2544.062,42.30245,0,0,0,0,100,0),
+(@PATH,129,-324.1274,2514.437,40.29177,0,0,0,0,100,0),
+(@PATH,130,-333.2019,2515.876,41.902,0,0,0,0,100,0),
+(@PATH,131,-354.4488,2524.19,43.33042,0,0,0,0,100,0),
+(@PATH,132,-359.7796,2523.489,44.53107,0,0,0,0,100,0),
+(@PATH,133,-378.1317,2510.007,43.7447,0,0,0,0,100,0),
+(@PATH,134,-382.583,2491,37.3352,0,0,0,0,100,0),
+(@PATH,135,-368.7838,2483.057,28.09278,0,0,0,0,100,0),
+(@PATH,136,-337.7688,2479.346,28.95182,0,0,0,0,100,0),
+(@PATH,137,-318.8761,2478.915,37.70119,0,0,0,0,100,0),
+(@PATH,138,-301.9458,2480.981,40.5145,0,0,0,0,100,0),
+(@PATH,139,-300.0336,2481.129,40.53691,0,0,0,0,100,0),
+(@PATH,140,-291.6542,2471.877,40.91128,0,0,0,0,100,0),
+(@PATH,141,-295.2729,2454.313,42.07068,0,0,0,0,100,0),
+(@PATH,142,-291.9165,2442.606,43.58534,0,0,0,0,100,0),
+(@PATH,143,-290.83,2436.461,44.0534,0,0,0,0,100,0),
+(@PATH,144,-296.628,2422.13,44.75555,0,0,0,0,100,0),
+(@PATH,145,-284.9365,2416.829,46.52535,0,0,0,0,100,0),
+(@PATH,146,-277.901,2404.396,49.46965,0,0,0,0,100,0),
+(@PATH,147,-276.7875,2401.742,49.57491,0,0,0,0,100,0),
+(@PATH,148,-275.867,2368.15,50.02176,0,0,0,0,100,0),
+(@PATH,149,-280.12,2358.433,51.42045,0,0,0,0,100,0),
+(@PATH,150,-271.6628,2337.664,53.90419,0,0,0,0,100,0),
+(@PATH,151,-260.8519,2327.604,56.16253,0,0,0,0,100,0),
+(@PATH,152,-246.7255,2313.879,53.0292,0,0,0,0,100,0),
+(@PATH,153,-233.4331,2311.107,50.28912,0,0,0,0,100,0),
+(@PATH,154,-194.8462,2316.223,54.13938,0,0,0,0,100,0),
+(@PATH,155,-184.3219,2321.592,61.90179,0,0,0,0,100,0),
+(@PATH,156,-169.6792,2336.901,61.27917,0,0,0,0,100,0),
+(@PATH,157,-167.8382,2348.53,59.15134,0,0,0,0,100,0),
+(@PATH,158,-168.2972,2362.321,57.01959,0,0,0,0,100,0),
+(@PATH,159,-169.3826,2376.633,54.4596,0,0,0,0,100,0),
+(@PATH,160,-171.8145,2382.753,52.97548,0,0,0,0,100,0),
+(@PATH,161,-180.183,2392.34,51.01487,0,0,0,0,100,0),
+(@PATH,162,-181.2741,2398.439,49.99238,0,0,0,0,100,0),
+(@PATH,163,-175.461,2408.534,48.88574,0,0,0,0,100,0),
+(@PATH,164,-157.5141,2417.718,45.03862,0,0,0,0,100,0),
+(@PATH,165,-146.3332,2426.921,48.30313,0,0,0,0,100,0),
+(@PATH,166,-137.9598,2445.376,46.12595,0,0,0,0,100,0),
+(@PATH,167,-118.3926,2470.393,46.95731,0,0,0,0,100,0),
+(@PATH,168,-124.8685,2492.812,46.93701,0,0,0,0,100,0),
+(@PATH,169,-131.4405,2495.996,46.55548,0,0,0,0,100,0),
+(@PATH,170,-145.8467,2499.76,45.61186,0,0,0,0,100,0),
+(@PATH,171,-168.8438,2501.025,43.79488,0,0,0,0,100,0),
+(@PATH,172,-176.3846,2510.593,41.94983,0,0,0,0,100,0),
+(@PATH,173,-177.3363,2516.895,41.11181,0,0,0,0,100,0),
+(@PATH,174,-170.4912,2527.817,41.62189,0,0,0,0,100,0),
+(@PATH,175,-156.8518,2539.49,42.95174,0,0,0,0,100,0),
+(@PATH,176,-146.1405,2544.73,40.98074,0,0,0,0,100,0),
+(@PATH,177,-144.7979,2569.513,41.10892,0,0,0,0,100,0),
+(@PATH,178,-165.0483,2590.722,39.90811,0,0,0,0,100,0),
+(@PATH,179,-162.7764,2603.097,40.06981,0,0,0,0,100,0),
+(@PATH,180,-164.5241,2612.235,40.08208,0,0,0,0,100,0),
+(@PATH,181,-165.2749,2618.521,40.12231,0,0,0,0,100,0),
+(@PATH,182,-166.9141,2633.801,41.55241,0,0,0,0,100,0),
+(@PATH,183,-170.6192,2661.56,42.24799,0,0,0,0,100,0),
+(@PATH,184,-166.924,2686.502,43.27299,0,0,0,0,100,0),
+(@PATH,185,-165.7749,2686.863,43.39313,0,0,0,0,100,0),
+(@PATH,186,-125.7525,2695.987,46.92542,0,0,0,0,100,0),
+(@PATH,187,-108.798,2709.016,51.00445,0,0,0,0,100,0),
+(@PATH,188,-110.122,2737.952,52.16914,0,0,0,0,100,0),
+(@PATH,189,-120.4556,2753.937,49.37396,0,0,0,0,100,0),
+(@PATH,190,-134.5498,2778.104,41.05849,0,0,0,0,100,0),
+(@PATH,191,-153.882,2788.701,36.85746,0,0,0,0,100,0),
+(@PATH,192,-186.3388,2797.655,26.33011,0,0,0,0,100,0),
+(@PATH,193,-185.5681,2808.792,25.53679,0,0,0,0,100,0),
+(@PATH,194,-172.6706,2803.528,29.62396,0,0,0,0,100,0),
+(@PATH,195,-160.4427,2807.621,32.6923,0,0,0,0,100,0),
+(@PATH,196,-149.3403,2813.561,35.25396,0,0,0,0,100,0),
+(@PATH,197,-149.3422,2826.91,33.67762,0,0,0,0,100,0),
+(@PATH,198,-168.0662,2837.727,26.36559,0,0,0,0,100,0),
+(@PATH,199,-179.7917,2839.993,23.64687,0,0,0,0,100,0);
+-- 0x1C09E4424012FCC000002C00005FBF34 .go -179.7917 2839.993 23.64687
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58704;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-404.7873,`position_y`=2895.921,`position_z`=13.85265 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-404.7873,2895.921,13.85265,0,0,0,0,100,0),
+(@PATH,2,-404.2322,2900.299,14.15039,0,0,0,0,100,0),
+(@PATH,3,-428.3772,2914.106,19.38362,0,0,0,0,100,0),
+(@PATH,4,-439.7838,2928.416,18.55647,0,0,0,0,100,0),
+(@PATH,5,-445.6255,2946.441,15.33809,0,0,0,0,100,0),
+(@PATH,6,-439.2244,2964.096,9.26938,0,0,0,0,100,0),
+(@PATH,7,-454.467,2971.035,9.009753,0,0,0,0,100,0),
+(@PATH,8,-467.3622,2966.943,12.50773,0,0,0,0,100,0),
+(@PATH,9,-482.1766,2976.099,11.32469,0,0,0,0,100,0),
+(@PATH,10,-471.1085,2966.682,13.06236,0,0,0,0,100,0),
+(@PATH,11,-456.4288,2970.18,9.417983,0,0,0,0,100,0),
+(@PATH,12,-450.4304,2969.706,9.393501,0,0,0,0,100,0),
+(@PATH,13,-446.038,2951.119,14.24401,0,0,0,0,100,0),
+(@PATH,14,-442.8287,2934.824,17.44841,0,0,0,0,100,0),
+(@PATH,15,-435.4904,2921.99,19.82334,0,0,0,0,100,0),
+(@PATH,16,-404.6763,2913.004,15.59055,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C00005FACA1 .go -404.7873 2895.921 13.85265
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58705;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-394.2339,`position_y`=2891.354,`position_z`=8.341909 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-394.2339,2891.354,8.341909,0,0,0,0,100,0),
+(@PATH,2,-404.354,2907.934,14.82262,0,0,0,0,100,0),
+(@PATH,3,-420.1548,2911.418,19.02849,0,0,0,0,100,0),
+(@PATH,4,-434.6948,2920.658,19.59609,0,0,0,0,100,0),
+(@PATH,5,-443.507,2937.645,16.52073,0,0,0,0,100,0),
+(@PATH,6,-438.1014,2952.321,11.34356,0,0,0,0,100,0),
+(@PATH,7,-445.5783,2967.97,9.331216,0,0,0,0,100,0),
+(@PATH,8,-438.8247,2958.072,10.36737,0,0,0,0,100,0),
+(@PATH,9,-442.9203,2943.862,15.03016,0,0,0,0,100,0),
+(@PATH,10,-440.1529,2925.814,19.82526,0,0,0,0,100,0),
+(@PATH,11,-430.9389,2917.94,18.84661,0,0,0,0,100,0),
+(@PATH,12,-407.8214,2910.193,16.49719,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C00005FACD2 .go -394.2339 2891.354 8.341909
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58703;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-173.0258,`position_y`=2784.179,`position_z`=31.73058 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-184.2477,2841.474,22.17058,0,0,0,0,100,0),
+(@PATH,2,-186.5912,2837.849,21.70995,0,0,0,0,100,0),
+(@PATH,3,-186.0354,2821.816,23.10514,0,0,0,0,100,0),
+(@PATH,4,-190.4859,2804.101,24.46144,0,0,0,0,100,0),
+(@PATH,5,-190.1222,2800.265,25.05125,0,0,0,0,100,0),
+(@PATH,6,-185.8087,2784.323,28.49104,0,0,0,0,100,0),
+(@PATH,7,-173.0258,2784.179,31.73058,0,0,0,0,100,0),
+(@PATH,8,-153.8195,2788.142,37.07464,0,0,0,0,100,0),
+(@PATH,9,-146.762,2781.243,39.44977,0,0,0,0,100,0),
+(@PATH,10,-150.9473,2773.002,39.19555,0,0,0,0,100,0),
+(@PATH,11,-165.231,2763.583,36.20363,0,0,0,0,100,0),
+(@PATH,12,-181.1507,2755.388,30.1041,0,0,0,0,100,0),
+(@PATH,13,-168.6309,2761.67,34.94637,0,0,0,0,100,0),
+(@PATH,14,-157.0087,2768.504,38.33034,0,0,0,0,100,0),
+(@PATH,15,-147.9143,2776.101,39.64468,0,0,0,0,100,0),
+(@PATH,16,-148.772,2785.843,38.60817,0,0,0,0,100,0),
+(@PATH,17,-167.8991,2784.874,33.46256,0,0,0,0,100,0),
+(@PATH,18,-185.8087,2784.323,28.49104,0,0,0,0,100,0),
+(@PATH,19,-190.1222,2800.265,25.05125,0,0,0,0,100,0),
+(@PATH,20,-190.4859,2804.101,24.46144,0,0,0,0,100,0),
+(@PATH,21,-186.0354,2821.816,23.10514,0,0,0,0,100,0),
+(@PATH,22,-186.5912,2837.849,21.70995,0,0,0,0,100,0),
+(@PATH,23,-184.2477,2841.474,22.17058,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C00005FBE47 .go -173.0258 2784.179 31.73058
+
+-- Pathing for Bonechewer Raider Entry: 16925 'TDB FORMAT'
+SET @NPC := 58707;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-180.3116,`position_y`=2686.223,`position_z`=40.81258 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17408,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-180.3116,2686.223,40.81258,0,0,0,0,100,0),
+(@PATH,2,-175.7397,2679.259,42.18403,0,0,0,0,100,0),
+(@PATH,3,-171.9714,2660.608,42.08878,0,0,0,0,100,0),
+(@PATH,4,-170.7084,2658.794,42.01125,0,0,0,0,100,0),
+(@PATH,5,-171.3484,2640.479,41.27383,0,0,0,0,100,0),
+(@PATH,6,-171.948,2638.051,41.02221,0,0,0,0,100,0),
+(@PATH,7,-165.7785,2619.644,40.29411,0,0,0,0,100,0),
+(@PATH,8,-166.9228,2612.098,39.69428,0,0,0,0,100,0),
+(@PATH,9,-169.5662,2594.979,39.33304,0,0,0,0,100,0),
+(@PATH,10,-170.6965,2594.06,39.20753,0,0,0,0,100,0),
+(@PATH,11,-170.8916,2594.003,38.98936,0,0,0,0,100,0),
+(@PATH,12,-166.2133,2597.965,39.64554,0,0,0,0,100,0),
+(@PATH,13,-163.8443,2600.274,39.8479,0,0,0,0,100,0),
+(@PATH,14,-165.4025,2621.016,40.56765,0,0,0,0,100,0),
+(@PATH,15,-164.8262,2624.799,41.17817,0,0,0,0,100,0),
+(@PATH,16,-170.1738,2643.713,41.53741,0,0,0,0,100,0),
+(@PATH,17,-169.1673,2647.221,41.99223,0,0,0,0,100,0),
+(@PATH,18,-171.7151,2670.958,42.49662,0,0,0,0,100,0);
+-- 0x1C09E4424010874000002C00005FBFA9 .go -180.3116 2686.223 40.81258
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_01_world.sql
new file mode 100644
index 00000000000..63deab73f54
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_01_world.sql
@@ -0,0 +1,7 @@
+-- Darnassian Scout SAI
+SET @ENTRY := 15968;
+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,25,0,100,0,0,0,0,0,75,30831,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darnassian Scout - On Reset - Cast 'Stealth'"),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,28,30831,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darnassian Scout - On Aggro - Remove Aura 'Stealth'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_02_world.sql
new file mode 100644
index 00000000000..34a27d468b7
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_02_world.sql
@@ -0,0 +1,56 @@
+-- Nexus-King Salhadaar SAI
+SET @ENTRY := 20454;
+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,1,1,3,100,1,1000,1000,1000,1000,19,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - Out of Combat - Remove Flag Not Selectable (Phase 4) (No Repeat)"),
+(@ENTRY,0,1,2,61,0,100,1,1000,1000,1000,1000,2,1796,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - Out of Combat - Set Faction 1796 (Phase 4) (No Repeat)"),
+(@ENTRY,0,2,0,61,0,100,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - Out of Combat - Say Line 0 (Phase 4)"),
+(@ENTRY,0,3,0,0,0,100,0,5000,10000,15000,25000,11,36533,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - In Combat - Cast 'Gravity Flux'"),
+(@ENTRY,0,4,5,2,0,100,1,5,25,0,0,11,36848,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - Between 5-25% Health - Cast 'Mirror Image' (No Repeat)"),
+(@ENTRY,0,5,0,61,0,100,0,5,25,0,0,11,36847,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - Between 5-25% Health - Cast 'Mirror Image' (No Repeat)"),
+(@ENTRY,0,6,0,0,0,100,0,15000,25000,10000,30000,11,36527,0,0,0,0,0,5,0,0,0,0,0,0,0,"Nexus-King Salhadaar - In Combat - Cast 'Stasis'"),
+(@ENTRY,0,7,8,7,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - On Evade - Set Faction 35"),
+(@ENTRY,0,8,10,61,0,100,0,0,0,0,0,45,1,1,0,0,0,0,11,21425,20,0,0,0,0,0,"Nexus-King Salhadaar - On Evade - Set Data 1 1"),
+(@ENTRY,0,9,0,38,0,100,0,1,1,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - On Data Set 1 1 - Increment Phase"),
+(@ENTRY,0,10,0,61,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - On Evade - Set Event Phase 0");
+
+-- Nexus-King Salhadaar SAI
+SET @ENTRY := 21425;
+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,0,0,0,0,0,49,0,0,0,0,0,0,21,20,0,0,0,0,0,0,"Nexus-King Salhadaar - On Just Summoned - Start Attacking"),
+(@ENTRY,0,1,0,38,0,100,0,1,1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nexus-King Salhadaar - On Data Set 1 1 - Despawn Instant");
+
+-- remove randmmovement
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid` IN (73277, 73278, 73279);
+
+-- Salaadin's Energy Ball SAI
+SET @ENTRY := 20769;
+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,11,0,100,1,0,0,0,0,11,32566,0,0,0,0,0,1,0,0,0,0,0,0,0,"Salaadin's Energy Ball - On Respawn - Cast 'Purple Banish State' (No Repeat)"),
+(@ENTRY,0,1,0,1,0,100,0,5000,5000,0,0,11,35515,0,0,0,0,0,9,20454,0,200,0,0,0,0,"Salaadin's Energy Ball - Out of Combat - Cast 'Salaadin's Tesla'"),
+(@ENTRY,0,2,0,38,0,100,0,1,1,0,0,41,100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Salaadin's Energy Ball - On Data Set 1 1 - Despawn In 100 ms");
+
+-- Protectorate Disruptor SAI
+SET @ENTRY := 184561;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,1,0,100,1,0,0,0,0,45,1,1,0,0,0,0,19,20769,10,0,0,0,0,0,"Protectorate Disruptor - Out of Combat - Set Data 1 1 (No Repeat)"),
+(@ENTRY,1,1,0,1,0,100,1,1000,1000,0,0,45,1,1,0,0,0,0,10,72462,20454,0,0,0,0,0,"Protectorate Disruptor - Out of Combat - Set Data 1 1 (No Repeat)");
+
+DELETE FROM `creature_text` WHERE `entry` = 20454 AND `groupid` = 0;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`comment`, `BroadcastTextId`) VALUES
+(20454, 0, 0, "Prepare to enter oblivion, meddlers. You have unleashed a god!", 14, 0, 100, "Nexus-King Salhadaar", 18443);
+
+DELETE FROM `creature_text` WHERE `entry` = 20454 AND `groupid` = 0;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`comment`, `BroadcastTextID`) VALUES
+(20454, 0, 0, "Prepare to enter oblivion, meddlers. You have unleashed a god!", 14, 0, 100, "Nexus-King Salhadaar", 18443);
+
+DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=35515;
+INSERT INTO `disables`(`sourceType`,`entry`,`flags`,`comment`) VALUES
+(0,35515,64,'Ignore LOS on Salaadin\'s Tesla');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_03_world.sql
new file mode 100644
index 00000000000..64e7fe6c50a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_03_world.sql
@@ -0,0 +1,53 @@
+-- Plagueborn Horror SAI
+SET @ENTRY := 36879;
+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,0,0,100,2,5000,5000,10000,10000,11,69581,0,0,0,0,0,5,0,0,0,0,0,0,0,"Plagueborn Horror - In Combat - Cast 'Pustulant Flesh' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,5000,5000,10000,10000,11,70273,0,0,0,0,0,5,0,0,0,0,0,0,0,"Plagueborn Horror - In Combat - Cast 'Pustulant Flesh' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,6,8000,8000,8000,8000,11,70274,0,0,0,0,0,5,0,0,0,0,0,0,0,"Plagueborn Horror - In Combat - Cast 'Toxic Waste' (Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,6,15,15,0,0,11,69582,0,0,0,0,0,1,0,0,0,0,0,0,0,"Plagueborn Horror - Between 15-15% Health - Cast 'Blight Bomb' (Dungeon)"),
+(@ENTRY,0,4,5,1,0,100,0,0,0,120000,120000,11,58051,2,0,0,0,0,1,0,0,0,0,0,0,0,"Plagueborn Horror - Out of Combat - Cast 'Summon Scourge Package'"),
+(@ENTRY,0,5,0,61,0,100,0,0,0,120000,120000,11,69702,2,0,0,0,0,9,30887,0,4,0,0,0,0,"Plagueborn Horror - Out of Combat - Cast 'Rope'"),
+(@ENTRY,0,6,0,4,0,100,0,0,0,0,0,45,1,1,0,0,0,0,9,30887,0,10,0,0,0,0,"Plagueborn Horror - On Aggro - Set Data 1 1"),
+(@ENTRY,0,7,8,25,0,100,0,0,0,0,0,11,58051,2,0,0,0,0,1,0,0,0,0,0,0,0,"Plagueborn Horror - On Reset - Cast 'Summon Scourge Package'"),
+(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,11,63413,2,0,0,0,0,9,30887,0,5,0,0,0,0,"Plagueborn Horror - On Reset - Cast 'Rope Beam'");
+
+UPDATE `creature` SET `spawndist`=15, `MovementType`=1 WHERE `guid` IN (201981, 201833, 202236, 201903);
+
+-- Scourge Package SAI
+SET @ENTRY := 30887;
+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,0,0,0,0,0,29,3,40,0,0,0,0,7,0,0,0,0,0,0,0,"Scourge Package - On Just Summoned - Start Follow Invoker"),
+(@ENTRY,0,1,0,54,0,100,0,0,0,0,0,87,@ENTRY*100+00,@ENTRY*100+01,@ENTRY*100+02,@ENTRY*100+03,0,0,1,0,0,0,0,0,0,0,"Scourge Package - On Just Summoned - Run Random Script"),
+(@ENTRY,0,2,0,38,0,100,0,1,1,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Package - On Data Set 1 1 - Despawn In 1000 ms");
+
+-- Actionlist SAI
+SET @ENTRY := 3088700;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,11,58016,2,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Package - On Script - Cast 'Scourge Package Visual'"),
+(@ENTRY,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,"Scourge Package - On Script - Set Faction 35");
+
+-- Actionlist SAI
+SET @ENTRY := 3088701;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,11,58022,2,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Scourge Package Visual'"),
+(@ENTRY,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,"Scourge Package - On Script - Set Faction 35");
+
+-- Actionlist SAI
+SET @ENTRY := 3088702;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,11,58020,2,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Scourge Package Visual'"),
+(@ENTRY,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,"Scourge Package - On Script - Set Faction 35");
+
+-- Actionlist SAI
+SET @ENTRY := 3088703;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,11,58023,2,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Scourge Package Visual'"),
+(@ENTRY,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,"Scourge Package - On Script - Set Faction 35");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_04_world.sql
new file mode 100644
index 00000000000..56212e2873c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_04_world.sql
@@ -0,0 +1,11 @@
+--
+DELETE FROM `areatrigger_scripts` WHERE `entry`=3587;
+INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
+(3587, 'at_ancient_leaf');
+DELETE FROM `creature` WHERE `id` IN (14524, 14525, 14526);
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=1;
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
+(1, 2, 1, 14524, 6204.051758, -1172.575684, 370.079224, 0.86052, 3, 100000),
+(1, 2, 1, 14525, 6246.953613, -1155.985718, 366.182953, 2.90269, 3, 100000),
+(1, 2, 1, 14526, 6193.449219, -1137.834106, 366.260529, 5.77332, 3, 100000);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_05_world.sql
new file mode 100644
index 00000000000..033d6f1d4b6
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_05_world.sql
@@ -0,0 +1,27 @@
+-- Volcor SAI
+SET @ENTRY := 3692;
+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,19,0,100,0,994,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Quest 'Escape Through Force' Taken - Run Script"),
+(@ENTRY,0,1,0,19,0,100,0,995,0,0,0,80,@ENTRY*100+01,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Quest 'Escape Through Stealth' Taken - Run Script"),
+(@ENTRY,0,2,0,40,0,100,0,15,3692,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Waypoint 15 Reached - Despawn Instant"),
+(@ENTRY,0,3,0,4,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Volcor - On Aggro - Say Line 1");
+
+-- Actionlist SAI
+SET @ENTRY := 369200;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,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,9,1,0,0,0,100,0,0,0,0,0,53,0,3692,0,0,0,2,1,0,0,0,0,0,0,0,"Volcor - On Script - Start Waypoint"),
+(@ENTRY,9,2,0,0,0,100,0,110000,110000,0,0,1,2,0,0,0,0,0,7,0,0,0,0,0,0,0,"Volcor - On Script - Say Line 2"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,15,994,0,0,0,0,0,7,0,0,0,0,0,0,0,"Volcor - On Script - Quest Credit 'Escape Through Force'");
+
+-- Actionlist SAI
+SET @ENTRY := 369201;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,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,9,1,0,0,0,100,0,0,0,0,0,53,0,3692,0,0,0,2,1,0,0,0,0,0,0,0,"Volcor - On Script - Start Waypoint"),
+(@ENTRY,9,2,0,0,0,100,0,110000,110000,0,0,1,3,0,0,0,0,0,7,0,0,0,0,0,0,0,"Volcor - On Script - Say Line 3"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,15,995,0,0,0,0,0,7,0,0,0,0,0,0,0,"Volcor - On Script - Quest Credit 'Escape Through Stealth'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_06_world.sql
new file mode 100644
index 00000000000..84d6730666f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_06_world.sql
@@ -0,0 +1,10 @@
+--
+DELETE FROM `areatrigger_scripts` WHERE `entry` = 4479;
+INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
+(4479, 'SmartTrigger');
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 4479 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
+(4479, 2, 0, 0, 46, 0, 100, 0, 4479, 0, 0, 0, 85, 33728, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger - On Trigger - Cast Teleport Shattrath');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 4479 AND `SourceId` = 2;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 4479, 2, 0, 28, 0, 10280, 0, 0, 0, 0, '', 'Teleport only on Quest "Special Delivery to Shattrath City"');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_07_world.sql
new file mode 100644
index 00000000000..afbbc3817ef
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_07_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=24 AND `SourceEntry`=522;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `Comment`) VALUES
+(14, 24, 522, 0, 0, 8, 0, 770, 0, 0, 1, 0, 0, 'Show gossip text if player do not has quest 770 completed');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_08_world.sql
new file mode 100644
index 00000000000..db2f5e1b59a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_08_world.sql
@@ -0,0 +1,27 @@
+-- Infiltrator Marksen SAI
+SET @ENTRY := 5416;
+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,20,0,100,0,1391,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Quest 'Nothing But The Truth' Finished - Run Script"),
+(@ENTRY,0,1,0,6,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Just Died - Say Line 4");
+
+-- Actionlist SAI
+SET @ENTRY := 541600;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,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,"Infiltrator Marksen - On Script - Say Line 0"),
+(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,1,1,4000,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Script - Say Line 1"),
+(@ENTRY,9,2,0,0,0,100,0,4000,4000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Script - Say Line 2"),
+(@ENTRY,9,3,0,0,0,100,0,3000,3000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Script - Say Line 3"),
+(@ENTRY,9,4,0,0,0,100,0,1000,1000,0,0,3,0,10973,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Script - Morph To Model 10973"),
+(@ENTRY,9,5,0,0,0,100,0,100,100,0,0,89,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Script - Start Random Movement"),
+(@ENTRY,9,6,0,0,0,100,0,5000,5000,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Infiltrator Marksen - On Script - Kill Self");
+
+DELETE FROM `creature_text` WHERE `entry`=5416;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(5416, 0, 0, '%s takes a big swig of ale.', 16, 0, 100, 0, 0, 0, 'Infiltrator Marksen',18019),
+(5416, 1, 0, 'That was refreshing. Now there\'s information that needs to be told...', 12, 0, 100, 1, 0, 0, 'Infiltrator Marksen',18019),
+(5416, 2, 0, 'I believe the Forsaken are misleading the allies of the Horde.... wait... I feel so... dizzy...', 12, 0, 100, 1, 0, 0, 'Infiltrator Marksen',18019),
+(5416, 3, 0, '%s writhes in pain.', 16, 0, 100, 0, 0, 0, 'Infiltrator Marksen',18019),
+(5416, 4, 0, 'AAAAAAAAAAAAAAAAARGH!', 12, 0, 100, 0, 0, 0, 'Infiltrator Marksen',18019);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_09_world.sql
new file mode 100644
index 00000000000..1e2ca3b9f1c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_09_world.sql
@@ -0,0 +1,10 @@
+--
+DELETE FROM `gossip_menu` WHERE `entry`=40060;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(40060, 2494),
+(40060, 2493);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=40060 AND `SourceEntry` IN (2494, 2493);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `Comment`) VALUES
+(14, 40060, 2494, 0, 0, 8, 0, 4023, 0, 0, 1, 0, 0, 'Show gossip text if player do not has quest 4023 completed'),
+(14, 40060, 2493, 0, 1, 8, 0, 4022, 0, 0, 1, 0, 0, 'Show gossip text if player do not has quest 4022 completed');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_10_world.sql
new file mode 100644
index 00000000000..d9506211550
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_10_world.sql
@@ -0,0 +1,5 @@
+--
+SET @newestguid := 45208;
+DELETE FROM `creature` WHERE `guid`=@newestguid AND `id`=25654;
+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
+(@newestguid, 25654, 571, 1, 1, 0, 0, 4207.15, 4057.02, 91.6273, 1.38362, 300, 0, 0, 42, 0, 0, 0, 0, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_11_world.sql
new file mode 100644
index 00000000000..458a23a77cf
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_11_world.sql
@@ -0,0 +1,9 @@
+--
+SET @CGUID := 45212;
+DELETE FROM `creature` WHERE `guid` IN (@CGUID);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID, 30082, 571, 1, 4, 7271.656, -878.8148, 926.0092, 5.532694, 600, 0, 0);
+
+DELETE FROM `spell_area` WHERE `spell`=55783 AND `area`=4432;
+INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES
+(55783, 4432, 12879, 12973, 0, 0, 2, 1, 66, 1);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_12_world.sql
new file mode 100644
index 00000000000..cb4c2b9150c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_12_world.sql
@@ -0,0 +1,61 @@
+--
+SET @CGUID := 45761;
+
+DELETE FROM `creature` WHERE `id`=26265;
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES
+(@CGUID, 26265, 571, 0, 0, 1, 1, 0, 0, 4031.15, 7326.39, 635.972, 4.26247, 300, 0, 0, 1, 0, 0, 0, 0, 0,0);
+
+UPDATE `creature_template` SET `ScriptName`='', `npcflag`=`npcflag`|1 WHERE `entry`=26206;
+-- Keristrasza SAI
+SET @ENTRY := 26206;
+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,1,62,0,100,0,9262,0,0,0,11,46772,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keristrasza - On Gossip Option 0 Selected - Cast 'Teleport'"),
+(@ENTRY,0,1,0,61,0,100,0,9262,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keristrasza - On Gossip Option 0 Selected - Close Gossip"),
+(@ENTRY,0,2,3,62,0,100,0,9262,1,0,0,11,46824,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keristrasza - On Gossip Option 1 Selected - Cast 'Teleport'"),
+(@ENTRY,0,3,0,61,0,100,0,9262,1,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keristrasza - On Gossip Option 1 Selected - Close Gossip");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9262 AND `SourceEntry` IN (0, 1);
+INSERT INTO `conditions` VALUES
+(15, 9262, 0, 0, 0, 9, 0, 11957, 0, 0, 0, 0, 0, '', 'Only show gossip if player has quest 11957'),
+(15, 9262, 1, 0, 0, 2, 0, 35709, 1, 0, 0, 0, 0, '', 'Only show gossip if player has item 35709');
+
+-- Saragosa's End Invisman SAI
+SET @ENTRY := 26265;
+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,1,8,0,100,0,46793,0,0,0,12,26231,5,0,0,0,0,8,0,0,0,4050.19,7329.25,635.97,3.34,"Saragosa's End Invisman - On Spellhit 'Activate Power Focus' - Summon Creature 'Saragosa'"),
+(@ENTRY,0,1,0,61,0,100,0,46793,0,0,0,11,46789,0,0,0,0,0,1,0,0,0,0,0,0,0,"Saragosa's End Invisman - On Spellhit 'Activate Power Focus' - Cast 'Blue Power Focus'");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=26265;
+INSERT INTO `conditions` VALUES
+(22, 1, 26265, 0, 0, 29, 0, 26231, 40, 0, 1, 0, 0, '', 'Only summon Saragosa if there is not already one in range'),
+(22, 1, 26265, 0, 0, 29, 0, 26232, 40, 0, 1, 0, 0, '', 'Only summon Saragosa if there is not already one in range');
+
+-- Activate Power Focus (46793)
+DELETE FROM `event_scripts` WHERE `id`=17452;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=46793;
+INSERT INTO `conditions` VALUES
+(13, 1, 46793, 0, 0, 31, 0, 3, 26265, 0, 0, 0, 0, '', 'Target needs to be Saragosa''s End Invisman');
+
+UPDATE `creature_template` SET `ScriptName`='', `unit_flags`=`unit_flags`|768, `flags_extra`=`flags_extra`|2 WHERE `entry`=26231;
+-- Saragosa SAI
+SET @ENTRY := 26231;
+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,1,0,100,1,6000,6000,0,0,28,46789,0,0,0,0,0,19,26265,40,0,0,0,0,0,"Saragosa - Out of Combat - Remove Aura 'Blue Power Focus' (No Repeat)"),
+(@ENTRY,0,1,2,1,0,100,1,12000,12000,0,0,12,26232,1,120000,0,0,0,1,0,0,0,0,0,0,0,"Saragosa - Out of Combat - Summon Creature 'Saragosa' (No Repeat)"),
+(@ENTRY,0,2,0,61,0,100,0,12000,12000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Saragosa - Out of Combat - Despawn Instant (No Repeat)");
+
+UPDATE `creature_template` SET `ScriptName`='', `flags_extra`=`flags_extra`|2 WHERE `entry`=26232;
+-- Saragosa SAI
+SET @ENTRY := 26232;
+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,0,0,100,0,0,40,3400,6200,11,51779,0,0,0,0,0,2,0,0,0,0,0,0,0,"Saragosa - In Combat - Cast 'Frostfire Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,8500,17500,20100,40100,11,15063,0,0,0,0,0,2,0,0,0,0,0,0,0,"Saragosa - In Combat - Cast 'Frost Nova'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_13_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_13_world.sql
new file mode 100644
index 00000000000..8e1b4629085
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_13_world.sql
@@ -0,0 +1,84 @@
+--
+SET @CGUID := 56502; -- needs 3
+DELETE FROM `creature` WHERE `guid` IN (@CGUID+0, @CGUID+1, @CGUID+2);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 26620, 600, 3, 1, -522.7039, -605.9083, 1.299988, 2.6529, 7200, 0, 0), -- 26620 (Area: 4196) (Auras: 47503 - 47503)
+(@CGUID+1, 26620, 600, 3, 1, -518.0062, -599.1102, 1.10835, 3.054326, 7200, 0, 0), -- 26620 (Area: 4196) (Auras: 47503 - 47503)
+(@CGUID+2, 26626, 600, 3, 1, -511.0887, -602.5585, 2.56744, 3.193953, 7200, 0, 0); -- 26626 (Area: 4196)
+
+DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+0, @CGUID+1);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@CGUID+0, 0, 0, 0, 0, 0, '47503'),
+(@CGUID+1, 0, 0, 0, 0, 0, '47503');
+
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=26626 AND `source_type`=0 AND `id`=0 AND `link`=1;
+
+-- Scourge Reanimator SAI
+SET @GUID := -@CGUID+2;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26626;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,2,25,0,100,1,0,0,0,0,80,2662600,2,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Reset - Run Script (No Repeat)"),
+(@GUID,0,1,0,40,0,100,0,1,2662600,0,0,80,2662601,2,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Waypoint 1 Reached - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 2662600;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,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,"Scourge Reanimator - On Script - Say Line 0"),
+(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,53,1,2662600,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Script - Start Waypoint");
+
+-- Actionlist SAI
+SET @ENTRY := 2662601;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,@CGUID,26620,0,0,0,0,0,"Scourge Reanimator - On Script - Set Data 1 1"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,@CGUID+1,26620,0,0,0,0,0,"Scourge Reanimator - On Script - Set Data 1 1"),
+(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,11,48597,0,0,0,0,0,10,@CGUID+1,26620,0,0,0,0,0,"Scourge Reanimator - On Script - Cast 'Raise Dead'"),
+(@ENTRY,9,3,0,0,0,100,0,2000,2000,0,0,12,26635,3,600000,0,0,0,8,0,0,0,-536.830505,-578.793091,1.91333,1.774444,"Scourge Reanimator - On Script - Summon Creature 'Risen Drakkari Warrior'"),
+(@ENTRY,9,4,0,0,0,100,0,3000,3000,0,0,11,48597,0,0,0,0,0,10,@CGUID,26620,0,0,0,0,0,"Scourge Reanimator - On Script - Cast 'Raise Dead'"),
+(@ENTRY,9,5,0,0,0,100,0,2000,2000,0,0,12,26635,3,600000,0,0,0,8,0,0,0,-543.121582,-582.083313,1.025425,2.120673,"Scourge Reanimator - On Script - Summon Creature 'Risen Drakkari Warrior'"),
+(@ENTRY,9,6,0,0,0,100,0,4000,4000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Script - Say Line 2"),
+(@ENTRY,9,7,0,0,0,100,0,0,0,0,0,11,47506,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Script - Cast 'Teleport'"),
+(@ENTRY,9,8,0,0,0,100,0,1500,1500,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Script - Despawn Instant");
+
+DELETE FROM `waypoints` WHERE `entry`=2662600;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(2662600, 1, -533.262695, -591.052856, 2.484161, 'Scourge Reanimator');
+
+-- Drakkari Guardian SAI
+SET @GUID := -@CGUID;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26620;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,1,0,100,1,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-543.121582,-582.083313,1.025425,2.120673,"Drakkari Guardian - Out of Combat - Move To Position (No Repeat)"),
+(@GUID,0,1,0,38,0,100,0,1,1,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari Guardian - On Data Set 1 1 - Kill Self");
+
+-- Drakkari Guardian SAI
+SET @GUID := -@CGUID+1;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26620;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,1,0,100,1,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-536.830505,-578.793091,1.913330,1.774444,"Drakkari Guardian - Out of Combat - Move To Position (No Repeat)"),
+(@GUID,0,1,0,38,0,100,0,1,1,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari Guardian - On Data Set 1 1 - Kill Self");
+
+-- Risen Drakkari Warrior SAI
+SET @ENTRY := 26635;
+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,0,0,100,6,1000,3000,5000,9500,11,36093,0,0,0,0,0,2,0,0,0,0,0,0,0,"Risen Drakkari Warrior - In Combat - Cast 'Ghost Strike' (Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,6,1000,3000,7250,10000,11,33661,0,0,0,0,0,2,0,0,0,0,0,0,0,"Risen Drakkari Warrior - In Combat - Cast 'Crush Armor' (Dungeon)"),
+(@ENTRY,0,2,0,54,0,100,0,0,0,0,0,89,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Risen Drakkari Warrior - On Just Summoned - Start Random Movement");
+
+DELETE FROM `creature_text` WHERE `entry`=26626;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(26626, 0, 0, 'Don''t be so quick to escape! I have a parting gift....', 14, 0, 100, 0, 0, 0, 26474, 0, 'Scourge Reanimator'),
+(26626, 1, 0, 'Rise my warriors and fight for your new liege!', 14, 0, 100, 0, 0, 0, 26464, 0, 'Scourge Reanimator'),
+(26626, 2, 0, 'Please enjoy their company, the Lich King sends his regards!', 14, 0, 100, 0, 0, 0, 26473, 0, 'Scourge Reanimator');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=48597;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 48597, 0, 0, 31, 0, 3, 26620, 0, 0, 0, 0, '', 'Raise Dead - only targets Drakkari Guardian');
+
+DELETE FROM `creature` WHERE `guid` IN (127436, 127437);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_14_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_14_world.sql
new file mode 100644
index 00000000000..7e387b9df5a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_14_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `creature_addon` WHERE `guid` IN (127436, 127437);
+DELETE FROM `linked_respawn` WHERE `guid` IN (127436, 127437);
+DELETE FROM `spell_script_names` WHERE `spell_id`=8283 AND `ScriptName`='spell_snufflenose_command';
+UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=26206;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_00_world.sql
new file mode 100644
index 00000000000..f6ea0ed5a0e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_00_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=83600 AND `source_type`=9 AND `id`=2 AND `link`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_01_world.sql
new file mode 100644
index 00000000000..0d130f32f7b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_01_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `spell_target_position` WHERE `id` in (50859);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_02_world.sql
new file mode 100644
index 00000000000..3f67ae7ac1b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_02_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `gameobject_template` WHERE `entry` IN (193977,193978);
+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`, `VerifiedBuild`) VALUES
+(193977, 22, 8532, 'Bottle of Peaked Dalaran Red', '', '', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 61064, 5, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', -18019),
+(193978, 22, 8531, 'Cask of Peaked Dalaran Red', '', '', '', 0, 0, 0.8, 0, 0, 0, 0, 0, 0, 61064, 25, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', -18019);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_03_world.sql
new file mode 100644
index 00000000000..35f17a761cd
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_03_world.sql
@@ -0,0 +1,29 @@
+--
+SET @CGUID := 56502;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=11789;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=-56500 AND `source_type`=0 AND `id`=0 AND `link`=2;
+
+-- Scourge Reanimator SAI
+SET @GUID := -(@CGUID+2);
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26626;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,25,0,100,1,0,0,0,0,80,2662600,2,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Reset - Run Script (No Repeat)"),
+(@GUID,0,1,0,40,0,100,0,1,2662600,0,0,80,2662601,2,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Reanimator - On Waypoint 1 Reached - Run Script");
+
+-- Drakkari Guardian SAI
+SET @GUID := -(@CGUID);
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26620;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,1,0,100,1,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-543.121582,-582.083313,1.025425,2.120673,"Drakkari Guardian - Out of Combat - Move To Position (No Repeat)"),
+(@GUID,0,1,0,38,0,100,0,1,1,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari Guardian - On Data Set 1 1 - Kill Self");
+
+-- Drakkari Guardian SAI
+SET @GUID := -(@CGUID+1);
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26620;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,1,0,100,1,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,-536.830505,-578.793091,1.913330,1.774444,"Drakkari Guardian - Out of Combat - Move To Position (No Repeat)"),
+(@GUID,0,1,0,38,0,100,0,1,1,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari Guardian - On Data Set 1 1 - Kill Self");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_04_world.sql
new file mode 100644
index 00000000000..b358aad4eb2
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_04_world.sql
@@ -0,0 +1,10 @@
+--
+-- Tome of Mel'Thandris SAI
+SET @ENTRY := 19027;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,70,0,100,0,2,0,0,0,12,3946,2,40000,0,0,0,8,0,0,0,3169.15,-1211.71,216.95,4.59,"Tome of Mel'Thandris - On Gameobject State Changed - Summon Creature 'Velinde Starsong'");
+
+UPDATE `creature_template` SET `AIName`='' WHERE `entry`=11789;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=-56500;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_05_world.sql
new file mode 100644
index 00000000000..beb4e14f3af
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_05_world.sql
@@ -0,0 +1,7 @@
+--
+-- King Mrgl-Mrgl SAI
+SET @ENTRY := 25197;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=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,1,0,19,0,100,0,11571,0,0,0,11,45328,0,0,0,0,0,7,0,0,0,0,0,0,0,"King Mrgl-Mrgl - On Quest 'Learning to Communicate' Taken - Cast 'Water Breathing'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_06_world.sql
new file mode 100644
index 00000000000..b8f7294216d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_06_world.sql
@@ -0,0 +1,405 @@
+--
+DELETE FROM `creature_addon` WHERE `guid` IN (126051,125886,126038,125888,125891,125887,125967,125956,125971,125962,125960,125965,24084,125964,125963,125973,125968,125961,125954,125972,125957,125955,125970,125969,125966,125958,125897, 125902, 125900, 125899, 125894, 125895, 125898);
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+--
+(126038, 0, 0, 0, 1, 133, NULL),
+(125888, 0, 0, 0, 1, 133, NULL),
+(125891, 0, 0, 0, 1, 133, NULL),
+(125887, 0, 0, 0, 1, 133, NULL),
+(125886, 0, 0, 0, 1, 133, NULL),
+(126051, 0, 0, 0, 1, 133, NULL),
+--
+(24084, 0, 0, 0, 1, 7, NULL),
+(125964, 0, 0, 0, 1, 7, NULL),
+(125963, 0, 0, 0, 1, 7, NULL),
+(125973, 0, 0, 0, 1, 7, NULL),
+(125968, 0, 0, 0, 1, 7, NULL),
+(125961, 0, 0, 0, 1, 7, NULL),
+(125954, 0, 0, 0, 1, 7, NULL),
+(125972, 0, 0, 0, 1, 7, NULL),
+(125957, 0, 0, 0, 1, 7, NULL),
+(125955, 0, 0, 0, 1, 7, NULL),
+(125970, 0, 0, 0, 1, 7, NULL),
+(125969, 0, 0, 0, 1, 7, NULL),
+(125966, 0, 0, 0, 1, 7, NULL),
+(125958, 0, 0, 0, 1, 7, NULL),
+(125965, 0, 0, 0, 1, 7, NULL),
+(125960, 0, 0, 0, 1, 7, NULL),
+(125962, 0, 0, 0, 1, 7, NULL),
+(125971, 0, 0, 0, 1, 7, NULL),
+(125956, 0, 0, 0, 1, 7, NULL),
+(125967, 0, 0, 0, 1, 7, NULL),
+--
+(125897, 0, 0, 0, 1, 234, NULL),
+(125902, 0, 0, 0, 1, 234, NULL),
+(125898, 0, 0, 0, 1, 234, NULL),
+(125900, 0, 0, 0, 1, 234, NULL),
+(125899, 0, 0, 0, 1, 234, NULL),
+(125894, 0, 0, 0, 1, 234, NULL),
+(125895, 0, 0, 0, 1, 234, NULL);
+
+-- update some addons
+UPDATE `creature_addon` SET `emote`=7 WHERE `guid` IN (126027, 126043, 126034);
+UPDATE `creature_addon` SET `emote`=1 WHERE `guid` IN (125889, 125892);
+
+-- remove unneeded double spawned NPCs
+DELETE FROM `creature` WHERE `guid` IN (125930,125917,125932,125921,125920,125918,125915,125927,125931,125914,125922,125913);
+DELETE FROM `creature_addon` WHERE `guid` IN (125913,125922,125917,125918,125921,125920,125927,125930,125931,125932,125915,125914);
+DELETE FROM `linked_respawn` WHERE `guid`=125913;
+
+-- Pathing for Entry: 24080 'TDB FORMAT'
+SET @NPC := 125909;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=344.5201,`position_y`=-55.29842,`position_z`=23.00489 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,344.5201,-55.29842,23.00489,0,0,0,0,100,0),
+(@PATH,2,344.8939,-55.7041,23.00489,0,0,0,0,100,0),
+(@PATH,3,320.806,-36.86301,23.00489,0,0,0,0,100,0),
+(@PATH,4,302.7466,-35.83545,24.96675,0,0,0,0,100,0),
+(@PATH,5,299.0615,-36.53833,24.92923,0,0,0,0,100,0),
+(@PATH,6,301.0684,-37.2436,24.67861,0,0,0,0,100,0),
+(@PATH,7,314.7549,-36.4743,23.21675,0,0,0,0,100,0),
+(@PATH,8,337.0555,-52.25382,23.00652,0,0,0,0,100,0);
+-- 0x1C16DC47C0178400002225000161EB2E .go 344.5201 -55.29842 23.00489
+
+-- Pathing for Entry: 24080 'TDB FORMAT'
+SET @NPC := 125906;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=257.9562,`position_y`=-66.89291,`position_z`=24.67863 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,133, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,257.9562,-66.89291,24.67863,0,0,0,0,100,0),
+(@PATH,2,250.1216,-42.76279,24.92863,0,0,0,0,100,0),
+(@PATH,3,249.5976,-35.35291,24.92862,0,15000,0,0,100,0),
+(@PATH,4,249.2954,-37.17996,24.92863,0,0,0,0,100,0),
+(@PATH,5,257.3498,-63.88337,24.92863,0,0,0,0,100,0),
+(@PATH,6,258.2347,-66.07593,24.92863,0,15000,0,0,100,0);
+-- 0x1C16DC47C0178400002225000061EB2E .go 257.9562 -66.89291 24.67863
+
+-- Pathing for Entry: 24080 'TDB FORMAT'
+SET @NPC := 125908;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,133, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 258.921, -35.9238, 24.6786, 0, 15000, 0, 0, 100, 0),
+(@PATH, 2, 260.677, -43.4207, 24.6786, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 278.781, -38.9278, 24.6786, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 278.542, -38.2699, 24.6786, 0, 15000, 0, 0, 100, 0),
+(@PATH, 5, 264.293, -43.8186, 24.6786, 0, 0, 0, 0, 100, 0);
+
+-- Pathing for Entry: 24080 'TDB FORMAT'
+SET @NPC := 125907;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,133, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 267.265, -61.16, 24.6786, 0, 15000, 0, 0, 100, 0),
+(@PATH, 2, 265.899, -54.8942, 24.6786, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 280.857, -49.5784, 24.6786, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 281.25, -50.5522, 24.6786, 0, 15000, 0, 0, 100, 0),
+(@PATH, 5, 266.912, -55.2328, 24.6786, 0, 0, 0, 0, 100, 0);
+
+-- Dragonflayer Weaponsmith SAI
+SET @ENTRY := 24080;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=3;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,3,0,4,0,50,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Weaponsmith - On Aggro - Say Line 1");
+
+DELETE FROM `creature_text` WHERE `entry`=24080;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(24080, 0, 0, 'I spit on you!', 12, 0, 100, 0, 0, 0, 30503, 0, 'Dragonflayer Weaponsmith');
+
+-- remove dublicated mounts
+UPDATE `creature_template_addon` SET `mount`=0 WHERE `entry`=24849;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126042;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126042, 126042, 0, 0, 2, 0, 0),
+(126042, 126046, 0, 0, 2, 0, 0),
+(126042, 126032, 0, 0, 2, 0, 0),
+(126042, 126041, 0, 0, 2, 0, 0);
+
+-- Pathing for Entry: 23953 'TDB FORMAT'
+SET @NPC :=126025;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,5, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 188.578, 217.181, 40.8161, 0, 0, 0, 0, 100, 0),
+(@PATH, 2, 189.28, 217.307, 40.8161, 0, 5000, 0, 0, 100, 0),
+(@PATH, 3, 189.676, 207.039, 40.8161, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 196.131, 196.306, 40.8161, 0, 0, 0, 0, 100, 0),
+(@PATH, 5, 196.648, 196.778, 40.8161, 0, 5000, 0, 0, 100, 0);
+
+-- Pathing for Entry: 24085 'TDB FORMAT'
+SET @NPC := 125976;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=91.42882,`position_y`=136.3092,`position_z`=65.76968 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,91.42882,136.3092,65.76968,0,0,0,0,100,0),
+(@PATH,2,103.4925,101.8953,65.53214,0,0,0,0,100,0),
+(@PATH,3,134.187,65.97398,65.85297,0,0,0,0,100,0);
+-- 0x1C16DC47C0178540002225000061EB2F .go 91.42882 136.3092 65.76968
+
+-- Pathing for Entry: 28419 'TDB FORMAT'
+SET @NPC := 125874;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=121.963,`position_y`=76.88269,`position_z`=109.2261 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,121.963,76.88269,109.2261,0,0,1,0,100,0),
+(@PATH,2,120.63,69.04591,109.1783,0,0,1,0,100,0),
+(@PATH,3,104.7298,55.60048,109.2639,0,0,1,0,100,0),
+(@PATH,4,97.1344,52.90959,109.2572,0,0,1,0,100,0),
+(@PATH,5,111.4303,57.28569,109.2564,0,0,1,0,100,0),
+(@PATH,6,122.7686,70.0456,109.2553,0,0,1,0,100,0),
+(@PATH,7,119.7332,84.98322,104.3059,0,0,1,0,100,0),
+(@PATH,8,115.1914,99.77232,93.62556,0,0,1,0,100,0),
+(@PATH,9,112.8705,109.7669,87.9285,0,0,1,0,100,0),
+(@PATH,10,102.7546,111.7725,87.55014,0,0,1,0,100,0),
+(@PATH,11,91.52882,102.3952,87.59012,0,0,1,0,100,0),
+(@PATH,12,96.81816,85.65864,78.54314,0,0,1,0,100,0),
+(@PATH,13,98.63879,73.78115,70.11957,0,0,1,0,100,0),
+(@PATH,14,104.1278,66.31367,66.21651,0,0,1,0,100,0),
+(@PATH,15,116.6431,60.78297,65.94734,0,0,1,0,100,0),
+(@PATH,16,122.0239,71.59913,65.95915,0,0,1,0,100,0),
+(@PATH,17,110.5408,86.22773,65.63712,0,0,1,0,100,0),
+(@PATH,18,101.1147,100.7187,65.54391,0,0,1,0,100,0),
+(@PATH,19,94.89072,118.4349,65.71883,0,0,1,0,100,0),
+(@PATH,20,89.14192,135.3132,65.73074,0,0,1,0,100,0),
+(@PATH,21,84.60493,149.5575,59.07762,0,0,1,0,100,0),
+(@PATH,22,79.19835,165.6029,51.65039,0,0,1,0,100,0),
+(@PATH,23,78.87008,184.8075,49.66129,0,0,1,0,100,0),
+(@PATH,24,81.16812,201.4986,49.43202,0,0,1,0,100,0),
+(@PATH,25,82.937,212.6811,49.61001,0,0,1,0,100,0),
+(@PATH,26,87.64849,237.4446,45.35562,0,0,1,0,100,0),
+(@PATH,27,98.99787,249.9266,43.19844,0,0,1,0,100,0),
+(@PATH,28,117.071,260.0121,43.11768,0,0,1,0,100,0),
+(@PATH,29,117.3428,259.8461,43.11845,0,0,1,0,100,0),
+(@PATH,30,98.82381,251.8302,43.11781,0,0,1,0,100,0),
+(@PATH,31,97.55148,251.2241,43.11774,0,0,1,0,100,0),
+(@PATH,32,112.3071,256.5493,43.11781,0,0,1,0,100,0),
+--
+(@PATH,63,120.63,69.04591,109.1783,0,0,1,0,100,0),
+(@PATH,62,104.7298,55.60048,109.2639,0,0,1,0,100,0),
+(@PATH,61,97.1344,52.90959,109.2572,0,0,1,0,100,0),
+(@PATH,60,111.4303,57.28569,109.2564,0,0,1,0,100,0),
+(@PATH,59,122.7686,70.0456,109.2553,0,0,1,0,100,0),
+(@PATH,58,119.7332,84.98322,104.3059,0,0,1,0,100,0),
+(@PATH,57,115.1914,99.77232,93.62556,0,0,1,0,100,0),
+(@PATH,56,112.8705,109.7669,87.9285,0,0,1,0,100,0),
+(@PATH,55,102.7546,111.7725,87.55014,0,0,1,0,100,0),
+(@PATH,54,91.52882,102.3952,87.59012,0,0,1,0,100,0),
+(@PATH,53,96.81816,85.65864,78.54314,0,0,1,0,100,0),
+(@PATH,52,98.63879,73.78115,70.11957,0,0,1,0,100,0),
+(@PATH,51,104.1278,66.31367,66.21651,0,0,1,0,100,0),
+(@PATH,50,116.6431,60.78297,65.94734,0,0,1,0,100,0),
+(@PATH,49,122.0239,71.59913,65.95915,0,0,1,0,100,0),
+(@PATH,48,110.5408,86.22773,65.63712,0,0,1,0,100,0),
+(@PATH,47,101.1147,100.7187,65.54391,0,0,1,0,100,0),
+(@PATH,46,94.89072,118.4349,65.71883,0,0,1,0,100,0),
+(@PATH,45,89.14192,135.3132,65.73074,0,0,1,0,100,0),
+(@PATH,44,84.60493,149.5575,59.07762,0,0,1,0,100,0),
+(@PATH,43,79.19835,165.6029,51.65039,0,0,1,0,100,0),
+(@PATH,42,78.87008,184.8075,49.66129,0,0,1,0,100,0),
+(@PATH,41,81.16812,201.4986,49.43202,0,0,1,0,100,0),
+(@PATH,40,82.937,212.6811,49.61001,0,0,1,0,100,0),
+(@PATH,39,87.64849,237.4446,45.35562,0,0,1,0,100,0),
+(@PATH,38,98.99787,249.9266,43.19844,0,0,1,0,100,0),
+(@PATH,37,117.071,260.0121,43.11768,0,0,1,0,100,0),
+(@PATH,36,117.3428,259.8461,43.11845,0,0,1,0,100,0),
+(@PATH,35,98.82381,251.8302,43.11781,0,0,1,0,100,0),
+(@PATH,34,97.55148,251.2241,43.11774,0,0,1,0,100,0),
+(@PATH,33,112.3071,256.5493,43.11781,0,0,1,0,100,0);
+-- 0x1C16DC47C01BC0C00022250002E1EB2E .go 121.963 76.88269 109.2261
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=125874;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(125874, 125874, 0, 0, 2, 0, 0),
+(125874, 125876, 3, 90, 2, 0, 0),
+(125874, 125875, 3, 270, 2, 0, 0);
+
+-- Pathing for Entry: 24085 'TDB FORMAT'
+SET @NPC := 125974;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 139.312, 280.748, 42.8666, 0, 0, 0, 0, 100, 0),
+(@PATH, 2, 150.295, 273.444, 42.8666, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 138.731, 281.758, 42.8666, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 129.301, 272.882, 42.8666, 0, 0, 0, 0, 100, 0);
+
+-- Pathing for Entry: 24085 'TDB FORMAT'
+SET @NPC := 125977;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 75.2556, 249.779, 42.8657, 0, 0, 0, 0, 100, 0),
+(@PATH, 2, 83.8848, 256.364, 42.866, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 99.3102, 261.128, 42.8661, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 84.1909, 256.288, 42.8661, 0, 0, 0, 0, 100, 0);
+
+SET @NPC := 125883;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 77.3519, 205.89, 49.34, 0, 0, 1, 0, 100, 0),
+(@PATH, 2, 86.5749, 199.366, 49.3541, 0, 0, 1, 0, 100, 0),
+(@PATH, 3, 92.7536, 202.35, 49.3631, 0, 0, 1, 0, 100, 0),
+(@PATH, 4, 94.5927, 208.849, 49.37, 0, 0, 1, 0, 100, 0),
+(@PATH, 5, 86.0534, 216.692, 49.3855, 0, 0, 1, 0, 100, 0),
+(@PATH, 6, 75.9458, 214.115, 49.361, 0, 0, 1, 0, 100, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=125883;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(125883, 125883, 0, 0, 2, 0, 0),
+(125883, 125885, 5, 90, 2, 0, 0),
+(125883, 125884, 5, 270, 2, 0, 0);
+
+SET @NPC := 125975;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 97.1818, 193.375, 49.3721, 0, 0, 0, 0, 100, 0),
+(@PATH, 2, 97.6578, 205.356, 49.375, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 96.4575, 193.39, 49.372, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 96.9237, 185.571, 49.3659, 0, 0, 0, 0, 100, 0);
+
+-- Pathing for Entry: 24085 'TDB FORMAT'
+SET @NPC := 125976;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=108.85,`position_y`=88.22916,`position_z`=65.88628 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 104.324, 101.477, 65.4325, 0, 0, 0, 0, 100, 0),
+(@PATH, 2, 99.6436, 114.531, 65.4742, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 93.3592, 132.058, 65.5217, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 91.2544, 138.023, 65.5074, 0, 0, 0, 0, 100, 0),
+(@PATH, 5, 89.0365, 144.514, 61.6515, 0, 0, 0, 0, 100, 0),
+(@PATH, 6, 83.6051, 160.412, 54.041, 0, 0, 0, 0, 100, 0),
+(@PATH, 7, 80.7065, 169.333, 49.6367, 0, 0, 0, 0, 100, 0),
+(@PATH, 8, 78.4122, 180.724, 49.3771, 0, 0, 0, 0, 100, 0),
+(@PATH, 9, 80.8062, 169.721, 49.4824, 0, 0, 0, 0, 100, 0),
+(@PATH, 10, 84.2462, 158.583, 54.9073, 0, 0, 0, 0, 100, 0),
+(@PATH, 11, 89.1532, 144.915, 61.4908, 0, 0, 0, 0, 100, 0),
+(@PATH, 12, 91.498, 137.939, 65.5082, 0, 0, 0, 0, 100, 0),
+(@PATH, 13, 96.5665, 122.362, 65.495, 0, 0, 0, 0, 100, 0),
+(@PATH, 14, 101.592, 106.919, 65.4531, 0, 0, 0, 0, 100, 0),
+(@PATH, 15, 108.985, 87.2638, 65.5996, 0, 0, 0, 0, 100, 0),
+(@PATH, 16, 119.016, 74.4927, 65.7037, 0, 0, 0, 0, 100, 0),
+(@PATH, 17, 129.481, 61.1712, 65.6985, 0, 0, 0, 0, 100, 0),
+(@PATH, 18, 136.363, 63.0702, 65.6985, 0, 0, 0, 0, 100, 0),
+(@PATH, 19, 145.165, 65.8833, 65.6865, 0, 0, 0, 0, 100, 0),
+(@PATH, 20, 154.484, 68.9137, 65.6788, 0, 0, 0, 0, 100, 0),
+(@PATH, 21, 134.651, 62.0119, 65.6977, 0, 0, 0, 0, 100, 0),
+(@PATH, 22, 121.026, 71.1032, 65.7021, 0, 0, 0, 0, 100, 0),
+(@PATH, 23, 115.277, 81.3625, 65.7034, 0, 0, 0, 0, 100, 0);
+
+UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=23956 AND `source_type`=0 AND `id`=0 AND `link`=1;
+SET @NPC := 126033;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 92.0074, 91.8776, 83.1133, 0, 0, 0, 0, 100, 0),
+(@PATH, 2, 94.4268, 84.0678, 77.4261, 0, 0, 0, 0, 100, 0),
+(@PATH, 3, 97.4964, 75.2498, 71.1212, 0, 0, 0, 0, 100, 0),
+(@PATH, 4, 100.256, 67.5835, 65.7404, 0, 0, 0, 0, 100, 0),
+(@PATH, 5, 104.253, 56.1223, 65.7013, 0, 0, 0, 0, 100, 0),
+(@PATH, 6, 99.9233, 68.46, 66.1115, 0, 0, 0, 0, 100, 0),
+(@PATH, 7, 96.7413, 77.7433, 72.8654, 0, 0, 0, 0, 100, 0),
+(@PATH, 8, 93.4206, 87.9519, 80.2184, 0, 0, 0, 0, 100, 0),
+(@PATH, 9, 89.9479, 97.6074, 87.0594, 0, 0, 0, 0, 100, 0),
+(@PATH, 10, 85.3204, 111.309, 87.294, 0, 0, 0, 0, 100, 0),
+(@PATH, 11, 109.086, 121.066, 87.308, 0, 0, 0, 0, 100, 0),
+(@PATH, 12, 114.25, 108.563, 87.465, 0, 0, 0, 0, 100, 0),
+(@PATH, 13, 117.378, 100.272, 93.3328, 0, 0, 0, 0, 100, 0),
+(@PATH, 14, 119.976, 92.7572, 98.707, 0, 0, 0, 0, 100, 0),
+(@PATH, 15, 122.256, 85.8878, 103.744, 0, 0, 0, 0, 100, 0),
+(@PATH, 16, 124.757, 78.354, 108.636, 0, 0, 0, 0, 100, 0),
+(@PATH, 17, 129.66, 64.2292, 109.023, 0, 0, 0, 0, 100, 0),
+(@PATH, 18, 131.063, 60.2705, 109.027, 0, 0, 0, 0, 100, 0),
+(@PATH, 19, 108.086, 53.1456, 108.988, 0, 0, 0, 0, 100, 0),
+(@PATH, 20, 131.63, 61.4828, 109.027, 0, 0, 0, 0, 100, 0),
+(@PATH, 21, 125.35, 78.8325, 108.65, 0, 0, 0, 0, 100, 0),
+(@PATH, 22, 121.873, 88.5025, 101.93, 0, 0, 0, 0, 100, 0),
+(@PATH, 23, 117.766, 99.9247, 93.6416, 0, 0, 0, 0, 100, 0),
+(@PATH, 24, 114.768, 108.264, 87.5181, 0, 0, 0, 0, 100, 0),
+(@PATH, 25, 110.429, 120.332, 87.3079, 0, 0, 0, 0, 100, 0),
+(@PATH, 26, 85.4045, 112.781, 87.2894, 0, 0, 0, 0, 100, 0),
+(@PATH, 27, 88.3241, 102.455, 87.3183, 0, 0, 0, 0, 100, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=126033;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(126033, 126033, 0, 0, 2, 0, 0),
+(126033, 125998, 2, 270, 2, 0, 0);
+
+SET @NPC := 125879;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 53.1848, 39.7439, 115.029, 0, 0, 1, 0, 100, 0),
+(@PATH, 2, 43.585, 41.2652, 115.029, 0, 0, 1, 0, 100, 0),
+(@PATH, 3, 45.878, 32.8663, 115.029, 0, 0, 1, 0, 100, 0),
+(@PATH, 4, 54.3001, 30.387, 115.029, 0, 0, 1, 0, 100, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=125879;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(125879, 125879, 0, 0, 2, 0, 0),
+(125879, 125878, 3, 90, 2, 0, 0),
+(125879, 125877, 2, 270, 2, 0, 0);
+
+SET @NPC := 125882;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH, 1, 40.6954, -7.59713, 118.542, 0, 0, 1, 0, 100, 0),
+(@PATH, 2, 41.5325, -16.0661, 118.775, 0, 0, 1, 0, 100, 0),
+(@PATH, 3, 47.1018, -17.7693, 118.775, 0, 0, 1, 0, 100, 0),
+(@PATH, 4, 46.6655, -3.88553, 118.775, 0, 0, 1, 0, 100, 0);
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=125882;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(125882, 125882, 0, 0, 2, 0, 0),
+(125882, 125880, 3, 90, 2, 0, 0),
+(125882, 125881, 2, 270, 2, 0, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_00_world.sql
new file mode 100644
index 00000000000..11f5eca484e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_00_world.sql
@@ -0,0 +1,136 @@
+
+DELETE FROM `creature_text` WHERE `entry` IN(18927,19171,19175,19177,19173,19172,19176,19148,19178,19169,20102) AND `groupid`=0;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(19178, 0, 0, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 1, 100, 0, 0, 0, 24334, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 0, 1, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 1, 100, 0, 0, 0, 24333, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 0, 2, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 1, 100, 0, 0, 0, 24335, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 0, 3, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 1, 100, 396, 0, 0, 24333, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 0, 4, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 1, 100, 0, 0, 0, 24332, 'Forsaken Commoner to Forsaken Commoner'),
+(19178, 0, 5, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 1, 100, 6, 0, 0, 24332, 'Forsaken Commoner to Forsaken Commoner'),
+(19169, 0, 0, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 1, 100, 0, 0, 0, 24332, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 0, 1, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 1, 100, 0, 0, 0, 24334, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 0, 2, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 1, 100, 0, 0, 0, 24333, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 0, 3, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 1, 100, 0, 0, 0, 24335, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19169, 0, 4, 'The festival of the moon was ever more important to the kaldorei. The great festival of the druids is surely in full swing.', 12, 1, 100, 0, 0, 0, 16171, 'Blood Elf Commoner to Blood Elf Commoner'),
+(19176, 0, 0, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 1, 100, 0, 0, 0, 24333, 'Tauren Commoner to Tauren Commoner'),
+(19176, 0, 1, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 1, 100, 0, 0, 0, 24332, 'Tauren Commoner to Tauren Commoner'),
+(19176, 0, 2, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 1, 100, 0, 0, 0, 24335, 'Tauren Commoner to Tauren Commoner'),
+(19176, 0, 3, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 1, 100, 0, 0, 0, 24334, 'Tauren Commoner to Tauren Commoner'),
+(19175, 0, 0, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 1, 100, 0, 0, 0, 24332, 'Orc Commoner to Orc Commoner'),
+(19175, 0, 1, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 1, 100, 0, 0, 0, 24335, 'Orc Commoner to Orc Commoner'),
+(19175, 0, 2, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 1, 100, 0, 0, 0, 24333, 'Orc Commoner to Orc Commoner'),
+(19175, 0, 3, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 1, 100, 274, 0, 0, 24334, 'Orc Commoner to Orc Commoner'),
+(19175, 0, 4, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 1, 100, 274, 0, 0, 24335, 'Orc Commoner to Orc Commoner'),
+(19177, 0, 0, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 1, 100, 0, 0, 0, 24333, 'Troll Commoner to Troll Commoner'),
+(19177, 0, 1, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 1, 100, 0, 0, 0, 24334, 'Troll Commoner to Troll Commoner'),
+(19177, 0, 2, 'We should go to Moonglade to see the druids'' great festival of the moon.', 12, 1, 100, 0, 0, 0, 0, 'Troll Commoner to Troll Commoner'),
+(19177, 0, 3, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 1, 100, 0, 0, 0, 24335, 'Troll Commoner to Troll Commoner'),
+(19172, 0, 0, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 0, 0, 0, 24351, 'Gnome Commoner to Gnome Commoner'),
+(19172, 0, 1, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 7, 100, 0, 0, 0, 24350, 'Gnome Commoner to Gnome Commoner'),
+(19172, 0, 2, 'Lunar Festival is the best time of year for fireworks!', 12, 7, 100, 0, 0, 0, 0, 'Gnome Commoner to Gnome Commoner'),
+(19172, 0, 3, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 7, 100, 0, 0, 0, 24352, 'Gnome Commoner to Gnome Commoner'),
+(19171, 0, 0, 'It is no surprise that the people of this land hold a great festival of the moon. I should very much like to go to Moonglade to attend it.', 12, 7, 100, 6, 0, 0, 17428, 'Draenei Commoner to Draenei Commoner'),
+(19171, 0, 1, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 274, 0, 0, 24351, 'Draenei Commoner to Draenei Commoner'),
+(19171, 0, 2, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 0, 0, 0, 24351, 'Draenei Commoner to Draenei Commoner'),
+(19171, 0, 3, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 7, 100, 0, 0, 0, 24352, 'Draenei Commoner to Draenei Commoner'),
+(19171, 0, 4, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 273, 0, 0, 24351, 'Draenei Commoner to Draenei Commoner'),
+(19171, 0, 5, 'It is no surprise that the people of this land hold a great festival of the moon. I should very much like to go to Moonglade to attend it.', 12, 7, 100, 273, 0, 0, 17428, 'Draenei Commoner to Draenei Commoner'),
+(19171, 0, 6, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 7, 100, 0, 0, 0, 24350, 'Draenei Commoner to Draenei Commoner'),
+(19173, 0, 0, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 7, 100, 0, 0, 0, 24350, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 0, 1, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 0, 0, 0, 24351, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 0, 2, 'The Lunar Festival holds special meaning for the night elves. We seek out the wisdom of our elders across the world.', 12, 7, 100, 396, 0, 0, 16156, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 0, 3, 'The Lunar Festival holds special meaning for the night elves. We seek out the wisdom of our elders across the world.', 12, 7, 100, 0, 0, 0, 16156, 'Night Elf Commoner to Night Elf Commoner'),
+(19173, 0, 4, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 7, 100, 0, 0, 0, 24349, 'Night Elf Commoner to Night Elf Commoner'),
+(18927, 0, 0, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 7, 100, 0, 0, 0, 24349, 'Human Commoner to Human Commoner'),
+(18927, 0, 1, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 0, 0, 0, 24351, 'Human Commoner to Human Commoner'),
+(18927, 0, 2, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 7, 100, 0, 0, 0, 24352, 'Human Commoner to Human Commoner'),
+(18927, 0, 3, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 7, 100, 274, 0, 0, 24349, 'Human Commoner to Human Commoner'),
+(18927, 0, 4, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 7, 100, 274, 0, 0, 24352, 'Human Commoner to Human Commoner'),
+(18927, 0, 5, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 7, 100, 0, 0, 0, 24350, 'Human Commoner to Human Commoner'),
+(19148, 0, 0, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 7, 100, 396, 0, 0, 24352, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 0, 1, 'The Lunar Festival is a special time for us. We seek out our ancient elders, the Earthen, and pay homage to them.', 12, 7, 100, 396, 0, 0, 16153, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 0, 2, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 7, 100, 0, 0, 0, 0, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 0, 3, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 7, 100, 0, 0, 0, 24349, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 0, 4, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 7, 100, 0, 0, 0, 24352, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 0, 5, 'The Lunar Festival is a special time for us. We seek out our ancient elders, the Earthen, and pay homage to them.', 12, 7, 100, 0, 0, 0, 16153, 'Dwarf Commoner to Dwarf Commoner'),
+(19148, 0, 6, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 7, 100, 0, 0, 0, 24350, 'Dwarf Commoner to Dwarf Commoner'),
+(20102, 0, 0, 'During the Lunar Festival, we should take time to seek out our elders and consider their wisdom.', 12, 0, 100, 0, 0, 0, 16466, 'Goblin Commoner to Goblin Commoner'),
+(20102, 0, 1, 'Legend says that the great beast Omen sleeps in the waters of Lake Elune''ara in Moonglade, only to appear once a year. But that''s just a legend.', 12, 0, 100, 0, 0, 0, 16465, 'Goblin Commoner to Goblin Commoner'),
+(20102, 0, 2, 'Have you seen the fireworks? This is the best time of year to buy them.', 12, 0, 100, 0, 0, 0, 16467, 'Goblin Commoner to Goblin Commoner'),
+(20102, 0, 3, 'The druids of Nighthaven are holding a great celebration in Moonglade for the Lunar Festival.', 12, 0, 100, 0, 0, 0, 16468, 'Goblin Commoner to Goblin Commoner');
+
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(18927,19171,19175,19177,19173,19172,19176,19148,19169,19178,20102) AND `source_type`=0 AND `id`IN(0,10);
+
+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
+(18927,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Human Commoner - OOC - Say'),
+(19171,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Dreani Commoner - OOC - Say'),
+(19175,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orc Commoner - OOC - Say'),
+(19177,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Troll Commoner - OOC - Say'),
+(19173,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Night Elf Commoner - OOC - Say'),
+(19172,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gnome Commoner - OOC - Say'),
+(19176,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tauren Commoner - OOC - Say'),
+(19148,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Dwarf Commoner - OOC - Say'),
+(20102,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Goblin Commoner - OOC - Say'),
+(19178,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Forsaken Commoner - OOC - Say'),
+(19169,0,0,0,1,0,100,0,3000,15000,45000,90000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blood Elf Commoner - OOC - Say'),
+
+(18927,0,10,0,64,0,100,0,0,0,0,0,98,7898, 9662,0,0,0,0,7,0,0,0,0,0,0,0,'Human Commoner - On Gossip Hello - Send Gossip Menu'),
+(19148,0,10,0,64,0,100,0,0,0,0,0,98,7923, 9688,0,0,0,0,7,0,0,0,0,0,0,0,'Dwarf Commoner - On Gossip Hello - Send Gossip Menu'),
+(19169,0,10,0,64,0,100,0,0,0,0,0,98,7921, 9700,0,0,0,0,7,0,0,0,0,0,0,0,'Blood Elf Commoner - On Gossip Hello - Send Gossip Menu'),
+(19171,0,10,0,64,0,100,0,0,0,0,0,98,7922, 9696,0,0,0,0,7,0,0,0,0,0,0,0,'Draeni Commoner - On Gossip Hello - Send Gossip Menu'),
+(19172,0,10,0,64,0,100,0,0,0,0,0,98,7931, 1915,0,0,0,0,7,0,0,0,0,0,0,0,'Gnome Commoner - On Gossip Hello - Send Gossip Menu'),
+(19173,0,10,0,64,0,100,0,0,0,0,0,98,7924, 9692,0,0,0,0,7,0,0,0,0,0,0,0,'Night Elf Commoner - On Gossip Hello - Send Gossip Menu'),
+(19175,0,10,0,64,0,100,0,0,0,0,0,98,7925, 9704,0,0,0,0,7,0,0,0,0,0,0,0,'Orc Commoner - On Gossip Hello - Send Gossip Menu'),
+(19176,0,10,0,64,0,100,0,0,0,0,0,98,7926, 9708,0,0,0,0,7,0,0,0,0,0,0,0,'Tauren Commoner - On Gossip Hello - Send Gossip Menu'),
+(19177,0,10,0,64,0,100,0,0,0,0,0,98,7935, 9716,0,0,0,0,7,0,0,0,0,0,0,0,'Troll Commoner - On Gossip Hello - Send Gossip Menu'),
+(19178,0,10,0,64,0,100,0,0,0,0,0,98,7927, 9712,0,0,0,0,7,0,0,0,0,0,0,0,'Forsaken Commoner - On Gossip Hello - Send Gossip Menu'),
+(20102,0,10,0,64,0,100,0,0,0,0,0,98,8064, 9964,0,0,0,0,7,0,0,0,0,0,0,0,'Goblin Commoner - On Gossip Hello - Send Gossip Menu');
+
+
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(18927,19171,19175,19177,19173,19172,19176,19148,19169,19178,20102) AND `SourceGroup` IN(1,11);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 18927, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19148, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19169, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19171, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19172, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19173, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19175, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19176, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19177, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 19178, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 1, 20102, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+
+(22, 11, 18927, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19148, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19169, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19171, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19172, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19173, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19175, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19176, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19177, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 19178, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active'),
+(22, 11, 20102, 0, 0, 12, 1, 7, 0, 0, 0, 0, 0, '', 'Commoner - Luna Festival must be active');
+
+DELETE FROM `gossip_menu` WHERE `entry` IN(7931,7926,7925,7924,7898,7923,7921,7927,7935,7922,8064);
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(7931, 1915), -- 19172
+(7926, 9708), -- 19176
+(7925, 9704), -- 19175*
+(7924, 9692), -- 19173*
+(7898, 9662), -- 18927*
+(7923, 9688), -- 19148*
+(7921, 9700), -- 19169*
+(7927, 9712), -- 19178*
+(7935, 9716), -- 19177*
+(7922, 9696), -- 19171*
+(8064, 9964); -- 20102*
+
+DELETE FROM `npc_text` WHERE `ID` IN(9715,9708);
+INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `prob0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `BroadcastTextID1`, `lang1`, `prob1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `BroadcastTextID2`, `lang2`, `prob2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `BroadcastTextID3`, `lang3`, `prob3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `BroadcastTextID4`, `lang4`, `prob4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `BroadcastTextID5`, `lang5`, `prob5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `BroadcastTextID6`, `lang6`, `prob6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `BroadcastTextID7`, `lang7`, `prob7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES
+(9715, 'Go to Ironforge''s Mystic Ward and speak with the night elf druids there. They can transport you to Moonglade to join in the Lunar Festival celebration.', 'Go to Ironforge''s Mystic Ward and speak with the night elf druids there. They can transport you to Moonglade to join in the Lunar Festival celebration.', 16214, 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, 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, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+(9708, 'The largest celebration of the Lunar Festival takes place in Moonglade. Druids will transport you there from the Elder Rise of Thunder Bluff.', 'The largest celebration of the Lunar Festival takes place in Moonglade. Druids will transport you there from the Elder Rise of Thunder Bluff.', 16201, 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, 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, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_01_world.sql
new file mode 100644
index 00000000000..bcd15597b70
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_01_world.sql
@@ -0,0 +1,35 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2248200,2203800) AND `source_type`=9 AND `id` IN (2, 3, 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
+(2248200, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mature Bone Sifter - Script - Set Agressive'),
+(2248200, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mature Bone Sifter - Script - Remove UnitFlag'),
+(2248200, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mature Bone Sifter - Script - Root'),
+(2203800, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hai shulud <The Bone Emperor> - Script - Set Agressive'),
+(2203800, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hai shulud <The Bone Emperor> - Script - Remove UnitFlag'),
+(2203800, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hai shulud <The Bone Emperor> - Script - Root');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16968 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
+(16968,0,0,1,4,0,100,0,0,0,0,0,19,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - On Aggro - Remove UNIT_FLAG_NOT_SELECTABLE'),
+(16968,0,1,2,61,0,100,0,0,0,0,0,28,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - Link With Previous - Remove Tunnel Bore Passive'),
+(16968,0,2,3,61,0,100,0,0,0,0,0,11,37752,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - Link With Previous - Cast Stand'),
+(16968,0,3,0,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - Link With Previous - Root'),
+(16968,0,4,5,25,0,100,0,0,0,0,0,11,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - Spawn/Respawn/OOC - Cast Tunnel Bore Passive'),
+(16968,0,5,6,61,0,100,0,0,0,0,0,18,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - Link With Previous Set UNIT_FLAG_NOT_SELECTABLE'),
+(16968,0,6,0,61,0,100,0,0,0,0,0,11,37751,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tunneler - Link With Previous - Cast Submerge'),
+(16968,0,7,0,0,0,100,0,1000,1000,2100,4500,11,31747,0,0,0,0,0,2,0,0,0,0,0,0,0,'Tunneler - In Combat - Cast Poison'),
+(16968,0,8,0,0,0,100,0,10400,10400,45000,50000,11,32738,0,0,0,0,0,2,0,0,0,0,0,0,0,'Tunneler - In Combat - Cast Bore'),
+(16968,0,9,0,2,0,100,0,0,30,8000,8000,11,32714,1,0,0,0,0,1,0,0,0,0,0,0,0,"Tunneler - Between 0-30% Health - Cast 8599");
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=21849;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21849 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
+(21849,0,0,1,4,0,100,0,0,0,0,0,19,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - On Aggro - Remove UNIT_FLAG_NOT_SELECTABLE'),
+(21849,0,1,2,61,0,100,0,0,0,0,0,28,38885,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - Link With Previous - Remove Tunnel Bore Passive'),
+(21849,0,2,3,61,0,100,0,0,0,0,0,11,37752,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - Link With Previous - Cast Stand'),
+(21849,0,3,0,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - Link With Previous - Root'),
+(21849,0,4,5,25,0,100,0,0,0,0,0,11,38885,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - Spawn/Respawn/OOC - Cast Tunnel Bore Passive'),
+(21849,0,5,6,61,0,100,0,0,0,0,0,18,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - Link With Previous Set UNIT_FLAG_NOT_SELECTABLE'),
+(21849,0,6,0,61,0,100,0,0,0,0,0,11,37751,0,0,0,0,0,1,0,0,0,0,0,0,0,'Bone Crawler - Link With Previous - Cast Submerge'),
+(21849,0,7,0,0,0,100,0,1000,1000,2100,4500,11,31747,0,0,0,0,0,2,0,0,0,0,0,0,0,'Bone Crawler - In Combat - Cast Poison'),
+(21849,0,8,0,0,0,100,0,10400,10400,45000,50000,11,32738,0,0,0,0,0,2,0,0,0,0,0,0,0,'Bone Crawler - In Combat - Cast Bore');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_02_world.sql
new file mode 100644
index 00000000000..4bbcde642e7
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_02_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=-56501;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_03_world.sql
new file mode 100644
index 00000000000..5ef13948b75
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_03_world.sql
@@ -0,0 +1,12 @@
+--
+SET @CGUID := 49137;
+DELETE FROM `creature` WHERE `guid` IN (@CGUID);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID, 30142, 571, 1, 1, 8392.7, -1970.14, 1461.84, 0.0948219, 600, 0, 0);
+
+SET @OGUID := 5501;
+DELETE FROM `gameobject` WHERE `guid`= @OGUID;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `rotation2`, `rotation3`, `animprogress`, `state`) VALUES
+(@OGUID, 192243, 571, 1, 1, 8531.9, -1971.44, 1467.57, -0.837757, 300, -0.406736, 0.913546, 100, 1);
+
+UPDATE `creature_template` SET `unit_flags`=32832 WHERE `entry`=29730;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_04_world.sql
new file mode 100644
index 00000000000..68c1268eec2
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_04_world.sql
@@ -0,0 +1,142 @@
+--
+SET @CGUID := 49141;
+
+SET @Loken := 30396;
+SET @Thorim := 30399;
+SET @Veranus:= 30420;
+SET @Servant:= 30429;
+
+UPDATE `creature_template` SET `gossip_menu_id`=9928, `minlevel`=82, `maxlevel`=82, `npcflag`=1, `speed_walk`=4.8, `speed_run`=3.142857, `rank`=3, `unit_flags`=320, `unit_flags2`=2099200, `AIName`='SmartAI', `type_flags`=0 WHERE `entry`=@Thorim; -- thorim
+UPDATE `creature_template` SET `faction`=14, `speed_walk`=1.6, `speed_run`=1.857143, `unit_flags`=320, `unit_flags2`=2099200, `AIName`='SmartAI' WHERE `entry`=@Loken; -- loken
+UPDATE `creature_template` SET `speed_walk`=3.2, `speed_run`=1.428571, `unit_flags`=33088, `unit_flags2`=2099200, `AIName`='SmartAI', `HoverHeight`=2.1, `InhabitType`=4 WHERE `entry`=@Veranus;
+UPDATE `creature_template` SET `faction`=2102, `unit_flags`=320,`AIName`='SmartAI' WHERE `entry`=@Servant;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(@Thorim*100,@Loken*100) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(@Thorim,@Loken,@Veranus,@Servant) 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
+(@Loken,0,0,1,38,0,100,0,1,1,0,0,91,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - On Data Set 1 1 - Set Bytes 1"),
+(@Loken,0,1,0,61,0,100,0,0,0,0,0,80,@Loken*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - On Data Set 1 1 - Run Script"),
+(@Veranus,0,0,0,38,0,100,0,1,1,0,0,69,0,0,0,0,0,0,8,0,0,0,8609.171875, -636.665955, 967.317383, 2.124008,"Veranus - On Data Set 1 1 - move to pos"),
+(@Veranus,0,1,2,38,0,100,0,2,2,0,0,11,34427,0,0,0,0,0,1,0,0,0,0,0,0,0,"Veranus - On Data Set 2 2 - Cast Ethereal Teleport"),
+(@Veranus,0,2,0,61,0,100,0,0,0,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Veranus - On Data Set 2 2 - Despawn After 1 Seconds"),
+(@Veranus,0,3,0,1,0,100,0,160000,160000,160000,160000,70,0,0,0,0,0,0,10,@CGUID,@Thorim,0,0,0,0,0,"Veranus - Ooc - respawn target"),
+(@Servant,0,0,1,38,0,100,0,2,2,0,0,11,34427,0,0,0,0,0,1,0,0,0,0,0,0,0,"Runeforged Servant <Servant of Loken> - On Data Set 2 2 - Cast Ethereal Teleport"),
+(@Servant,0,1,2,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,10,@CGUID,@Thorim,0,0,0,0,0,"Runeforged Servant <Servant of Loken> - On Data Set 2 2 - Despawn After 1 Seconds"),
+(@Servant,0,2,3,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Runeforged Servant <Servant of Loken> - On Data Set 2 2 - Despawn After 1 Seconds"),
+(@Servant,0,3,0,61,0,100,0,0,0,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Runeforged Servant <Servant of Loken> - On Data Set 2 2 - Despawn After 1 Seconds"),
+(@Thorim,0,0,1,62,0,100,0,9928,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Thorim - On Gossip Option select - Store Targetlist"),
+(@Thorim,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,"Thorim - On Gossip Option select - Close Gossip"),
+(@Thorim,0,2,3,61,0,100,0,0,0,0,0,28,54503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - On Gossip Option select - remove aura"),
+(@Thorim,0,3,0,61,0,100,0,0,0,0,0,80,@Thorim*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - On Gossip Option select - Run Script"),
+(@Thorim,0,4,0,40,0,100,0,2,@Thorim,0,0,1,1,0,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Thorim - On Reached WP2 - Say Line 2"),
+(@Thorim,0,5,0,40,0,100,0,3,@Thorim,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - On Reached WP3 - Set Home Position"),
+(@Thorim,0,6,0,8,0,100,0,56696,0,0,0,100,1,0,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Thorim - On Spellhit (Loken - Defeat Thorim) - Send Target List to Loken"),
+(@Thorim,0,7,0,9,0,100,0,0,0,0,0,42,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - On Spawn - Set Invincibility hp"),
+(@Thorim,0,8,0,25,0,100,0,1,1,0,0,75,54503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - On Reset - Add aura"),
+(@Loken*100,9,0,0,0,0,100,0,0,0,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Set Run On"),
+(@Loken*100,9,1,0,0,0,100,0,0,0,0,0,17,30,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - set stand none"),
+(@Loken*100,9,2,0,0,0,100,0,2000,2000,0,0,11,56677,0,0,0,0,0,19,@Thorim,30,0,0,0,0,0,"Loken - Script - Cast Loken's Knockback"),
+(@Loken*100,9,3,0,0,0,100,0,3000,3000,0,0,69,0,0,0,0,0,0,8,0,0,0,8591.518555, -610.456604, 925.558228, 5.241327,"Loken - Script - Say Line 1"),
+(@Loken*100,9,5,0,0,0,100,0,5000,5000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Say Line 1"),
+(@Loken*100,9,6,0,0,0,100,0,1000,1000,0,0,5,25,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Play emote 25"),
+(@Loken*100,9,7,0,0,0,100,0,5000,5000,0,0,69,0,0,0,0,0,0,8,0,0,0,8577.214844, -596.050659, 925.558289, 5.372476,"Loken - Script - Say Line 1"),
+(@Loken*100,9,8,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Say Line 2"),
+(@Loken*100,9,9,0,0,0,100,0,7000,7000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Say Line 3"),
+(@Loken*100,9,10,0,0,0,100,0,6000,6000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Say Line 4"),
+(@Loken*100,9,11,0,0,0,100,0,1000,1000,0,0,75,56696,0,0,0,0,0,10,@CGUID,@Thorim,0,0,0,0,0,"Loken - Script - Cast Loken - Defeat Thorim"),
+(@Loken*100,9,12,0,0,0,100,0,0,0,0,0,11,46846,0,0,0,0,0,10,@CGUID,@Thorim,0,0,0,0,0,"Loken - Script - Cast Loken - Defeat Thorim"),
+(@Loken*100,9,13,0,0,0,100,0,1000,1000,0,0,45,1,1,0,0,0,0,10,@CGUID+1,@Veranus,0,0,0,0,0,"Loken - Script - Set Data 1 1 to Veranus"),
+(@Loken*100,9,14,0,0,0,100,0,5000,5000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Say Line 5"),
+(@Loken*100,9,15,0,0,0,100,0,7000,7000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Say Line 6"),
+(@Loken*100,9,16,0,0,0,100,0,0,0,0,0,12,@Servant,1,60000,0,0,0,8,0,0,0,8622.837,-605.7887,926.2864,4.433136,"Loken - Script - Spawn Runeforged Servant <Servant of Loken>"),
+(@Loken*100,9,17,0,0,0,100,0,0,0,0,0,12,@Servant,1,60000,0,0,0,8,0,0,0,8586.867,-564.764,925.6412,5.166174,"Loken - Script - Spawn Runeforged Servant <Servant of Loken>"),
+(@Loken*100,9,18,0,0,0,100,0,7000,7000,0,0,1,6,0,0,0,0,0,21,50,0,0,0,0,0,0,"Loken - Script - Say Line 7"),
+(@Loken*100,9,19,0,0,0,100,0,7000,7000,0,0,1,7,0,0,0,0,0,21,50,0,0,0,0,0,0,"Loken - Script - Say Line 8"),
+(@Loken*100,9,20,0,0,0,100,0,0,0,0,0,28,46846,0,0,0,0,0,10,@CGUID,@Thorim,0,0,0,0,0,"Loken - Script - Say Line 1"),
+(@Loken*100,9,21,0,0,0,100,0,5000,5000,0,0,11,56941,0,0,0,0,0,1,0,0,0,0,0,0,0,"Loken - Script - Cast Witness the Reckoning"),
+(@Loken*100,9,22,0,0,0,100,0,0,0,0,0,45,2,2,0,0,0,0,10,@CGUID+1,@Veranus,0,0,0,0,0,"Loken - Script - Set Data 2 2 to Veranus"),
+(@Loken*100,9,23,0,0,0,100,0,0,0,0,0,45,2,2,0,0,0,0,9,30429,0,200,0,0,0,0,"Loken - Script - Set Data 2 2 to Runeforged Servant <Servant of Loken>"),
+(@Thorim*100,9,0,0,0,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Set NPC Flags"),
+(@Thorim*100,9,1,0,0,0,100,0,0,0,0,0,12,@Loken,1,180000,0,0,0,8,0,0,0,8564.411,-580.366,925.6412,5.5676,"Thorim - Script - Spawn Loken"),
+(@Thorim*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,"Thorim - Script - Say Line 1"),
+(@Thorim*100,9,3,0,0,0,100,0,3000,3000,0,0,53,0,@Thorim,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Start WP"),
+(@Thorim*100,9,4,0,0,0,100,0,15000,15000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Say Line 3"),
+(@Thorim*100,9,5,0,0,0,100,0,2000,2000,0,0,5,333,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Play Emote 333"),
+(@Thorim*100,9,6,0,0,0,100,0,4000,4000,0,0,45,1,1,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Thorim - Script - Set Data 1 1 to Loken"),
+(@Thorim*100,9,7,0,0,0,100,0,6000,6000,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Set Run On"),
+(@Thorim*100,9,8,0,0,0,100,0,0,0,0,0,46,20,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Cast Move to Loken"),
+(@Thorim*100,9,9,0,0,0,100,0,6000,6000,0,0,11,56688,0,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Thorim - Script - Cast Thorim's Knockback"),
+(@Thorim*100,9,10,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Say Line 4"),
+(@Thorim*100,9,11,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Say Line 5"),
+(@Thorim*100,9,12,0,0,0,100,0,2000,2000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Thorim - Script - Say Line 6"),
+(@Thorim*100,9,13,0,0,0,100,0,1000,1000,0,0,11,56694,0,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Thorim - Script - Cast Lightning Fury"),
+(@Thorim*100,9,14,0,0,0,100,0,3000,3000,0,0,11,56695,0,0,0,0,0,19,@Loken,30,0,0,0,0,0,"Thorim - Script - Cast Thorim's Hammer");
+
+DELETE FROM `spell_area` WHERE `spell`=54504 AND `area` IN(4543,4445);
+INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES
+(54504, 4543, 13047, 13047, 0, 0, 2, 1, 8, 11),
+(54504, 4445, 13047, 13047, 0, 0, 2, 1, 8, 11);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9928;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 9928, 0, 0, 0, 9, 0, 13047, 0, 0, 0, 0, 0, '', 'Gossip option requires the reckoning taken');
+
+DELETE from `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=56677;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 56677, 0, 31, 3, @Thorim, 0, 0, '', 'Loken''s Knockback');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=56688;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 56688, 0, 31, 3, @Loken, 0, 0, '', 'Thorim''s Knockback');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=56694;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 3, 56694, 0, 31, 3, @Loken, 0, 0, '', 'Thorim''s Knockback');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=56695;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 56695, 0, 31, 3, @Loken, 0, 0, '', 'Thorim''s hammer');
+
+DELETE FROM `creature_text` WHERE `entry` IN(@Thorim,@Loken);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(@Thorim, 0, 0, 'It is time I put an end to my brother''s madness.', 12, 0, 100, 0, 0, 0, 'Thorim', 31078),
+(@Thorim, 1, 0, 'Loken!!', 14, 0, 100, 15, 0, 0, 'Thorim', 31079),
+(@Thorim, 2, 0, 'Stand up and fight me, you worthless traitor! ', 14, 0, 100, 53, 0, 0, 'Thorim', 31080),
+(@Thorim, 3, 0, 'Do not dare...', 12, 0, 100, 0, 0, 0, 'Thorim', 31083),
+(@Thorim, 4, 0, 'Speak...', 12, 0, 100, 0, 0, 0, 'Thorim', 31116),
+(@Thorim, 5, 0, 'Her name!!', 12, 0, 100, 0, 0, 0, 'Thorim', 31117),
+(@Loken, 0, 0, 'You seem eager to join your beloved Sif, brother.', 12, 0, 100, 0, 0, 0, 'Loken', 31082),
+(@Loken, 1, 0, 'ENOUGH!', 14, 0, 100, 15, 0, 0, 'Loken', 31126),
+(@Loken, 2, 0, 'Looks like you can still best me in a fair fight, little brother.', 12, 0, 100, 1, 0, 0, 'Loken', 31110),
+(@Loken, 3, 0, 'Unfortunately for you.... this fight is anything but fair!', 12, 0, 100, 1, 0, 0, 'Loken', 31111),
+(@Loken, 4, 0, 'Thanks to your little friend, you''ve left the Temple of Storms, where you were at your strongest. Instead we fight closer to my master''s power.', 12, 0, 100, 0, 0, 0, 'Loken', 31112),
+(@Loken, 5, 0, 'Minions! Take my brother and his drake to their new dwellings. Make sure the beast makes it alive. I have special plans for the broodmother.', 12, 0, 100, 0, 0, 0, 'Loken', 31128),
+(@Loken, 6, 0, 'As for your life, mortal. I will be generous. After all... why would I destroy my most useful servant? I waited for you for weeks inside that Hyldnir mine.', 12, 0, 100, 0, 0, 0, 'Loken', 31127),
+(@Loken, 7, 0, 'The shape wasn''t mine, of course. And had you not been so reckless, you would''ve seen past my illusion. But you came through for me, and for that... I must thank you!', 12, 0, 100, 0, 0, 0, 'Loken', 31133);
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN(@Thorim,@Loken,@Veranus);
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(@Thorim, 0, 0x10000, 0x1, '54503'), -- 30399 - 54503
+(@Loken, 0, 0x1, 0x1, ''), -- 30396
+(@Veranus, 0, 0x3010000, 0x1, '54503'); -- 30420 - 54503
+
+DELETE FROM `creature` WHERE `id` IN(@Thorim,@Veranus);
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, @Thorim, 571, 1, 1, 8703.806, -714.0443, 934.9764, 2.321288, 120, 0, 0), -- 30399 (Area: 67)
+(@CGUID+1, @Veranus, 571, 1, 1, 8711.395, -754.7941, 955.1224, 2.338741, 120, 0, 0); -- 30420 (Area: 67)
+
+DELETE FROM `gossip_menu` WHERE `entry`=9928;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(9928, 13800); -- 30399
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=9928;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(9928, 0, 0, 'I''m with you, Thorim.', 0, 1, 1, 0, 0, 0, 0, '', 31225);
+
+DELETE FROM `waypoints` WHERE `entry` IN(@Thorim);
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@Thorim, 1,8695.301, -703.0229, 933.7817, 'Thorim'),
+(@Thorim, 2,8665.801, -675.7729, 927.5317, 'Thorim'),
+(@Thorim, 3,8573.930664, -591.286133, 925.558167 , 'Thorim');
+
+UPDATE creature_template SET InhabitType=4 WHERE entry IN (29747, 29790);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_05_world.sql
new file mode 100644
index 00000000000..807f4f81a5d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_05_world.sql
@@ -0,0 +1 @@
+UPDATE `gossip_menu` SET `text_id`=9715 WHERE `entry`=7931 AND `text_id`=1915;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_00_world.sql
new file mode 100644
index 00000000000..edf6aae06f0
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_00_world.sql
@@ -0,0 +1,54 @@
+-- Mug'gok SAI
+SET @ENTRY := 18475;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100+00 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,25,0,100,0,0,0,0,0,53,0,18475,1,0,0,2,1,0,0,0,0,0,0,0,"Mug'gok - On Reset - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,1,18475,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mug'gok - On Waypoint 1 Reached - Run Script"),
+(@ENTRY,0,2,0,40,0,100,0,1,18475,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mug'gok - On Waypoint 1 Reached - Pause Waypoint"),
+(@ENTRY*100+00,9,0,0,0,0,100,0,2000,2000,0,0,1,0,3000,0,0,0,0,1,0,0,0,0,0,0,0,"Mug'gok - On Script - Say Line 0"),
+(@ENTRY*100+00,9,1,0,0,0,100,0,2000,2000,0,0,1,1,3000,0,0,0,0,1,0,0,0,0,0,0,0,"Mug'gok - On Script - Say Line 1"),
+(@ENTRY*100+00,9,3,0,0,0,100,0,2000,2000,0,0,1,2,3000,0,0,0,0,1,0,0,0,0,0,0,0,"Mug'gok - On Script - Say Line 2");
+
+-- Add text
+DELETE FROM `creature_text` WHERE `entry`=18475;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(18475, 0, 0, 'Come out, little birdies! Mug''gok want to play!', 14, 0, 100, 0, 0, 0, 'Muggok', 15463),
+(18475, 1, 0, 'No hurt Mug''gok''s feelings, bird-men!', 14, 0, 100, 0, 0, 0, 'Muggok', 15464),
+(18475, 2, 0, 'Fine! Birdies be dat way! Mug''gok find new friends!', 14, 0, 100, 14, 0, 0, 'Muggok', 15465);
+
+-- Add waypoints
+DELETE FROM `waypoints` WHERE `entry`=18475;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(18475, 1, -3586.119,5789.734,-4.249763, 'Muggok'),
+(18475, 2, -3607.362,5802.457,-4.015522, 'Muggok'),
+(18475, 3, -3611.601,5813.162,-4.286913, 'Muggok'),
+(18475, 4, -3620.696,5832.479,0.1701524, 'Muggok'),
+(18475, 5, -3632.274,5845.131,-0.2069848, 'Muggok'),
+(18475, 6, -3644.935,5868.452,-4.990351, 'Muggok'),
+(18475, 7, -3637.306,5910.221,-21.84441, 'Muggok'),
+(18475, 8, -3641.046,5941.752,-30.85709, 'Muggok'),
+(18475, 9, -3638.008,5970.188,-22.30242, 'Muggok'),
+(18475, 10, -3625.294,5984.689,-19.98056, 'Muggok'),
+(18475, 11, -3593.81,5984.915,-30.74051, 'Muggok'),
+(18475, 12, -3560.429,5994.253,-34.44781, 'Muggok'),
+(18475, 13, -3533.398,6024.583,-24.52451, 'Muggok'),
+(18475, 14, -3525.008,6048.768,-20.22229, 'Muggok'),
+(18475, 15, -3509.135,6060.514,-15.46761, 'Muggok'),
+(18475, 16, -3465.905,6061.523,-15.65, 'Muggok'),
+(18475, 17, -3455.743,6054.097,-12.08964, 'Muggok'),
+(18475, 18, -3452,6032.292,-14.2308, 'Muggok'),
+(18475, 19, -3449.686,6012.386,-17.47238, 'Muggok'),
+(18475, 20, -3443.185,5993.315,-23.15056, 'Muggok'),
+(18475, 21, -3440.388,5986.851,-24.24662, 'Muggok'),
+(18475, 22, -3435.465,5956.201,-24.91395, 'Muggok'),
+(18475, 23, -3446.49,5924.918,-33.08622, 'Muggok'),
+(18475, 24, -3466.203,5894.721,-28.9427, 'Muggok'),
+(18475, 25, -3483.424,5870.367,-23.49757, 'Muggok'),
+(18475, 26, -3495.208,5849.559,-15.93699, 'Muggok'),
+(18475, 27, -3507.46,5820.458,-12.90878, 'Muggok'),
+(18475, 28, -3519.906,5799.604,-7.427849, 'Muggok'),
+(18475, 29, -3532.312,5789.58,-6.70218, 'Muggok'),
+(18475, 30, -3553.792,5784.59,-4.330991, 'Muggok'),
+(18475, 31, -3562.554,5785.313,-1.650567, 'Muggok');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_01_world.sql
new file mode 100644
index 00000000000..5c6c879a83a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_01_world.sql
@@ -0,0 +1,11 @@
+--
+SET @ENTRY := 178905;
+SET @Scion:= 13696;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@Scion);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Scion 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,1,0,0,64,0,100,0,0,0,0,0,12,13696,2,60000,0,0,0,1,0,0,0,0,0,0,0,"Vylestem Vine - On Gossip Hello - Summon Creature 'Noxxious Scion'"),
+(@Scion,0,0,0,4,0,100,1,0,0,0,0,11,21883,0,0,0,0,0,1,0,0,0,0,0,0,0,"Noxxious Scion - On Aggro -Cast 21883"),
+(@Scion,0,1,0,63,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,20,0,0,0,0,0,0,"Noxxious Scion - On Just created - Attack");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_02_world.sql
new file mode 100644
index 00000000000..66d7951d719
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_02_world.sql
@@ -0,0 +1,7 @@
+--
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (31198, 31150);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (31198, 31150) 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
+(31150,0,0,0,0,0,100,0,2000,8000,12000,15000,11,60678,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Plagued Fiend - IC - Plague Bite"),
+(31198,0,0,0,0,0,100,0,2000,2000,15000,20000,11,38971,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Coprous the Defiled - IC - Cast Acid Geyser"),
+(31198,0,1,0,0,0,100,0,5000,5000,10000,10000,11,5164,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,"Coprous the Defiled - IC - Cast Knockdown");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_03_world.sql
new file mode 100644
index 00000000000..6a4c12347a3
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_03_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=52654;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 52654, 0, 0, 31, 0, 3, 28823, 0, 0, 0, 0, '', 'Temper only target Volkhan\'s Anvil');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_19_00_world.sql
new file mode 100644
index 00000000000..d0411d68c66
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_19_00_world.sql
@@ -0,0 +1,427 @@
+--
+DELETE FROM `creature_template_addon` WHERE `entry` IN (25760, 25622, 25615);
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(25760, 0, 0, 0, 0, 45, NULL),
+(25622, 0, 0, 0, 0, 173, NULL),
+(25615, 0, 0, 0, 0, 0, '45797');
+
+UPDATE `creature_addon` SET `emote`=36 WHERE `guid`=102838;
+
+UPDATE `creature` SET `spawndist`=9, `MovementType`=1 WHERE `id` IN (26202, 25715, 25668, 25791, 25792);
+
+UPDATE `creature` SET `spawndist`=9, `MovementType`=1 WHERE `id` IN (26126);
+
+UPDATE `creature` SET `spawndist`=13, `MovementType`=1 WHERE `id` IN (25452, 25615);
+
+UPDATE `creature` SET `MovementType`=0 WHERE `guid`=122669;
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=111466;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(111466, 111466, 0, 0, 0, 0, 0),
+(111466, 111467, 5, 10, 0, 0, 0);
+
+-- Pathing for Entry: 26790 'TDB FORMAT'
+SET @NPC := 111466;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3269.226,`position_y`=4429.583,`position_z`=25.58942 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3269.226,4429.583,25.58942,0,0,0,0,100,0),
+(@PATH,2,3267.759,4388,25.7008,0,0,0,0,100,0),
+(@PATH,3,3267.792,4381.39,25.73712,0,0,0,0,100,0),
+(@PATH,4,3278.066,4307.007,24.88556,0,0,0,0,100,0),
+(@PATH,5,3279.909,4296.206,24.66411,0,0,0,0,100,0),
+(@PATH,6,3295.526,4235.11,26.38262,0,0,0,0,100,0),
+(@PATH,7,3300.244,4216.931,27.75196,0,0,0,0,100,0),
+(@PATH,8,3318.573,4152.362,27.67955,0,0,0,0,100,0),
+(@PATH,9,3325.382,4131.279,26.32579,0,0,0,0,100,0),
+(@PATH,10,3332.996,4089.244,27.17685,0,0,0,0,100,0),
+(@PATH,11,3343.786,4049.672,25.98749,0,0,0,0,100,0),
+(@PATH,12,3363.78,4008.359,26.03116,0,0,0,0,100,0),
+(@PATH,13,3366.464,4003.271,25.94505,0,0,0,0,100,0),
+(@PATH,14,3425.143,4003.964,27.52853,0,0,0,0,100,0),
+(@PATH,15,3476.093,4013.513,26.82531,0,0,0,0,100,0),
+(@PATH,16,3515.465,4026.42,22.9796,0,0,0,0,100,0),
+(@PATH,17,3530.343,4051.534,21.97854,0,0,0,0,100,0),
+(@PATH,18,3552.293,4122.889,21.95212,0,0,0,0,100,0),
+(@PATH,19,3590.191,4148.155,21.84193,0,0,0,0,100,0),
+(@PATH,20,3620.669,4159.591,25.41138,0,0,0,0,100,0),
+(@PATH,21,3659.4,4169.95,25.3229,0,0,0,0,100,0),
+(@PATH,22,3700.533,4186.467,24.96351,0,0,0,0,100,0),
+(@PATH,23,3743.046,4216.556,24.08723,0,0,0,0,100,0),
+(@PATH,24,3771.806,4239.74,25.29598,0,0,0,0,100,0),
+(@PATH,25,3820.626,4241.001,27.25442,0,0,0,0,100,0),
+(@PATH,26,3848.42,4209.31,28.84864,0,0,0,0,100,0),
+(@PATH,27,3840.634,4170.563,28.2758,0,0,0,0,100,0),
+(@PATH,28,3804.119,4155.879,27.68908,0,0,0,0,100,0),
+(@PATH,29,3767.293,4171.405,26.47837,0,0,0,0,100,0),
+(@PATH,30,3739.984,4183.705,24.70092,0,0,0,0,100,0),
+(@PATH,31,3695.544,4177.419,25.40162,0,0,0,0,100,0),
+(@PATH,32,3690.549,4175.297,25.46773,0,0,0,0,100,0),
+(@PATH,33,3664.658,4165.97,25.39618,0,0,0,0,100,0),
+(@PATH,34,3608.881,4156.498,24.01619,0,0,0,0,100,0),
+(@PATH,35,3562.48,4159.697,23.3773,0,0,0,0,100,0),
+(@PATH,36,3545.413,4159.953,22.43779,0,0,0,0,100,0),
+(@PATH,37,3526.568,4167.223,15.17734,0,0,0,0,100,0),
+(@PATH,38,3522.761,4171.347,12.94395,0,0,0,0,100,0),
+(@PATH,39,3513.761,4183.413,12.85036,0,0,0,0,100,0),
+(@PATH,40,3521.258,4190.762,12.85036,0,0,0,0,100,0),
+(@PATH,41,3529.055,4194.656,12.85036,0,0,0,0,100,0),
+(@PATH,42,3537.065,4186.435,12.85036,0,0,0,0,100,0),
+(@PATH,43,3549.637,4182.573,12.84298,0,0,0,0,100,0),
+(@PATH,44,3560.2,4184.638,12.84456,0,0,0,0,100,0),
+(@PATH,45,3551.881,4191.742,12.85036,0,0,0,0,100,0),
+(@PATH,46,3552.376,4284.875,12.60797,0,0,0,0,100,0),
+(@PATH,47,3537.689,4185.746,12.85036,0,0,0,0,100,0),
+(@PATH,48,3535.854,4184.324,12.85036,0,0,0,0,100,0),
+(@PATH,49,3526.616,4197.904,12.85036,0,0,0,0,100,0),
+(@PATH,50,3514.75,4185.95,12.85036,0,0,0,0,100,0),
+(@PATH,51,3487.793,4170.192,17.39668,0,0,0,0,100,0),
+(@PATH,52,3474.217,4172.794,17.44868,0,0,0,0,100,0),
+(@PATH,53,3466.45,4161.327,17.44301,0,0,0,0,100,0),
+(@PATH,54,3463.186,4144.002,17.44657,0,0,0,0,100,0),
+(@PATH,55,3461.733,4133.489,15.50942,0,0,0,0,100,0),
+(@PATH,56,3461.425,4131.252,15.57042,0,0,0,0,100,0),
+(@PATH,57,3440.413,4107.955,16.253,0,0,0,0,100,0),
+(@PATH,58,3439.38,4106.382,16.33916,0,0,0,0,100,0),
+(@PATH,59,3384.195,4062.901,19.78522,0,0,0,0,100,0),
+(@PATH,60,3350.907,4085.523,26.59955,0,0,0,0,100,0),
+(@PATH,61,3336.268,4101.299,25.10432,0,0,0,0,100,0),
+(@PATH,62,3313.968,4123.463,25.70841,0,0,0,0,100,0),
+(@PATH,63,3298.833,4136.27,25.76038,0,0,0,0,100,0),
+(@PATH,64,3284.301,4171.881,25.73615,0,0,0,0,100,0),
+(@PATH,65,3260.152,4249.911,26.19264,0,0,0,0,100,0),
+(@PATH,66,3265.231,4272.233,25.12194,0,0,0,0,100,0),
+(@PATH,67,3267.608,4324.161,25.83903,0,0,0,0,100,0),
+(@PATH,68,3266.102,4333.994,26.12407,0,0,0,0,100,0),
+(@PATH,69,3269.841,4402.301,25.18758,0,0,0,0,100,0),
+(@PATH,70,3287.93,4442.964,24.90842,0,0,0,0,100,0),
+(@PATH,71,3330.486,4488.953,25.63785,0,0,0,0,100,0),
+(@PATH,72,3346.958,4513.736,25.21837,0,0,0,0,100,0),
+(@PATH,73,3370.701,4574.729,28.1356,0,0,0,0,100,0),
+(@PATH,74,3329.835,4909.289,31.98566,0,0,0,0,100,0),
+(@PATH,75,3260.729,4889.575,31.59256,0,0,0,0,100,0),
+(@PATH,76,3254.577,4883.116,30.8572,0,0,0,0,100,0),
+(@PATH,77,3244.599,4836.884,30.49381,0,0,0,0,100,0),
+(@PATH,78,3274.862,4794.816,31.06407,0,0,0,0,100,0),
+(@PATH,79,3312.659,4774.863,32.49248,0,0,0,0,100,0),
+(@PATH,80,3349.351,4758.671,31.47926,0,0,0,0,100,0),
+(@PATH,81,3287.93,4442.964,24.90842,0,0,0,0,100,0),
+(@PATH,82,3330.486,4488.953,25.63785,0,0,0,0,100,0),
+(@PATH,83,3346.958,4513.736,25.21837,0,0,0,0,100,0),
+(@PATH,84,3370.701,4574.729,28.1356,0,0,0,0,100,0);
+-- 0x1C39AC47601A298000000B00005AED7E .go 3269.226 4429.583 25.58942
+
+-- Pathing for Entry: 25793 'TDB FORMAT'
+SET @NPC := 57171;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3561.628,`position_y`=5005.68,`position_z`=-1.416187 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3561.628,5005.68,-1.416187,0,0,0,0,100,0),
+(@PATH,2,3561.647,5005.603,-1.154766,0,0,0,0,100,0),
+(@PATH,3,3548.455,4987.43,-1.165261,0,0,0,0,100,0),
+(@PATH,4,3548.445,4987.507,-1.393345,0,0,0,0,100,0),
+(@PATH,5,3548.703,4987.758,-1.156939,0,0,0,0,100,0),
+(@PATH,6,3561.752,5006.026,-1.164443,0,0,0,0,100,0),
+(@PATH,7,3561.628,5005.68,-1.416187,0,0,0,0,100,0);
+-- 0x1C39AC47601930400000A3000065B380 .go 3561.628 5005.68 -1.416187
+
+-- Pathing for Entry: 25619 'TDB FORMAT'
+SET @NPC := 57156;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3653.617,`position_y`=4706.431,`position_z`=-12.93513 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3653.617,4706.431,-12.93513,0,0,0,0,100,0),
+(@PATH,2,3644.772,4705.505,-13.09717,0,0,0,0,100,0),
+(@PATH,3,3650.718,4705.053,-12.68797,0,0,0,0,100,0),
+(@PATH,4,3657.83,4709.773,-12.6719,0,0,0,0,100,0),
+(@PATH,5,3662.773,4713.923,-12.66263,0,0,0,0,100,0),
+(@PATH,6,3683.912,4744.512,-13.18753,0,0,0,0,100,0),
+(@PATH,7,3684.609,4746.4,-13.26137,0,0,0,0,100,0),
+(@PATH,8,3681.26,4750.936,-12.83029,0,0,0,0,100,0),
+(@PATH,9,3677.817,4771.657,-12.96236,0,0,0,0,100,0),
+(@PATH,10,3677.802,4771.346,-13.06311,0,0,0,0,100,0),
+(@PATH,11,3678.06,4771.458,-12.99139,0,0,0,0,100,0),
+(@PATH,12,3683.749,4747.838,-13.2233,0,0,0,0,100,0),
+(@PATH,13,3683.588,4743.549,-12.92916,0,0,0,0,100,0),
+(@PATH,14,3676.425,4727.065,-12.68113,0,0,0,0,100,0),
+(@PATH,15,3653.484,4706.284,-12.93378,0,0,0,0,100,0),
+(@PATH,16,3644.924,4705.583,-13.21565,0,0,0,0,100,0);
+-- 0x1C39AC47601904C000000C00006399A7 .go 3653.617 4706.431 -12.93513
+
+-- Pathing for Entry: 25619 'TDB FORMAT'
+SET @NPC := 57154;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3668.695,`position_y`=4852.459,`position_z`=-12.74998 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3668.695,4852.459,-12.74998,0,0,0,0,100,0),
+(@PATH,2,3664.671,4872.002,-12.99413,0,0,0,0,100,0),
+(@PATH,3,3664.699,4871.859,-13.07822,0,0,0,0,100,0),
+(@PATH,4,3665.02,4871.801,-13.02737,0,0,0,0,100,0),
+(@PATH,5,3675.036,4847.65,-13.24574,0,0,0,0,100,0),
+(@PATH,6,3689.288,4839.663,-12.73423,0,0,0,0,100,0),
+(@PATH,7,3700.295,4827.3,-13.29157,0,0,0,0,100,0),
+(@PATH,8,3702.61,4824.848,-13.29076,0,0,0,0,100,0),
+(@PATH,9,3702.303,4824.782,-13.54672,0,0,0,0,100,0),
+(@PATH,10,3696.016,4832.376,-12.71317,0,0,0,0,100,0),
+(@PATH,11,3684.51,4841.927,-13.23423,0,0,0,0,100,0),
+(@PATH,12,3671.438,4849.996,-12.73423,0,0,0,0,100,0),
+(@PATH,13,3668.495,4852.239,-12.74998,0,0,0,0,100,0);
+-- 0x1C39AC47601904C000000C00006398F7 .go 3668.695 4852.459 -12.74998
+
+-- Pathing for Entry: 25619 'TDB FORMAT'
+SET @NPC := 97940;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3580.309,`position_y`=4549.389,`position_z`=-11.17193 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3580.309,4549.389,-11.17193,0,0,0,0,100,0),
+(@PATH,2,3578.376,4553.744,-12.42194,0,0,0,0,100,0),
+(@PATH,3,3568.719,4586.03,-13.21303,0,0,0,0,100,0),
+(@PATH,4,3580.922,4608.78,-13.29673,0,0,0,0,100,0),
+(@PATH,5,3569.915,4581.717,-12.73434,0,0,0,0,100,0),
+(@PATH,6,3580.182,4549.349,-11.17194,0,0,0,0,100,0);
+-- 0x1C39AC47601904C000000C0000635FEA .go 3580.309 4549.389 -11.17193
+
+-- Pathing for Entry: 25619 'TDB FORMAT'
+SET @NPC := 97945;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3638.907,`position_y`=4590.849,`position_z`=-12.90129 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3638.907,4590.849,-12.90129,0,0,0,0,100,0),
+(@PATH,2,3639.077,4591.158,-12.65275,0,0,0,0,100,0),
+(@PATH,3,3657.039,4597.404,-12.65622,0,0,0,0,100,0),
+(@PATH,4,3674.552,4584.037,-12.69051,0,0,0,0,100,0),
+(@PATH,5,3691.104,4575.537,-12.92792,0,0,0,0,100,0),
+(@PATH,6,3700.628,4561.468,-12.65065,0,0,0,0,100,0),
+(@PATH,7,3700.406,4561.409,-12.89539,0,0,0,0,100,0),
+(@PATH,8,3700.436,4561.741,-12.6833,0,0,0,0,100,0),
+(@PATH,9,3690.878,4575.947,-12.68227,0,0,0,0,100,0),
+(@PATH,10,3674.272,4584.251,-12.66346,0,0,0,0,100,0),
+(@PATH,11,3656.891,4597.556,-12.65173,0,0,0,0,100,0),
+(@PATH,12,3638.816,4591.054,-12.67964,0,0,0,0,100,0),
+(@PATH,13,3638.907,4590.849,-12.90129,0,0,0,0,100,0);
+-- 0x1C39AC47601904C000000C000063960F .go 3638.907 4590.849 -12.90129
+
+-- Pathing for Entry: 25619 'TDB FORMAT'
+SET @NPC := 57150;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3540.325,`position_y`=4553.921,`position_z`=-11.9877 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3540.325,4553.921,-11.9877,0,0,0,0,100,0),
+(@PATH,2,3551.097,4546.824,-12.09515,0,0,0,0,100,0),
+(@PATH,3,3556.957,4542.564,-12.71872,0,0,0,0,100,0),
+(@PATH,4,3572.592,4519.032,-12.57456,0,0,0,0,100,0),
+(@PATH,5,3611.974,4514.621,-11.45239,0,0,0,0,100,0),
+(@PATH,6,3596.514,4512.68,-11.4117,0,0,0,0,100,0),
+(@PATH,7,3591.572,4513.184,-12.59506,0,0,0,0,100,0),
+(@PATH,8,3572.187,4519.236,-12.62936,0,0,0,0,100,0),
+(@PATH,9,3542.318,4553.094,-11.18209,0,0,0,0,100,0),
+(@PATH,10,3538.412,4553.636,-12.23789,0,0,0,0,100,0),
+(@PATH,11,3540.325,4553.921,-11.9877,0,0,0,0,100,0),
+(@PATH,12,3551.078,4546.787,-12.28936,0,0,0,0,100,0);
+-- 0x1C39AC47601904C00000A30000661A2D .go 3540.325 4553.921 -11.9877
+
+
+-- Pathing for Entry: 25619 'TDB FORMAT'
+SET @NPC := 57149;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3440.258,`position_y`=4514.217,`position_z`=-12.88582 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3440.258,4514.217,-12.88582,2,0,0,0,100,0),
+(@PATH,2,3440.258,4514.217,-12.88582,2,0,0,0,100,0),
+(@PATH,3,3440.896,4516.193,-12.89167,3,0,0,0,100,0),
+(@PATH,4,3442.607,4496.93,-12.91095,0,0,0,0,100,0),
+(@PATH,5,3447.15,4488.138,-12.65823,0,0,0,0,100,0),
+(@PATH,6,3452.752,4476.723,-12.68911,0,0,0,0,100,0),
+(@PATH,7,3476.311,4474.729,-12.71476,0,0,0,0,100,0),
+(@PATH,8,3494.302,4476.382,-12.71264,0,0,0,0,100,0),
+(@PATH,9,3494.728,4476.228,-12.96695,3,0,0,0,100,0),
+(@PATH,10,3511.506,4473.141,-12.958,0,0,0,0,100,0),
+(@PATH,11,3494.125,4476.339,-12.96727,0,0,0,0,100,0),
+(@PATH,12,3494.088,4476.244,-12.71688,0,0,0,0,100,0),
+(@PATH,13,3476.16,4474.544,-12.68911,0,0,0,0,100,0),
+(@PATH,14,3444.08,4494.611,-12.66572,0,0,0,0,100,0),
+(@PATH,15,3442.532,4497.133,-12.64838,0,0,0,0,100,0),
+(@PATH,16,3440.716,4522.266,-12.63575,0,0,0,0,100,0),
+(@PATH,17,3440.376,4522.044,-12.88582,0,0,0,0,100,0),
+(@PATH,18,3440.543,4522.067,-12.6481,0,0,0,0,100,0),
+(@PATH,19,3447.229,4487.997,-12.65975,0,0,0,0,100,0),
+(@PATH,20,3452.721,4477.046,-12.68911,0,0,0,0,100,0);
+-- 0x1C39AC47601904C000000A000063A957 .go 3440.258 4514.217 -12.88582
+
+-- Pathing for Entry: 25700 'TDB FORMAT'
+SET @NPC := 104890;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3649.046,`position_y`=3947.566,`position_z`=25.10987 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3649.046,3947.566,25.10987,0,0,0,0,100,0),
+(@PATH,2,3670.215,3953.261,27.32766,0,0,0,0,100,0),
+(@PATH,3,3661.302,3951.949,25.85034,0,0,0,0,100,0),
+(@PATH,4,3647.474,3946.993,24.98032,0,0,0,0,100,0),
+(@PATH,5,3631.758,3945.262,25.08576,0,0,0,0,100,0),
+(@PATH,6,3635.313,3944.982,24.81682,0,0,0,0,100,0),
+(@PATH,7,3649.313,3947.802,25.10083,0,0,0,0,100,0),
+(@PATH,8,3670.304,3953.393,27.30864,0,0,0,0,100,0);
+-- 0x1C39AC47601919000000A3000065CBC5 .go 3649.046 3947.566 25.10987
+
+-- Pathing for Entry: 25700 'TDB FORMAT'
+SET @NPC := 104873;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3612.053,`position_y`=3969.457,`position_z`=25.79908 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3612.053,3969.457,25.79908,0,0,0,0,100,0),
+(@PATH,2,3612.913,3949.386,26.9285,0,0,0,0,100,0),
+(@PATH,3,3606.506,3943.484,27.81473,0,0,0,0,100,0),
+(@PATH,4,3599.383,3941.598,27.42816,0,0,0,0,100,0),
+(@PATH,5,3613.519,3957.487,25.68642,0,0,0,0,100,0),
+(@PATH,6,3610.85,3975.829,26.71345,0,0,0,0,100,0),
+(@PATH,7,3610.689,3977.498,26.90823,0,0,0,0,100,0);
+-- 0x1C39AC47601919000000A3000065CBB6 .go 3612.053 3969.457 25.79908
+
+-- Pathing for Entry: 25700 'TDB FORMAT'
+SET @NPC := 104885;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3547.306,`position_y`=3938.455,`position_z`=28.18571 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3547.306,3938.455,28.18571,0,0,0,0,100,0),
+(@PATH,2,3547.207,3940.361,28.20439,0,0,0,0,100,0),
+(@PATH,3,3549.885,3950.133,28.27749,0,0,0,0,100,0),
+(@PATH,4,3547.638,3926.375,28.40306,0,0,0,0,100,0),
+(@PATH,5,3546.562,3908.686,26.7371,0,0,0,0,100,0);
+-- 0x1C39AC47601919000000990000649C8A .go 3547.306 3938.455 28.18571
+
+-- Pathing for Entry: 25700 'TDB FORMAT'
+SET @NPC := 104894;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3778.342,`position_y`=3912.803,`position_z`=29.24027 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3778.342,3912.803,29.24027,0,0,0,0,100,0),
+(@PATH,2,3759.181,3931.342,27.90885,0,0,0,0,100,0),
+(@PATH,3,3753.393,3933.303,27.37968,0,0,0,0,100,0),
+(@PATH,4,3753.327,3933.25,27.1396,0,0,0,0,100,0),
+(@PATH,5,3770.313,3927.754,29.42538,0,0,0,0,100,0),
+(@PATH,6,3771.412,3927.011,29.40953,0,0,0,0,100,0),
+(@PATH,7,3778.897,3901.917,30.91071,0,0,0,0,100,0);
+-- 0x1C39AC476019190000000A00005F9DDF .go 3778.342 3912.803 29.24027
+
+
+-- Pathing for Entry: 25615 'TDB FORMAT'
+SET @NPC := 97719;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3952.9,`position_y`=3970.767,`position_z`=60.06356 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '45797');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3952.9,3970.767,60.06356,0,0,0,0,100,0),
+(@PATH,2,3978.35,3999.136,62.92397,0,0,0,0,100,0),
+(@PATH,3,4018.881,4028.354,68.87595,0,0,0,0,100,0),
+(@PATH,4,4054.792,4041.589,78.42586,0,0,0,0,100,0),
+(@PATH,5,4079.642,4057.923,86.41113,0,0,0,0,100,0),
+(@PATH,6,4109.986,4083.86,91.92527,0,0,0,0,100,0),
+(@PATH,7,4146.447,4095.262,94.97155,0,0,0,0,100,0),
+(@PATH,8,4116.737,4088.786,92.95302,0,0,0,0,100,0),
+(@PATH,9,4085.337,4060.936,87.70323,0,0,0,0,100,0),
+(@PATH,10,4058.099,4043.569,79.66705,0,0,0,0,100,0),
+(@PATH,11,4020.782,4029.594,69.42237,0,0,0,0,100,0),
+(@PATH,12,3994.482,4012.06,64.00913,0,0,0,0,100,0),
+(@PATH,13,3968.87,3988.12,59.70909,0,0,0,0,100,0),
+(@PATH,14,3929.95,3947.708,63.23425,0,0,0,0,100,0),
+(@PATH,15,3911.141,3924.254,62.15401,0,0,0,0,100,0),
+(@PATH,16,3873.239,3894.211,53.25244,0,0,0,0,100,0),
+(@PATH,17,3906.264,3919.628,61.43396,0,0,0,0,100,0),
+(@PATH,18,3928.859,3946.259,63.19824,0,0,0,0,100,0),
+(@PATH,19,3952.789,3970.748,60.02489,0,0,0,0,100,0);
+-- 0x1C39AC47601903C00000FB00006640F7 .go 3952.9 3970.767 60.06356
+
+-- Pathing for Entry: 25684 'TDB FORMAT'
+SET @NPC := 103453;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4426.675,`position_y`=4548.689,`position_z`=105.0451 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4426.675,4548.689,105.0451,0,0,0,0,100,0),
+(@PATH,2,4426.097,4567.237,105.0696,0,0,0,0,100,0),
+(@PATH,3,4427.304,4550.866,105.1948,0,0,0,0,100,0),
+(@PATH,4,4424.215,4542.484,104.0657,0,0,0,0,100,0),
+(@PATH,5,4408.765,4527.845,109.2442,0,0,0,0,100,0),
+(@PATH,6,4417.008,4531.223,106.1703,0,0,0,0,100,0),
+(@PATH,7,4426.797,4548.548,105.0981,0,0,0,0,100,0),
+(@PATH,8,4426.019,4567.411,105.0588,0,0,0,0,100,0);
+-- 0x1C39AC47601915000000F80000663747 .go 4426.675 4548.689 105.0451
+
+-- Cult Plaguebringer SAI
+SET @ENTRY := 24957;
+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,1,0,100,0,1000,900000,500000,700000,11,45850,2,0,0,0,0,1,0,0,0,0,0,0,0,"Cult Plaguebringer - Out of Combat - Cast 'Ghoul Summons'"),
+(@ENTRY,0,1,0,11,0,100,0,0,0,0,0,11,45820,0,0,0,0,0,9,24021,0,30,0,0,0,0,"Cult Plaguebringer - On Respawn - Cast 'Plague Cauldron Beam'"),
+(@ENTRY,0,2,0,0,0,30,0,1100,6300,8800,13800,11,50356,0,0,0,0,0,2,0,0,0,0,0,0,0,"Cult Plaguebringer - In Combat - Cast 'Inject Plague'"),
+(@ENTRY,0,3,0,21,0,100,0,0,0,0,0,11,45820,0,0,0,0,0,9,24021,0,30,0,0,0,0,"Cult Plaguebringer - On Reached Home - Cast 'Plague Cauldron Beam'"),
+(@ENTRY,0,4,0,1,0,100,0,5000,10000,10000,15000,11,45864,0,0,0,0,0,19,23837,20,0,0,0,0,0,"Cult Plaguebringer - Out of Combat - Cast 'Soul Missile'");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=45864;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 45864, 0, 0, 31, 0, 3, 23837, 0, 0, 0, 0, '', 'Visual - ony targets Dummy');
+
+DELETE FROM `waypoints` WHERE `entry`=965560;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(965560, 1,3882.081,3605.613,47.20867, 'Darkfallen Bloodbearer'),
+(965560, 2,3880.675,3604.947,46.98143, 'Darkfallen Bloodbearer'),
+(965560, 3,3873.556,3605.217,47.1648, 'Darkfallen Bloodbearer'),
+(965560, 4,3864.232,3594.599,46.89387, 'Darkfallen Bloodbearer'),
+(965560, 5,3863.215,3593.009,46.80249, 'Darkfallen Bloodbearer'),
+(965560, 6,3857.541,3589.546,46.89201, 'Darkfallen Bloodbearer'),
+(965560, 7,3849.738,3589.315,47.19809, 'Darkfallen Bloodbearer'),
+(965560, 8,3841.684,3593.68,47.05273, 'Darkfallen Bloodbearer'),
+(965560, 9,3835.923,3599.622,47.26691, 'Darkfallen Bloodbearer'),
+(965560, 10,3828.859,3599.792,47.14082, 'Darkfallen Bloodbearer'),
+(965560, 11,3821.26,3598.35,46.8344, 'Darkfallen Bloodbearer'),
+(965560, 12,3806.117,3590.271,48.67004, 'Darkfallen Bloodbearer'),
+(965560, 13,3801.333,3586.158,49.71964, 'Darkfallen Bloodbearer');
+
+-- Darkfallen Bloodbearer SAI
+SET @GUID := -96556;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26115;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,25,0,100,0,0,0,0,0,53,0,965560,0,0,0,0,1,0,0,0,0,0,0,0,"Darkfallen Bloodbearer - On Reset - Start Waypoint"),
+(@GUID,0,1,0,40,0,100,0,13,965560,0,0,41,2000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darkfallen Bloodbearer - On Waypoint 13 Reached - Despawn In 2000 ms");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_00_world.sql
new file mode 100644
index 00000000000..918ed39cba1
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_00_world.sql
@@ -0,0 +1,10 @@
+--
+DELETE FROM `conditions` WHERE `SourceEntry`=56727;
+DELETE FROM `conditions` WHERE `SourceEntry`=36546 AND `SourceGroup`=1;
+DELETE FROM `conditions` WHERE `SourceEntry`=58118;
+DELETE FROM `conditions` WHERE `SourceEntry`=48397 AND `SourceTypeOrReferenceId`=13;
+DELETE FROM `conditions` WHERE `SourceEntry`= 44997 AND `SourceTypeOrReferenceId`=13;
+DELETE FROM `conditions` WHERE `SourceEntry`= 70529;
+UPDATE `conditions` SET `SourceGroup`=1 WHERE `SourceEntry`=70471;
+UPDATE `conditions` SET `SourceGroup`=1 WHERE `SourceEntry`=71310;
+UPDATE `smart_scripts` SET `action_param2`=9715 WHERE `entryorguid`=19172 AND `source_type`=0 AND `id`=10 AND `link`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_01_world.sql
new file mode 100644
index 00000000000..b4702d55177
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_01_world.sql
@@ -0,0 +1,14 @@
+--
+UPDATE `creature_template` SET `npcflag`=2 WHERE `entry`=17587;
+SET @ENTRY := 17587;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id` IN (11, 12, 13, 14, 15, 16);
+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, 11, 0, 26, 0, 100, 0, 1, 15, 60000, 60000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Draenei Youngling - IC_LOS - TALK'),
+(@ENTRY, 0, 12, 0, 53, 0, 100, 0, 1, 200000, 20000, 20000, 1, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Draenei Youngling - RECEIVE_HEAL - TALK'),
+(@ENTRY, 0, 13, 0, 5, 0, 100, 0, 30000, 30000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Draenei Youngling - KILL - TALK'),
+(@ENTRY, 0, 14, 0, 1, 0, 100, 0, 60000, 60000, 60000, 60000, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Draenei Youngling - OOC - TALK'),
+(@ENTRY, 0, 15, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 25, 15, 0, 0, 0, 0, 0, 0, 'Draenei Youngling - AGGRO - TALK'),
+(@ENTRY,0,16,0,11,0,100,0,0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Draenei Youngling - On Respawn ' Remove npcflag");
+DELETE FROM smart_scripts WHERE `entryorguid`=24178 AND `id`=3;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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
+(24178,0,3,0,8,0,0,0,43209,0,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shatterhorn - On Place Meat spellhit remove unit flags');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_02_world.sql
new file mode 100644
index 00000000000..2fc118ac1f3
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_02_world.sql
@@ -0,0 +1,80 @@
+--
+-- Keritose Bloodblade SAI
+SET @ENTRY := 30946;
+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,62,0,100,0,10110,0,0,0,85,58698,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keritose Bloodblade - On Gossip Option 0 Selected - Invoker Cast 'Possessed Skeletal Assault Gryphon'");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceID`=15 AND `SourceEntry`=0 AND `SourceGroup`=10110;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`elseGroup`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`Comment`) VALUES
+(15,10110,0,9,0,13172,0,0,0,'show gossip on quest 13172 taken');
+
+-- Restless Lookout SAI
+SET @ENTRY := 30951;
+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,8,0,100,0,45254,0,0,0,33,30951,0,0,0,0,0,21,50,0,0,0,0,0,0,"Restless Lookout - On Spellhit 'Suicide' - Quest Credit 'Honor is for the Weak'"),
+(@ENTRY,0,2,0,8,0,100,0,59234,0,0,0,33,31555,0,0,0,0,0,7,0,0,0,0,0,0,0,"Restless Lookout - On Spellhit 'Firebomb' - Quest Credit 'Seeds of Chaos'");
+
+-- Risen Laborer SAI
+SET @ENTRY := 30949;
+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,8,0,100,0,59234,0,0,0,33,31555,0,0,0,0,0,7,0,0,0,0,0,0,0,"Risen Laborer - On Spellhit 'Firebomb' - Quest Credit 'Seeds of Chaos'");
+
+/* gryphon */
+DELETE FROM `creature_template_addon` WHERE `entry`=31157;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(31157, 0, 0, 33554432, 0, 0, '55971');
+UPDATE `creature_template` SET `InhabitType`=4, `spell1`= 59234 WHERE `entry`=31157;
+
+-- Skeletal Assault Gryphon SAI
+SET @ENTRY := 31157;
+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,0,0,0,0,0,53,1,31157,0,0,0,0,1,0,0,0,0,0,0,0,"Skeletal Assault Gryphon - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,1,2,40,0,100,0,35,31157,0,0,11,50630,2,0,0,0,0,1,0,0,0,0,0,0,0,"Skeletal Assault Gryphon - On Waypoint 35 Reached - Cast 'Eject All Passengers'"),
+(@ENTRY,0,2,0,61,0,100,0,36,31157,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skeletal Assault Gryphon - On Waypoint 36 Reached - Despawn In 1000 ms");
+
+DELETE FROM `waypoints` WHERE `entry`=31157;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(31157, 1, 8397.621, 2683.953, 657.3679, 'Skeletal Assault Gryphon'),
+(31157, 2, 8370.314, 2727.218, 664.7281, 'Skeletal Assault Gryphon'),
+(31157, 3, 8335.474, 2760.751, 670.5891, 'Skeletal Assault Gryphon'),
+(31157, 4, 8289.219, 2785.704, 674.7277, 'Skeletal Assault Gryphon'),
+(31157, 5, 8212.881, 2826.851, 661.2293, 'Skeletal Assault Gryphon'),
+(31157, 6, 8070.518, 2879.992, 614.7838, 'Skeletal Assault Gryphon'),
+(31157, 7, 7950.946, 2893.043, 570.5617, 'Skeletal Assault Gryphon'),
+(31157, 8, 7859.049, 2925.734, 547.0621, 'Skeletal Assault Gryphon'),
+(31157, 9, 7804.694, 2973.792, 558.8955, 'Skeletal Assault Gryphon'),
+(31157, 10, 7725.221, 3051.099, 570.2289, 'Skeletal Assault Gryphon'),
+(31157, 11, 7658.346, 3084.103, 576.8101, 'Skeletal Assault Gryphon'),
+(31157, 12, 7591.941, 3146.263, 587.5597, 'Skeletal Assault Gryphon'),
+(31157, 13, 7576.145, 3203.526, 598.5592, 'Skeletal Assault Gryphon'),
+(31157, 14, 7622.536, 3240.809, 611.8931, 'Skeletal Assault Gryphon'),
+(31157, 15, 7703.133, 3210.107, 613.2822, 'Skeletal Assault Gryphon'),
+(31157, 16, 7796.588, 3149.966, 615.9203, 'Skeletal Assault Gryphon'),
+(31157, 17, 7889.656, 3088.229, 614.7259, 'Skeletal Assault Gryphon'),
+(31157, 18, 7983.687, 3018.498, 597.3369, 'Skeletal Assault Gryphon'),
+(31157, 19, 8053.703, 2943.441, 588.1163, 'Skeletal Assault Gryphon'),
+(31157, 20, 8076.742, 2864.08, 582.1427, 'Skeletal Assault Gryphon'),
+(31157, 21, 8005.022, 2790.798, 556.4193, 'Skeletal Assault Gryphon'),
+(31157, 22, 7897.278, 2831.605, 550.6705, 'Skeletal Assault Gryphon'),
+(31157, 23, 7847.702, 2963.348, 561.8926, 'Skeletal Assault Gryphon'),
+(31157, 24, 7792.906, 3089.349, 590.8646, 'Skeletal Assault Gryphon'),
+(31157, 25, 7735.124, 3173.07, 604.7814, 'Skeletal Assault Gryphon'),
+(31157, 26, 7620.355, 3179.519, 599.2814, 'Skeletal Assault Gryphon'),
+(31157, 27, 7590.6, 3106.805, 591.0317, 'Skeletal Assault Gryphon'),
+(31157, 28, 7650.019, 3055.191, 581.8378, 'Skeletal Assault Gryphon'),
+(31157, 29, 7734.892, 3021.323, 573.1149, 'Skeletal Assault Gryphon'),
+(31157, 30, 7862.496, 2979.27, 572.5039, 'Skeletal Assault Gryphon'),
+(31157, 31, 7956.528, 2972.131, 575.9482, 'Skeletal Assault Gryphon'),
+(31157, 32, 8039.022, 2947.35, 576.0869, 'Skeletal Assault Gryphon'),
+(31157, 33, 8155.893, 2883.776, 606.1532, 'Skeletal Assault Gryphon'),
+(31157, 34, 8239.198, 2805.797, 654.0699, 'Skeletal Assault Gryphon'),
+(31157, 35, 8290.536, 2766.505, 682.2192, 'Skeletal Assault Gryphon'),
+(31157, 36, 8353.981, 2708.914, 714.5253, 'Skeletal Assault Gryphon');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_03_world.sql
new file mode 100644
index 00000000000..225719a435d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_03_world.sql
@@ -0,0 +1,26 @@
+--
+UPDATE `creature_template` SET `ainame`='SmartAI' WHERE entry IN (29364,29365);
+UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33554560 WHERE `entry`=29365;
+UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2 WHERE `entry`=29364;
+
+-- Void Sentry SAI
+SET @ENTRY := 29365;
+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,2,25,0,100,2,0,0,0,0,11,54342,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Reset - Cast 'Zuramat Add 2' (Normal Dungeon)"),
+(@ENTRY,0,1,2,25,0,100,4,0,0,0,0,11,59747,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Reset - Cast 'Zuramat Add 2' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,11,54351,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Reset - Cast 'Zuramat Add' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - In Combat - Disable Combat Movement"),
+(@ENTRY,0,4,0,38,0,100,0,1,1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Data Set 1 1 - Despawn Instant");
+
+-- Void Sentry SAI
+SET @ENTRY := 29364;
+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,0,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - In Combat - Disable Combat Movement"),
+(@ENTRY,0,1,2,25,0,100,0,0,0,0,0,11,54341,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Reset - Cast 'Zuramat Add'"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,11,54351,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Reset - Cast 'Zuramat Add'"),
+(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,58650,0,0,0,0,0,1,0,0,0,0,0,0,0,"Void Sentry - On Respawn - Cast 'Summon Void Sentry Ball'"),
+(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,29365,10,0,0,0,0,0,"Void Sentry - On Just Died - Set Data 1 1");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_04_world.sql
new file mode 100644
index 00000000000..1560b983859
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_04_world.sql
@@ -0,0 +1,10 @@
+--
+DELETE FROM `creature` WHERE `id` = 29498;
+DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (29500) AND `accessory_entry` IN (29498);
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`)VALUES
+(29500,29498,0,1,'Brunnhildar Warbear',8,0);
+
+DELETE FROM `creature` WHERE `id` = 30175;
+DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (30174) AND `accessory_entry` IN (30175);
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`)VALUES
+(30174,30175,0,1,'Hyldsmeet Warbear',8,0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_21_00_world.sql
new file mode 100644
index 00000000000..7e71235703c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_21_00_world.sql
@@ -0,0 +1,9 @@
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` in(6626,6627,6628,6629,6630);
+
+INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
+(6626, 20, 30, 0, ''), -- Alterac Valley
+(6627, 20, 529, 0, ''), -- Arathi Basin
+(6628, 20, 489, 0, ''), -- Warsong Glutch
+(6629, 20, 607, 0, ''), -- Strand of the Ancients
+(6630, 20, 566, 0, ''); -- Eye of the Storm
+
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_22_00_world.sql
new file mode 100644
index 00000000000..fef42379e0b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_22_00_world.sql
@@ -0,0 +1,809 @@
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132553;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3852.509,`position_y`=3183.065,`position_z`=439.9884 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3852.509,3183.065,439.9884,0,0,0,0,100,0),
+(@PATH,2,-3819.889,3184.794,439.9884,0,0,0,0,100,0),
+(@PATH,3,-3782.827,3181.228,439.9884,0,0,0,0,100,0),
+(@PATH,4,-3750.342,3182.072,439.9884,0,0,0,0,100,0),
+(@PATH,5,-3722.763,3185.583,439.9884,0,0,0,0,100,0),
+(@PATH,6,-3686.632,3214.135,439.9884,0,0,0,0,100,0),
+(@PATH,7,-3656.386,3240.646,439.9884,0,0,0,0,100,0),
+(@PATH,8,-3626.851,3272.052,439.9884,0,0,0,0,100,0),
+(@PATH,9,-3614.448,3315.655,439.9884,0,0,0,0,100,0),
+(@PATH,10,-3607.889,3352.559,439.9884,0,0,0,0,100,0),
+(@PATH,11,-3585.032,3376.603,439.9884,0,0,0,0,100,0),
+(@PATH,12,-3587.389,3402.663,439.9884,0,0,0,0,100,0),
+(@PATH,13,-3579.043,3438.117,439.9884,0,0,0,0,100,0),
+(@PATH,14,-3548.228,3462.314,439.9884,0,0,0,0,100,0),
+(@PATH,15,-3537.522,3491.375,439.9884,0,0,0,0,100,0),
+(@PATH,16,-3536.816,3529.879,439.9884,0,0,0,0,100,0),
+(@PATH,17,-3531.781,3565.558,439.9884,0,0,0,0,100,0),
+(@PATH,18,-3534.733,3584.761,439.9884,0,0,0,0,100,0),
+(@PATH,19,-3540.309,3619.033,439.9884,0,0,0,0,100,0),
+(@PATH,20,-3548.71,3648.066,439.9884,0,0,0,0,100,0),
+(@PATH,21,-3565.15,3673.789,439.9884,0,0,0,0,100,0),
+(@PATH,22,-3593.257,3700.032,439.9884,0,0,0,0,100,0),
+(@PATH,23,-3629.609,3714.834,439.9884,0,0,0,0,100,0),
+(@PATH,24,-3663.73,3728.198,439.9884,0,0,0,0,100,0),
+(@PATH,25,-3699.584,3743.161,439.9884,0,0,0,0,100,0),
+(@PATH,26,-3730.971,3758.693,439.9884,0,0,0,0,100,0),
+(@PATH,27,-3763.805,3764.051,439.9884,0,0,0,0,100,0),
+(@PATH,28,-3796.277,3791.6,439.9884,0,0,0,0,100,0),
+(@PATH,29,-3829.475,3825.91,439.9884,0,0,0,0,100,0),
+(@PATH,30,-3866.195,3833.057,439.9884,0,0,0,0,100,0),
+(@PATH,31,-3901.688,3854.476,439.9884,0,0,0,0,100,0),
+(@PATH,32,-3932.767,3851.711,439.9884,0,0,0,0,100,0),
+(@PATH,33,-3965.585,3849.424,439.9884,0,0,0,0,100,0),
+(@PATH,34,-3999.315,3846.842,439.9884,0,0,0,0,100,0),
+(@PATH,35,-4034.047,3812.782,439.9884,0,0,0,0,100,0),
+(@PATH,36,-4053.754,3766.908,439.9884,0,0,0,0,100,0),
+(@PATH,37,-4065.977,3737.402,439.9884,0,0,0,0,100,0),
+(@PATH,38,-4097.885,3717.781,439.9884,0,0,0,0,100,0),
+(@PATH,39,-4102.042,3680.511,439.9884,0,0,0,0,100,0),
+(@PATH,40,-4104.036,3655.926,439.9884,0,0,0,0,100,0),
+(@PATH,41,-4101.168,3611.585,439.9884,0,0,0,0,100,0),
+(@PATH,42,-4102.894,3574.591,439.9884,0,0,0,0,100,0),
+(@PATH,43,-4103.932,3544.913,439.9884,0,0,0,0,100,0),
+(@PATH,44,-4104.642,3508.564,439.9884,0,0,0,0,100,0),
+(@PATH,45,-4106.799,3476.665,439.9884,0,0,0,0,100,0),
+(@PATH,46,-4107.433,3449.932,439.9884,0,0,0,0,100,0),
+(@PATH,47,-4104.114,3418.243,439.9884,0,0,0,0,100,0),
+(@PATH,48,-4089.375,3376.191,439.9884,0,0,0,0,100,0),
+(@PATH,49,-4055.623,3343.717,446.405,0,0,0,0,100,0),
+(@PATH,50,-4011.469,3341.788,448.6551,0,0,0,0,100,0),
+(@PATH,51,-3975.74,3311.974,446.6827,0,0,0,0,100,0),
+(@PATH,52,-3947.277,3278.158,445.544,0,0,0,0,100,0),
+(@PATH,53,-3922.814,3246.151,445.7939,0,0,0,0,100,0),
+(@PATH,54,-3886.357,3212.919,439.9884,0,0,0,0,100,0);
+-- 0x1C393042401682C000002B0003B619B4 .go -3852.509 3183.065 439.9884
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 86115;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3844.01,`position_y`=3755.452,`position_z`=357.5598 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3844.01,3755.452,357.5598,0,0,0,0,100,0),
+(@PATH,2,-3852.51,3791.215,357.0599,0,0,0,0,100,0),
+(@PATH,3,-3890.182,3810.264,355.8931,0,0,0,0,100,0),
+(@PATH,4,-3916.092,3784.685,356.5043,0,0,0,0,100,0),
+(@PATH,5,-3923.033,3754.531,361.0602,0,0,0,0,100,0),
+(@PATH,6,-3922.995,3732.825,381.1874,0,0,0,0,100,0),
+(@PATH,7,-3926.192,3702.992,389.9645,0,0,0,0,100,0),
+(@PATH,8,-3920.217,3670.407,389.9645,0,0,0,0,100,0),
+(@PATH,9,-3902.139,3652.927,389.9645,0,0,0,0,100,0),
+(@PATH,10,-3881.576,3654.323,389.9645,0,0,0,0,100,0),
+(@PATH,11,-3865.405,3672.89,381.4647,0,0,0,0,100,0),
+(@PATH,12,-3862.587,3682.567,374.4212,0,0,0,0,100,0),
+(@PATH,13,-3856.335,3709.221,366.0322,0,0,0,0,100,0);
+-- 0x1C393042401682C000002C00003804ED .go -3844.01 3755.452 357.5598
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 79017;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3712.47,`position_y`=3449.822,`position_z`=329.5283 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3712.47,3449.822,329.5283,0,0,0,0,100,0),
+(@PATH,2,-3692.213,3483.701,323.2226,0,0,0,0,100,0),
+(@PATH,3,-3682.306,3518.447,319.0838,0,0,0,0,100,0),
+(@PATH,4,-3686.292,3551.121,328.0282,0,0,0,0,100,0),
+(@PATH,5,-3704.019,3589.462,327.0838,0,0,0,0,100,0),
+(@PATH,6,-3720.923,3618.094,323.1671,0,0,0,0,100,0),
+(@PATH,7,-3746.331,3629.958,322.9449,0,0,0,0,100,0),
+(@PATH,8,-3788.036,3651.199,328.056,0,0,0,0,100,0),
+(@PATH,9,-3829.155,3656.951,343.6671,0,0,0,0,100,0),
+(@PATH,10,-3864.913,3641.72,343.6671,0,0,0,0,100,0),
+(@PATH,11,-3899.767,3634.007,334.5004,0,0,0,0,100,0),
+(@PATH,12,-3932.793,3625.805,327.7227,0,0,0,0,100,0),
+(@PATH,13,-3965.984,3604.831,323.5561,0,0,0,0,100,0),
+(@PATH,14,-3994.316,3568.82,324.0004,0,0,0,0,100,0),
+(@PATH,15,-4020.807,3533.474,321.6671,0,0,0,0,100,0),
+(@PATH,16,-4017.46,3505.427,320.4171,0,0,0,0,100,0),
+(@PATH,17,-4012.915,3469.437,318.2504,0,0,0,0,100,0),
+(@PATH,18,-4008.829,3443.473,322.9727,0,0,0,0,100,0),
+(@PATH,19,-3987.128,3409.836,320.0283,0,0,0,0,100,0),
+(@PATH,20,-3956.549,3381.68,323.2782,0,0,0,0,100,0),
+(@PATH,21,-3917.093,3373.904,324.1949,0,0,0,0,100,0),
+(@PATH,22,-3879.394,3373.863,331.1393,0,0,0,0,100,0),
+(@PATH,23,-3846.889,3379.781,335.556,0,0,0,0,100,0),
+(@PATH,24,-3815.72,3383.242,336.0282,0,0,0,0,100,0),
+(@PATH,25,-3785.73,3387.147,333.7504,0,0,0,0,100,0),
+(@PATH,26,-3745.971,3412.045,331.7226,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D80000384658 .go -3712.47 3449.822 329.5283
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132567;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3800.044,`position_y`=3329.872,`position_z`=342.0992 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3800.044,3329.872,342.0992,0,0,0,0,100,0),
+(@PATH,2,-3820.034,3366.339,344.5435,0,0,0,0,100,0),
+(@PATH,3,-3848.72,3382.158,349.6544,0,0,0,0,100,0),
+(@PATH,4,-3866.445,3399.19,356.9323,0,0,0,0,100,0),
+(@PATH,5,-3892.608,3428.64,364.4878,0,0,0,0,100,0),
+(@PATH,6,-3875.494,3457.741,364.4878,0,0,0,0,100,0),
+(@PATH,7,-3846.305,3462.793,364.4878,0,0,0,0,100,0),
+(@PATH,8,-3835.524,3455.278,363.4879,0,0,0,0,100,0),
+(@PATH,9,-3826.342,3432.901,363.4879,0,0,0,0,100,0),
+(@PATH,10,-3833.529,3403.362,349.9602,0,0,0,0,100,0),
+(@PATH,11,-3849.905,3384.756,348.2379,0,0,0,0,100,0),
+(@PATH,12,-3869.018,3342.68,345.9046,0,0,0,0,100,0),
+(@PATH,13,-3866.873,3308.942,344.5435,0,0,0,0,100,0),
+(@PATH,14,-3833.351,3299.779,344.5435,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D80000389A53 .go -3800.044 3329.872 342.0992
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132557;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4027.127,`position_y`=3236.136,`position_z`=342.3879 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-4027.127,3236.136,342.3879,0,0,0,0,100,0),
+(@PATH,2,-4050.725,3247.826,342.3879,0,0,0,0,100,0),
+(@PATH,3,-4074.902,3254.402,339.4433,0,0,0,0,100,0),
+(@PATH,4,-4099.817,3279.177,340.388,0,0,0,0,100,0),
+(@PATH,5,-4090.614,3300.566,342.3879,0,0,0,0,100,0),
+(@PATH,6,-4066.256,3322.034,342.3879,0,0,0,0,100,0),
+(@PATH,7,-4034.025,3315.976,340.4436,0,0,0,0,100,0),
+(@PATH,8,-4000.627,3300.234,340.7216,0,0,0,0,100,0),
+(@PATH,9,-3962.779,3269.458,342.3879,0,0,0,0,100,0),
+(@PATH,10,-3932.333,3241.691,350.61,0,0,0,0,100,0),
+(@PATH,11,-3924.384,3214.195,353.11,0,0,0,0,100,0),
+(@PATH,12,-3948.188,3192.575,352.915,0,0,0,0,100,0),
+(@PATH,13,-3975.502,3190.098,351.4991,0,0,0,0,100,0),
+(@PATH,14,-4002.08,3217.684,348.0821,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D800003947B4 .go -4027.127 3236.136 342.3879
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 86099;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3617.656,`position_y`=3768.498,`position_z`=321.4414 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3617.656,3768.498,321.4414,0,0,0,0,100,0),
+(@PATH,2,-3621.72,3753.039,319.025,0,0,0,0,100,0),
+(@PATH,3,-3619.644,3727.897,309.8305,0,0,0,0,100,0),
+(@PATH,4,-3627.178,3681.108,308.5527,0,0,0,0,100,0),
+(@PATH,5,-3656.429,3650.599,304.2195,0,0,0,0,100,0),
+(@PATH,6,-3696.808,3638.603,303.0528,0,0,0,0,100,0),
+(@PATH,7,-3734.566,3654.597,302.6361,0,0,0,0,100,0),
+(@PATH,8,-3766.324,3670.245,301.1362,0,0,0,0,100,0),
+(@PATH,9,-3799.271,3684.971,303.1361,0,0,0,0,100,0),
+(@PATH,10,-3832.15,3705.031,308.4691,0,0,0,0,100,0),
+(@PATH,11,-3868.131,3721.502,318.4415,0,0,0,0,100,0),
+(@PATH,12,-3909.399,3735.214,328.5527,0,0,0,0,100,0),
+(@PATH,13,-3931.017,3766.784,334.3581,0,0,0,0,100,0),
+(@PATH,14,-3917.445,3807.967,334.4695,0,0,0,0,100,0),
+(@PATH,15,-3890.349,3823.759,327.1638,0,0,0,0,100,0),
+(@PATH,16,-3849.03,3819.391,319.025,0,0,0,0,100,0),
+(@PATH,17,-3822.998,3781.306,314.3583,0,0,0,0,100,0),
+(@PATH,18,-3792.191,3762.3,302.9972,0,0,0,0,100,0),
+(@PATH,19,-3753.88,3777.921,300.1917,0,0,0,0,100,0),
+(@PATH,20,-3738.559,3813.297,304.1084,0,0,0,0,100,0),
+(@PATH,21,-3707.912,3826.754,304.9972,0,0,0,0,100,0),
+(@PATH,22,-3666.76,3801.158,304.9972,0,0,0,0,100,0),
+(@PATH,23,-3632.452,3787.691,313.8025,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D800003950AB .go -3617.656 3768.498 321.4414
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132562;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3740.354,`position_y`=3781.2,`position_z`=318.1236 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3740.354,3781.2,318.1236,0,0,0,0,100,0),
+(@PATH,2,-3733.342,3800.063,318.5958,0,0,0,0,100,0),
+(@PATH,3,-3700.761,3815.838,314.9293,0,0,0,0,100,0),
+(@PATH,4,-3684.377,3790.57,311.3183,0,0,0,0,100,0),
+(@PATH,5,-3673.302,3755.679,311.3183,0,0,0,0,100,0),
+(@PATH,6,-3654.191,3733.858,317.7345,0,0,0,0,100,0),
+(@PATH,7,-3627.812,3735.349,321.0125,0,0,0,0,100,0),
+(@PATH,8,-3620.85,3745.508,318.7352,0,0,0,0,100,0),
+(@PATH,9,-3616.733,3766.586,318.0404,0,0,0,0,100,0),
+(@PATH,10,-3633.59,3782.3,318.1792,0,0,0,0,100,0),
+(@PATH,11,-3666.707,3773.215,316.2348,0,0,0,0,100,0),
+(@PATH,12,-3699.968,3755.006,317.2626,0,0,0,0,100,0),
+(@PATH,13,-3728.831,3766.574,318.1514,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D800003955EA .go -3740.354 3781.2 318.1236
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132558;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3889.631,`position_y`=3647.446,`position_z`=379.841 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3889.631,3647.446,379.841,0,0,0,0,100,0),
+(@PATH,2,-3867.698,3661.597,374.2303,0,0,0,0,100,0),
+(@PATH,3,-3829.105,3657.187,352.5638,0,0,0,0,100,0),
+(@PATH,4,-3781.735,3660.671,339.2026,0,0,0,0,100,0),
+(@PATH,5,-3733.907,3659.38,326.0082,0,0,0,0,100,0),
+(@PATH,6,-3700.169,3654.304,306.0638,0,0,0,0,100,0),
+(@PATH,7,-3666.533,3646.272,305.6747,0,0,0,0,100,0),
+(@PATH,8,-3633.503,3666.819,305.6747,0,0,0,0,100,0),
+(@PATH,9,-3615.833,3700.001,308.675,0,0,0,0,100,0),
+(@PATH,10,-3612.93,3733.396,310.8136,0,0,0,0,100,0),
+(@PATH,11,-3620.4,3766.181,312.2859,0,0,0,0,100,0),
+(@PATH,12,-3633.891,3791.979,308.6469,0,0,0,0,100,0),
+(@PATH,13,-3672.738,3787.063,303.5358,0,0,0,0,100,0),
+(@PATH,14,-3699.661,3766.161,308.3416,0,0,0,0,100,0),
+(@PATH,15,-3722.004,3734.262,307.3692,0,0,0,0,100,0),
+(@PATH,16,-3758.981,3700.716,303.9804,0,0,0,0,100,0),
+(@PATH,17,-3780.951,3669.244,307.3969,0,0,0,0,100,0),
+(@PATH,18,-3823.718,3662.368,306.5638,0,0,0,0,100,0),
+(@PATH,19,-3855.767,3696.363,309.2023,0,0,0,0,100,0),
+(@PATH,20,-3888.813,3716.222,313.5079,0,0,0,0,100,0),
+(@PATH,21,-3922.735,3736.949,316.8968,0,0,0,0,100,0),
+(@PATH,22,-3932.095,3764.875,321.5081,0,0,0,0,100,0),
+(@PATH,23,-3910.485,3799.088,334.758,0,0,0,0,100,0),
+(@PATH,24,-3868.099,3812.761,342.1745,0,0,0,0,100,0),
+(@PATH,25,-3842.411,3793.997,354.0078,0,0,0,0,100,0),
+(@PATH,26,-3820.221,3754.304,346.8967,0,0,0,0,100,0),
+(@PATH,27,-3833.732,3709.265,337.0357,0,0,0,0,100,0),
+(@PATH,28,-3851.1,3670.116,337.0357,0,0,0,0,100,0),
+(@PATH,29,-3880.107,3634.346,337.0357,0,0,0,0,100,0),
+(@PATH,30,-3922.091,3616.533,325.3135,0,0,0,0,100,0),
+(@PATH,31,-3965.485,3605.971,311.0912,0,0,0,0,100,0),
+(@PATH,32,-3990.204,3580.163,305.9802,0,0,0,0,100,0),
+(@PATH,33,-4011.796,3540.719,305.9802,0,0,0,0,100,0),
+(@PATH,34,-4011.68,3508.126,305.9802,0,0,0,0,100,0),
+(@PATH,35,-3987.115,3486.282,305.9802,0,0,0,0,100,0),
+(@PATH,36,-3945.38,3469.3,318.369,0,0,0,0,100,0),
+(@PATH,37,-3915.382,3492.937,334.7857,0,0,0,0,100,0),
+(@PATH,38,-3903.774,3531.629,345.4246,0,0,0,0,100,0),
+(@PATH,39,-3920.156,3565.949,365.369,0,0,0,0,100,0),
+(@PATH,40,-3933.356,3594.115,376.4244,0,0,0,0,100,0),
+(@PATH,41,-3912.393,3631.522,376.4244,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D8000039560D .go -3889.631 3647.446 379.841
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 86116;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3876.833,`position_y`=3314.512,`position_z`=379.5609 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3876.833,3314.512,379.5609,0,0,0,0,100,0),
+(@PATH,2,-3886.097,3325.345,379.5609,0,0,0,0,100,0),
+(@PATH,3,-3911.672,3347.092,379.5609,0,0,0,0,100,0),
+(@PATH,4,-3945.02,3355.806,379.5609,0,0,0,0,100,0),
+(@PATH,5,-3972.972,3374.654,379.5609,0,0,0,0,100,0),
+(@PATH,6,-4009.497,3393.97,379.5609,0,0,0,0,100,0),
+(@PATH,7,-4038.995,3394.833,379.5609,0,0,0,0,100,0),
+(@PATH,8,-4084.306,3383.78,379.5609,0,0,0,0,100,0),
+(@PATH,9,-4114.101,3348.398,379.5609,0,0,0,0,100,0),
+(@PATH,10,-4121.285,3315.157,359.6998,0,0,0,0,100,0),
+(@PATH,11,-4133.357,3269.041,344.6721,0,0,0,0,100,0),
+(@PATH,12,-4127.872,3224.243,336.2553,0,0,0,0,100,0),
+(@PATH,13,-4088.58,3195.296,338.8943,0,0,0,0,100,0),
+(@PATH,14,-4068.468,3153.282,341.0054,0,0,0,0,100,0),
+(@PATH,15,-4070.876,3123.454,342.6997,0,0,0,0,100,0),
+(@PATH,16,-4097.591,3094.782,347.3387,0,0,0,0,100,0),
+(@PATH,17,-4122.666,3063.981,348.1721,0,0,0,0,100,0),
+(@PATH,18,-4162.276,3056.197,349.6165,0,0,0,0,100,0),
+(@PATH,19,-4202.113,3083.117,358.5054,0,0,0,0,100,0),
+(@PATH,20,-4214.216,3116.871,357.2553,0,0,0,0,100,0),
+(@PATH,21,-4193.599,3157.323,355.2832,0,0,0,0,100,0),
+(@PATH,22,-4155.592,3185.045,347.0332,0,0,0,0,100,0),
+(@PATH,23,-4111.882,3181.491,345.0887,0,0,0,0,100,0),
+(@PATH,24,-4062.104,3179.68,348.9498,0,0,0,0,100,0),
+(@PATH,25,-4020.427,3179.234,361.4219,0,0,0,0,100,0),
+(@PATH,26,-3982.672,3180.415,363.0051,0,0,0,0,100,0),
+(@PATH,27,-3951.448,3159.866,363.561,0,0,0,0,100,0),
+(@PATH,28,-3937.524,3133.349,370.6444,0,0,0,0,100,0),
+(@PATH,29,-3931.404,3105.327,376.0884,0,0,0,0,100,0),
+(@PATH,30,-3933.873,3066.744,379.5609,0,0,0,0,100,0),
+(@PATH,31,-3940.64,3017.597,385.5607,0,0,0,0,100,0),
+(@PATH,32,-3962.612,2986.642,387.3109,0,0,0,0,100,0),
+(@PATH,33,-3987.704,2976.624,388.1721,0,0,0,0,100,0),
+(@PATH,34,-4028.228,2974.074,379.5609,0,0,0,0,100,0),
+(@PATH,35,-4068.643,2997.102,369.2554,0,0,0,0,100,0),
+(@PATH,36,-4093.04,3026.769,367.2279,0,0,0,0,100,0),
+(@PATH,37,-4081.151,3058.765,357.4498,0,0,0,0,100,0),
+(@PATH,38,-4050.25,3086.566,362.8388,0,0,0,0,100,0),
+(@PATH,39,-4009.628,3109.691,361.9498,0,0,0,0,100,0),
+(@PATH,40,-3962.259,3115.2,365.2273,0,0,0,0,100,0),
+(@PATH,41,-3931.493,3131.271,371.1159,0,0,0,0,100,0),
+(@PATH,42,-3901.853,3157.168,376.1166,0,0,0,0,100,0),
+(@PATH,43,-3882.195,3190.008,374.5609,0,0,0,0,100,0),
+(@PATH,44,-3907.507,3233.704,369.0056,0,0,0,0,100,0),
+(@PATH,45,-3930.386,3264.117,346.8111,0,0,0,0,100,0),
+(@PATH,46,-3952.398,3305.412,329.4775,0,0,0,0,100,0),
+(@PATH,47,-3949.958,3344.656,317.033,0,0,0,0,100,0),
+(@PATH,48,-3933.078,3390.3,316.2833,0,0,0,0,100,0),
+(@PATH,49,-3924.384,3438.506,320.0887,0,0,0,0,100,0),
+(@PATH,50,-3908.001,3480.083,321.7832,0,0,0,0,100,0),
+(@PATH,51,-3881.964,3513.231,323.2551,0,0,0,0,100,0),
+(@PATH,52,-3844.591,3536.472,335.8942,0,0,0,0,100,0),
+(@PATH,53,-3822.905,3535.266,339.8388,0,0,0,0,100,0),
+(@PATH,54,-3792.544,3507.122,337.1997,0,0,0,0,100,0),
+(@PATH,55,-3760.572,3487.132,351.5052,0,0,0,0,100,0),
+(@PATH,56,-3744.966,3453.418,364.5887,0,0,0,0,100,0),
+(@PATH,57,-3744.307,3416.908,367.4221,0,0,0,0,100,0),
+(@PATH,58,-3740.536,3368.536,367.0887,0,0,0,0,100,0),
+(@PATH,59,-3734.622,3321.623,379.5609,0,0,0,0,100,0),
+(@PATH,60,-3731.181,3282.171,379.5609,0,0,0,0,100,0),
+(@PATH,61,-3694.877,3249.842,379.5609,0,0,0,0,100,0),
+(@PATH,62,-3655.565,3261.063,379.5609,0,0,0,0,100,0),
+(@PATH,63,-3641.669,3284.071,367.7832,0,0,0,0,100,0),
+(@PATH,64,-3641.303,3315.587,364.9221,0,0,0,0,100,0),
+(@PATH,65,-3654.031,3343.666,369.4221,0,0,0,0,100,0),
+(@PATH,66,-3680.551,3352.762,367.6165,0,0,0,0,100,0),
+(@PATH,67,-3714.793,3358.927,363.9776,0,0,0,0,100,0),
+(@PATH,68,-3753.792,3357.834,379.5609,0,0,0,0,100,0),
+(@PATH,69,-3787.513,3323.292,384.7554,0,0,0,0,100,0),
+(@PATH,70,-3817.402,3284.448,390.9497,0,0,0,0,100,0),
+(@PATH,71,-3855.805,3289.496,379.5609,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D80000395FE7 .go -3876.833 3314.512 379.5609
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132564;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3811.575,`position_y`=3318.012,`position_z`=350.0489 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3811.575,3318.012,350.0489,0,0,0,0,100,0),
+(@PATH,2,-3839.544,3360.737,346.5213,0,0,0,0,100,0),
+(@PATH,3,-3844.532,3382.859,327.4657,0,0,0,0,100,0),
+(@PATH,4,-3824.744,3421.51,330.4099,0,0,0,0,100,0),
+(@PATH,5,-3815.863,3458.307,331.2989,0,0,0,0,100,0),
+(@PATH,6,-3810.683,3497.717,331.2989,0,0,0,0,100,0),
+(@PATH,7,-3813.658,3530.778,320.3824,0,0,0,0,100,0),
+(@PATH,8,-3816.187,3562.303,309.2156,0,0,0,0,100,0),
+(@PATH,9,-3807.29,3592.113,304.2435,0,0,0,0,100,0),
+(@PATH,10,-3785.319,3618.569,304.2435,0,0,0,0,100,0),
+(@PATH,11,-3745.147,3632.447,304.2435,0,0,0,0,100,0),
+(@PATH,12,-3709.023,3627.542,304.2435,0,0,0,0,100,0),
+(@PATH,13,-3675.768,3604.466,304.2435,0,0,0,0,100,0),
+(@PATH,14,-3671.146,3576.667,304.2435,0,0,0,0,100,0),
+(@PATH,15,-3681.459,3543.929,304.2435,0,0,0,0,100,0),
+(@PATH,16,-3683.946,3516.303,304.2435,0,0,0,0,100,0),
+(@PATH,17,-3690.97,3482.81,304.2435,0,0,0,0,100,0),
+(@PATH,18,-3718.609,3446.152,304.2435,0,0,0,0,100,0),
+(@PATH,19,-3752.872,3415.494,304.2435,0,0,0,0,100,0),
+(@PATH,20,-3787.441,3393.248,306.6046,0,0,0,0,100,0),
+(@PATH,21,-3819.708,3391.489,304.2435,0,0,0,0,100,0),
+(@PATH,22,-3843.183,3389.003,306.9379,0,0,0,0,100,0),
+(@PATH,23,-3878.647,3381.219,308.4658,0,0,0,0,100,0),
+(@PATH,24,-3917.604,3385.046,313.9101,0,0,0,0,100,0),
+(@PATH,25,-3948.888,3388.875,314.6601,0,0,0,0,100,0),
+(@PATH,26,-3981.859,3411.407,311.4101,0,0,0,0,100,0),
+(@PATH,27,-4006.548,3451.265,312.8823,0,0,0,0,100,0),
+(@PATH,28,-4013.026,3483.869,313.6044,0,0,0,0,100,0),
+(@PATH,29,-4007.704,3522.086,312.9934,0,0,0,0,100,0),
+(@PATH,30,-3979.958,3551.535,309.1602,0,0,0,0,100,0),
+(@PATH,31,-3949.836,3557.036,311.2711,0,0,0,0,100,0),
+(@PATH,32,-3916.583,3556.782,310.1602,0,0,0,0,100,0),
+(@PATH,33,-3878.491,3547.684,308.91,0,0,0,0,100,0),
+(@PATH,34,-3848.358,3529.306,308.3823,0,0,0,0,100,0),
+(@PATH,35,-3810.661,3519.969,310.9657,0,0,0,0,100,0),
+(@PATH,36,-3788.128,3509.623,314.0764,0,0,0,0,100,0),
+(@PATH,37,-3746.377,3484.105,314.4373,0,0,0,0,100,0),
+(@PATH,38,-3720.415,3453.266,311.1879,0,0,0,0,100,0),
+(@PATH,39,-3711.39,3414.835,316.1873,0,0,0,0,100,0),
+(@PATH,40,-3695.241,3382.754,310.2711,0,0,0,0,100,0),
+(@PATH,41,-3690.628,3349.262,309.5486,0,0,0,0,100,0),
+(@PATH,42,-3707.501,3320.029,317.0488,0,0,0,0,100,0),
+(@PATH,43,-3743.783,3305.247,330.9655,0,0,0,0,100,0),
+(@PATH,44,-3787.108,3314.23,339.9933,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D80000397863 .go -3811.575 3318.012 350.0489
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132554;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4096.788,`position_y`=3033.959,`position_z`=360.6063 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-4096.788,3033.959,360.6063,0,0,0,0,100,0),
+(@PATH,2,-4104.214,3041.3,359.5785,0,0,0,0,100,0),
+(@PATH,3,-4125.444,3052.258,358.9676,0,0,0,0,100,0),
+(@PATH,4,-4159.867,3033.596,358.9952,0,0,0,0,100,0),
+(@PATH,5,-4186.089,3020.478,361.662,0,0,0,0,100,0),
+(@PATH,6,-4216.206,3023.308,363.8009,0,0,0,0,100,0),
+(@PATH,7,-4219.776,3049.481,362.9398,0,0,0,0,100,0),
+(@PATH,8,-4205.974,3076.206,360.8285,0,0,0,0,100,0),
+(@PATH,9,-4175.602,3071.705,356.4121,0,0,0,0,100,0),
+(@PATH,10,-4149.558,3039.067,356.4121,0,0,0,0,100,0),
+(@PATH,11,-4139.287,3016.167,361.1343,0,0,0,0,100,0),
+(@PATH,12,-4115.834,2995.427,363.3842,0,0,0,0,100,0),
+(@PATH,13,-4089.456,3009.014,362.3842,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D80000397B33 .go -4096.788 3033.959 360.6063
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 83238;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3740.354,`position_y`=3781.2,`position_z`=318.1236 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3740.354,3781.2,318.1236,0,0,0,0,100,0),
+(@PATH,2,-3733.342,3800.063,318.5958,0,0,0,0,100,0),
+(@PATH,3,-3700.761,3815.838,314.9293,0,0,0,0,100,0),
+(@PATH,4,-3684.377,3790.57,311.3183,0,0,0,0,100,0),
+(@PATH,5,-3673.302,3755.679,311.3183,0,0,0,0,100,0),
+(@PATH,6,-3654.191,3733.858,317.7345,0,0,0,0,100,0),
+(@PATH,7,-3627.812,3735.349,321.0125,0,0,0,0,100,0),
+(@PATH,8,-3620.85,3745.508,318.7352,0,0,0,0,100,0),
+(@PATH,9,-3616.733,3766.586,318.0404,0,0,0,0,100,0),
+(@PATH,10,-3633.59,3782.3,318.1792,0,0,0,0,100,0),
+(@PATH,11,-3666.707,3773.215,316.2348,0,0,0,0,100,0),
+(@PATH,12,-3699.968,3755.006,317.2626,0,0,0,0,100,0),
+(@PATH,13,-3728.831,3766.574,318.1514,0,0,0,0,100,0);
+-- 0x1C393042401682C00000D800003989DF .go -3740.354 3781.2 318.1236
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132566;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3671.494,`position_y`=3402.642,`position_z`=324.4617 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3671.494,3402.642,324.4617,0,0,0,0,100,0),
+(@PATH,2,-3675.101,3400.796,324.5731,0,0,0,0,100,0),
+(@PATH,3,-3695.996,3378.851,323.7954,0,0,0,0,100,0),
+(@PATH,4,-3677.757,3333.374,329.4622,0,0,0,0,100,0),
+(@PATH,5,-3671.793,3306.185,341.9066,0,0,0,0,100,0),
+(@PATH,6,-3691.331,3277.393,341.9066,0,0,0,0,100,0),
+(@PATH,7,-3714.71,3287.554,341.9066,0,0,0,0,100,0),
+(@PATH,8,-3715.633,3314.267,336.4897,0,0,0,0,100,0),
+(@PATH,9,-3681.489,3340.859,327.934,0,0,0,0,100,0),
+(@PATH,10,-3648.484,3360.056,326.1562,0,0,0,0,100,0),
+(@PATH,11,-3641.23,3384.09,325.4897,0,0,0,0,100,0),
+(@PATH,12,-3655.433,3406.725,325.0451,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE000039182E .go -3671.494 3402.642 324.4617
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132556;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4209.313,`position_y`=3165.873,`position_z`=345.6776 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-4209.313,3165.873,345.6776,0,0,0,0,100,0),
+(@PATH,2,-4209.917,3166.669,345.6776,0,0,0,0,100,0),
+(@PATH,3,-4214.472,3180.67,347.2502,0,0,0,0,100,0),
+(@PATH,4,-4216.52,3213.613,345.6775,0,0,0,0,100,0),
+(@PATH,5,-4208.682,3255.884,339.0109,0,0,0,0,100,0),
+(@PATH,6,-4189.062,3300.134,333.0109,0,0,0,0,100,0),
+(@PATH,7,-4149.259,3324.875,328.7887,0,0,0,0,100,0),
+(@PATH,8,-4108.452,3350.17,317.011,0,0,0,0,100,0),
+(@PATH,9,-4062.702,3352.578,312.0665,0,0,0,0,100,0),
+(@PATH,10,-4014.43,3348.026,315.1498,0,0,0,0,100,0),
+(@PATH,11,-3986.476,3375.022,322.1496,0,0,0,0,100,0),
+(@PATH,12,-3981.146,3423.131,315.4276,0,0,0,0,100,0),
+(@PATH,13,-3984.354,3463.035,318.9552,0,0,0,0,100,0),
+(@PATH,14,-3983.076,3512.558,312.2053,0,0,0,0,100,0),
+(@PATH,15,-3966.213,3540.754,323.3442,0,0,0,0,100,0),
+(@PATH,16,-3949.22,3584.559,328.372,0,0,0,0,100,0),
+(@PATH,17,-3913.326,3616.715,336.8163,0,0,0,0,100,0),
+(@PATH,18,-3871.808,3634.682,342.0666,0,0,0,0,100,0),
+(@PATH,19,-3845.71,3666.634,355.0107,0,0,0,0,100,0),
+(@PATH,20,-3851.377,3715.548,351.7607,0,0,0,0,100,0),
+(@PATH,21,-3821.307,3750.763,351.2052,0,0,0,0,100,0),
+(@PATH,22,-3795.161,3777.228,334.7328,0,0,0,0,100,0),
+(@PATH,23,-3763.429,3800.694,324.3996,0,0,0,0,100,0),
+(@PATH,24,-3732.729,3778.102,316.9553,0,0,0,0,100,0),
+(@PATH,25,-3699.662,3753.815,315.6498,0,0,0,0,100,0),
+(@PATH,26,-3666.87,3741.209,315.7607,0,0,0,0,100,0),
+(@PATH,27,-3634.06,3717.237,319.2329,0,0,0,0,100,0),
+(@PATH,28,-3613.867,3678.084,317.8165,0,0,0,0,100,0),
+(@PATH,29,-3622.779,3632.821,322.9277,0,0,0,0,100,0),
+(@PATH,30,-3620.368,3590.816,320.0942,0,0,0,0,100,0),
+(@PATH,31,-3625.737,3551.353,323.3442,0,0,0,0,100,0),
+(@PATH,32,-3626.56,3508.485,328.3718,0,0,0,0,100,0),
+(@PATH,33,-3652.823,3477.152,326.2332,0,0,0,0,100,0),
+(@PATH,34,-3666.577,3433.208,328.844,0,0,0,0,100,0),
+(@PATH,35,-3689.016,3394.729,323.7608,0,0,0,0,100,0),
+(@PATH,36,-3716.738,3363.748,323.2885,0,0,0,0,100,0),
+(@PATH,37,-3754.879,3351.833,332.8161,0,0,0,0,100,0),
+(@PATH,38,-3795.422,3366.06,336.0938,0,0,0,0,100,0),
+(@PATH,39,-3839.274,3378.524,336.0663,0,0,0,0,100,0),
+(@PATH,40,-3884.272,3383.12,331.8162,0,0,0,0,100,0),
+(@PATH,41,-3923.974,3361.845,329.0664,0,0,0,0,100,0),
+(@PATH,42,-3938.367,3317.121,327.0108,0,0,0,0,100,0),
+(@PATH,43,-3970.304,3289.182,332.4276,0,0,0,0,100,0),
+(@PATH,44,-4001.49,3256,340.0942,0,0,0,0,100,0),
+(@PATH,45,-4017.281,3211.053,337.8997,0,0,0,0,100,0),
+(@PATH,46,-4034.001,3168.051,336.3162,0,0,0,0,100,0),
+(@PATH,47,-4060.109,3128.304,345.6775,0,0,0,0,100,0),
+(@PATH,48,-4089.788,3088.067,342.4553,0,0,0,0,100,0),
+(@PATH,49,-4130.021,3082.164,339.8998,0,0,0,0,100,0),
+(@PATH,50,-4161.369,3103.56,345.6775,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE0000391BB1 .go -4209.313 3165.873 345.6776
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132565;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3700.187,`position_y`=3268.531,`position_z`=332.5694 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3700.187,3268.531,332.5694,0,0,0,0,100,0),
+(@PATH,2,-3712.445,3309.058,332.5694,0,0,0,0,100,0),
+(@PATH,3,-3731.05,3347.229,317.6805,0,0,0,0,100,0),
+(@PATH,4,-3716.804,3386.164,312.5971,0,0,0,0,100,0),
+(@PATH,5,-3714.796,3416.085,310.3194,0,0,0,0,100,0),
+(@PATH,6,-3726.431,3460.464,311.0414,0,0,0,0,100,0),
+(@PATH,7,-3753.865,3482.538,314.9584,0,0,0,0,100,0),
+(@PATH,8,-3788.998,3508.942,314.9305,0,0,0,0,100,0),
+(@PATH,9,-3824.704,3524.107,309.9028,0,0,0,0,100,0),
+(@PATH,10,-3848.736,3512.536,316.0972,0,0,0,0,100,0),
+(@PATH,11,-3888.76,3485.173,326.2916,0,0,0,0,100,0),
+(@PATH,12,-3912.334,3450.138,334.236,0,0,0,0,100,0),
+(@PATH,13,-3915.319,3410.722,336.7916,0,0,0,0,100,0),
+(@PATH,14,-3881.387,3385.134,337.5138,0,0,0,0,100,0),
+(@PATH,15,-3847.486,3374.93,332.5694,0,0,0,0,100,0),
+(@PATH,16,-3805.386,3361.039,326.6804,0,0,0,0,100,0),
+(@PATH,17,-3773.776,3364.174,321.6806,0,0,0,0,100,0),
+(@PATH,18,-3746.576,3378.93,320.8195,0,0,0,0,100,0),
+(@PATH,19,-3711.678,3399.851,324.7638,0,0,0,0,100,0),
+(@PATH,20,-3677.318,3417.94,324.6248,0,0,0,0,100,0),
+(@PATH,21,-3633.113,3400.247,323.4301,0,0,0,0,100,0),
+(@PATH,22,-3626.553,3376.975,323.0689,0,0,0,0,100,0),
+(@PATH,23,-3616.881,3334.872,332.5694,0,0,0,0,100,0),
+(@PATH,24,-3627.39,3296.557,332.5694,0,0,0,0,100,0),
+(@PATH,25,-3664.143,3265.263,332.5694,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE0000391D86 .go -3700.187 3268.531 332.5694
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132555;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3910.414,`position_y`=2965.875,`position_z`=390.4576 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3910.414,2965.875,390.4576,0,0,0,0,100,0),
+(@PATH,2,-3933.329,2966.657,390.4576,0,0,0,0,100,0),
+(@PATH,3,-3954.885,2975.502,382.291,0,0,0,0,100,0),
+(@PATH,4,-3963.788,3013.65,381.3741,0,0,0,0,100,0),
+(@PATH,5,-3969.197,3050.419,375.9853,0,0,0,0,100,0),
+(@PATH,6,-3984.531,3090.169,372.0131,0,0,0,0,100,0),
+(@PATH,7,-3972.277,3135.571,367.5407,0,0,0,0,100,0),
+(@PATH,8,-3947.474,3178.757,362.0132,0,0,0,0,100,0),
+(@PATH,9,-3930.654,3222.331,346.0132,0,0,0,0,100,0),
+(@PATH,10,-3944.785,3269.054,337.6526,0,0,0,0,100,0),
+(@PATH,11,-3988.984,3283.474,328.0133,0,0,0,0,100,0),
+(@PATH,12,-4020.175,3305.831,332.7634,0,0,0,0,100,0),
+(@PATH,13,-4043.304,3338.783,339.9855,0,0,0,0,100,0),
+(@PATH,14,-4076.572,3375.872,343.2631,0,0,0,0,100,0),
+(@PATH,15,-4067.485,3424.765,347.1243,0,0,0,0,100,0),
+(@PATH,16,-4037.804,3458.173,351.3187,0,0,0,0,100,0),
+(@PATH,17,-4007.092,3452.119,341.2909,0,0,0,0,100,0),
+(@PATH,18,-3969.205,3437.343,334.1797,0,0,0,0,100,0),
+(@PATH,19,-3932.203,3431.731,332.2077,0,0,0,0,100,0),
+(@PATH,20,-3896.705,3421.381,327.7629,0,0,0,0,100,0),
+(@PATH,21,-3871.978,3389.38,331.041,0,0,0,0,100,0),
+(@PATH,22,-3827.513,3390.714,332.2075,0,0,0,0,100,0),
+(@PATH,23,-3802.128,3368.306,336.7633,0,0,0,0,100,0),
+(@PATH,24,-3790.874,3332.89,343.6242,0,0,0,0,100,0),
+(@PATH,25,-3808.656,3291.044,352.0409,0,0,0,0,100,0),
+(@PATH,26,-3817.205,3243.875,361.9853,0,0,0,0,100,0),
+(@PATH,27,-3841.924,3206.913,365.2077,0,0,0,0,100,0),
+(@PATH,28,-3882.906,3183.564,363.3185,0,0,0,0,100,0),
+(@PATH,29,-3903.045,3142.097,372.3742,0,0,0,0,100,0),
+(@PATH,30,-3883.694,3111.339,382.5131,0,0,0,0,100,0),
+(@PATH,31,-3856.857,3076.734,390.4576,0,0,0,0,100,0),
+(@PATH,32,-3843.808,3035.878,390.4576,0,0,0,0,100,0),
+(@PATH,33,-3833.452,2993.256,390.4576,0,0,0,0,100,0),
+(@PATH,34,-3866.545,2965.673,390.4576,0,0,0,0,100,0),
+(@PATH,35,-3910.414,2965.875,390.4576,0,0,0,0,100,0),
+(@PATH,36,-3933.329,2966.657,390.4576,0,0,0,0,100,0),
+(@PATH,37,-3954.885,2975.502,382.291,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE0000393AF6 .go -3910.414 2965.875 390.4576
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 132560;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4210.051,`position_y`=3036.035,`position_z`=359.2715 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-4210.051,3036.035,359.2715,0,0,0,0,100,0),
+(@PATH,2,-4197.814,3024.344,366.188,0,0,0,0,100,0),
+(@PATH,3,-4166.595,3015.782,353.327,0,0,0,0,100,0),
+(@PATH,4,-4119.361,3000.518,350.3828,0,0,0,0,100,0),
+(@PATH,5,-4078.058,3004.437,346.7713,0,0,0,0,100,0),
+(@PATH,6,-4047.495,3033.212,346.8269,0,0,0,0,100,0),
+(@PATH,7,-4037.817,3075.937,350.9382,0,0,0,0,100,0),
+(@PATH,8,-4037.221,3122.487,345.1326,0,0,0,0,100,0),
+(@PATH,9,-4020.077,3150.257,329.8825,0,0,0,0,100,0),
+(@PATH,10,-3983.114,3172.777,330.1326,0,0,0,0,100,0),
+(@PATH,11,-3945.796,3163.176,338.4935,0,0,0,0,100,0),
+(@PATH,12,-3906.744,3138.077,347.0493,0,0,0,0,100,0),
+(@PATH,13,-3872.958,3116.541,357.4377,0,0,0,0,100,0),
+(@PATH,14,-3857.695,3086.127,367.6046,0,0,0,0,100,0),
+(@PATH,15,-3866.051,3043.046,372.1045,0,0,0,0,100,0),
+(@PATH,16,-3902.363,3025,374.7159,0,0,0,0,100,0),
+(@PATH,17,-3939.945,3047.438,368.138,0,0,0,0,100,0),
+(@PATH,18,-3976.81,3075.321,357.9659,0,0,0,0,100,0),
+(@PATH,19,-4015.781,3101.057,352.3272,0,0,0,0,100,0),
+(@PATH,20,-4057.297,3120.64,344.0215,0,0,0,0,100,0),
+(@PATH,21,-4093.992,3151.9,340.0216,0,0,0,0,100,0),
+(@PATH,22,-4133.575,3148.626,338.077,0,0,0,0,100,0),
+(@PATH,23,-4161.596,3113.013,348.6326,0,0,0,0,100,0),
+(@PATH,24,-4193.336,3081.118,359.2715,0,0,0,0,100,0),
+(@PATH,25,-4214.105,3060.078,359.2715,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE0000393F44 .go -4210.051 3036.035 359.2715
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 86117;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3894.564,`position_y`=3430.655,`position_z`=372.4708 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3894.564,3430.655,372.4708,0,0,0,0,100,0),
+(@PATH,2,-3857.21,3447.031,372.4708,0,0,0,0,100,0),
+(@PATH,3,-3823.56,3471.693,372.4708,0,0,0,0,100,0),
+(@PATH,4,-3784.599,3479.697,372.4708,0,0,0,0,100,0),
+(@PATH,5,-3742.468,3490.947,353.0265,0,0,0,0,100,0),
+(@PATH,6,-3709.652,3520.501,345.0263,0,0,0,0,100,0),
+(@PATH,7,-3664.314,3533.171,334.0263,0,0,0,0,100,0),
+(@PATH,8,-3616.403,3539.115,323.9706,0,0,0,0,100,0),
+(@PATH,9,-3582.801,3553.028,325.193,0,0,0,0,100,0),
+(@PATH,10,-3589.008,3587.388,329.9429,0,0,0,0,100,0),
+(@PATH,11,-3636.932,3603.025,325.1376,0,0,0,0,100,0),
+(@PATH,12,-3663.247,3624.526,321.2208,0,0,0,0,100,0),
+(@PATH,13,-3704.071,3625.825,318.6652,0,0,0,0,100,0),
+(@PATH,14,-3750.566,3629.281,322.7488,0,0,0,0,100,0),
+(@PATH,15,-3785.251,3646.629,322.5265,0,0,0,0,100,0),
+(@PATH,16,-3821.648,3660.992,332.4431,0,0,0,0,100,0),
+(@PATH,17,-3844.523,3693.082,347.1931,0,0,0,0,100,0),
+(@PATH,18,-3873.079,3712.225,349.1932,0,0,0,0,100,0),
+(@PATH,19,-3903.724,3693.448,347.4153,0,0,0,0,100,0),
+(@PATH,20,-3935.185,3680.15,346.9429,0,0,0,0,100,0),
+(@PATH,21,-3961.531,3655.501,345.2486,0,0,0,0,100,0),
+(@PATH,22,-3966.79,3606.822,348.2763,0,0,0,0,100,0),
+(@PATH,23,-3973.929,3571.161,341.0261,0,0,0,0,100,0),
+(@PATH,24,-3980.9,3522.605,335.8875,0,0,0,0,100,0),
+(@PATH,25,-4004.451,3487.919,317.9431,0,0,0,0,100,0),
+(@PATH,26,-4001.448,3441.261,334.3042,0,0,0,0,100,0),
+(@PATH,27,-3966.929,3406.75,330.5819,0,0,0,0,100,0),
+(@PATH,28,-3922.993,3396.193,351.9707,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE00003946C7 .go -3894.564 3430.655 372.4708
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 86131;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3884.442,`position_y`=3113.831,`position_z`=389.185 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3884.442,3113.831,389.185,0,0,0,0,100,0),
+(@PATH,2,-3869.677,3093.181,392.3522,0,0,0,0,100,0),
+(@PATH,3,-3876.115,3078.8,392.3522,0,0,0,0,100,0),
+(@PATH,4,-3900.006,3066.922,392.3522,0,0,0,0,100,0),
+(@PATH,5,-3934.172,3083.277,392.3522,0,0,0,0,100,0),
+(@PATH,6,-3942.406,3108.275,392.3522,0,0,0,0,100,0),
+(@PATH,7,-3955.406,3132.591,392.3522,0,0,0,0,100,0),
+(@PATH,8,-3983.802,3151.235,400.1577,0,0,0,0,100,0),
+(@PATH,9,-4018.729,3167.318,408.8244,0,0,0,0,100,0),
+(@PATH,10,-4048.56,3146.723,397.5466,0,0,0,0,100,0),
+(@PATH,11,-4034.677,3106.917,375.3246,0,0,0,0,100,0),
+(@PATH,12,-3999.241,3105.82,364.3524,0,0,0,0,100,0),
+(@PATH,13,-3976.743,3112.321,363.4634,0,0,0,0,100,0),
+(@PATH,14,-3934.065,3120.998,373.4079,0,0,0,0,100,0),
+(@PATH,15,-3904.763,3124.439,386.7683,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE0000394785 .go -3884.442 3113.831 389.185
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 83237;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3620.779,`position_y`=3761.98,`position_z`=319.1757 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3620.779,3761.98,319.1757,0,0,0,0,100,0),
+(@PATH,2,-3621.137,3762.914,319.1757,0,0,0,0,100,0),
+(@PATH,3,-3621.72,3753.039,319.025,0,0,0,0,100,0),
+(@PATH,4,-3619.644,3727.897,309.8305,0,0,0,0,100,0),
+(@PATH,5,-3627.178,3681.108,308.5527,0,0,0,0,100,0),
+(@PATH,6,-3656.429,3650.599,304.2195,0,0,0,0,100,0),
+(@PATH,7,-3696.808,3638.603,303.0528,0,0,0,0,100,0),
+(@PATH,8,-3734.566,3654.597,302.6361,0,0,0,0,100,0),
+(@PATH,9,-3766.324,3670.245,301.1362,0,0,0,0,100,0),
+(@PATH,10,-3799.271,3684.971,303.1361,0,0,0,0,100,0),
+(@PATH,11,-3832.15,3705.031,308.4691,0,0,0,0,100,0),
+(@PATH,12,-3868.131,3721.502,318.4415,0,0,0,0,100,0),
+(@PATH,13,-3909.399,3735.214,328.5527,0,0,0,0,100,0),
+(@PATH,14,-3931.017,3766.784,334.3581,0,0,0,0,100,0),
+(@PATH,15,-3917.445,3807.967,334.4695,0,0,0,0,100,0),
+(@PATH,16,-3890.349,3823.759,327.1638,0,0,0,0,100,0),
+(@PATH,17,-3849.03,3819.391,319.025,0,0,0,0,100,0),
+(@PATH,18,-3822.998,3781.306,314.3583,0,0,0,0,100,0),
+(@PATH,19,-3792.191,3762.3,302.9972,0,0,0,0,100,0),
+(@PATH,20,-3753.88,3777.921,300.1917,0,0,0,0,100,0),
+(@PATH,21,-3738.559,3813.297,304.1084,0,0,0,0,100,0),
+(@PATH,22,-3707.912,3826.754,304.9972,0,0,0,0,100,0),
+(@PATH,23,-3666.76,3801.158,304.9972,0,0,0,0,100,0),
+(@PATH,24,-3632.452,3787.691,313.8025,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE00003981C1 .go -3620.779 3761.98 319.1757
+
+-- Pathing for Monstrous Kaliri Entry: 23051 'TDB FORMAT'
+SET @NPC := 86133;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4210.051,`position_y`=3036.035,`position_z`=359.2715 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-4210.051,3036.035,359.2715,0,0,0,0,100,0),
+(@PATH,2,-4197.814,3024.344,366.188,0,0,0,0,100,0),
+(@PATH,3,-4166.595,3015.782,353.327,0,0,0,0,100,0),
+(@PATH,4,-4119.361,3000.518,350.3828,0,0,0,0,100,0),
+(@PATH,5,-4078.058,3004.437,346.7713,0,0,0,0,100,0),
+(@PATH,6,-4047.495,3033.212,346.8269,0,0,0,0,100,0),
+(@PATH,7,-4037.817,3075.937,350.9382,0,0,0,0,100,0),
+(@PATH,8,-4037.221,3122.487,345.1326,0,0,0,0,100,0),
+(@PATH,9,-4020.077,3150.257,329.8825,0,0,0,0,100,0),
+(@PATH,10,-3983.114,3172.777,330.1326,0,0,0,0,100,0),
+(@PATH,11,-3945.796,3163.176,338.4935,0,0,0,0,100,0),
+(@PATH,12,-3906.744,3138.077,347.0493,0,0,0,0,100,0),
+(@PATH,13,-3872.958,3116.541,357.4377,0,0,0,0,100,0),
+(@PATH,14,-3857.695,3086.127,367.6046,0,0,0,0,100,0),
+(@PATH,15,-3866.051,3043.046,372.1045,0,0,0,0,100,0),
+(@PATH,16,-3902.363,3025,374.7159,0,0,0,0,100,0),
+(@PATH,17,-3939.945,3047.438,368.138,0,0,0,0,100,0),
+(@PATH,18,-3976.81,3075.321,357.9659,0,0,0,0,100,0),
+(@PATH,19,-4015.781,3101.057,352.3272,0,0,0,0,100,0),
+(@PATH,20,-4057.297,3120.64,344.0215,0,0,0,0,100,0),
+(@PATH,21,-4093.992,3151.9,340.0216,0,0,0,0,100,0),
+(@PATH,22,-4133.575,3148.626,338.077,0,0,0,0,100,0),
+(@PATH,23,-4161.596,3113.013,348.6326,0,0,0,0,100,0),
+(@PATH,24,-4193.336,3081.118,359.2715,0,0,0,0,100,0),
+(@PATH,25,-4214.105,3060.078,359.2715,0,0,0,0,100,0);
+-- 0x1C393042401682C00000DE00003985F0 .go -4210.051 3036.035 359.2715
+
+UPDATE `waypoint_data` SET `move_type`=1 WHERE `id` IN (132553 * 10, 86115 * 10, 79017 * 10, 132567 * 10, 132557 * 10, 86099 * 10, 132562 * 10, 132558 * 10, 86116 * 10, 132564 * 10, 132554 * 10, 83238 * 10, 132566 * 10, 132556 * 10, 132565 * 10, 132555 * 10, 132560 * 10, 86117 * 10, 86131 * 10, 83237 * 10, 86133 * 10);
+
+-- Pathing for Bonechewer Devastator Entry: 16772 'TDB FORMAT'
+SET @NPC := 57784;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2979.448,`position_y`=3526.724,`position_z`=-5.101617 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2979.448,3526.724,-5.101617,0,0,0,0,100,0),
+(@PATH,2,-2986.465,3536.819,-4.151853,0,0,0,0,100,0),
+(@PATH,3,-2999.478,3533.506,-2.088938,0,0,0,0,100,0),
+(@PATH,4,-3001.169,3532.58,-1.651159,0,0,0,0,100,0),
+(@PATH,5,-3001.333,3532.634,-1.814128,0,0,0,0,100,0),
+(@PATH,6,-2988.259,3537.786,-3.722197,0,0,0,0,100,0),
+(@PATH,7,-2983.174,3532.755,-5.044437,0,0,0,0,100,0),
+(@PATH,8,-2984.85,3516.351,-3.515834,0,0,0,0,100,0);
+-- 0x1C393042401061000000DE0000397551 .go -2979.448 3526.724 -5.101617
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_00_world.sql
new file mode 100644
index 00000000000..c84da7b2c84
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_00_world.sql
@@ -0,0 +1,4 @@
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (6847, 7849);
+INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
+(6847, 12, 0, 0, ''),
+(7849, 12, 1, 0, '');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_01_world.sql
new file mode 100644
index 00000000000..e475f2f2f6b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_01_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_proc_event` WHERE `entry` IN (33953);
+INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`procFlags`,`procEx`,`ppmRate`,`CustomChance`,`Cooldown`) VALUES
+(33953, 0x00, 0x00, 0x00000000, 0x00000000, 0x00000000, 0x00004400, 0x00000000, 0, 0, 45);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_02_world.sql
new file mode 100644
index 00000000000..51d998b98b4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_02_world.sql
@@ -0,0 +1,25 @@
+-- Actionlist SAI
+SET @ENTRY := 6192700;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,1,0,0,0,100,0,60000,60000,0,0,12,2202,3,120000,0,0,0,8,0,0,0,4988.25,568.897,3.15542,5,"Bonfire - On Script - Summon Creature 'Greymist Coastrunner'"),
+(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,12,2202,3,120000,0,0,0,8,0,0,0,4998.76,568.891,3.21375,5,"Bonfire - On Script - Summon Creature 'Greymist Coastrunner'"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,12,2202,3,120000,0,0,0,8,0,0,0,4994.69,573.448,2.4842,5,"Bonfire - On Script - Summon Creature 'Greymist Coastrunner'"),
+(@ENTRY,9,4,0,0,0,100,0,60000,60000,0,0,12,2205,3,120000,0,0,0,8,0,0,0,4988.25,568.897,3.15542,5,"Bonfire - On Script - Summon Creature 'Greymist Warrior'"),
+(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,12,2205,3,120000,0,0,0,8,0,0,0,4998.76,568.891,3.21375,5,"Bonfire - On Script - Summon Creature 'Greymist Warrior'"),
+(@ENTRY,9,6,0,0,0,100,0,60000,60000,0,0,12,2206,3,120000,0,0,0,8,0,0,0,4998.76,568.891,3.21375,5,"Bonfire - On Script - Summon Creature 'Greymist Hunter'"),
+(@ENTRY,9,7,0,0,0,100,0,0,0,0,0,12,10323,3,120000,0,0,0,8,0,0,0,4994.69,573.448,2.4842,5,"Bonfire - On Script - Summon Creature 'Murkdeep'");
+
+-- Bonfire SAI
+SET @ENTRY := 61927;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,38,0,100,0,0,1,0,0,80,6192700,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bonfire - On Data Set 0 1 - Run Script");
+
+-- Greymist Hunter SAI
+SET @GUID := -37989;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=2206;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,6,0,100,0,0,1,0,0,45,0,1,0,0,0,0,14,48515,61927,0,0,0,0,0,"Greymist Hunter - On Just Died -Set Data 0 1");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_03_world.sql
new file mode 100644
index 00000000000..468af7088b4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_03_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_group` WHERE `id`=1 AND `spell_id`=63729;
+INSERT INTO `spell_group` (`id`, `spell_id`) VALUES
+(1, 63729);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_04_world.sql
new file mode 100644
index 00000000000..b4e68f47825
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_04_world.sql
@@ -0,0 +1,2 @@
+-- Delete wrong data for achiev Flirt With Disaster
+DELETE FROM `player_factionchange_achievement` WHERE `alliance_id`=1280 AND `horde_id`=1279;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_05_world.sql
new file mode 100644
index 00000000000..41b0a9f120d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_05_world.sql
@@ -0,0 +1,109 @@
+SET @gob:=192492;
+SET @spell:=56649;
+SET @Veranus:=30393;
+SET @Thorim:= 30390;
+SET @Jokkum:=30331;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Veranus, @Thorim, @Jokkum);
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Veranus, @Thorim, @Jokkum);
+UPDATE `creature_template` SET `ScriptName`="", `MovementType`=2 WHERE `entry`=@Jokkum;
+
+DELETE FROM `creature_template_addon` WHERE `entry`=@Veranus;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(@Veranus, 0, 0, 33554432, 0, 0, '55971');
+
+DELETE FROM `vehicle_template_accessory` where `entry` IN (@Veranus) AND `accessory_entry` in (@Thorim);
+INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`)VALUES
+(@Veranus,@Thorim,0,0,'Veranus',8,0);
+
+DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (@Veranus);
+INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
+(@Veranus, 46598, 1, 0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9900;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15,9900,0,0,0,9,0,13010,0,0,0,0,'','Show gossip if player has quest completed'),
+(15,9900,0,0,0,5,0,1119,704,0,0,0,'','Show gossip if player is at least friendly');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Jokkum AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Thorim AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Veranus AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Jokkum*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Thorim*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Thorim*100+1 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Thorim*100+2 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
+(@Jokkum, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 53, 1, @Jokkum*100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - JustSummoned - Start WP'),
+(@Jokkum, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - JustSummoned - Talk1'),
+(@Jokkum, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - JustSummoned - Add unit flag'),
+(@Jokkum, 0, 3, 0, 40, 0, 100, 0, 22, @Jokkum*100, 0, 0, 80, @Jokkum*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - On way pont 22 - Actionlist'),
+(@Jokkum*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, @spell, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Cast spell to summon'),
+(@Jokkum*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Root'),
+(@Jokkum*100, 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, 'Jokkum - ActionList - Talk2'),
+(@Jokkum*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 5, 53, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Emote'),
+(@Jokkum*100, 9, 4, 0, 0, 0, 100, 0, 24000, 24000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Thorim, 30, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 6, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @Thorim, 30, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 7, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, @Thorim, 30, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 8, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 28, 68442, 0, 0, 0, 0, 0, 19, @Thorim, 30, 0, 0, 0, 0, 0, 'Jokkum - ActionList - remove kneel'),
+(@Jokkum*100, 9, 10, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 11, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 12, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 80, @Thorim*100+1, 0, 0, 0, 0, 0, 19, @Thorim, 30, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Actionlist'),
+(@Jokkum*100, 9, 13, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 14, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, @Thorim, 30, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 15, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 16, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - talk'),
+(@Jokkum*100, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 56545, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Cast credit'),
+(@Jokkum*100, 9, 18, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 11, 50630, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Cast eject passenger'),
+(@Jokkum*100, 9, 19, 0, 0, 0, 100, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - remove root'),
+(@Jokkum*100, 9, 20, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 53, 1, @Jokkum*100+1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jokkum - ActionList - Start WP2'),
+(@Thorim*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 50, @gob, 400000, 0, 0, 0, 0, 8, 0, 0, 0, 7867.189453, -3255.752930, 853.379700, 2.321934, 'Thorim - ActionList - Spawn gob'),
+(@Thorim*100+1, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 50, 188142, 400000, 0, 0, 0, 0, 8, 0, 0, 0, 7867.189453, -3255.752930, 850.467590, 2.321934, 'Thorim - ActionList - Spawn gob'),
+(@Thorim, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 80, @Thorim*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thorim - Just created - actionlist'),
+(@Thorim*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thorim - ActionList - set run ON'),
+(@Thorim*100, 9, 1, 0, 0, 0, 100, 0, 18000, 18000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 7886.027344, -3239.358887, 849.435791, 3.769581, 'Thorim - ActionList - go to pos'),
+(@Thorim*100, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 75, 68442, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thorim - ActionList - Aura state kneel'),
+(@Thorim*100, 9, 3, 0, 0, 0, 100, 0, 460000, 460000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thorim - ActionList - Aura state kneel'),
+(@Thorim, 0, 1, 0, 19, 0, 100, 0, 13057, 0, 0, 0, 80, @Thorim*100+2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thorim - Just created - actionlist'),
+(@Thorim*100+2, 9, 0, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Thorim - ActionList - Aura state kneel'),
+(@Veranus, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 53, 1, @Veranus*100, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veranus - JustSummoned - Start WP'),
+(@Veranus, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 18, 33554432, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veranus - JustSummoned - Set unit_flag not selectable'),
+(@Veranus, 0, 2, 0, 40, 0, 100, 0, 2, 0, 0, 0, 11, 50630, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veranus - On waypoint 2 - Eject passenger');
+
+DELETE FROM `waypoint_data` WHERE `id` IN (2072200, 2072201);
+
+DELETE FROM `waypoints` WHERE `entry`IN (@Jokkum*100+1, @Jokkum*100, @Veranus*100);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@Jokkum*100+1,1,7837.09, -3235.54, 853.878, '@Jokkum'),
+(@Jokkum*100+1,2,7828.62, -3230.38, 855.915, '@Jokkum'),
+(@Jokkum*100+1,3,7793.78, -3219.74, 861.146, '@Jokkum'),
+(@Jokkum*100+1,4,7765.22, -3225.37, 864.083, '@Jokkum'),
+(@Jokkum*100+1,5,7736.73, -3226.5, 861.458, '@Jokkum'),
+(@Jokkum*100,1,7357.09,-2865.4,803.501, '@Jokkum'),
+(@Jokkum*100,2,7355.18,-2904.32,821.008, '@Jokkum'),
+(@Jokkum*100,3,7355.47,-2946.65,833.092, '@Jokkum'),
+(@Jokkum*100,4,7358.79,-2974.21,845.018, '@Jokkum'),
+(@Jokkum*100,5,7360.87,-2994.78,845.989, '@Jokkum'),
+(@Jokkum*100,6,7378.76,-3035.89,840.6, '@Jokkum'),
+(@Jokkum*100,7,7411.66,-3072.21,837.577, '@Jokkum'),
+(@Jokkum*100,8,7454,-3088.7,837.577, '@Jokkum'),
+(@Jokkum*100,9,7496.08,-3113.92,837.583, '@Jokkum'),
+(@Jokkum*100,10,7536.84,-3136.49,837.581, '@Jokkum'),
+(@Jokkum*100,11,7564.74,-3145.14,844.831, '@Jokkum'),
+(@Jokkum*100,12,7604.36,-3171.26,850.887, '@Jokkum'),
+(@Jokkum*100,13,7635.47,-3207.21,857.19, '@Jokkum'),
+(@Jokkum*100,14,7657.86,-3219.26,863.19, '@Jokkum'),
+(@Jokkum*100,15,7685.42,-3218.98,867.141, '@Jokkum'),
+(@Jokkum*100,16,7706.54,-3219.74,864.333, '@Jokkum'),
+(@Jokkum*100,17,7747.33,-3226.99,862.458, '@Jokkum'),
+(@Jokkum*100,18,7796.66,-3221.78,860.646, '@Jokkum'),
+(@Jokkum*100,19,7827.6, -3229.27,856.415, '@Jokkum'),
+(@Jokkum*100,20,7846.17,-3253.24,852.128, '@Jokkum'),
+(@Jokkum*100,21,7849.41,-3270.86,854.538, '@Jokkum'),
+(@Jokkum*100,22,7853.12,-3268.03,853.50, '@Jokkum'),
+(@Veranus*100,1, 7915.017578, -3202.903076, 899.580872, '@Veranus'),
+(@Veranus*100,2, 7889.363770, -3236.394043, 899.580872, '@Veranus'),
+(@Veranus*100,3, 7865.838867, -3266.453369, 899.580872, '@Veranus'),
+(@Veranus*100,4, 7929.517578, -3369.971191, 899.580872, '@Veranus');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_06_world.sql
new file mode 100644
index 00000000000..7bb0e20cc14
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_06_world.sql
@@ -0,0 +1 @@
+UPDATE `spell_area` SET `quest_end`='13157', `quest_end_status`='1' WHERE `spell`='57674' and`area`='4504' and`quest_start`='13086' and`aura_spell`='0' and`racemask`='0' and`gender`='2';
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_07_world.sql
new file mode 100644
index 00000000000..01ab70e6981
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_07_world.sql
@@ -0,0 +1,18 @@
+-- North Sea Kraken SAI
+SET @ENTRY := 34925;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@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,6000,9000,7000,9000,11,66514,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - IC - Cast Frost Breath'),
+(@ENTRY,0, 1,0,8,0,25,0,66588,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - On Spell hit Flaming Sphere - actionList'),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,11,66717,0,0,0,0,0,7,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Cast 66717'),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,11,50142,2,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Cast 50142'),
+(@ENTRY*100,9,2,0,0,0,100,0,3000,3000,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Turn Invisible'),
+(@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,'North Sea Kraken - actionList - Evade'),
+(@ENTRY, 0, 2, 0, 1, 0, 100, 0, 30000, 30000, 30000, 30000, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - OOC - Make Visible'),
+(@ENTRY, 0, 3, 4, 2, 0, 100, 1, 1, 6, 0, 0, 11, 66994, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - On Between 1 and 6% HP - Cast Kraken Tooth Explosion'),
+(@ENTRY, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 11, 66717, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - Linked with previous event - Give quest credit'),
+(@ENTRY, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - Linked With Previous Event die'),
+(@ENTRY, 0, 6, 0, 1, 0, 100, 0, 30000, 30000, 30000, 30000, 11, 68909, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - OOC - Cast Submerge '),
+(@ENTRY, 0, 7, 0, 0, 0, 100, 0, 15000, 20000, 15000, 20000, 11, 66511, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - IC - Whirl');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_08_world.sql
new file mode 100644
index 00000000000..28f50fde9dd
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_08_world.sql
@@ -0,0 +1,281 @@
+SET @Defender := 10948; -- Darrowshire Defender
+SET @Skeleton := 10952; -- Maraudin Skeleton
+SET @Corpse := 10951; -- Marauding Corpse
+SET @Silver := 10949; -- Silver hand disciple
+SET @Sevant := 10953; -- Sevant of Horgus
+SET @Lightfire := 10944; -- Davil Lightfire
+SET @Horgus := 10946; -- Horgus the Ravager
+SET @Betrayer := 10947; -- Darrowshire Betrayer
+SET @Redpath := 10937; -- Captain Redpath
+SET @Bloodletter := 10954; -- Bloodletter
+SET @Marduk := 10939; -- Marduk the Black
+SET @CorruptedRed := 10938; -- Redpath the Corrupted
+SET @Joseph := 10936; -- Joseph Redpath
+SET @Davil := 10945; -- Davil Crokford
+SET @Pamela := 10926; -- Pamela Redpath
+SET @Relic := 177526; -- Relic Bundle, spell:=18987
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN(@Silver ,@Lightfire, @Defender, @Joseph, @Davil, @Pamela, @Horgus);
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(@Silver, 0, 0, 0, '17327'),
+(@Lightfire, 0, 0, 0, '17327'),
+(@Defender, 0, 0, 0, '17327'),
+(@Joseph, 0, 0, 0, '17327'),
+(@Davil, 0, 0, 0, '17327'),
+(@Pamela, 0, 0, 0, '17327'),
+(@Horgus, 0, 0, 0, '17467');
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Defender, @Skeleton, @Corpse, @Sevant, @Lightfire, @Horgus, @Betrayer, @Redpath, @Bloodletter, @Marduk, @CorruptedRed, @Joseph, @Pamela, @Davil, @CorruptedRed);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@Relic;
+UPDATE `gameobject` SET `position_x`=1439.81, `position_y`=-3702.22, `position_z`=77.12 WHERE `guid`=99891;
+UPDATE `creature` SET `Orientation`=2.276223 WHERE `id`=@Pamela;
+
+DELETE FROM `creature_summon_groups` WHERE `summonerid`=@Redpath;
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
+(@Redpath,0,0,@Defender,1484.442993, -3676.545410, 79.871506, 0.169049,8,0),
+(@Redpath,0,0,@Defender,1497.560669, -3637.805176, 85.364410, 3.957781,8,0),
+(@Redpath,0,0,@Defender,1509.516357, -3640.667969, 88.113441, 4.707833,8,0),
+(@Redpath,0,0,@Defender,1511.495483, -3650.671631, 88.055191, 1.052592,8,0),
+(@Redpath,0,0,@Defender,1503.856812, -3664.068359, 83.389610, 1.052592,8,0),
+(@Redpath,0,0,@Defender,1494.220215, -3656.542725, 83.329399, 0.954417,8,0),
+(@Redpath,0,0,@Defender,1495.856445, -3684.522461, 80.549515, 0.002224,8,0),
+(@Redpath,0,0,@Defender,1494.905640, -3678.563477, 80.728012, 6.140110,8,0),
+(@Redpath,0,0,@Defender,1494.013916, -3671.843262, 81.187721, 0.139665,8,0),
+(@Redpath,0,0,@Defender,1493.794922, -3665.639893, 81.787727, 5.719919,8,0),
+(@Redpath,0,0,@Defender,1513.222290, -3693.317627, 84.312233, 2.388256,8,0),
+(@Redpath,0,0,@Defender,1508.203369, -3701.367188, 81.152023, 1.888743,8,0),
+(@Redpath,0,0,@Defender,1516.244263, -3706.704346, 82.785568, 5.756826,8,0),
+(@Redpath,0,0,@Defender,1511.111084, -3709.822998, 82.240448, 2.073311,8,0),
+(@Redpath,0,0,@Defender,1504.386353, -3709.648193, 81.169960, 0.557490,8,0),
+(@Redpath,0,1,@Skeleton, 1497.560669, -3637.805176, 85.364410, 3.957781,8,0), -- phase 1
+(@Redpath,0,1,@Corpse, 1509.516357, -3640.667969, 88.113441, 4.707833,8,0),
+(@Redpath,0,1,@Skeleton ,1511.495483, -3650.671631, 88.055191, 1.052592,8,0),
+(@Redpath,0,1,@Corpse, 1503.856812, -3664.068359, 83.389610, 1.052592,8,0),
+(@Redpath,0,1,@Skeleton ,1494.220215, -3656.542725, 83.329399, 0.954417,8,0),
+(@Redpath,0,1,@Skeleton, 1495.856445, -3684.522461, 80.549515, 0.002224,8,0),
+(@Redpath,0,1,@Corpse, 1494.905640, -3678.563477, 80.728012, 6.140110,8,0),
+(@Redpath,0,1,@Skeleton, 1494.013916, -3671.843262, 81.187721, 0.139665,8,0),
+(@Redpath,0,1,@Corpse, 1493.794922, -3665.639893, 81.787727, 5.719919,8,0),
+(@Redpath,0,1,@Skeleton, 1513.222290, -3693.317627, 84.312233, 2.388256,8,0),
+(@Redpath,0,1,@Corpse, 1508.203369, -3701.367188, 81.152023, 1.888743,8,0),
+(@Redpath,0,1,@Skeleton, 1516.244263, -3706.704346, 82.785568, 5.756826,8,0),
+(@Redpath,0,1,@Corpse, 1511.111084, -3709.822998, 82.240448, 2.073311,8,0),
+(@Redpath,0,1,@Skeleton, 1504.386353, -3709.648193, 81.169960, 0.557490,8,0),
+(@Redpath,0,2,@Sevant, 1497.560669, -3637.805176, 85.364410, 3.957781,8,0), -- phase 2
+(@Redpath,0,2,@Sevant, 1509.516357, -3640.667969, 88.113441, 4.707833,8,0),
+(@Redpath,0,2,@Sevant, 1511.495483, -3650.671631, 88.055191, 1.052592,8,0),
+(@Redpath,0,2,@Sevant, 1503.856812, -3664.068359, 83.389610, 1.052592,8,0),
+(@Redpath,0,2,@Sevant, 1494.220215, -3656.542725, 83.329399, 0.954417,8,0),
+(@Redpath,0,2,@Sevant, 1495.856445, -3684.522461, 80.549515, 0.002224,8,0),
+(@Redpath,0,2,@Sevant, 1494.905640, -3678.563477, 80.728012, 6.140110,8,0),
+(@Redpath,0,2,@Sevant, 1494.013916, -3671.843262, 81.187721, 0.139665,8,0),
+(@Redpath,0,2,@Sevant, 1493.794922, -3665.639893, 81.787727, 5.719919,8,0),
+(@Redpath,0,2,@Sevant, 1513.222290, -3693.317627, 84.312233, 2.388256,8,0),
+(@Redpath,0,2,@Sevant, 1508.203369, -3701.367188, 81.152023, 1.888743,8,0),
+(@Redpath,0,2,@Sevant, 1516.244263, -3706.704346, 82.785568, 5.756826,8,0),
+(@Redpath,0,2,@Sevant, 1511.111084, -3709.822998, 82.240448, 2.073311,8,0),
+(@Redpath,0,2,@Sevant, 1504.386353, -3709.648193, 81.169960, 0.557490,8,0),
+(@Redpath,0,3,@Silver,1495.857910, -3682.440674,80.630501, 0.022911,8,0),
+(@Redpath,0,3,@Silver,1490.361938, -3684.647705, 80.350754, 0.285233,8,0),
+(@Redpath,0,3,@Silver,1495.075928, -3670.077148, 81.964828, 0.846651,8,0),
+(@Redpath,0,3,@Silver,1489.382568, -3666.546875, 81.307182, 0.058259,8,0),
+(@Redpath,0,4,@Betrayer, 1497.560669, -3637.805176, 85.364410, 3.957781,8,0), -- phase3
+(@Redpath,0,4,@Betrayer, 1509.516357, -3640.667969, 88.113441, 4.707833,8,0),
+(@Redpath,0,4,@Betrayer, 1511.495483, -3650.671631, 88.055191, 1.052592,8,0),
+(@Redpath,0,4,@Betrayer, 1503.856812, -3664.068359, 83.389610, 1.052592,8,0),
+(@Redpath,0,4,@Betrayer, 1494.220215, -3656.542725, 83.329399, 0.954417,8,0),
+(@Redpath,0,4,@Bloodletter, 1495.856445, -3684.522461, 80.549515, 0.002224,8,0),
+(@Redpath,0,4,@Bloodletter, 1494.905640, -3678.563477, 80.728012, 6.140110,8,0),
+(@Redpath,0,4,@Bloodletter, 1494.013916, -3671.843262, 81.187721, 0.139665,8,0),
+(@Redpath,0,4,@Bloodletter, 1493.794922, -3665.639893, 81.787727, 5.719919,8,0),
+(@Redpath,0,4,@Betrayer, 1513.222290, -3693.317627, 84.312233, 2.388256,8,0),
+(@Redpath,0,4,@Betrayer, 1508.203369, -3701.367188, 81.152023, 1.888743,8,0),
+(@Redpath,0,4,@Betrayer, 1516.244263, -3706.704346, 82.785568, 5.756826,8,0),
+(@Redpath,0,4,@Betrayer, 1511.111084, -3709.822998, 82.240448, 2.073311,8,0),
+(@Redpath,0,4,@Betrayer, 1504.386353, -3709.648193, 81.169960, 0.557490,8,0);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Relic AND `source_type` = 1;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Relic*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Lightfire AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Lightfire *100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Defender AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Defender *100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Marduk AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Marduk*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Horgus AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Horgus*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Redpath AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Redpath*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Redpath*100+1 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @CorruptedRed AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @CorruptedRed*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Davil AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Joseph AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Joseph*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Joseph*100+1 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
+(@Relic, 1, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 80, @Relic*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Relic - On spawn - action list'),
+(@Relic*100, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 12, @Redpath, 6, 6000, 0, 0, 0, 8, 0, 0, 0, 1453.091431, -3693.156494, 76.784241, 0.486776, 'Relic - action list - spawn Redpath'),
+(@Redpath, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 80, @Redpath*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - On spawn - action list'),
+(@Redpath*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Set invisible - action list'),
+(@Redpath*100, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 107, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn groupe 1 - action list'),
+(@Redpath*100, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Defender, 40, 0, 0, 0, 0, 0, 'Defender - talk1 - action list'),
+(@Redpath*100, 9, 3, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 107, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g2 wave1- action list'),
+(@Redpath*100, 9, 4, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 107, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g2 wave2 - action list'),
+(@Redpath*100, 9, 5, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 12, @Lightfire, 6, 6000, 0, 0, 0, 8, 0, 0, 0, 1453.091431, -3693.156494, 76.784241, 0.486776, 'Redpath - spawn Lightfire - action list'),
+(@Redpath*100, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Davil, 8, 600000, 0, 0, 0, 8, 0, 0, 0, 1464.515991, -3678.878418, 78.043877, 0.577881, 'Redpath - Spawn Davil - action list'),
+(@Redpath*100, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 107, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g3 wave1 - action list'),
+(@Redpath*100, 9, 8, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 107, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g4 wave1 - action list'),
+(@Redpath*100, 9, 9, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 107, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g4 wave2 - action list'),
+(@Redpath*100, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Horgus, 6, 6000, 0, 0, 0, 8, 0, 0, 0, 1501.275024, -3675.826172, 81.447624, 3.300069, 'Redpath - Spawn Horgus - action list'),
+(@Redpath*100, 9, 11, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Horgus, 100, 0, 0, 0, 0, 0, 'Horgus - talk1 - action list'),
+(@Horgus, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 11, 29060, 1, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Horgus - On spawn - cast spell 29060'),
+(@Lightfire, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 53, 1,@Lightfire, 0, 0, 9000000, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Lightfire - On spawn - waypoint1'),
+(@Lightfire, 0, 1, 0, 63, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lightfire - On spawn - texte1'),
+(@Davil, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - On spawn - action list'),
+(@Davil, 0, 1, 0, 63, 0, 100, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lightfire - On spawn - texte2'),
+(@Joseph, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 80, @Joseph*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Joseph - On spawn - action list'),
+(@Joseph*100, 9, 0, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Davil - despawn - action list'),
+(@Joseph*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 53, 0, @Joseph, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Joseph - Start Script - waypoint '),
+(@Joseph*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Joseph - Start Script - remove npcflag'),
+(@Joseph, 0, 1, 0, 40, 0, 100, 0, 4, 0, 0, 0, 80, @Joseph*100+1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Joseph - On waypoint4 - Start Script'),
+(@Joseph*100+1, 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, 'Joseph - On Script - Talk1'),
+(@Joseph*100+1, 9, 1, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Pamela, 10, 0, 0, 0, 0, 0, 'Pamela - On Script - Talk1'),
+(@Joseph*100+1, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @Pamela, 10, 0, 0, 0, 0, 0, 'Pamela - On Script - Talk2'),
+(@Joseph*100+1, 9, 3, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, @Pamela, 10, 0, 0, 0, 0, 0, 'Pamela - On Script - Talk3'),
+(@Joseph*100+1, 9, 4, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, @Pamela, 10, 0, 0, 0, 0, 0, 'Pamela - On Script - Talk4'),
+(@Joseph*100+1, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Joseph - On Script - Talk2'),
+(@Joseph*100+1, 9, 6, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Joseph - despawn - action list'),
+(@Joseph, 0, 2, 0, 64, 0, 100, 0, 0, 0, 0, 0, 33, @Joseph, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Joseph - On waypoint4 - Start Script'),
+(@Horgus, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 80, @Horgus*100, 2, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Horgus - On death - action list'),
+(@Horgus*100, 9, 0, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - talk 2 - action list'),
+(@Horgus*100, 9, 1, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - talk 2 - action list'),
+(@Horgus*100, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - talk 3 - action list'),
+(@Horgus*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - talk 3 - action list'),
+(@Horgus*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - On Script - Set React Passive'),
+(@Horgus*100, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0,19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - On Script - Set Immune To NPC'),
+(@Horgus*100, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - On Script - evade'),
+(@Horgus*100, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 5, 65, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - play emote - action list'),
+(@Horgus*100, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, @Lightfire, 100, 0, 0, 0, 0, 0, 'Lightfire - despawn - action list'),
+(@Horgus*100, 9, 9, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 47, 1, 0, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - Visible On - action list'),
+(@Horgus*100, 9, 10, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 53, 1, @Redpath, 0, 0, 0, 2, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - waypoint 1 - action list'),
+(@Horgus*100, 9, 11, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - talk 1 - action list'),
+(@Horgus*100, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Redpath - talk 2 - action list'),
+(@Horgus*100, 9, 13, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 107, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g1 wave3 - action list'),
+(@Horgus*100, 9, 14, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 107, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g4 wave1 - action list'),
+(@Horgus*100, 9, 15, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 107, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - Spawn g4 wave2 - action list'),
+(@Horgus*100, 9, 16, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 86, 18650, 2, 19, @Redpath, 50, 0, 19, @Redpath, 50, 0, 0, 0, 0, 0, 'Redpath - Spawn Marduk - action list'),
+(@Horgus*100, 9, 17, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Marduk, 100, 0, 0, 0, 0, 0, 'Marduk - talk 1 - action list'),
+(@Horgus*100, 9, 18, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - On Script - Set React Passive'),
+(@Horgus*100, 9, 19, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0,19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - On Script - Set Immune To NPC'),
+(@Horgus*100, 9, 20, 0, 0, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - On Script - evade'),
+(@Horgus*100, 9, 21, 0, 0, 0, 100, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - set visible off - action list'),
+(@Horgus*100, 9, 22, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 12, @CorruptedRed, 6, 60000, 0, 0, 0, 8, 0, 0, 0, 1494.081055, -3676.041748,80.846764, 6.269975, 'Redpath - Spawn CorruptedRed - action list'),
+(@Horgus*100, 9, 23, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @CorruptedRed, 40, 0, 0, 0, 0, 0, 'CorruptedRed - talk 1 - action list'),
+(@Horgus*100, 9, 24, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @CorruptedRed, 40, 0, 0, 0, 0, 0, 'CorruptedRed - On talk 2 - action list'),
+(@Horgus*100, 9, 25, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 41, 2, 0, 0, 0, 0, 0, 19, @Marduk, 40, 0, 0, 0, 0, 0, 'Marduk - Despawn - action list'),
+(@Marduk, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 80, @Marduk*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Horgus - On spawn - ActionList'),
+(@Marduk*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Marduk - On Script - Root'),
+(@Marduk*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Marduk - On Script - Set React Passive'),
+(@Marduk*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Marduk - On Script - Unit flag non attackable'),
+(@Marduk*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - On Script - Set Immune To NPC'),
+(@Marduk*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 131072, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redpath - On Script - Set PACIFIED'),
+(@CorruptedRed, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 80, @CorruptedRed*100, 2, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'CorruptedRed - On death - action list'),
+(@CorruptedRed*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Joseph, 8, 60000, 0, 0, 0, 8, 0, 0, 0, 1444.337891, -3702.661133, 77.368271, 0.860624, 'Joseph - Spawn - action list'),
+(@CorruptedRed*100, 9, 1, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - talk3 - action list'),
+(@CorruptedRed*100, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - talk4 - action list'),
+(@CorruptedRed*100, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 19, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - talk5 - action list'),
+(@CorruptedRed*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Davil - Set visible - action list'),
+(@CorruptedRed*100, 9, 5, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - despawn - action list'),
+(@CorruptedRed*100, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Silver, 100, 0, 0, 0, 0, 0, 'Silver - despawn - action list'),
+(@CorruptedRed*100, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - despawn - action list'),
+(@CorruptedRed*100, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Betrayer, 100, 0, 0, 0, 0, 0, 'Silver - despawn - action list'),
+(@Lightfire, 0, 3, 0, 6, 0, 100, 0, 0, 0, 0, 0, 80, @Lightfire*100, 2, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Lightfire - On death - action list'),
+(@Lightfire*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Davil - talk4 - action list'),
+(@Lightfire*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 6, 5721, 0, 0, 0, 0, 0, 18, 100, 0, 0, 0, 0, 0, 0, 'Player - Quest failed - action list'),
+(@Lightfire*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - despawn - action list'),
+(@Lightfire*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Silver, 100, 0, 0, 0, 0, 0, 'Silver - despawn - action list'),
+(@Lightfire*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @CorruptedRed, 100, 0, 0, 0, 0, 0, 'CorruptedRed - despawn - action list'),
+(@Lightfire*100, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Betrayer, 100, 0, 0, 0, 0, 0, 'Betrayer - despawn - action list'),
+(@Lightfire*100, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Bloodletter, 100, 0, 0, 0, 0, 0, 'Bloodletter - despawn - action list'),
+(@Lightfire*100, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Sevant, 100, 0, 0, 0, 0, 0, 'Sevant - despawn - action list'),
+(@Lightfire*100, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Horgus, 100, 0, 0, 0, 0, 0, 'Horgus - despawn - action list'),
+(@Lightfire*100, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Skeleton, 100, 0, 0, 0, 0, 0, 'Skeleton - despawn - action list'),
+(@Lightfire*100, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Corpse, 100, 0, 0, 0, 0, 0, 'Corpse - despawn - action list'),
+(@Lightfire*100, 9, 11, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, @Redpath, 100, 0, 0, 0, 0, 0, 'Redpath - despawn - action list'),
+(@Lightfire*100, 9, 12, 0, 0, 0, 100, 0, 1000, 4000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Davil - despawn - action list'),
+(@Redpath, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 80, @Redpath*100+1, 2, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Redpath - On death - action list'),
+(@Redpath*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Davil - talk1 - action list'),
+(@Redpath*100+1, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 6, 5721, 0, 0, 0, 0, 0, 18, 100, 0, 0, 0, 0, 0, 0, 'Player - quest failed - action list'),
+(@Redpath*100+1, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Defender, 100, 0, 0, 0, 0, 0, 'Defender - despawn - action list'),
+(@Redpath*100+1, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Silver, 100, 0, 0, 0, 0, 0, 'Silver - despawn - action list'),
+(@Redpath*100+1, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @CorruptedRed, 100, 0, 0, 0, 0, 0, 'CorruptedRed - despawn - action list'),
+(@Redpath*100+1, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Betrayer, 100, 0, 0, 0, 0, 0, 'Betrayer - despawn - action list'),
+(@Redpath*100+1, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Bloodletter, 100, 0, 0, 0, 0, 0, 'Bloodletter - despawn - action list'),
+(@Redpath*100+1, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Sevant, 100, 0, 0, 0, 0, 0, 'Sevant - despawn - action list'),
+(@Redpath*100+1, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Horgus, 100, 0, 0, 0, 0, 0, 'Horgus - despawn - action list'),
+(@Redpath*100+1, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Skeleton, 100, 0, 0, 0, 0, 0, 'Skeleton - despawn - action list'),
+(@Redpath*100+1, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @Corpse, 100, 0, 0, 0, 0, 0, 'Corpse - despawn - action list'),
+(@Redpath*100+1, 9, 11, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, @Davil, 100, 0, 0, 0, 0, 0, 'Davil - despawn - action list'),
+(@Defender,0,0,0,0,0,100,0,3000,5000,5000,8000,11,11976,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darrowshire Defender - In Combat - Cast Strike'),
+(@Defender,0,1,0,0,0,100,0,5000,7000,7000,10000,11,12169,1,0,0,0,0,1,0,0,0,0,0,0,0,'Darrowshire Defender - In Combat - Cast Shield Block'),
+(@Lightfire,0,4,0,4,0,100,1,0,0,0,0,11,17232,0,0,0,0,0,1,0,0,0,0,0,0,0,'Davil Lightfire - On Aggro - Cast Devotion Aura'),
+(@Lightfire,0,5,0,0,0,100,0,5000,7000,8000,10000,11,17284,0,0,0,0,0,2,0,0,0,0,0,0,0,'Davil Lightfire - In Combat - Cast Holy Strike'),
+(@Lightfire,0,6,0,0,0,100,0,8000,11000,15000,20000,11,13005,0,0,0,0,0,5,0,0,0,0,0,0,0,'Davil Lightfire - In Combat - Cast Hammer of Justice'),
+(@Redpath,0,2,0,0,0,100,0,5000,7000,8000,10000,11,15284,0,0,0,0,0,2,0,0,0,0,0,0,0,'Captain Redpath - In Combat - Cast Cleave'),
+(@Redpath,0,3,0,0,0,100,0,8000,10000,14000,18000,11,6253,0,0,0,0,0,2,0,0,0,0,0,0,0,'Captain Redpath - In Combat - Cast Backhand'),
+(@Redpath,0,4,0,0,0,100,0,3000,5000,15000,20000,11,9128,0,0,0,0,0,1,0,0,0,0,0,0,0,'Captain Redpath - In Combat - Cast Battle Shout'),
+(@Horgus,0,2,0,0,0,100,0,3000,5000,6000,8000,11,3391,0,0,0,0,0,1,0,0,0,0,0,0,0,'Horgus the Ravager - In Combat - Cast Thrash'),
+(@Horgus,0,3,0,0,0,100,0,8000,11000,9000,12000,11,15608,1,0,0,0,0,2,0,0,0,0,0,0,0,'Horgus the Ravager - In Combat - Cast Ravenous Claw'),
+(@CorruptedRed,0,1,0,0,0,100,0,3000,5000,5000,7000,11,15580,0,0,0,0,0,2,0,0,0,0,0,0,0,'Redpath the Corrupted - In Combat - Cast Strike'),
+(@CorruptedRed,0,2,0,0,0,100,0,8000,10000,14000,18000,11,6253,0,0,0,0,0,2,0,0,0,0,0,0,0,'Redpath the Corrupted - In Combat - Cast Backhand'),
+(@CorruptedRed,0,3,0,0,0,100,0,3000,5000,15000,20000,11,16244,0,0,0,0,0,1,0,0,0,0,0,0,0,'Redpath the Corrupted - In Combat - Cast Demoralizing Shout'),
+(@CorruptedRed,0,4,0,0,0,100,0,5000,7000,9000,14000,11,12542,1,0,0,0,0,6,0,0,0,0,0,0,0,'Redpath the Corrupted - In Combat - Cast Fear');
+
+DELETE FROM `waypoints` WHERE `entry` IN (@Lightfire, @Redpath, @Joseph);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@Lightfire,1, 1501.275024, -3675.826172, 81.447624,'Lightfire'),
+(@joseph,1, 1433.060059, -3682.163086, 76.364197 , 'Joseph'),
+(@joseph,2, 1433.873169, -3640.699707, 78.194763, 'Joseph'),
+(@joseph,3, 1454.325439, -3595.439941, 86.951950, 'Joseph'),
+(@joseph,4, 1455.368286, -3596.347900, 86.950905, 'Joseph'),
+(@Redpath,1, 1501.275024, -3675.826172, 81.447624,'Redpath');
+
+UPDATE `npc_text` SET `BroadcastTextID0`=7454 WHERE `ID`=4777;
+DELETE FROM `gossip_menu` WHERE `entry`=3922 AND `text_id`=4777;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (3922,4777);
+UPDATE `creature_template` SET `gossip_menu_id`=3922 WHERE `entry`=10945;
+UPDATE `creature_template` SET `npcflag`=1 WHERE `entry`=10945;
+UPDATE `npc_text` SET `BroadcastTextID0`=7455 WHERE `ID`=4778;
+DELETE FROM `gossip_menu` WHERE `entry`=3861 AND `text_id`=4778;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (3861,4778);
+UPDATE `creature_template` SET `gossip_menu_id`=3861 WHERE `entry`=10936;
+UPDATE `creature_template` SET `npcflag`=1 WHERE `entry`=10936;
+
+DELETE FROM `creature_text` WHERE `entry` IN (@Defender, @Lightfire, @Horgus, @Redpath, @Marduk, @CorruptedRed, @Joseph, @Pamela, @Davil) ;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(@Defender, 0, 0, 'Darrowshire, to arms! The Scourge approach!', 14, 0, 100, 0, 0, 0, 'Defender1', 7358),
+(@Lightfire, 0, 0, 'Do not lose hope, Darrowshire! We will not fall!', 14, 0, 100, 0, 0, 0, 'Lightfire1', 7343),
+(@Horgus, 0, 0, 'The light burns bright in you, Davil, I will enjoy snuffing it out.', 14, 0, 100, 0, 0, 0, 'Horgus', 7344),
+(@Lightfire, 1, 0, 'Horgus, your nightmare ends! Now!', 14, 0, 100, 0, 0, 0, 'Lightfire2', 7346),
+(@Defender, 1, 0, 'Horgus is slain! Take heat, defenders of Darrowshire.', 14, 0, 100, 0, 0, 0, 'Defender2', 7368),
+(@Lightfire, 2, 0, 'Ah! My wounds are too severe. Defenders, fight on without me!', 12, 0, 100, 0, 0, 0, 'Lightfire2', 7227),
+(@Lightfire, 3, 0, 'Davil Lightfire has succumbed to his wounds!', 16, 0, 100, 0, 0, 0, 'Lightfire2', 7367),
+(@Redpath, 0, 0, 'Defenders of Darrowshire! Rally! we must prevail!', 14, 0, 100, 0, 0, 0, 'Redpath1', 7355),
+(@Davil, 1, 0, 'Captain Redpath has appeared on the battlefield! Protect him!', 41, 0, 100, 0, 0, 0, 'Redpath2', 45683),
+(@Davil, 0, 0, 'Captain Redpath! How could you forsake us!', 41, 0, 100, 0, 0, 0, 'Redpath3', 7212),
+(@Davil, 2, 0, 'Protect Davil Lightfire!', 41, 0, 100, 0, 0, 0, 'Lightfire1', 45681),
+(@Davil, 3, 0, 'Davil Lightfire is defeated! Darrowshire is lost!', 41, 0, 100, 0, 0, 0, 'Redpath4', 7366),
+(@Marduk, 0, 0, 'Redpath! Your life ends, here and now!', 12, 0, 100, 0, 0, 0, 'Marduk1', 7471),
+(@CorruptedRed, 0, 0, 'Darrowshire! Your are doomed!', 14, 0, 100, 0, 0, 0, 'CorruptedRed1', 7356),
+(@CorruptedRed, 1, 0, 'Captain Joseph Redpath has been corrupted! Kill him quickly!', 41, 0, 100, 0, 0, 0, 'CorruptedRed2', 45684),
+(@Defender, 2, 0, 'Captain Redpath is slain!', 14, 0, 100, 0, 0, 0, 'Defender3', 7369),
+(@Defender, 3, 0, 'The Scourge are defeated! Darrowshire is saved!', 14, 0, 100, 0, 0, 0, 'Defender4', 7407),
+(@Defender, 4, 0, 'Speak with Joseph Redpath in the center of Darrowshire.', 41, 0, 100, 0, 0, 0, 'Defender5', 45685),
+(@Joseph, 0, 0, 'Pamela? Are you there, honey?', 12, 0, 100, 0, 0, 0, 'Joseph1', 7397),
+(@Pamela, 0, 0, 'Daddy!', 12, 0, 100, 0, 0, 0, 'Pamela1', 7399),
+(@Pamela, 1, 0, 'Daddy! You''re back!', 12, 0, 100, 0, 0, 0, 'Pamela2', 7400),
+(@Pamela, 2, 0, 'Let''s go play! No, tell me a story, Daddy! No... let''s go pick flowers! And play tea time! I found my dollie, did I tell you?', 12, 0, 100, 0, 0, 0, 'Pamela3', 7401),
+(@Pamela, 3, 0, 'I missed you so much, Daddy!', 12, 0, 100, 0, 0, 0, 'Pamela4', 7402),
+(@Joseph, 1, 0, 'I missed you too, honey. And I''m finally home...', 12, 0, 100, 0, 0, 0, 'Joseph2', 7403);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_09_world.sql
new file mode 100644
index 00000000000..f96d3d42a1b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_09_world.sql
@@ -0,0 +1,5 @@
+DELETE FROM `spell_scripts` WHERE `id`= 66477;
+INSERT INTO `spell_scripts` (`id`, `effIndex`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES
+(66477, 0, 0, 15, 66622, 2, 1, 0, 0, 0, 0),
+(66477, 0, 0, 15, 66478, 2, 1, 0, 0, 0, 0),
+(66477, 0, 0, 15, 66041, 2, 1, 0, 0, 0, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_10_world.sql
new file mode 100644
index 00000000000..e5b7bf5242d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_10_world.sql
@@ -0,0 +1,177 @@
+-- A Distraction For Akama
+SET @Maiev := 22989; -- Maev
+SET @Akama := 22990; -- Akama
+SET @Vagath := 23152; -- Vagath
+SET @IllidariShadow := 22988; -- IllidariShadow
+SET @Ashtongue := 21701; -- Ashtongue
+SET @FanOfBlades := 39954; -- Maev spell
+SET @Stealth := 34189; -- Maev spell
+SET @ChainLightning := 39945; -- Akama spell
+SET @Xiri := 18528; -- XI'RI
+SET @IllidariRavag := 22857; -- Illidari Ravager
+SET @LightOfTheNaa1 := 39829; -- XI'RI spell
+SET @LightOfTheNaa2 := 39831; -- XI'RI spell
+SET @FyraDawnstar := 22864; -- FyraDawnstar
+SET @Caalen := 22862; -- Anachorete Caalen
+SET @Lightsworn := 22861; -- Lightsworn Vindicator
+SET @Magister := 22863; -- Seasoned Magister
+SET @ID := 8650; -- Gossip Menu
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (22989, 22990, 23152, 22988, 21701, 18528, 22857, 22864, 22863, 22862, 22861);
+UPDATE `creature_template` SET `npcflag`=0 where `entry`=22990;
+DELETE FROM creature_summon_groups WHERE summonerid=@Xiri;
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
+(@Xiri,0,0,@Akama,-3557.775635,624.185852,6.244853,4.687259,3,300000),
+(@Xiri,0,0,@Maiev,-3563.998047,623.326050,6.134195,4.687259,3,300000),
+(@Xiri,0,0,@Ashtongue,-3568.963867,627.467407,5.477327,4.742220,3,300000),
+(@Xiri,0,0,@Ashtongue,-3565.453125,627.804199,5.458982,4.801125,3,300000),
+(@Xiri,0,0,@Ashtongue,-3561.734375,628.002930,5.536494,4.76578,3,300000),
+(@Xiri,0,0,@Ashtongue,-3557.638428,628.221863,5.681130,4.76578,3,300000),
+(@Xiri,0,0,@Ashtongue,-3554.038574,628.414246,5.853768,4.76578,3,300000),
+(@Xiri,0,0,@Ashtongue,-3557.367188,632.975952,5.016828,4.830713,3,300000),
+(@Xiri,0,0,@Ashtongue,-3561.433350,632.492554,4.889128,4.830713,3,300000),
+(@Xiri,0,0,@Ashtongue,-3565.568848,632.000916,4.862391,4.830713,3,300000),
+(@Xiri,0,0,@Vagath,-3564.023438,406.373199,29.640791,1.577282,3,300000),
+(@Xiri,0,0,@IllidariRavag,-3570.985840,408.893219,29.715797,1.529191,3,300000),
+(@Xiri,0,0,@IllidariRavag,-3556.721924,409.166534,29.495508,1.599877,3,300000),
+(@Xiri,0,0,@IllidariShadow,-3571.129395,418.261780,28.846333,1.556680,3,300000),
+(@Xiri,0,0,@IllidariShadow,-3581.750977,417.807861,30.357321,1.560607,3,300000),
+(@Xiri,0,0,@IllidariShadow,-3576.343506,424.403748,28.781679,1.482065,3,300000),
+(@Xiri,0,0,@IllidariShadow,-3568.493652,427.238312,28.031080,1.609870,3,300000),
+(@Xiri,0,0,@IllidariShadow,-3559.938232,428.418793,27.697611,1.641286,3,300000),
+(@Xiri,0,0,@IllidariShadow,-3564.919678,432.020447,27.485765,1.633432,3,300000);
+
+DELETE FROM `creature_text` WHERE `entry` IN (@Akama, @FyraDawnstar, @Caalen, @Vagath, @Maiev, @Xiri) ;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(@FyraDawnstar, 0, 0, 'Onward, Scryers! Show Illidan''s lackeys the temper of our steel!', 14, 0, 100, 0, 0, 0, 'Fyra Downstar', 20696),
+(@Caalen, 0, 0, 'Come closer, demon! Death awaits!', 12, 0, 100, 0, 0, 0, 'Caalen', 20670),
+(@Caalen, 0, 1, 'Illidan''s lapdogs! Destroy them all!', 12, 0, 100, 0, 0, 0, 'Caalen', 20669),
+(@Caalen, 0, 2, 'I''ve a message for your master, scum!', 12, 0, 100, 0, 0, 0, 'Caalen', 20672),
+(@Caalen, 0, 3, 'Pathetic worm... your master''s days are over!', 12, 0, 100, 0, 0, 0, 'Caalen', 20671),
+(@Caalen, 0, 4, 'For Xi''ri! For the Sha''tar!', 12, 0, 100, 0, 0, 0, 'Caalen', 20667),
+(@Caalen, 0, 5, 'Your end is at hand, Illidari!', 12, 0, 100, 0, 0, 0, 'Caalen', 20668),
+(@Vagath, 0, 0, 'Pitiful wretches. You dared invade Illidan''s temple? Very well, I shall make it your death bed!', 14, 0, 100, 0, 0, 0, 'Vagath', 20719),
+(@Akama, 0, 0, 'Now is the time, Maiev! Unleash your wrath!', 14, 0, 100, 0, 0, 0, 'Akama', 20742),
+(@Maiev, 0, 0, 'I''ve waited for this moment for years. Illidan and his lapdogs will be destroyed!', 14, 0, 100, 0, 0, 0, 'Maiev', 20743),
+(@Akama, 1, 0, 'Slay all who see us! Word must not get back to Illidan.', 14, 0, 100, 0, 0, 0, 'Akama', 20744),
+(@Maiev, 1, 0, 'Meet your end, demon!', 12, 0, 100, 0, 0, 0, 'Maiev', 0),
+(@Vagath, 1, 0, 'You''ve sealed you fate, Akama. The Master will learn from your betrayal!', 14, 0, 100, 0, 0, 0, 'Vagath', 20745),
+(@Akama, 2, 0, 'Akama has no master, not anymore.', 12, 0, 100, 0, 0, 0, 'Akama', 20746),
+(@Akama, 3, 0, 'Our plans are in danger already. It appears Maiev''s decided to do things her own way.', 12, 0, 100, 0, 0, 0, 'Akama', 20748),
+(@Akama, 4, 0, '%s''s attention shifts to a crack along the temple''s southern wall.', 16, 0, 100, 0, 0, 0, 'Akama', 20749),
+(@Akama, 5, 0, 'We must carry on with or without Maiev. Inside! Quickly!', 12, 0, 100, 0, 0, 0, 'Akama', 20750),
+(@Xiri, 0, 0, '%s falls silent and a quiet tension falls over nearby Sha''tar forces as Xi''ri makes his decision.', 16, 0, 100, 0, 0, 0, 'Xiri', 20737),
+(@Xiri, 1, 0, '%s begins channeling the powers of the light.', 16, 0, 100, 0, 0, 0, 'Xiri', 20693);
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8650 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`, `OptionBroadcastTextID`) VALUES
+(8650,0,0, 'I am ready to join you for the battle, Xi''ri.',1,1,0,0,0,0, '', 21003);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@ID;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@ID,0,0,9,10985,0,0,0,'','Show gossip menu if player accept the quest A distraction for Akama');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Akama AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Akama*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Maiev AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Maiev*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Xiri AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Xiri*100 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Xiri*100+1 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Xiri*100+2 AND `source_type` = 9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Ashtongue AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Vagath AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Lightsworn AND `source_type` = 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = @Magister 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
+(@Xiri, 0, 0, 0, 62, 0, 100, 0, 8650, 0, 0, 0, 80, @Xiri*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - On Gossip use - ActionList'),
+(@Xiri*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, 'Xiri - ActionList - Close gossip'),
+(@Xiri*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 83, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - ActionList - Remove npcflag'),
+(@Xiri*100, 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, 'Xiri - ActionList - Talk'),
+(@Xiri*100, 9, 3, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - ActionList - Talk'),
+(@Xiri*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 39828, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - ActionList - Cast'),
+(@Xiri*100, 9, 5, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 107, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - ActionList - Summon Group'),
+(@Xiri*100, 9, 6, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Caalen, 60, 0, 0, 0, 0, 0, 'Caalen - On Gossip use - Talk'),
+(@Xiri*100, 9, 7, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @FyraDawnstar, 60, 0, 0, 0, 0, 0, 'Caalen - On Gossip use - Talk'),
+(@Xiri*100, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 39831, 0, 0, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 'Xiri - ActionList - Cast'),
+(@Xiri*100, 9, 9, 0, 0, 0, 100, 0, 40000, 40000, 0, 0, 82, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - ActionList - Add npcflag'),
+(@Akama, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 53, 1, @Akama, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Gossip use - Start Waypoint'),
+(@Ashtongue, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 53, 1, @Ashtongue, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Ashtongue - On Gossip use - Start Waypoint'),
+(@Maiev, 0, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 53, 1, @Maiev, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Ashtongue - On Gossip use - Start Waypoint'),
+(@Xiri, 0, 1, 0, 62, 0, 100, 0, 8650, 0, 0, 0, 80, @Xiri*100+1, 2, 0, 0, 0, 0, 11, @Lightsworn, 80, 0, 0, 0, 0, 0, 'Xiri - On Gossip use - Start waypoint'),
+(@Xiri*100+1, 9, 0, 0, 0, 0, 100, 0, 27000, 27000, 0, 0, 53, 1, @Lightsworn, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - On Gossip use - Start waypoint'),
+(@Xiri, 0, 2, 0, 62, 0, 100, 0, 8650, 0, 0, 0, 80, @Xiri*100+2, 2, 0, 0, 0, 0, 11, @Magister, 80, 0, 0, 0, 0, 0, 'Xiri - On Gossip use - Start waypoint'),
+(@Xiri*100+2, 9, 0, 0, 0, 0, 100, 0, 27000, 27000, 0, 0, 53, 1, @Magister, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 'Xiri - On Gossip use - Start waypoint'),
+(@Maiev, 0, 1, 0, 40, 0, 100, 0, 1, 0, 0, 0, 80, @Maiev*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On waypoint1 - Start Script'),
+(@Maiev*100, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Vagath, 80, 0, 0, 0, 0, 0, 'Vagath - On Script - Talk1'),
+(@Maiev*100, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, @Akama, 20, 0, 0, 0, 0, 0, 'Akama - On Script - Talk1'),
+(@Maiev*100, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev - On Script - Talk1'),
+(@Maiev*100, 9, 3, 0, 0, 0, 100, 0, 2500, 2500, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, @Akama, 20, 0, 0, 0, 0, 0, 'Akama - On Script - Talk2'),
+(@Maiev*100, 9, 4, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev - On Script - Talk2'),
+(@Maiev*100, 9, 5, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev - On Script - Set React Passive'),
+(@Maiev*100, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev - On Script - Set Immune To NPC'),
+(@Maiev*100, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev - On Script - evade'),
+(@Maiev*100, 9, 8, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 34189, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev - On Script - Stealth'),
+(@Vagath, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 1, 14000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On aggro - Talk2'),
+(@Vagath, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 1, 2, 14000, 0, 0, 0, 0, 19, @Akama, 20, 0, 0, 0, 0, 0, 'Akama - On Vagath death - Talk3'),
+(@Akama, 0, 1, 0, 40, 0, 100, 0, 2, 0, 0, 0, 80, @Akama*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On waypoint2 - Start Script'),
+(@Akama*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 54, 12000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Script - pause Waypoint'),
+(@Akama*100, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 3, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Script - Talk4'),
+(@Akama*100, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 4, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Script - Talk5'),
+(@Akama*100, 9, 4, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 5, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Script - Talk6'),
+(@Ashtongue, 0, 1, 0, 40, 0, 100, 0, 2, 0, 0, 0, 54, 23000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On waypoint2 - event'),
+(@Akama, 0, 2, 0, 40, 0, 100, 0, 6, 0, 0, 0, 11, 39932, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On waypoint3 - Cast Spell'),
+(@Akama, 0, 3, 0, 0, 0, 100, 0, 1000, 1000, 4000, 4000, 11, @ChainLightning, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Akama - IC - Cast Spell'),
+(@Maiev, 0, 2, 0, 0, 0, 100, 0, 1000, 1000, 3000, 3000, 11, @FanOfBlades, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Maiev - IC - Cast Spell'),
+(@Magister, 0, 0, 0, 75, 0, 100, 0, 0, @IllidariRavag, 10, 5000, 49, 0, 0, 0, 0, 0, 0, 19, @IllidariRavag, 10, 0, 0, 0, 0, 0, 'Magister - On los ooc - Attack'),
+(@Lightsworn, 0, 0, 0, 75, 0, 100, 0, 0, @IllidariRavag, 10, 5000, 49, 0, 0, 0, 0, 0, 0, 19, @IllidariRavag, 10, 0, 0, 0, 0, 0, 'Lightsworn - On los ooc - Attacka'),
+(@Magister, 0, 1, 0, 75, 0, 100, 0, 0, @IllidariShadow, 10, 5000, 49, 0, 0, 0, 0, 0, 0, 19, @IllidariShadow, 10, 0, 0, 0, 0, 0, 'Magister - On los ooc - Attack'),
+(@Lightsworn, 0, 1, 0, 75, 0, 100, 0, 0, @IllidariShadow, 10, 5000, 49, 0, 0, 0, 0, 0, 0, 19, @IllidariShadow, 10, 0, 0, 0, 0, 0, 'Lightsworn - On los ooc - Attacka'),
+(@Magister, 0, 2, 0, 0, 0, 100, 0, 1000, 1000, 4000, 4000, 11, 9053, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Akama - IC - Cast Spell'),
+(@Lightsworn, 0, 2, 0, 0, 0, 100, 0, 1000, 1000, 4000, 4000, 11, 33632, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Akama - IC - Cast Spell'),
+(@Lightsworn, 0, 3, 0, 0, 0, 100, 0, 5000, 5000, 10000, 10000, 11, 13005, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Akama - IC - Cast Spell'),
+(@Lightsworn, 0, 4, 0, 0, 0, 100, 0, 3000, 8000, 5000, 8000, 11, 13952, 0, 0, 0, 0, 0, 26, 10, 0, 0, 0, 0, 0, 0, 'Akama - IC - Cast Spell');
+
+DELETE FROM `waypoints` WHERE entry in (@Akama, @Maiev, @Ashtongue, @Lightsworn, @Magister);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@Akama,1,-3562.123291, 486.208344, 22.091547,'Akama1'),
+(@Akama,2,-3569.400879, 408.074738, 29.698217,'Akama2'),
+(@Akama,3,-3578.632568, 353.128601, 35.888973,'Ashtongue3'),
+(@Akama,4,-3600.931885, 322.053955, 39.085770,'Ashtongue3'),
+(@Akama,5,-3617.203125, 320.658691, 39.697262,'Ashtongue3'),
+(@Akama,6,-3651.692627, 317.280975, 35.914421,'Akama3'),
+(@Maiev,1,-3567.418457, 485.073334, 22.376778,'Maiev1'),
+(@Maiev,2,-3567.913086, 400.602386, 30.253670,'Maiev2'),
+(@Maiev,3,-3567.458740, 371.282898, 32.955494,'Maiev3'),
+(@Maiev,4,-3651.692627, 317.280975, 35.914421,'Maiev4'),
+(@Lightsworn,1,-3562.123291, 486.208344, 22.091547,'Lightsworn1'),
+(@Lightsworn,2,-3569.400879, 408.074738, 29.698217,'Lightsworn2'),
+(@Magister,1,-3562.123291, 486.208344, 22.091547,'Magister1'),
+(@Magister,2,-3569.400879, 408.074738, 29.698217,'Magister2'),
+(@Ashtongue,1,-3562.123291, 486.208344, 22.091547,'Ashtongue1'),
+(@Ashtongue,2,-3569.400879, 408.074738, 29.698217,'Ashtongue2'),
+(@Ashtongue,3,-3578.632568, 353.128601, 35.888973,'Ashtongue3'),
+(@Ashtongue,4,-3600.931885, 322.053955, 39.085770,'Ashtongue3'),
+(@Ashtongue,5,-3617.203125, 320.658691, 39.697262,'Ashtongue3'),
+(@Ashtongue,6,-3651.692627, 317.280975, 35.914421,'Ashtongue3');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 39831;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 3, 39831, 0, 31, 3, @Ashtongue, 0, 0, '', NULL),
+(13, 3, 39831, 1, 31, 3, @Akama, 0, 0, '', NULL),
+(13, 3, 39831, 2, 31, 3, @Maiev, 0, 0, '', NULL),
+(13, 3, 39831, 3, 31, 3, @Lightsworn, 0, 0, '', NULL),
+(13, 3, 39831, 4, 31, 3, @Magister, 0, 0, '', NULL);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 39832;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 3, 39832, 0, 31, 3, @Ashtongue, 0, 0, '', NULL),
+(13, 3, 39832, 1, 31, 3, @Akama, 0, 0, '', NULL),
+(13, 3, 39832, 2, 31, 3, @Maiev, 0, 0, '', NULL),
+(13, 3, 39832, 3, 31, 3, @Lightsworn, 0, 0, '', NULL),
+(13, 3, 39832, 4, 31, 3, @Magister, 0, 0, '', NULL);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 39932;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 2, 39932, 0, 8, 13429 , 0, 0, 0, '', 'Eye of the Witness Distraction for Akama');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_00_world.sql
new file mode 100644
index 00000000000..e0b1a44286e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_00_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` =17 AND `SourceEntry`=56448;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(17, 0, 56448, 0, 0, 31, 1, 3, 30142, 0, 0, 0, 0, '', 'Storm Hammer only targets only The Iron Watcher');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_01_world.sql
new file mode 100644
index 00000000000..3db370ac965
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_01_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=35113;
+INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES
+(0, 35113, 64, '', '', 'Ignore LOS on Warp Measurement');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_25_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_25_00_world.sql
new file mode 100644
index 00000000000..0d72b108502
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_25_00_world.sql
@@ -0,0 +1,25 @@
+--
+DELETE FROM `gossip_menu` WHERE `entry`=9821 AND `text_id`=13557;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9821,13557);
+UPDATE `creature_template` SET `gossip_menu_id`=9821 WHERE `entry`=9977;
+
+DELETE FROM `gossip_menu` WHERE `entry`=4841 AND `text_id`=5894;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (4841,5894);
+UPDATE `creature_template` SET `gossip_menu_id`=4841 WHERE `entry`=12997;
+
+DELETE FROM `gossip_menu` WHERE `entry`=4845 AND `text_id`=5920;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (4845,5920);
+UPDATE `creature_template` SET `gossip_menu_id`=4845 WHERE `entry`=13018;
+
+DELETE FROM `gossip_menu` WHERE `entry`=10631 AND `text_id`=14724;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (10631,14724);
+UPDATE `creature_template` SET `gossip_menu_id`=10631 WHERE `entry`=35073;
+
+DELETE FROM `gossip_menu` WHERE `entry`=3501 AND `text_id`=4253;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (3501,4253);
+UPDATE `creature_template` SET `gossip_menu_id`=3501 WHERE `entry`=1694;
+
+UPDATE `creature_template` SET `npcflag`=0 WHERE `entry`=13076;
+
+DELETE FROM `gossip_menu` WHERE `entry`=9027 AND `text_id` IN (12198);
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9027,12198);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql
new file mode 100644
index 00000000000..92d1bd55c8a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9900;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15,9900,0,0,0,9,0,13010,0,0,0,0,'','Show gossip if player has quest completed'),
+(15,9900,0,0,0,5,0,1119,240,0,0,0,'','Show gossip if player is at least friendly');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql
new file mode 100644
index 00000000000..30f02d9900e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql
@@ -0,0 +1,3 @@
+--
+Update `smart_scripts` SET `action_type`=85, `target_type`=7 WHERE `entryorguid`= 3177300 AND `source_type`=9 AND `id`=0;
+Update `smart_scripts` SET `action_type`=85, `target_type`=7 WHERE `entryorguid`= 3244200 AND `source_type`=9 AND `id`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql
new file mode 100644
index 00000000000..1298bc54674
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `action_type`=85 WHERE `entryorguid`=28298 AND `source_type`=0 AND `id` =0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql
new file mode 100644
index 00000000000..5fa2dc8de28
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql
@@ -0,0 +1,30 @@
+--
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2586);
+DELETE FROM `creature_template_addon` WHERE `entry`=2586;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(2586, 0, 0, 131072, 1, 0, "");
+
+UPDATE `creature_template_addon` SET `bytes1`=131072, `bytes2`=1 WHERE `entry` IN ( 6035, 22060, 18116, 16928, 16170, 11792, 6886, 4798, 2522, 25484, 4850, 1040, 579, 4834, 215, 1713, 938, 768, 17949);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 11792);
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 4798);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2242);
+DELETE FROM `creature_template_addon` WHERE `entry`=2242;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(2242, 0, 0, 131072, 1, 0, "");
+
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2246);
+DELETE FROM `creature_template_addon` WHERE `entry`=2246;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(2246, 0, 0, 131072, 1, 0, "");
+
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2926);
+DELETE FROM `creature_template_addon` WHERE `entry`=2926;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(2926, 0, 0, 131072, 1, 0, "");
+
+DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 7110);
+DELETE FROM `creature_template_addon` WHERE `entry`=7110;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(7110, 0, 0, 131072, 1, 0, "");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql
new file mode 100644
index 00000000000..a76b40e2212
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql
@@ -0,0 +1,15 @@
+UPDATE `quest_template` SET `PrevQuestId`=0 WHERE `Id`=13308;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN(19,20) AND `SourceEntry`=13308;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(19, 0, 13308, 0, 0, 8, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Rewarded or'),
+(20, 0, 13308, 0, 0, 8, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Rewarded or'),
+(19, 0, 13308, 0, 1, 9, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Taken or'),
+(20, 0, 13308, 0, 1, 9, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Taken or'),
+(19, 0, 13308, 0, 2, 28, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Complete or'),
+(20, 0, 13308, 0, 2, 28, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Complete or'),
+(19, 0, 13308, 0, 3, 8, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Rewarded or'),
+(20, 0, 13308, 0, 3, 8, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Rewarded or'),
+(19, 0, 13308, 0, 4, 9, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Taken or'),
+(20, 0, 13308, 0, 4, 9, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Taken or'),
+(19, 0, 13308, 0, 5, 28, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Complete or'),
+(20, 0, 13308, 0, 5, 28, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Complete or');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql
new file mode 100644
index 00000000000..45c43161ac9
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `gameobject` SET `position_z`=402.410004 WHERE `guid`=99956;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql
new file mode 100644
index 00000000000..99f00a1be47
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql
@@ -0,0 +1,25 @@
+-- Quest - Iron Rune Constructs and You: Collecting Data
+
+SET @GUID := 49220; -- Set by TC
+SET @SUMMON := 49986;
+SET @GOLEM := 24821;
+SET @BENCH := 186958;
+DELETE FROM `spell_target_position` WHERE `id` in (49988);
+INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(49988, 571, 478.951782, -5941.529297, 308.749969, 0.419872);
+
+UPDATE `creature_template` SET `spell1`=44550, `AIName`='SmartAI' WHERE `entry`=@GOLEM;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (2,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
+(@BENCH,1,2,3,62,0,100,0,9024,1,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'),
+(@BENCH,1,3,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44550;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 44550, 0, 31, 3, 24820, 0, 0, '', 'Collect Data target');
+
+DELETE FROM `creature` WHERE `id`=24820;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES
+(@GUID, 24820, 571, 1, 1, 466.754089, -5921.273926, 309.139404, 0.751123, 120);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql
new file mode 100644
index 00000000000..00240288b25
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql
@@ -0,0 +1,48 @@
+SET @SUMMON := 49989;
+SET @GOLEM := 24823;
+SET @BENCH := 186958;
+SET @Lebronski := 24718;
+
+DELETE FROM `spell_target_position` WHERE `id` IN (49990);
+INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(49990, 571, 478.951782, -5941.529297, 308.749969, 0.419872);
+
+UPDATE `creature_template` SET `spell1`=44562, `AIName`='SmartAI' WHERE `entry`=@GOLEM;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Lebronski;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Lebronski AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Lebronski*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Lebronski*100+1 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (4,5);
+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
+(@BENCH,1,4,5,62,0,100,0,9024,2,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'),
+(@BENCH,1,5,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'),
+(@Lebronski,0,0,0,10,0,100,0,1,5,60000,60000,80,@Lebronski*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Turd - LOS - Action list'),
+(@Lebronski*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,'Stanwad - Action list - TALK'),
+(@Lebronski*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,'Stanwad - Action list - Set Event phase1'),
+(@Lebronski*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Root'),
+(@Lebronski*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Stanwad - Action list - Set Orientation'),
+(@Lebronski*100,9,4,0,0,0,100,0,30000,30000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - remove root'),
+(@Lebronski,0,1,0,8,1,100,0,44562,0,0,0,80,@Lebronski*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lebronski - spell hit - action list'),
+(@Lebronski*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Set Event phase 0'),
+(@Lebronski*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Lebronski*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Lebronski*100+1,9,3,0,0,0,100,0,0,0,0,0,80,@GOLEM*100,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Stanwad - Action list - Action list'),
+(@Lebronski*100+1,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Pause wp'),
+(@GOLEM*100,9,0,0,0,0,100,0,0,0,0,0,11,44569,0,0,0,0,0,23,0,0,0,0,0,0,0,'Stanwad - Action list - Cast Credit');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Lebronski;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@Lebronski,0,31,3,24823,0,0,'','event require npc 24823');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44562;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 44562, 0, 31, 3, 24718, 0, 0, '', 'Bluff target');
+
+DELETE FROM `creature_text` WHERE `entry`IN (@GOLEM);
+DELETE FROM `creature_text` WHERE `entry`IN (@Lebronski) AND `groupid` IN (1, 2);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES
+(@GOLEM,0,0,"Model U-9207 Iron Rune Construct does not appreciate your tone of voice. Commencing total annihilation of your rug, Lebronski.",12,0,100,0,0,0,'Iron Rune Construct', 23892),
+(@Lebronski,1,0,"What do you think you're doing, man? Lebronski does NOT appreciate you dragging your loose metal parts all over his rug.",12,7,100,0,0,0,'Lebronski', 23890),
+(@Lebronski,2,0,"Far out, man. This bucket of bolts might make it after all...",12,7,100,0,0,0,'Lebronski', 23891);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql
new file mode 100644
index 00000000000..557d6cb6792
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql
@@ -0,0 +1,65 @@
+-- Quest - Iron Rune Constructs and You: Rocket Jumping
+SET @SUMMON := 49985;
+SET @GOLEM := 24806;
+SET @RUNE := 186956;
+SET @BENCH := 186958;
+SET @Stanwad := 24717;
+SET @Gwendolyn := 24719;
+SET @Needlemeyer := 24720;
+SET @Walt := 24807;
+SET @Lebronski := 24718;
+
+DELETE FROM `spell_target_position` WHERE `id` in (49984);
+INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(49984, 571, 478.951782, -5941.529297, 308.749969, 0.419872);
+
+UPDATE `creature_template` SET `spell1`=44498, `AIName`='SmartAI', `InhabitType`=5 WHERE `entry`=@GOLEM;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Stanwad;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@BENCH;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Stanwad*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (0,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
+(@BENCH,1,0,1,62,0,100,0,9024,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'),
+(@BENCH,1,1,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'),
+(@GOLEM,0,0,1,25,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - Just Summoned - Set phase 1'),
+(@GOLEM,0,1,0,61,0,100,0,0,0,0,0,50,186952,60,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - Just Summoned - SummonGob'),
+(@GOLEM,0,2,3,8,1,100,0,44498,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - Say text'),
+(@GOLEM,0,3,4,61,0,100,0,0,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - Set phase 2'),
+(@GOLEM,0,4,5,61,0,100,0,0,0,0,0,60,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - Set fly'),
+(@GOLEM,0,5,6,61,0,100,0,0,0,0,0,53,1,@GOLEM,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - WP start'),
+(@GOLEM,0,6,7,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,65653,@RUNE,0,0,0,0,0,'Iron Rune Construct - spell hit - Activate Gobject'),
+(@GOLEM,0,7,0,61,0,100,0,0,0,0,0,80,@Stanwad*100,0,0,0,0,0,19,@Stanwad,30,0,0,0,0,0,'Iron Rune Construct - spell hit - ActionList'),
+(@GOLEM,0,8,9,40,0,100,0,5,@GOLEM,0,0,11,44499,0,0,0,0,0,23,0,0,0,0,0,0,0,'Iron Rune Construct - Waypoint reached - cast credit spell'),
+(@GOLEM,0,9,10,61,0,100,0,0,0,0,0,22,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - Waypoint reached - Set phase 3'),
+(@GOLEM,0,10,0,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,65654,186957,0,0,0,0,0,'Iron Rune Construct - Just Summoned - Activate gob'),
+(@GOLEM,0,11,0,1,4,100,1,7000,7000,0,0,28,46598,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - OOC (phase 3) - Remove Vehicle aura'),
+(@Stanwad*100,9,0,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,19,@Walt,20,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,2,0,0,0,100,0,12000,12000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,3,0,0,0,100,0,1000,1000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,4,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Gwendolyn,20,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,5,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Needlemeyer,20,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,6,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Lebronski,20,0,0,0,0,0,'Stanwad - Action list - TALK'),
+(@Stanwad*100,9,7,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,19,@Walt,20,0,0,0,0,0,'Stanwad - Action list - TALK');
+
+DELETE FROM `creature_text` WHERE `entry`IN (@GOLEM, @Walt, @Stanwad, @Gwendolyn, @Needlemeyer, @Lebronski);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES
+(@GOLEM,0,0,"Launching.",12,0,100,0,0,0,'Iron Rune Construct', 23860),
+(@Walt,0,0,"Behold my perfect creation!",12,7,100,0,0,0,'Walt', 23873),
+(@Stanwad,0,0,"WHOA, WHOA, WHOA! Hold everything fellas!",12,7,100,0,0,0,'Stanwad', 23875),
+(@Stanwad,1,0,"Oh dear lords of stone and steel, what... I repeat... WHAT are ya gonna do with that?",12,7,100,0,0,0,'Stanwad', 23878),
+(@Stanwad,2,0,"The dwarves all burst out in laughter.",16,7,100,0,0,0,'Stanwad', 23876),
+(@Gwendolyn,0,0,"I'm cryin' here! Please, make the funny stop!",12,7,100,0,0,0,'Gwendolyn', 23885),
+(@Needlemeyer,0,0,"If only our pappy were alive to see this!",12,0,100,0,0,0,'Needlemeyer', 23889),
+(@Lebronski,0,0,"Man, that will never work. The iron dwarves are never gonna fall for that hunk o' junk!",12,7,100,0,0,0,'Lebronski', 23880),
+(@Walt,1,0,"You're out of your element, Lebronski! Uncalled for! Those iron dwarves won't know what hit 'em! Now why don't you get back to uncovering the mystery of the gigantic turd on your rug and leave the real scientists to their work! ",12,7,100,0,0,0,'Walt', 23883);
+
+DELETE FROM `waypoints` WHERE `entry`=@GOLEM;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@GOLEM,1, 479.1233, -5941.48, 316.7,'Iron Rune Construct'),
+(@GOLEM,2, 479.1461, -5941.515, 339.7554,'Iron Rune Construct'),
+(@GOLEM,3, 496.1333, -5940.065, 344.5331,'Iron Rune Construct'),
+(@GOLEM,4, 511.516, -5936.729, 339.7554,'Iron Rune Construct'),
+(@GOLEM,5, 514.5781, -5936.898, 314.1444,'Iron Rune Construct');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql
new file mode 100644
index 00000000000..31eca7f0310
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql
@@ -0,0 +1,136 @@
+UPDATE `creature_addon` SET `mount`=0 WHERE `guid`=97508;
+
+/* questgiver */
+-- Warmage Anzim SAI
+SET @ENTRY := 25356;
+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,1,19,0,100,0,11681,0,0,0,85,45883,0,0,0,0,0,7,0,0,0,0,0,0,0,"Warmage Anzim - On Quest 'Rescuing Evanor' Taken - Invoker Cast 'Amber Ledge to Beryl Point'"),
+(@ENTRY,0,1,0,61,0,100,0,11681,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Anzim - On Quest 'Rescuing Evanor' Taken - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 2535600;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Anzim - On Script - Remove Npc Flag Questgiver"),
+(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,118574,27888,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"),
+(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,107998,25732,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,108027,25733,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"),
+(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,107602,25727,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"),
+(@ENTRY,9,5,0,0,0,100,0,180000,180000,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Anzim - On Script - Add Npc Flag Questgiver");
+
+/* dragons */
+
+-- Warmage Archus SAI
+SET @ENTRY := 27888;
+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,1,38,0,100,0,1,1,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Archus - On Data Set 1 1 - Start Waypoint"),
+(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Archus - On Data Set 1 1 - Set Active On"),
+(@ENTRY,0,2,0,40,0,100,0,1,@ENTRY,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint");
+
+-- Warmage Preston SAI
+SET @ENTRY := 25732;
+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,1,38,0,100,0,1,1,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Preston - On Data Set 1 1 - Start Waypoint"),
+(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Preston - On Data Set 1 1 - Set Active On"),
+(@ENTRY,0,2,0,40,0,100,0,1,@ENTRY,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint");
+
+-- Warmage Austin SAI
+SET @ENTRY := 25733;
+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,1,38,0,100,0,1,1,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Austin - On Data Set 1 1 - Start Waypoint"),
+(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Austin - On Data Set 1 1 - Set Active On"),
+(@ENTRY,0,2,0,40,0,100,0,1,@ENTRY,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint");
+
+-- Warmage Moran SAI
+SET @ENTRY := 25727;
+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,1,38,0,100,0,1,1,0,0,53,1,25727,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Data Set 1 1 - Start Waypoint"),
+(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Data Set 1 1 - Set Active On"),
+(@ENTRY,0,2,3,40,0,100,0,1,25727,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint"),
+(@ENTRY,0,3,0,61,0,100,0,1,25727,0,0,75,42726,0,0,0,0,0,9,25724,0,100,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Add Aura 'Cosmetic - Immolation (Whole Body)'");
+
+-- Ascended Mage Hunter SAI
+SET @ENTRY := 25724;
+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,11,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ascended Mage Hunter - On Respawn - Set Reactstate Passive"),
+(@ENTRY,0,1,0,1,0,100,1,1000,1000,1000,1000,11,45940,0,0,0,0,0,9,25594,0,10,0,0,0,0,"Ascended Mage Hunter - Out of Combat - Cast 'Evanor's Prison Chains' (No Repeat)"),
+(@ENTRY,0,2,3,23,0,100,1,42726,1,0,0,89,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ascended Mage Hunter - On Has Aura 'Cosmetic - Immolation (Whole Body)' - Start Random Movement (No Repeat)"),
+(@ENTRY,0,3,0,61,0,100,1,42726,1,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Ascended Mage Hunter - On Has Aura 'Cosmetic - Immolation (Whole Body)' - Run Script (No Repeat)"),
+(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,114368,24771,0,0,0,0,0,"Ascended Mage Hunter - On Just Died - Set Data 1 1");
+
+-- Actionlist SAI
+SET @ENTRY := 2572400;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,3000,3000,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Kill Self");
+
+-- Coldarra Invisman SAI
+SET @ENTRY := 24771;
+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,38,0,100,0,1,1,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Invisman - On Data Set 1 1 - Run Script (No Repeat)");
+
+-- Actionlist SAI
+SET @ENTRY := 2477100;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,4000,4000,0,0,9,0,0,0,0,0,0,20,187884,20,0,0,0,0,0,"Coldarra Invisman - On Script - activate Game Object"),
+(@ENTRY,9,1,0,0,0,100,0,4000,4000,0,0,11,46013,2,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Invisman - On Script - Cast 'Summon Lady Evanor'");
+
+-- Archmage Evanor SAI
+SET @ENTRY := 25784;
+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,0,0,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Just Summoned - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 2578400;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Say Line 0"),
+(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Say Line 1"),
+(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,11,46018,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Cast 'Teleport'"),
+(@ENTRY,9,3,0,0,0,100,0,8000,8000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Despawn Instant");
+
+DELETE FROM `creature_text` WHERE `entry`=25784;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(25784, 0, 0, 'I thank you, friend of Dalaran.', 12, 0, 100, 0, 0, 0, 24995, 0, 'Archmage Evanor'),
+(25784, 1, 0, 'We mustn''t tarry here... stay close - I''ll take us somewhere safe.', 12, 0, 100, 0, 0, 0, 24996, 0, 'Archmage Evanor');
+
+DELETE FROM `spell_target_position` WHERE `id`=46018;
+INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`, `VerifiedBuild`) VALUES
+(46018, 0, 571, 3646.895, 5893.2773, 174.48, 0.674, 0);
+
+/* waypoint datas */
+DELETE FROM `waypoints` WHERE `entry`=25727;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(25727, 1,3195.641,6102.673,147.5568, 'Warmage Moran'),
+(25727, 2,3437.590576,5915.928711,145.554291, 'Warmage Moran');
+DELETE FROM `waypoints` WHERE `entry`=25733;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(25733, 1,3224.336,6105.71,146.7791, 'Warmage Austin'),
+(25733, 2,3435.270,5889.899,151.063, 'Warmage Austin');
+DELETE FROM `waypoints` WHERE `entry`=25732;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(25732, 1,3224.749,6083.038,147.5568, 'Warmage Preston'),
+(25732, 2,3460.500,5877.4399,149.537, 'Warmage Preston');
+DELETE FROM `waypoints` WHERE `entry`=27888;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(27888, 1,3200.99,6074.898,144.9736, 'Warmage Archus'),
+(27888, 2,3457.750,5892.669,147.380, 'Warmage Archus');
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (25727, 25733, 25732, 27888);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql
new file mode 100644
index 00000000000..585c6482366
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=20 AND `SourceEntry`=1789;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(20, 0, 1789, 0, 9, 1783, 0, 0, 0, '', 'Show the quest if 1783 is taken');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql
new file mode 100644
index 00000000000..4cc5d647e1a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql
@@ -0,0 +1 @@
+DELETE FROM `spell_linked_spell` WHERE `spell_effect`=69706;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql
new file mode 100644
index 00000000000..40df9138eb4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql
@@ -0,0 +1,2 @@
+-- 3.3.5 - 6.x
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=49889;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql
new file mode 100644
index 00000000000..5b48fd9779e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `creature_addon` WHERE `guid` IN (26310,54733);
+INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES
+(26310, 263100),
+(54733, 547330);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql
new file mode 100644
index 00000000000..8d8fe3be881
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql
@@ -0,0 +1,2 @@
+UPDATE `creature_template` SET `AIName`='', `ScriptName`='boss_nexus_commanders' WHERE `entry` IN(26796,26798);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(26796,26798) AND `source_type`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql
new file mode 100644
index 00000000000..3bf1b2410ce
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_bonus_data` WHERE `entry`=3607;
+INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
+(3607, 0, 0, 0, 0, 'Yenniku Soul Gem');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql
new file mode 100644
index 00000000000..ddbc46739b1
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql
@@ -0,0 +1 @@
+DELETE FROM `creature` WHERE `id`=23450;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql
new file mode 100644
index 00000000000..ade4e39c13b
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql
@@ -0,0 +1,4 @@
+UPDATE `creature_template` SET `vehicleid`=60 WHERE `entry`=30159;
+UPDATE `smart_scripts` SET `action_param2`=0 WHERE `entryorguid`=31242 AND `source_type`=0 AND `id`=14;
+UPDATE `creature_template_addon` SET `mount`=0 WHERE `entry`=31242;
+UPDATE `creature_text` SET `BroadcastTextId`=16227 WHERE `entry`=18292 AND `groupid`=0 AND `id`=0;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql
new file mode 100644
index 00000000000..e2e945eb86d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `creature_template` SET `faction`=2007 WHERE `entry` IN (35496,35498);
+UPDATE `creature` SET `position_x`=5957.267, `position_y`=566.4926 WHERE `guid`=116668 AND `id` = 29657;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql
new file mode 100644
index 00000000000..c692d88825f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `npc_trainer` SET `spell`=2154 WHERE `entry`=201029 AND `spell`=3104;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql
new file mode 100644
index 00000000000..4028abb8fdc
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `quest_template` SET `SpecialFlags`=2 WHERE `Id`=1560;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql
new file mode 100644
index 00000000000..9fa686c09ec
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql
@@ -0,0 +1,33 @@
+--
+SET @Geant:=24385;
+SET @Megalithe:=24381;
+
+UPDATE `event_scripts` SET `x`=2406.492188 , `y`=-5738.995605, `z`=274.020172 , `o`=0.703918 WHERE `id`=15939;
+UPDATE `creature_template` SET `unit_flags`=33600, `AIName`='SmartAI' WHERE `entry` IN (@Geant,@Megalithe);
+
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (@Geant,@Megalithe);
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (@Geant*100,@Megalithe*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
+(@Megalithe, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, @Megalithe*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - On Just summoned - action list'),
+(@Megalithe*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2410.138184, -5727.264648, 270.985870, 4.287692, 'Megalithe - action liste -Summon'),
+(@Megalithe*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2414.860596, -5729.499512, 272.095459, 3.982957, 'Megalithe - action liste -Summon'),
+(@Megalithe*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2417.339844, -5733.230957, 273.028992, 3.603609, 'Megalithe - action liste -Summon'),
+(@Megalithe*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2419.397705, -5738.032227, 274.121246, 3.241538, 'Megalithe - action liste -Summon'),
+(@Megalithe*100, 9, 4, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'),
+(@Megalithe*100, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'),
+(@Megalithe*100, 9, 6, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'),
+(@Megalithe*100, 9, 7, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 80, @Geant*100, 0, 0, 0, 0, 0, 11, @Geant, 30, 0, 0, 0, 0, 0, 'Megalithe - action liste - Action List'),
+(@Megalithe*100, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 43693, 0, 0, 0, 0, 0, 21, 40, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Cast Credit Quest'),
+(@Megalithe*100, 9, 9, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'),
+(@Megalithe*100, 9, 10, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'),
+(@Geant*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Geant - action liste - Run off'),
+(@Geant*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 2515.453369, -5670.358398, 298.778076, 0.618311, 'Geant - action liste - Gotopos'),
+(@Geant*100, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Geant - action liste - Despawnn');
+
+DELETE FROM `creature_text` WHERE `entry` IN (@Megalithe);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(@Megalithe, 0, 0, 'Arise from the earth, my brothers!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23311),
+(@Megalithe, 1, 0, 'Our iron masters have a mission for us!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23312),
+(@Megalithe, 2, 0, 'Follow me into the mountains to carry out the plan of the masters!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23315),
+(@Megalithe, 3, 0, 'We will not fail!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23332);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql
new file mode 100644
index 00000000000..55cb5f9006a
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`=20234 AND `source_type`=0 AND `id`=3;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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
+(20234,0,3,0,19,0,100,0,10344,0,0,0,11,35237,0,0,0,0,0,7,0,0,0,0,0,0,0,"Runetog Wildhammer - On Quest accept - Cast spell");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql
new file mode 100644
index 00000000000..2a943f00037
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid`= 39712 AND `source_type`=0 AND `id` IN (6, 7);
+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
+(39712, 0, 6, 7, 63, 0, 100, 0, 0, 0, 0, 0, 11, 74206, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Tinker Mekkatorque - Just created - cast spell'),
+(39712, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 44816, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Tinker Mekkatorque - Just created - cast spell');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql
new file mode 100644
index 00000000000..cd2023ea5b8
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql
@@ -0,0 +1,12 @@
+--
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (4331, 4329);
+DELETE FROM `smart_scripts` WHERE `entryorguid`= 4328 AND `source_type`=0 AND `id` IN (3);
+DELETE FROM `smart_scripts` WHERE `entryorguid`= 4331 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`= 4329 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
+(4328, 0, 3, 0, 8, 0, 100, 0, 42411, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Scalebane - On spell hit - Despawn'),
+(4331, 0, 0, 0, 8, 0, 100, 0, 42411, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Ash Tail - On spell hit - Despawn'),
+(4331, 0, 1, 0, 0, 0, 100, 0, 4000, 6000, 6000, 8000, 11, 11969, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Firemane Ash Tail - Icc - Cast Fire Nova'),
+(4331, 0, 2, 0, 4, 0, 100, 0, 0, 0, 0, 0, 11, 18968, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Ash Tail - On aggr - cast Fire Shield'),
+(4329, 0, 0, 0, 8, 0, 100, 0, 42411, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Scout - On spell hit - Despawn'),
+(4329, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 11, 18968, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Scout - On aggr - cast Fire Shield');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql
new file mode 100644
index 00000000000..2992a858dc6
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql
@@ -0,0 +1,8 @@
+-- Add missing gossip for entry 7766
+DELETE FROM `gossip_menu` WHERE `entry`=1761;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (1761,2393),(1761,2394);
+UPDATE `creature_template` SET `gossip_menu_id`=1761 WHERE entry=7766;
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=1761;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `NegativeCondition`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(14,1761,2394,0,9,434,0,0,0,0,'','Show gossip menu text if quest 434 is taken');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql
new file mode 100644
index 00000000000..fd50bbb5037
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql
@@ -0,0 +1,7 @@
+--
+UPDATE creature_template SET InhabitType=4, unit_flags=64 WHERE Entry=17592;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=17592 AND `source_type`=0 AND `id`IN(5, 6, 7);
+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
+(17592, 0, 5, 6, 40, 0, 100, 0, 10, 17592, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Razormaw - On Waypoint 10 Reached - Set Home Position'),
+(17592, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Razormaw - On Waypoint 10 Reached - Set Agressive'),
+(17592, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Razormaw - On Respawn - Add unit_flag');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql
new file mode 100644
index 00000000000..d3e1220006e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql
@@ -0,0 +1,55 @@
+-- Anton waypoints
+
+DELETE FROM `creature_addon` WHERE `guid`=117689;
+INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(117689, 1176890, 0, 131072, 1, 0, "");
+UPDATE `creature` SET `MovementType`=2 WHERE `guid`=117689;
+DELETE FROM `waypoint_data` WHERE `id`=1176890;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
+(1176890, 1, 153.249817, -4549.366211, 261.364685, 0, 0, 0, 0, 100, 0),
+(1176890, 2, 156.098114, -4532.821289, 258.803101, 0, 0, 0, 0, 100, 0),
+(1176890, 3, 156.068008, -4517.755371, 257.193939, 0, 0, 0, 0, 100, 0),
+(1176890, 4, 144.178497, -4462.812500, 253.617325, 0, 0, 0, 0, 100, 0),
+(1176890, 5, 141.329361, -4455.471191, 253.578766, 0, 0, 0, 0, 100, 0),
+(1176890, 6, 125.436966, -4434.860840, 254.323639, 0, 0, 0, 0, 100, 0),
+(1176890, 7, 122.155800, -4418.455566, 255.509537, 0, 0, 0, 0, 100, 0),
+(1176890, 8, 121.316132, -4389.046387, 257.141205, 0, 0, 0, 0, 100, 0),
+(1176890, 9, 124.869438, -4371.796875, 258.335938, 0, 0, 0, 0, 100, 0),
+(1176890, 10, 128.642212, -4362.238281, 258.747375, 0, 0, 0, 0, 100, 0),
+(1176890, 11, 141.832169, -4345.334473, 257.867676, 0, 0, 0, 0, 100, 0),
+(1176890, 12, 150.246857, -4335.993652, 257.498810, 0, 0, 0, 0, 100, 0),
+(1176890, 13, 160.376022, -4316.970703, 256.535919, 0, 0, 0, 0, 100, 0),
+(1176890, 14, 168.596313, -4308.797363, 254.645386, 0, 0, 0, 0, 100, 0),
+(1176890, 15, 178.860077, -4304.438477, 252.472916, 0, 0, 0, 0, 100, 0),
+(1176890, 16, 195.836517, -4286.464355, 248.749603, 0, 0, 0, 0, 100, 0),
+(1176890, 17, 213.626450, -4276.384766, 248.502441, 0, 0, 0, 0, 100, 0),
+(1176890, 18, 238.895004, -4276.655762, 248.606018, 0, 0, 0, 0, 100, 0),
+(1176890, 19, 245.764877, -4272.171387, 248.920975, 0, 0, 0, 0, 100, 0),
+(1176890, 20, 264.235840, -4250.840332, 250.916733, 0, 0, 0, 0, 100, 0),
+(1176890, 21, 282.604492, -4236.683594, 252.033737, 0, 0, 0, 0, 100, 0),
+(1176890, 22, 288.971344, -4223.116211, 252.916443, 0, 0, 0, 0, 100, 0),
+(1176890, 23, 291.303375, -4196.310547, 254.307571, 0, 0, 0, 0, 100, 0),
+(1176890, 24, 294.156342, -4189.324707, 254.992859, 0, 0, 0, 0, 100, 0),
+(1176890, 25, 291.303375, -4196.310547, 254.307571, 0, 0, 0, 0, 100, 0),
+(1176890, 26, 288.971344, -4223.116211, 252.916443, 0, 0, 0, 0, 100, 0),
+(1176890, 27, 282.604492, -4236.683594, 252.033737, 0, 0, 0, 0, 100, 0),
+(1176890, 28, 264.235840, -4250.840332, 250.916733, 0, 0, 0, 0, 100, 0),
+(1176890, 29, 245.764877, -4272.171387, 248.920975, 0, 0, 0, 0, 100, 0),
+(1176890, 30, 238.895004, -4276.655762, 248.606018, 0, 0, 0, 0, 100, 0),
+(1176890, 31, 213.626450, -4276.384766, 248.502441, 0, 0, 0, 0, 100, 0),
+(1176890, 32, 195.836517, -4286.464355, 248.749603, 0, 0, 0, 0, 100, 0),
+(1176890, 33, 178.860077, -4304.438477, 252.472916, 0, 0, 0, 0, 100, 0),
+(1176890, 34, 168.596313, -4308.797363, 254.645386, 0, 0, 0, 0, 100, 0),
+(1176890, 35, 160.376022, -4316.970703, 256.535919, 0, 0, 0, 0, 100, 0),
+(1176890, 36, 150.246857, -4335.993652, 257.498810, 0, 0, 0, 0, 100, 0),
+(1176890, 37, 141.832169, -4345.334473, 257.867676, 0, 0, 0, 0, 100, 0),
+(1176890, 38, 128.642212, -4362.238281, 258.747375, 0, 0, 0, 0, 100, 0),
+(1176890, 39, 124.869438, -4371.796875, 258.335938, 0, 0, 0, 0, 100, 0),
+(1176890, 40, 121.316132, -4389.046387, 257.141205, 0, 0, 0, 0, 100, 0),
+(1176890, 41, 122.155800, -4418.455566, 255.509537, 0, 0, 0, 0, 100, 0),
+(1176890, 42, 125.436966, -4434.860840, 254.323639, 0, 0, 0, 0, 100, 0),
+(1176890, 43, 141.329361, -4455.471191, 253.578766, 0, 0, 0, 0, 100, 0),
+(1176890, 44, 144.178497, -4462.812500, 253.617325, 0, 0, 0, 0, 100, 0),
+(1176890, 45, 156.068008, -4517.755371, 257.193939, 0, 0, 0, 0, 100, 0),
+(1176890, 46, 156.098114, -4532.821289, 258.803101, 0, 0, 0, 0, 100, 0),
+(1176890, 47, 153.249817, -4549.366211, 261.364685, 0, 0, 0, 0, 100, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql
new file mode 100644
index 00000000000..f8251f9b2b4
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql
@@ -0,0 +1,18 @@
+UPDATE `creature_template` SET `gossip_menu_id`=8443 WHERE `entry`=21769;
+DELETE FROM `gossip_menu` WHERE `entry`=8443;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(8443, 10549); -- 21769
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=8443;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(8443, 0, 0, 'I''ve lost my Kor''kron Flare Gun, sir. May I have another?', 19708, 1, 1, 0, 0, 0, 0, '', 0);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21769 AND `source_type`=0 AND `id` IN(3,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
+(21769, 0, 3, 4, 62, 0, 100, 0, 8443, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 0 Selected - Close Gossip'),
+(21769, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 85, 38172, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 0 Selected - Cast Create Kor''kron Flare Gun');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8443;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 8443, 0, 0, 0, 8, 0, 10750, 0, 0, 0, 0, 0, '', 'Show gossip option if player has the path of conquest rewarded'),
+(15, 8443, 0, 0, 0, 8, 0, 10769, 0, 0, 1, 0, 0, '', 'Show gossip option if player does not have Dissension Amongst the Ranks rewarded'),
+(15, 8443, 0, 0, 0, 2, 0, 31108, 1, 0, 1, 0, 0, '', 'Show gossip option if player does not have Kor''Kron Flare Gun');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql
new file mode 100644
index 00000000000..8c6dc8fe248
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql
@@ -0,0 +1,14 @@
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=8457;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(8457, 0, 0, 'I need another Wildhammer Flare Gun, Thane.', 19747, 1, 1, 0, 0, 0, 0, '', 0);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21773 AND `source_type`=0 AND `id` IN(1,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
+(21773, 0, 1, 2, 62, 0, 100, 0, 8457, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Gossip Option 0 Selected - Close Gossip'),
+(21773, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 85, 38251, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Gossip Option 0 Selected - Cast Create Wildhammer Flare Gun');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8457;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 8457, 0, 0, 0, 8, 0, 10772, 0, 0, 0, 0, 0, '', 'Show gossip option if player has the path of conquest rewarded'),
+(15, 8457, 0, 0, 0, 8, 0, 10776, 0, 0, 1, 0, 0, '', 'Show gossip option if player does not have Dissension Amongst the Ranks rewarded'),
+(15, 8457, 0, 0, 0, 2, 0, 31310, 1, 0, 1, 0, 0, '', 'Show gossip option if player does not have Wildhammer Flare Gun');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql
new file mode 100644
index 00000000000..71a17359756
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql
@@ -0,0 +1,43 @@
+SET @CGUID := 76001;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=177746;
+UPDATE `gameobject` SET `position_x`=-2288.696777, `position_y`=1345.580078, `position_z`=66.123787 WHERE `guid`=99892;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (11560);
+DELETE FROM `creature_template_addon` WHERE `entry`=11560;
+INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES
+(11560,1,17327);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (11560, 1156000, 177746, 17774600);
+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
+(177746, 1, 0, 0, 1, 0, 100, 1, 6000, 6000, 6000, 6000, 50, 177749, 180000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost Magnet - OOC no repeat - Summon gob'), -- A gob cannot summon a gob
+(177746, 1, 1, 0, 1, 0, 100, 0, 6000, 6000, 6000, 6000, 45, 0, 1, 0, 0, 0, 0, 19, 11560, 70, 0, 0, 0, 0, 0, 'Ghost Magnet - ActionList - Set data 0'),
+(11560, 0, 0, 1, 38, 0, 100, 1, 0, 1, 0, 0, 28, 34426, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On dataset 0 1 - remove aura'),
+(11560, 0, 1, 2, 61, 0, 100, 1, 0, 0, 0, 0, 80, 1156000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on link - Start script'),
+(1156000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On script - Set run off'),
+(1156000, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 20, 177746, 70, 0, 0, 0, 0, 0, 'Magrami Spectre - On script - move to pos'),
+(1156000, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 30, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On script - ATTACK'),
+(11560, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 70000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On Link - Despawn'),
+(11560, 0, 2, 3, 25, 0, 100, 1, 0, 0, 0, 0, 11, 34426, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on Reset - add aura'),
+(11560, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 17327, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on Reset - add aura'),
+(11560, 0, 4, 0, 0, 0, 100, 1, 5000, 5000, 0, 0, 11, 18159, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on script - add aura'),
+(11560, 0, 5, 0, 0, 0, 100, 0, 2000, 2000, 7000, 7000, 11, 12531, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on script - add aura');
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+16;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 11560, 1, 1, 1, -2254.859, 1330.685, 63.67144, 5.253441, 120, 0, 0),
+(@CGUID+1, 11560, 1, 1, 1, -2288.117, 1333.648, 63.67144, 5.427974, 120, 0, 0),
+(@CGUID+2, 11560, 1, 1, 1, -2317.772, 1378.803, 63.67144, 2.548181, 120, 0, 0),
+(@CGUID+3, 11560, 1, 1, 1, -2245.802, 1315.414, 63.67144, 3.176499, 120, 0, 0),
+(@CGUID+4, 11560, 1, 1, 1, -2276.162, 1328.752, 63.82001, 5.811946, 120, 0, 0),
+(@CGUID+5, 11560, 1, 1, 1, -2281.066, 1339.434, 63.67144, 2.426008, 120, 0, 0),
+(@CGUID+6, 11560, 1, 1, 1, -2265.949, 1334.62, 63.67144, 3.874631, 120, 0, 0),
+(@CGUID+7, 11560, 1, 1, 1, -2266.548, 1308.922, 64.06808, 2.09432, 120, 0, 0),
+(@CGUID+8, 11560, 1, 1, 1, -2275.962, 1315.779, 63.94889, 5.846853, 120, 0, 0),
+(@CGUID+9, 11560, 1, 1, 1, -2285.754, 1323.675, 63.68898, 5.707227, 120, 0, 0),
+(@CGUID+10, 11560, 1, 1, 1, -2311.181, 1387.165, 63.67143, 4.39823, 120, 0, 0),
+(@CGUID+11, 11560, 1, 1, 1, -2255.519, 1311.52, 63.72472, 5.969026, 120, 0, 0),
+(@CGUID+12, 11560, 1, 1, 1, -2292.626, 1380.353, 63.68015, 3.001966, 120, 0, 0),
+(@CGUID+13, 11560, 1, 1, 1, -2309.959, 1347.675, 63.67144, 1.216367, 120, 0, 0),
+(@CGUID+14, 11560, 1, 1, 1, -2295.897, 1361.538, 63.6894, 2.80998, 120, 0, 0),
+(@CGUID+15, 11560, 1, 1, 1, -2305.648, 1359.731, 63.69492, 4.485496, 120, 0, 0),
+(@CGUID+16, 11560, 1, 1, 1, -2256.498, 1321.57, 63.67144, 5.148721, 120, 0, 0);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql
new file mode 100644
index 00000000000..f99651da7b9
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql
@@ -0,0 +1,3 @@
+UPDATE `creature_template` SET `gossip_menu_id`=1285 WHERE `entry`=8436;
+UPDATE `smart_scripts` SET `event_param1`=1286 WHERE `entryorguid`=8436 AND `source_type`=0 AND `id`=0;
+UPDATE `gossip_menu_option` SET `action_menu_id`=0 WHERE `menu_id`=1286;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql
new file mode 100644
index 00000000000..0c9f0154dec
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql
@@ -0,0 +1,17 @@
+UPDATE `creature` SET `guid`=76001 WHERE `guid`=214003;
+UPDATE `creature` SET `guid`=76002 WHERE `guid`=214004;
+UPDATE `creature` SET `guid`=76003 WHERE `guid`=214005;
+UPDATE `creature` SET `guid`=76004 WHERE `guid`=214006;
+UPDATE `creature` SET `guid`=76005 WHERE `guid`=214007;
+UPDATE `creature` SET `guid`=76006 WHERE `guid`=214008;
+UPDATE `creature` SET `guid`=76007 WHERE `guid`=214009;
+UPDATE `creature` SET `guid`=76008 WHERE `guid`=214010;
+UPDATE `creature` SET `guid`=76009 WHERE `guid`=214011;
+UPDATE `creature` SET `guid`=76010 WHERE `guid`=214012;
+UPDATE `creature` SET `guid`=76011 WHERE `guid`=214013;
+UPDATE `creature` SET `guid`=76012 WHERE `guid`=214014;
+UPDATE `creature` SET `guid`=76013 WHERE `guid`=214015;
+UPDATE `creature` SET `guid`=76014 WHERE `guid`=214016;
+UPDATE `creature` SET `guid`=76015 WHERE `guid`=214017;
+UPDATE `creature` SET `guid`=76016 WHERE `guid`=214018;
+UPDATE `creature` SET `guid`=76017 WHERE `guid`=214019;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql
new file mode 100644
index 00000000000..659d167e552
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql
@@ -0,0 +1,316 @@
+SET @GUID:=14830; -- 6 free GO guid required (spell focus)
+SET @SUMMON := 49991;
+SET @GOLEM := 24825;
+SET @BENCH := 186958;
+SET @Relic := 24824;
+SET @Triggger :=24845;
+SET @IronDwarf :=24846;
+SET @LOKEN := 24847;
+SET @Ouvrier:= 23672;
+SET @Maitre:=23675;
+SET @Garde:=23673;
+SET @IRONGolem:=24271;
+SET @Earth:=24340;
+SET @A1A2:=24826;
+SET @B1B2:=24827;
+SET @C1C2:=24828;
+SET @D1:=24831;
+SET @D2:=24829;
+SET @D3:=24832;
+
+DELETE FROM `spell_target_position` WHERE `id` in (49992);
+INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
+(49992, 571, 478.951782, -5941.529297, 308.749969, 0.419872);
+
+UPDATE `creature_template` SET `spell1`=44608, `spell2`=44610, `spell3`=44609,`AIName`='SmartAI', `InhabitType`=5 WHERE `entry`=@GOLEM;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@LOKEN, @IronDwarf, @Triggger, @Relic, @Ouvrier, @Maitre, @Garde, @IRONGolem, @Earth, @A1A2, @B1B2, @C1C2, @D1, @D2, @D3);
+UPDATE `creature_template` SET `faction`= 1954 WHERE `entry`=@LOKEN;
+UPDATE `creature_template` SET `flags_extra`= 0 WHERE `entry`=@Triggger;
+
+DELETE FROM `creature` WHERE `id` IN (24846, 24847);
+DELETE FROM `creature_addon` WHERE `guid` =97731;
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id`= @Triggger;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Relic AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (6,7);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Triggger AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Triggger*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@IronDwarf AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@IronDwarf*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@LOKEN AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@LOKEN*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Garde AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Garde*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Garde*100+1 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Ouvrier AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Ouvrier*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Ouvrier*100+1 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Earth AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Maitre AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Maitre*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Maitre*100+1 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@IRONGolem AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@IRONGolem*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@IRONGolem*100+1 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@A1A2*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@B1B2*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@C1C2*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@D1*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@D2*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@D3*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
+(@BENCH,1,6,7,62,0,100,0,9024,3,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'),
+(@BENCH,1,7,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'),
+(@GOLEM,0,0,0,54,0,100,0,0,0,0,0,75,44643,0,0,0,0,0,23,0,0,0,0,0,0,0,'Iron Rune Construct - Just Summoned - Add aura to owner'),
+(@GOLEM,0,1,0,28,0,100,0,0,0,0,0,28,44643,0,0,0,0,0,23,0,0,0,0,0,0,0,'Iron Rune Construct - Passenger removed - remove aura from owner'),
+(@Relic,0,0,0,8,0,100,0,44610,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Relict - SpellHit - Despawn'),
+(@Triggger,0,0,0,10,0,100,0,1,20,180000,180000,80,@Triggger*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Triggger - LOS - Action list'),
+(@Triggger*100,9,0,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,306.098907, -5706.150391, 102.435051, 4.96977,'Triggger - Action list - Summon'),
+(@Triggger*100,9,1,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,311.025482, -5702.801270, 101.934959, 5.187225,'Triggger - Action list - Summon'),
+(@Triggger*100,9,2,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,309.754456, -5703.156250, 102.070854, 5.187225,'Triggger - Action list - Summon'),
+(@Triggger*100,9,3,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,308.222504, -5703.797363, 102.231758, 5.187225,'Triggger - Action list - Summon'),
+(@Triggger*100,9,4,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,307.043610, -5704.315430, 102.356087, 5.187225,'Triggger - Action list - Summon'),
+(@Triggger*100,9,5,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,304.169464, -5706.838379, 102.696602, 5.187225,'Triggger - Action list - Summon'),
+(@Triggger*100,9,6,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,303.129547, -5707.277344, 102.978165, 5.187225,'Triggger - Action list - Summon'),
+(@Triggger*100,9,7,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,297.246,-5726.82,96.2681,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,8,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,292.82,-5726.04,96.5843,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,9,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,292.562,-5728.57,96.5857,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,10,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,292.15,-5727.42,96.5874,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,11,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,294.578,-5730.09,96.2958,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,12,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,296.196,-5730.17,96.0082,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,13,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,297.603,-5730.79,95.6955,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,14,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,299.397,-5729.56,95.7274,0.347607,'Triggger - Action list - Summon'),
+(@Triggger*100,9,15,0,0,0,100,0,0,0,0,0,12,@LOKEN,5,0,0,0,0,8,0,0,0,315.101,-5723.06,96.2541,3.05433,'Triggger - Action list - Summon'),
+(@Triggger*100,9,16,0,0,0,100,0,70000,70000,0,0,41,0,0,0,0,0,0,11,@IronDwarf,40,0,0,0,0,0,'Triggger - Action List - Despawn'),
+(@Triggger,0,1,0,25,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Triggger - On reset - set Invisible'),
+(@IronDwarf,0,0,0,54,0,100,0,0,0,0,0,80,@IronDwarf*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Just Summoned - Action List'),
+(@IronDwarf*100,9,0,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Action List - Set run off'),
+(@IronDwarf*100,9,1,0,0,0,100,0,0,0,0,0,46,8,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Action List - Move forward'),
+(@IronDwarf*100,9,2,0,0,0,100,0,4000,4000,0,0,11,68442,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Action List - Cast Kneels'),
+(@LOKEN,0,0,0,54,0,100,0,0,0,0,0,80,@LOKEN*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Just Summoned - Action List'),
+(@LOKEN*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,'LOKEN - Action List - Talk'),
+(@LOKEN*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,'LOKEN - Action List - Talk'),
+(@LOKEN*100,9,2,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'),
+(@LOKEN*100,9,3,0,0,0,100,0,8000,8000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'),
+(@LOKEN*100,9,4,0,0,0,100,0,9000,9000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'),
+(@LOKEN*100,9,5,0,0,0,100,0,9000,9000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'),
+(@LOKEN*100,9,6,0,0,0,100,0,7000,7000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'),
+(@LOKEN*100,9,7,0,0,0,100,0,0,0,0,0,11,44682,0,0,0,0,0,21,30,0,0,0,0,0,0,'LOKEN - Action List - Cast Credit'),
+(@LOKEN*100,9,8,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,11,@IronDwarf,40,0,0,0,0,0,'LOKEN - Action List - Despawn Dwarfs'),
+(@LOKEN*100,9,9,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Despawn'),
+(@IronDwarf,0,1,0,4,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - On aggro - despawn'),
+(@LOKEN,0,1,0,4,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - On aggro - despawn'),
+(@Garde,0,0,0,10,0,20,0,1,9,60000,60000,80,@Garde*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - LOS - Action list'),
+(@Garde*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,'Garde - Action list - TALK'),
+(@Garde*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,'Garde - Action list - Set Event phase1'),
+(@Garde*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - Root'),
+(@Garde*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Garde - Action list - Set Orientation'),
+(@Garde*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - remove root'),
+(@Garde*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'Garde - Action list - remove Aura'),
+(@Garde*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'Garde - Action list - Talk'),
+(@Garde,0,1,0,8,1,100,0,44609,0,0,0,80,@Garde*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - spell hit - action list'),
+(@Garde*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - Set Event phase 0'),
+(@Garde*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Garde - Action list - TALK'),
+(@Garde*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - TALK'),
+(@Garde,0,2,0,0,0,100,0,5000,5000,30000,30000,11,42580,0,0,0,0,0,2,0,0,0,0,0,0,0,'Garde - IC - Cast'),
+(@Garde,0,3,0,4,0,100,0,0,0,0,0,11,49758,0,0,0,0,0,2,0,0,0,0,0,0,0,'Garde - On aggro - Cast'),
+(@Ouvrier,0,0,0,10,0,20,0,1,9,60000,60000,80,@Ouvrier*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - LOS - Action list'),
+(@Ouvrier*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,'Ouvrier - Action list - TALK'),
+(@Ouvrier*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,'Ouvrier - Action list - Set Event phase1'),
+(@Ouvrier*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - Root'),
+(@Ouvrier*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Ouvrier - Action list - Set Orientation'),
+(@Ouvrier*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - remove root'),
+(@Ouvrier*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'Ouvrier - Action list - remove Aura'),
+(@Ouvrier*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'Ouvrier - Action list - Talk'),
+(@Ouvrier,0,1,0,8,1,100,0,44609,0,0,0,80,@Ouvrier*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - spell hit - action list'),
+(@Ouvrier*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - Set Event phase 0'),
+(@Ouvrier*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Ouvrier - Action list - TALK'),
+(@Ouvrier*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - TALK'),
+(@Ouvrier,0,2,0,0,0,100,0,5000,5000,5000,8000,11,49749,0,0,0,0,0,2,0,0,0,0,0,0,0,'Ouvrier - IC - Cast'),
+(@Maitre,0,0,0,10,0,20,0,1,9,60000,60000,80,@Maitre*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - LOS - Action list'),
+(@Maitre*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,'Maitre - Action list - TALK'),
+(@Maitre*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,'Maitre - Action list - Set Event phase1'),
+(@Maitre*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - Root'),
+(@Maitre*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Maitre - Action list - Set Orientation'),
+(@Maitre*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - remove root'),
+(@Maitre*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'Maitre - Action list - remove Aura'),
+(@Maitre*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'Maitre - Action list - Talk'),
+(@Maitre,0,1,0,8,1,100,0,44609,0,0,0,80,@Maitre*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - spell hit - action list'),
+(@Maitre*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - Set Event phase 0'),
+(@Maitre*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Maitre - Action list - TALK'),
+(@Maitre*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - TALK'),
+(@Maitre,0,2,0,0,0,100,0,5000,5000,7000,10000,11,49753,0,0,0,0,0,2,0,0,0,0,0,0,0,'Garde - IC - Cast'),
+(@IRONGolem,0,0,0,10,0,20,0,1,9,60000,60000,80,@IRONGolem*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - LOS - Action list'),
+(@IRONGolem*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,'IRONGolem - Action list - TALK'),
+(@IRONGolem*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,'IRONGolem - Action list - Set Event phase1'),
+(@IRONGolem*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - Root'),
+(@IRONGolem*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'IRONGolem - Action list - Set Orientation'),
+(@IRONGolem*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - remove root'),
+(@IRONGolem*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'IRONGolem - Action list - remove Aura'),
+(@IRONGolem*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'IRONGolem - Action list - talk'),
+(@IRONGolem,0,1,0,8,1,100,0,44609,0,0,0,80,@IRONGolem*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - spell hit - action list'),
+(@IRONGolem*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - Set Event phase 0'),
+(@IRONGolem*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'IRONGolem - Action list - TALK'),
+(@IRONGolem*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - TALK'),
+(@IRONGolem,0,2,0,0,0,100,0,5000,5000,7000,10000,11,49729,0,0,0,0,0,2,0,0,0,0,0,0,0,'IRONGolem - IC - Cast'),
+(@IRONGolem,0,3,0,1,0,100,0,50000,60000,60000,90000,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - ooc - talk'),
+(@Earth,0,0,0,0,0,100,0,2000,5000,6000,8000,11,49742,0,0,0,0,0,2,0,0,0,0,0,0,0,'IRONGolem - IC - Cast'),
+(@GOLEM,0,2,0,8,0,100,0,44626,0,5000,5000,80,@A1A2*100,0,0,0,0,0,19,@A1A2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'),
+(@A1A2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57776,186953,0,0,0,0,0,'A1A2 - Action list - Activate Gobject'),
+(@A1A2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'A1A2 - Action list - SetData'),
+(@GOLEM,0,3,0,8,0,100,0,44626,0,5000,5000,80,@B1B2*100,0,0,0,0,0,19,@B1B2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'),
+(@B1B2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57915,186960,0,0,0,0,0,'B1B2 - Action list - Activate Gobject'),
+(@B1B2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,2,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'B1B2 - Action list - SetData'),
+(@GOLEM,0,4,0,8,0,100,0,44626,0,5000,5000,80,@C1C2*100,0,0,0,0,0,19,@C1C2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'),
+(@C1C2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57963,186961,0,0,0,0,0,'C1C2 - Action list - Activate Gobject'),
+(@C1C2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,3,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'C1C2 - Action list - SetData'),
+(@GOLEM,0,5,0,8,0,100,0,44626,0,5000,5000,80,@D1*100,0,0,0,0,0,19,@D1,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'),
+(@D1*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57972,186962,0,0,0,0,0,'D1 - Action list - Activate Gobject'),
+(@D1*100,9,1,0,0,0,100,0,0,0,0,0,45,0,4,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'D1 - Action list - SetData'),
+(@GOLEM,0,6,0,8,0,100,0,44626,0,5000,5000,80,@D2*100,0,0,0,0,0,19,@D2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'),
+(@D2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57988,186963,0,0,0,0,0,'D2 - Action list - Activate Gobject'),
+(@D2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,5,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'D2 - Action list - SetData'),
+(@GOLEM,0,7,0,8,0,100,0,44626,0,5000,5000,80,@D3*100,0,0,0,0,0,19,@D3,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'),
+(@D3*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,66097,186964,0,0,0,0,0,'D3 - Action list - Activate Gobject'),
+(@D3*100,9,1,0,0,0,100,0,0,0,0,0,45,0,6,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'D3 - Action list - SetData'),
+(@GOLEM,0,8,0,38,0,100,0,0,1,0,0,53,1,@A1A2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'),
+(@GOLEM,0,9,0,38,0,100,0,0,2,0,0,53,1,@B1B2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'),
+(@GOLEM,0,10,0,38,0,100,0,0,3,0,0,53,1,@C1C2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'),
+(@GOLEM,0,11,0,38,0,100,0,0,4,0,0,53,1,@D1,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'),
+(@GOLEM,0,12,0,38,0,100,0,0,5,0,0,53,1,@D2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'),
+(@GOLEM,0,13,0,38,0,100,0,0,6,0,0,53,1,@D3,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'),
+(@GOLEM,0,14,0,58,0,100,0,0,0,0,0,28,44626,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On waypoint end - Remove aura');
+
+DELETE FROM `waypoints` WHERE `entry` IN (@C1C2, @B1B2, @A1A2, @D1, @D2, @D3);
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@C1C2,1, 250.667023, -5770.241699, 252.249847,'Iron Rune Construct'),
+(@C1C2,2, 158.802368, -5823.064941, 7.080285,'Iron Rune Construct'),
+(@B1B2,1, 268.167053, -5814.819824, 282.507080,'Iron Rune Construct'),
+(@B1B2,2, 255.435913, -5891.186035, 83.068146,'Iron Rune Construct'),
+(@A1A2,1, 221.699432, -5736.851074, 289.626099,'Iron Rune Construct'),
+(@A1A2,2, 157.139877, -5712.004883, 189.551346,'Iron Rune Construct'),
+(@D1,1, 212.711884, -5808.783691, 297.261902,'Iron Rune Construct'),
+(@D1,2, 276.179016, -5755.332031, 268.456543,'Iron Rune Construct'),
+(@D2,1, 228.848938, -5740.563477, 283.448700,'Iron Rune Construct'),
+(@D2,2, 278.266785, -5758.165039, 268.454834,'Iron Rune Construct'),
+(@D3,1, 266.918884, -5837.802246, 304.154144,'Iron Rune Construct'),
+(@D3,2, 280.913208, -5761.616699, 268.456696,'Iron Rune Construct');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Triggger;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@Triggger,0,31,3,24825,0,0,'','event require npc 24825');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@IRONGolem;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@IRONGolem,0,31,3,24825,0,0,'','event require npc 24825');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Garde;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@Garde,0,31,3,24825,0,0,'','event require npc 24825');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Maitre;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@Maitre,0,31,3,24825,0,0,'','event require npc 24825');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Ouvrier;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@Ouvrier,0,31,3,24825,0,0,'','event require npc 24825');
+
+DELETE FROM `creature_text` WHERE `entry`IN (@LOKEN, @GOLEM, @Garde, @Ouvrier, @Maitre, @IRONGolem);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES
+(@LOKEN,0,0,"The sound of thunder roars throughout the cavern.",41,9,100,0,0,0,'LOKEN', 23927),
+(@LOKEN,1,0,"Come, minions! Your master calls!",14,9,100,0,0,0,'LOKEN', 23922),
+(@LOKEN,2,0,"The work of your brothers in the Storm Peaks has reached a frenzied pace. Soon, Father will be freed.",14,9,100,0,0,0,'LOKEN', 23923),
+(@LOKEN,3,0,"Your brothers to the north have subjugated the stone behemoths and set them on the path to Ulduar. Soon, the remaining defenses of the Pantheon will be neutralized.",14,9,100,0,0,0,'LOKEN', 23924),
+(@LOKEN,4,0,"The three fissures opened by the mortals of this region must be silenced. The earth hears and sees what we do and will continue to interfere with our efforts if the way is not closed.",14,9,100,0,0,0,'LOKEN', 23925),
+(@LOKEN,5,0,"Bury this place! Your master demands it!",14,9,100,0,0,0,'LOKEN', 23926),
+(@LOKEN,6,0,"The sound of thunder dissipates.",41,9,100,0,0,0,'LOKEN', 23928),
+(@GOLEM,0,0,"Alert! Alert! Construct senses that enemies have breeched our defenses. Increase pace.",12,9,100,0,0,0,'GOLEM', 23895),
+(@GOLEM,0,1,"Construct class carrier reporting for duty. Primary function: Overseeing.",12,9,100,0,0,0,'GOLEM', 23896),
+(@GOLEM,0,2,"There is nothing to see here. Proceed with your mandated duties.",12,9,100,0,0,0,'GOLEM', 23897),
+(@GOLEM,0,3,"To interfere with construct's function results in termination. Move along.",12,9,100,0,0,0,'GOLEM', 23899),
+(@GOLEM,0,4,"Construct must not be questioned by iron dwarf servant. Commence deconstruction.",12,9,100,0,0,0,'GOLEM', 23900),
+(@GOLEM,0,5,"Construct is not authorized to communicate with lesser beings. Being must double their efforts.",12,9,100,0,0,0,'GOLEM', 23901),
+(@GOLEM,0,6,"Did you lose your wallet? Construct has found wallet with overabundance of currency.",12,9,100,0,0,0,'GOLEM', 23902),
+(@Garde,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903),
+(@Garde,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904),
+(@Garde,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905),
+(@Garde,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906),
+(@Garde,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907),
+(@Garde,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910),
+(@Garde,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911),
+(@Garde,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912),
+(@Garde,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913),
+(@Garde,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915),
+(@Garde,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921),
+(@Garde,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908),
+(@Ouvrier,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903),
+(@Ouvrier,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904),
+(@Ouvrier,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905),
+(@Ouvrier,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906),
+(@Ouvrier,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907),
+(@Ouvrier,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910),
+(@Ouvrier,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911),
+(@Ouvrier,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912),
+(@Ouvrier,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913),
+(@Ouvrier,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915),
+(@Ouvrier,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921),
+(@Ouvrier,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908),
+(@Maitre,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903),
+(@Maitre,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904),
+(@Maitre,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905),
+(@Maitre,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906),
+(@Maitre,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907),
+(@Maitre,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910),
+(@Maitre,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911),
+(@Maitre,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912),
+(@Maitre,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913),
+(@Maitre,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915),
+(@Maitre,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921),
+(@Maitre,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908),
+(@IRONGolem,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903),
+(@IRONGolem,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904),
+(@IRONGolem,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905),
+(@IRONGolem,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906),
+(@IRONGolem,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907),
+(@IRONGolem,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910),
+(@IRONGolem,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911),
+(@IRONGolem,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912),
+(@IRONGolem,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913),
+(@IRONGolem,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915),
+(@IRONGolem,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921),
+(@IRONGolem,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908),
+(@IRONGolem,3,0,"Continue deconstruction.",12,9,100,0,0,0,'Garde', 23919),
+(@IRONGolem,3,1,"Do not loiter.",12,9,100,0,0,0,'Garde', 23918),
+(@IRONGolem,3,2,"Work must continue. Double your efforts.",12,9,100,0,0,0,'Garde', 23916),
+(@IRONGolem,3,3,"Brontes sees all.",12,9,100,0,0,0,'Garde', 23917),
+(@IRONGolem,3,4,"Reinforcements en route. Function must be unabated.",12,9,100,0,0,0,'Garde', 23920),
+(@IRONGolem,3,5,"Do you bring word from the creator?",12,9,100,0,0,0,'Garde', 23914),
+(@IRONGolem,3,6,"All hail the great creator.",12,9,100,0,0,0,'Garde', 23898);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44609;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 44609, 0, 31, 3, 24271, 0, 0, '', 'Bluff target'),
+(13, 1, 44609, 1, 31, 3, 23673, 0, 0, '', 'Bluff target'),
+(13, 1, 44609, 2, 31, 3, 23672, 0, 0, '', 'Bluff target'),
+(13, 1, 44609, 3, 31, 3, 23675, 0, 0, '', 'Bluff target');
+
+SET @ID := 9024;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@ID AND `SourceEntry`=3;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,@ID,3,0,9,11495,0,0,0,'','Show gossip option if player has quest The Delicate Sound of Thunder'),
+(15,@ID,3,1,9,11494,0,0,0,'','Show gossip option if player has quest Lightning Infused Relics');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44610;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 44610, 0, 31, 3, 24824, 0, 0, '', 'Collect Data target');
+
+DELETE FROM `gameobject` WHERE `guid` in (@GUID+0, @GUID+1, @GUID+2, @GUID+3, @GUID+4, @GUID+5);
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@GUID+0,186959,571,1,1,276.169006, -5755.250000, 268.455994,0,0,0,0,1,120,255,1),
+(@GUID+1,186959,571,1,1,278.528992, -5758.350098, 268.455994,0,0,0,0,1,120,255,1),
+(@GUID+2,186959,571,1,1,280.851990, -5761.399902, 268.455994,0,0,0,0,1,120,255,1),
+(@GUID+3,186959,571,1,1,158.707001, -5823.319824, 7.006820,0,0,0,0,1,120,255,1),
+(@GUID+4,186959,571,1,1,157.201996, -5712.160156, 189.315002,0,0,0,0,1,120,255,1),
+(@GUID+5,186959,571,1,1,255.533997, -5891.359863, 82.992897,0,0,0,0,1,120,255,1);
+
+UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id` IN (24828, 24829, 24831, 24832, 24826, 24827);
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 44608;
+INSERT INTO `spell_linked_spell` VALUES (44608, 44626, 0, 'Rocket Jump');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql
new file mode 100644
index 00000000000..3df79d26dad
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql
@@ -0,0 +1,32 @@
+-- scriptsupport for questaccept of [Q] Eranikus, Tyrant of the Dream
+-- Malfurion Stormrage SAI
+SET @ENTRY := 15362;
+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,1,54,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Malfurion Stormrage - On Just Summoned - Remove Npc Flag Questgiver"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Malfurion Stormrage - On Just Summoned - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 1536200;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 0"),
+(@ENTRY,9,1,0,0,0,100,0,1500,1500,0,0,5,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Play Emote 2"),
+(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 1"),
+(@ENTRY,9,3,0,0,0,100,0,1000,1000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 2"),
+(@ENTRY,9,4,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 3"),
+(@ENTRY,9,5,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 4"),
+(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Add Npc Flag Questgiver");
+
+DELETE FROM `creature_text` WHERE `entry`=15362;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(15362, 0, 0, 'The walls of the chamber tremble. Something is happening...', 16, 0, 100, 0, 0, 0, 11191, 0, 'Malfurion Stormrage'),
+(15362, 1, 0, 'Be steadfast, champion. I know why it is that you are here and I know what it is that you seek. Eranikus will not give up the shard freely. He has been twisted... twisted by the same force that you seek to destroy.', 12, 0, 100, 0, 0, 0, 11193, 0, 'Malfurion Stormrage'),
+(15362, 2, 0, 'Are you really surprised? Is it hard to believe that the power of an Old God could reach even inside the Dream? It is true - Eranikus, Tyrant of the Dream, wages a battle against us all. The Nightmare follows in his wake of destruction.', 12, 0, 100, 0, 0, 0, 11194, 0, 'Malfurion Stormrage'),
+(15362, 3, 0, 'Understand this, Eranikus wants nothing more than to be brought to Azeroth from the Dream. Once he is out, he will stop at nothing to destroy my physical manifestation. This, however, is the only way in which you could recover the scepter shard.', 12, 0, 100, 0, 0, 0, 11195, 0, 'Malfurion Stormrage'),
+(15362, 4, 0, 'You will bring him back into this world, champion.', 12, 0, 100, 0, 0, 0, 11196, 0, 'Malfurion Stormrage');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=15362;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 15362, 0, 0, 23, 0, 1477, 0, 0, 0, 0, 0, '', 'Malfurion Stormrage - Only run SAI in the Sunken Temple');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql
new file mode 100644
index 00000000000..0038b6a8927
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql
@@ -0,0 +1,37 @@
+--
+-- William Pestle SAI
+SET @ENTRY := 253;
+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,20,0,100,0,112,0,0,0,80,@ENTRY*100+00,0,2,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Quest 'Collecting Kelp' Finished - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 25300;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,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,"William Pestle - On Script - Say Line 0"),
+(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.45219,"William Pestle - On Script - Set Orientation 1,45219"),
+(@ENTRY,9,2,0,0,0,100,0,1000,1000,0,0,5,69,0,0,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Script - Play Emote 69"),
+(@ENTRY,9,3,0,0,0,100,0,3000,3000,0,0,66,0,0,0,0,0,0,21,10,0,0,0,0,0,0,"William Pestle - On Script - Set Orientation Closest Player"),
+(@ENTRY,9,4,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Script - Say Line 1");
+
+-- Maybell Maclure SAI
+SET @ENTRY := 251;
+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,20,0,100,0,114,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Maybell Maclure - On Quest 'The Escape' Finished - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 25100;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.39307,"On Script - Set Orientation 5,39307"),
+(@ENTRY,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,"On Script - Say Line 0"),
+(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Play Emote 7"),
+(@ENTRY,9,3,0,0,0,100,0,4000,4000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Despawn Instant");
+
+DELETE FROM `creature_text` WHERE `entry`=251;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(251, 0, 0, 'Here goes nothing...', 12, 0, 100, 0, 0, 0, 1862, 0, 'Maybell Maclure');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql
new file mode 100644
index 00000000000..b9b4ea7a247
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql
@@ -0,0 +1,7 @@
+--
+-- Tortured Skeleton SAI
+SET @ENTRY := 18797;
+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,4,0,100,0,0,0,0,0,91,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tortured Skeleton - On Aggro - Remove Flag Standstate Dead");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql
new file mode 100644
index 00000000000..b439d0f3a78
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql
@@ -0,0 +1,48 @@
+--
+-- Senetil Selarin spawn after completition of quest=995 or quest=994
+UPDATE `creature_template` SET `speed_walk`=1 WHERE `entry`=3694;
+UPDATE `quest_template` SET `PrevQuestId`=0 WHERE `Id`=990;
+-- Terenthis SAI
+SET @ENTRY := 3693;
+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,20,0,100,0,995,0,0,0,12,3694,6,180000,0,0,0,8,0,0,0,6339.14,341.764,24.3387,0.498114,"Terenthis - On Quest 'Escape Through Stealth' Finished - Summon Creature 'Sentinel Selarin'"),
+(@ENTRY,0,1,0,20,0,100,0,994,0,0,0,12,3694,6,180000,0,0,0,8,0,0,0,6339.14,341.764,24.3387,0.498114,"Terenthis - On Quest 'Escape Through Force' Finished - Summon Creature 'Sentinel Selarin'");
+
+-- Sentinel Selarin SAI
+SET @ENTRY := 3694;
+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,2,54,0,100,0,0,0,0,0,53,1,3694,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,23,3694,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Waypoint 23 Reached - Despawn Instant"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Just Summoned - Set Active On"),
+(@ENTRY,0,3,0,40,0,100,0,1,3694,0,0,54,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Waypoint 1 Reached - Pause Waypoint"),
+(@ENTRY,0,4,0,40,0,100,0,12,3694,0,0,54,120000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Waypoint 12 Reached - Pause Waypoint");
+
+DELETE FROM `waypoints` WHERE `entry`=3694;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(3694, 1, 6339.14,341.764,24.3387, 'Sentinel Selarin'),
+(3694, 2, 6353.39,354.557,22.3779, 'Sentinel Selarin'),
+(3694, 3, 6368.99,357.894,21.5712, 'Sentinel Selarin'),
+(3694, 4, 6387.81,359.455,18.9899, 'Sentinel Selarin'),
+(3694, 5, 6398.12,363.588,17.366, 'Sentinel Selarin'),
+(3694, 6, 6403.68,370.92,15.6815, 'Sentinel Selarin'),
+(3694, 7, 6416.57,392.998,12.0215, 'Sentinel Selarin'),
+(3694, 8, 6424.95,399.193,10.9586, 'Sentinel Selarin'),
+(3694, 9, 6428.93,396.971,11.1736, 'Sentinel Selarin'),
+(3694, 10, 6432,388.708,13.7662, 'Sentinel Selarin'),
+(3694, 11, 6436.71,375.264,13.9403, 'Sentinel Selarin'),
+(3694, 12, 6434.92,367.203,13.9403, 'Sentinel Selarin'),
+(3694, 13, 6436.9,374.833,13.9403, 'Sentinel Selarin'),
+(3694, 14, 6431.63,389.723,13.5875, 'Sentinel Selarin'),
+(3694, 15, 6428.84,397.45,11.0941, 'Sentinel Selarin'),
+(3694, 16, 6424,400.084,10.9784, 'Sentinel Selarin'),
+(3694, 17, 6413.76,392.804,12.2825, 'Sentinel Selarin'),
+(3694, 18, 6401.4,368.195,16.4249, 'Sentinel Selarin'),
+(3694, 19, 6393.69,360.887,18.1549, 'Sentinel Selarin'),
+(3694, 20, 6377.21,357.731,20.6589, 'Sentinel Selarin'),
+(3694, 21, 6358.35,357.353,22.2106, 'Sentinel Selarin'),
+(3694, 22, 6348.45,352.662,22.6056, 'Sentinel Selarin'),
+(3694, 23, 6322.42,326.649,25.3338, 'Sentinel Selarin');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql
new file mode 100644
index 00000000000..8aed78b7305
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql
@@ -0,0 +1,234 @@
+-- Dread Tactician
+-- Pathing for Entry: 16959 'TDB FORMAT'
+SET @NPC := 59170;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-306.8688,`position_y`=1556.233,`position_z`=41.73843 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-306.8688,1556.233,41.73843,0,0,0,0,100,0),
+(@PATH,2,-303.8688,1555.983,40.73843,0,0,0,0,100,0),
+(@PATH,3,-299.8688,1555.483,40.23843,0,0,0,0,100,0),
+(@PATH,4,-297.8688,1555.233,39.48843,0,0,0,0,100,0),
+(@PATH,5,-295.1188,1554.983,38.73843,0,0,0,0,100,0),
+(@PATH,6,-292.1188,1554.483,38.48843,0,0,0,0,100,0),
+(@PATH,7,-289.1188,1554.233,37.73843,0,0,0,0,100,0),
+(@PATH,8,-287.1188,1553.983,37.23843,0,0,0,0,100,0),
+(@PATH,9,-284.1188,1553.983,36.48843,0,0,0,0,100,0),
+(@PATH,10,-283.8904,1553.79,36.20832,0,0,0,0,100,0),
+(@PATH,11,-281.8904,1553.54,35.95832,0,0,0,0,100,0),
+(@PATH,12,-275.6404,1556.04,35.70832,0,0,0,0,100,0),
+(@PATH,13,-269.0029,1558.513,35.23201,0,0,0,0,100,0),
+(@PATH,14,-270.5029,1562.263,35.98201,0,0,0,0,100,0),
+(@PATH,15,-271.7529,1565.013,36.48201,0,0,0,0,100,0),
+(@PATH,16,-272.7529,1567.513,36.98201,0,0,0,0,100,0),
+(@PATH,17,-274.0029,1570.263,37.73201,0,0,0,0,100,0),
+(@PATH,18,-275.0029,1573.013,38.48201,0,0,0,0,100,0),
+(@PATH,19,-276.4716,1576.198,39.42199,0,0,0,0,100,0),
+(@PATH,20,-278.2216,1576.948,39.92199,0,0,0,0,100,0),
+(@PATH,21,-280.9716,1578.448,40.92199,0,0,0,0,100,0),
+(@PATH,22,-283.7216,1579.698,41.67199,0,0,0,0,100,0),
+(@PATH,23,-285.4716,1580.448,42.17199,0,0,0,0,100,0),
+(@PATH,24,-287.9716,1581.698,42.92199,0,0,0,0,100,0),
+(@PATH,25,-289.7216,1582.448,43.67199,0,0,0,0,100,0),
+(@PATH,26,-291.4716,1583.448,44.42199,0,0,0,0,100,0),
+(@PATH,27,-294.2216,1584.698,45.17199,0,0,0,0,100,0),
+(@PATH,28,-294.3971,1584.785,45.42167,0,0,0,0,100,0),
+(@PATH,29,-295.1471,1585.035,45.42167,0,0,0,0,100,0),
+(@PATH,30,-304.3971,1576.535,45.92167,0,0,0,0,100,0),
+(@PATH,31,-312.2731,1568.967,46.45709,0,0,0,0,100,0),
+(@PATH,32,-318.7731,1561.467,45.70709,0,0,0,0,100,0),
+(@PATH,33,-333.8887,1543.732,45.3224,0,0,0,0,100,0),
+(@PATH,34,-333.6387,1540.732,44.5724,0,0,0,0,100,0),
+(@PATH,35,-333.3887,1538.732,43.8224,0,0,0,0,100,0),
+(@PATH,36,-333.3887,1536.732,43.3224,0,0,0,0,100,0),
+(@PATH,37,-333.1387,1533.732,42.5724,0,0,0,0,100,0),
+(@PATH,38,-332.8887,1531.732,41.8224,0,0,0,0,100,0),
+(@PATH,39,-332.8887,1529.732,41.0724,0,0,0,0,100,0),
+(@PATH,40,-332.6387,1527.732,40.5724,0,0,0,0,100,0),
+(@PATH,41,-332.3887,1525.732,39.8224,0,0,0,0,100,0),
+(@PATH,42,-332.3887,1523.732,39.3224,0,0,0,0,100,0),
+(@PATH,43,-332.1387,1521.982,38.8224,0,0,0,0,100,0),
+(@PATH,44,-331.8887,1518.982,38.3224,0,0,0,0,100,0),
+(@PATH,45,-331.8887,1516.982,37.5724,0,0,0,0,100,0),
+(@PATH,46,-331.8887,1513.982,36.8224,0,0,0,0,100,0),
+(@PATH,47,-331.6387,1510.982,36.3224,0,0,0,0,100,0),
+(@PATH,48,-331.3887,1508.232,35.5724,0,0,0,0,100,0),
+(@PATH,49,-331.1387,1505.232,34.8224,0,0,0,0,100,0),
+(@PATH,50,-330.8887,1502.232,34.3224,0,0,0,0,100,0),
+(@PATH,51,-330.4729,1499.82,33.45189,0,0,0,0,100,0),
+(@PATH,52,-325.4729,1496.82,32.70189,0,0,0,0,100,0),
+(@PATH,53,-320.9729,1494.32,31.95189,0,0,0,0,100,0),
+(@PATH,54,-316.2229,1491.57,31.45189,0,0,0,0,100,0),
+(@PATH,55,-311.7229,1489.07,30.95189,0,0,0,0,100,0),
+(@PATH,56,-307.4729,1486.57,30.20189,0,0,0,0,100,0),
+(@PATH,57,-307.3154,1486.395,29.88731,0,0,0,0,100,0),
+(@PATH,58,-305.8154,1485.645,29.63731,0,0,0,0,100,0),
+(@PATH,59,-299.8154,1485.645,28.88731,0,0,0,0,100,0),
+(@PATH,60,-294.0654,1485.395,28.38731,0,0,0,0,100,0),
+(@PATH,61,-287.0654,1485.395,27.88731,0,0,0,0,100,0),
+(@PATH,62,-281.0654,1485.395,27.38731,0,0,0,0,100,0),
+(@PATH,63,-280.6106,1485.449,27.23963,0,0,0,0,100,0),
+(@PATH,64,-278.6106,1485.199,27.23963,0,0,0,0,100,0),
+(@PATH,65,-270.6106,1498.699,27.48963,0,0,0,0,100,0),
+(@PATH,66,-268.6106,1502.199,27.98963,0,0,0,0,100,0),
+(@PATH,67,-268.5272,1502.318,28.20654,0,0,0,0,100,0),
+(@PATH,68,-267.5272,1503.818,28.20654,0,0,0,0,100,0),
+(@PATH,69,-270.5272,1504.568,28.70654,0,0,0,0,100,0),
+(@PATH,70,-274.2772,1505.568,29.20654,0,0,0,0,100,0),
+(@PATH,71,-278.5582,1506.635,29.73862,0,0,0,0,100,0),
+(@PATH,72,-290.8082,1500.885,30.23862,0,0,0,0,100,0),
+(@PATH,73,-296.4533,1498.203,30.9129,0,0,0,0,100,0),
+(@PATH,74,-300.2033,1498.953,31.4129,0,0,0,0,100,0),
+(@PATH,75,-304.2033,1499.703,31.9129,0,0,0,0,100,0),
+(@PATH,76,-307.9533,1500.453,32.4129,0,0,0,0,100,0),
+(@PATH,77,-313.7033,1501.203,33.1629,0,0,0,0,100,0),
+(@PATH,78,-317.4067,1502.011,33.47455,0,0,0,0,100,0),
+(@PATH,79,-319.6567,1504.011,33.97455,0,0,0,0,100,0),
+(@PATH,80,-322.1567,1506.511,34.47455,0,0,0,0,100,0),
+(@PATH,81,-325.2614,1509.541,35.46749,0,0,0,0,100,0),
+(@PATH,82,-325.7614,1512.541,35.96749,0,0,0,0,100,0),
+(@PATH,83,-326.0114,1515.541,36.71749,0,0,0,0,100,0),
+(@PATH,84,-326.2614,1517.541,37.21749,0,0,0,0,100,0),
+(@PATH,85,-326.2614,1520.541,38.21749,0,0,0,0,100,0),
+(@PATH,86,-326.5114,1522.541,38.71749,0,0,0,0,100,0),
+(@PATH,87,-326.7614,1525.291,39.46749,0,0,0,0,100,0),
+(@PATH,88,-327.0114,1527.291,39.96749,0,0,0,0,100,0),
+(@PATH,89,-327.2614,1529.291,40.71749,0,0,0,0,100,0),
+(@PATH,90,-327.7614,1533.291,41.46749,0,0,0,0,100,0),
+(@PATH,91,-328.0114,1535.041,41.96749,0,0,0,0,100,0),
+(@PATH,92,-328.2614,1538.041,42.71749,0,0,0,0,100,0);
+-- 0x1C39AC4240108FC00000210000037184 .go -306.8688 1556.233 41.73843
+
+
+-- Pathing for Entry: 16959 'TDB FORMAT'
+SET @NPC := 59171;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-110.5204,`position_y`=1566.893,`position_z`=42.31397 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-110.5204,1566.893,42.31397,0,0,0,0,100,0),
+(@PATH,2,-120.2704,1568.393,41.81397,0,0,0,0,100,0),
+(@PATH,3,-127.0204,1569.893,41.31397,0,0,0,0,100,0),
+(@PATH,4,-134.6927,1571.43,40.71382,0,0,0,0,100,0),
+(@PATH,5,-139.6927,1571.68,40.21382,0,0,0,0,100,0),
+(@PATH,6,-144.6927,1571.93,39.46382,0,0,0,0,100,0),
+(@PATH,7,-149.4427,1572.18,38.71382,0,0,0,0,100,0),
+(@PATH,8,-152.4427,1572.43,38.21382,0,0,0,0,100,0),
+(@PATH,9,-155.4427,1572.68,37.71382,0,0,0,0,100,0),
+(@PATH,10,-158.4427,1572.68,36.96382,0,0,0,0,100,0),
+(@PATH,11,-161.4427,1572.93,36.46382,0,0,0,0,100,0),
+(@PATH,12,-163.4427,1573.18,35.71382,0,0,0,0,100,0),
+(@PATH,13,-163.4854,1573.449,35.89986,0,0,0,0,100,0),
+(@PATH,14,-164.2354,1573.449,35.64986,0,0,0,0,100,0),
+(@PATH,15,-163.9854,1576.449,36.39986,0,0,0,0,100,0),
+(@PATH,16,-163.7824,1580.185,36.84877,0,0,0,0,100,0),
+(@PATH,17,-161.7824,1580.435,37.59877,0,0,0,0,100,0),
+(@PATH,18,-159.0324,1580.935,38.34877,0,0,0,0,100,0),
+(@PATH,19,-155.0324,1581.935,38.84877,0,0,0,0,100,0),
+(@PATH,20,-152.2824,1582.685,39.59877,0,0,0,0,100,0),
+(@PATH,21,-148.5324,1583.435,40.34877,0,0,0,0,100,0),
+(@PATH,22,-145.5324,1584.185,41.09877,0,0,0,0,100,0),
+(@PATH,23,-145.3761,1584.15,41.32778,0,0,0,0,100,0),
+(@PATH,24,-144.1261,1584.4,41.57778,0,0,0,0,100,0),
+(@PATH,25,-139.1261,1583.9,42.32778,0,0,0,0,100,0),
+(@PATH,26,-135.1261,1583.65,43.07778,0,0,0,0,100,0),
+(@PATH,27,-130.1261,1583.15,43.57778,0,0,0,0,100,0),
+(@PATH,28,-126.3761,1582.65,44.07778,0,0,0,0,100,0),
+(@PATH,29,-123.3761,1582.4,44.82778,0,0,0,0,100,0),
+(@PATH,30,-117.3761,1582.15,45.32778,0,0,0,0,100,0),
+(@PATH,31,-113.3761,1581.65,46.07778,0,0,0,0,100,0),
+(@PATH,32,-109.0603,1580.944,46.36949,0,0,0,0,100,0),
+(@PATH,33,-84.0918,1569.51,46.44577,0,0,0,0,100,0),
+(@PATH,34,-82.3418,1566.01,45.44577,0,0,0,0,100,0),
+(@PATH,35,-81.3418,1564.26,44.94577,0,0,0,0,100,0),
+(@PATH,36,-80.0918,1561.51,44.19577,0,0,0,0,100,0),
+(@PATH,37,-79.0918,1559.76,43.69577,0,0,0,0,100,0),
+(@PATH,38,-78.0918,1558.01,42.94577,0,0,0,0,100,0),
+(@PATH,39,-76.5918,1554.76,42.19577,0,0,0,0,100,0),
+(@PATH,40,-75.8418,1553.01,41.69577,0,0,0,0,100,0),
+(@PATH,41,-74.8418,1551.26,41.19577,0,0,0,0,100,0),
+(@PATH,42,-73.3418,1548.51,40.44577,0,0,0,0,100,0),
+(@PATH,43,-72.5918,1546.76,39.94577,0,0,0,0,100,0),
+(@PATH,44,-71.5918,1545.01,39.19577,0,0,0,0,100,0),
+(@PATH,45,-70.3418,1542.26,38.69577,0,0,0,0,100,0),
+(@PATH,46,-70.29829,1541.94,38.42153,0,0,0,0,100,0),
+(@PATH,47,-69.29829,1540.19,37.67153,0,0,0,0,100,0),
+(@PATH,48,-69.54829,1538.19,37.17153,0,0,0,0,100,0),
+(@PATH,49,-70.04829,1535.19,36.17153,0,0,0,0,100,0),
+(@PATH,50,-70.04829,1533.44,35.67153,0,0,0,0,100,0),
+(@PATH,51,-70.54829,1529.44,35.17153,0,0,0,0,100,0),
+(@PATH,52,-71.04829,1525.69,34.42153,0,0,0,0,100,0),
+(@PATH,53,-71.54829,1521.69,33.92153,0,0,0,0,100,0),
+(@PATH,54,-71.54829,1518.69,33.17153,0,0,0,0,100,0),
+(@PATH,55,-72.10271,1515.561,32.53027,0,0,0,0,100,0),
+(@PATH,56,-73.35271,1512.811,31.53027,0,0,0,0,100,0),
+(@PATH,57,-74.35271,1511.061,30.78027,0,0,0,0,100,0),
+(@PATH,58,-75.10271,1509.311,30.28027,0,0,0,0,100,0),
+(@PATH,59,-76.35271,1506.561,29.78027,0,0,0,0,100,0),
+(@PATH,60,-78.10271,1502.811,29.03027,0,0,0,0,100,0),
+(@PATH,61,-79.10271,1500.311,30.03027,0,0,0,0,100,0),
+(@PATH,62,-82.35271,1493.061,29.28027,0,0,0,0,100,0),
+(@PATH,63,-84.10271,1489.561,28.53027,0,0,0,0,100,0),
+(@PATH,64,-84.42598,1489.16,28.3833,0,0,0,0,100,0),
+(@PATH,65,-85.17598,1487.41,28.1333,0,0,0,0,100,0),
+(@PATH,66,-102.3677,1477.751,27.65215,0,0,0,0,100,0),
+(@PATH,67,-123.1177,1477.501,26.90215,0,0,0,0,100,0),
+(@PATH,68,-137.5984,1477.31,26.80837,0,0,0,0,100,0),
+(@PATH,69,-145.5984,1482.56,27.05837,0,0,0,0,100,0),
+(@PATH,70,-153.8199,1488.331,27.38618,0,0,0,0,100,0),
+(@PATH,71,-178.7361,1511.036,27.3082,0,0,0,0,100,0),
+(@PATH,72,-185.2269,1510.27,27.05297,0,0,0,0,100,0),
+(@PATH,73,-182.9769,1508.27,27.05297,0,0,0,0,100,0),
+(@PATH,74,-172.9769,1500.02,26.80297,0,0,0,0,100,0),
+(@PATH,75,-170.7269,1498.27,27.05297,0,0,0,0,100,0),
+(@PATH,76,-169.2269,1496.02,27.05297,0,0,0,0,100,0),
+(@PATH,77,-167.7269,1494.02,26.80297,0,0,0,0,100,0),
+(@PATH,78,-167.7269,1492.02,26.80297,0,0,0,0,100,0),
+(@PATH,79,-167.7269,1489.77,26.80297,0,0,0,0,100,0),
+(@PATH,80,-167.4919,1489.571,26.64043,0,0,0,0,100,0),
+(@PATH,81,-168.4919,1488.071,26.64043,0,0,0,0,100,0),
+(@PATH,82,-158.2419,1482.071,26.14043,0,0,0,0,100,0),
+(@PATH,83,-147.591,1475.386,26.25293,0,0,0,0,100,0),
+(@PATH,84,-139.841,1477.636,27.00293,0,0,0,0,100,0),
+(@PATH,85,-132.341,1479.636,27.25293,0,0,0,0,100,0),
+(@PATH,86,-125.591,1481.386,28.00293,0,0,0,0,100,0),
+(@PATH,87,-121.841,1482.636,28.50293,0,0,0,0,100,0),
+(@PATH,88,-120.2695,1483.081,29.04744,0,0,0,0,100,0),
+(@PATH,89,-118.5195,1484.081,29.54744,0,0,0,0,100,0),
+(@PATH,90,-115.7695,1485.331,30.29744,0,0,0,0,100,0),
+(@PATH,91,-115.0195,1485.831,31.04744,0,0,0,0,100,0),
+(@PATH,92,-113.0195,1486.831,32.04744,0,0,0,0,100,0),
+(@PATH,93,-107.0195,1489.581,31.29744,0,0,0,0,100,0),
+(@PATH,94,-95.5195,1495.331,30.79744,0,0,0,0,100,0),
+(@PATH,95,-95.16714,1495.663,31.08524,0,0,0,0,100,0),
+(@PATH,96,-94.66714,1495.913,31.08524,0,0,0,0,100,0),
+(@PATH,97,-93.66714,1499.913,31.33524,0,0,0,0,100,0),
+(@PATH,98,-92.16714,1506.413,31.83524,0,0,0,0,100,0),
+(@PATH,99,-90.66714,1512.163,32.58524,0,0,0,0,100,0),
+(@PATH,100,-89.91714,1514.913,31.83524,0,0,0,0,100,0),
+(@PATH,101,-89.75613,1515.401,32.07003,0,0,0,0,100,0),
+(@PATH,102,-89.25613,1516.401,31.82003,0,0,0,0,100,0),
+(@PATH,103,-89.25613,1523.401,32.57003,0,0,0,0,100,0),
+(@PATH,104,-89.25613,1524.401,33.32003,0,0,0,0,100,0),
+(@PATH,105,-89.25613,1525.401,34.07003,0,0,0,0,100,0),
+(@PATH,106,-89.00613,1526.401,34.57003,0,0,0,0,100,0),
+(@PATH,107,-89.00613,1528.401,35.82003,0,0,0,0,100,0),
+(@PATH,108,-89.00613,1529.401,36.07003,0,0,0,0,100,0),
+(@PATH,109,-88.75613,1533.151,36.82003,0,0,0,0,100,0),
+(@PATH,110,-88.75613,1535.151,37.32003,0,0,0,0,100,0),
+(@PATH,111,-88.50613,1538.151,38.07003,0,0,0,0,100,0),
+(@PATH,112,-88.50613,1541.151,38.82003,0,0,0,0,100,0),
+(@PATH,113,-88.25613,1544.151,39.57003,0,0,0,0,100,0),
+(@PATH,114,-88.1545,1544.429,39.72079,0,0,0,0,100,0),
+(@PATH,115,-88.1545,1545.429,39.97079,0,0,0,0,100,0),
+(@PATH,116,-91.1545,1548.179,40.47079,0,0,0,0,100,0),
+(@PATH,117,-94.6545,1551.679,40.97079,0,0,0,0,100,0),
+(@PATH,118,-99.4045,1556.429,41.72079,0,0,0,0,100,0),
+(@PATH,119,-110.481,1566.873,42.2832,0,0,0,0,100,0),
+(@PATH,120,-120.231,1568.623,41.7832,0,0,0,0,100,0),
+(@PATH,121,-126.981,1569.873,41.2832,0,0,0,0,100,0);
+-- 0x1C39AC4240108FC000002100007FC923 .go -110.5204 1566.893 42.31397
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql
new file mode 100644
index 00000000000..4fc3ab011ab
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql
@@ -0,0 +1,24 @@
+--
+DELETE FROM `event_scripts` WHERE `id`=2313;
+INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES
+(2313, 0, 10, 7411, 3000000, 0, 9639.5,2528.97,1331.72,5.28395);
+
+-- Spirit of Sathrah SAI
+SET @ENTRY := 7411;
+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,0,0,0,0,0,53,0,7411,0,0,0,0,1,0,0,0,0,0,0,0,"Spirit of Sathrah - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,1,0,40,0,100,0,9,7411,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spirit of Sathrah - On Waypoint 9 Reached - Despawn In 3000 ms");
+
+DELETE FROM `waypoints` WHERE `entry`=7411;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(7411, 1, 9642.47,2523.25,1331.54, 'Spirit of Sathrah'),
+(7411, 2, 9640.32,2517.43,1331.57, 'Spirit of Sathrah'),
+(7411, 3, 9635.62,2514.35,1331.4, 'Spirit of Sathrah'),
+(7411, 4, 9630.91,2515.59,1331.72, 'Spirit of Sathrah'),
+(7411, 5, 9626.52,2520.1,1331.73, 'Spirit of Sathrah'),
+(7411, 6, 9625.02,2526.36,1331.61, 'Spirit of Sathrah'),
+(7411, 7, 9630.56,2532.58,1331.39, 'Spirit of Sathrah'),
+(7411, 8, 9636.59,2532.65,1331.73, 'Spirit of Sathrah'),
+(7411, 9, 9640.05,2529.06,1331.77, 'Spirit of Sathrah');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql
new file mode 100644
index 00000000000..64f813d2c59
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql
@@ -0,0 +1,29 @@
+--
+-- Portal Burn Action
+-- Portal Kruul SAI
+SET @ENTRY := 184289;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,147.0184, 1717.341, 37.46404,0,"Portal Kruul - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'");
+
+-- Portal Xilus SAI
+SET @ENTRY := 184290;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,-84.5415, 1881.739, 73.82645,5.782852,"Portal Xilus - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'");
+
+-- Portal Grimh SAI
+SET @ENTRY := 184414;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,-418.627, 1847.49, 80.7808,0,"Portal Grimh - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'");
+
+-- Portal Kaalez SAI
+SET @ENTRY := 184415;
+UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY;
+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,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,-545.2587, 1781.167, 56.22634,0,"Portal Kaalez - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql
new file mode 100644
index 00000000000..e7acf61bbd6
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql
@@ -0,0 +1,81 @@
+--
+-- Pathing for Entry: 22410 'TDB FORMAT'
+SET @NPC := 78754;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3009.127,`position_y`=5920.842,`position_z`=130.9854 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,14332,0,4097,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3009.127,5920.842,130.9854,0,0,1,0,100,0),
+(@PATH,2,3018.56,5944.067,131.0012,0,0,1,0,100,0),
+(@PATH,3,3028.687,5971.723,131.0047,0,0,1,0,100,0),
+(@PATH,4,3039.209,5998.325,130.9491,0,0,1,0,100,0),
+(@PATH,5,3041.459,6004.325,130.9491,0,0,1,0,100,0),
+(@PATH,6,3042.709,6007.575,130.9491,0,0,1,0,100,0),
+(@PATH,7,3043.459,6009.825,130.9491,0,0,1,0,100,0),
+(@PATH,8,3048.21,6021.786,130.8358,0,0,1,0,100,0),
+(@PATH,9,3058.211,6046.689,130.7168,0,0,1,0,100,0),
+(@PATH,10,3065.155,6064.995,130.614,0,0,1,0,100,0),
+(@PATH,11,3078.91,6073.112,130.3709,0,0,1,0,100,0),
+(@PATH,12,3084.571,6056.194,130.4195,0,0,1,0,100,0),
+(@PATH,13,3079.821,6040.444,130.6695,0,0,1,0,100,0),
+(@PATH,14,3079.655,6040.126,130.764,0,0,1,0,100,0),
+(@PATH,15,3079.405,6039.626,130.764,0,0,1,0,100,0),
+(@PATH,16,3078.905,6038.126,130.764,0,0,1,0,100,0),
+(@PATH,17,3069.25,6014.667,130.9082,0,0,1,0,100,0),
+(@PATH,18,3064,6000.667,130.9082,0,0,1,0,100,0),
+(@PATH,19,3060.452,5991.971,130.99,0,0,1,0,100,0),
+(@PATH,20,3050.27,5967.535,130.9908,0,0,1,0,100,0),
+(@PATH,21,3045.52,5954.535,130.9908,0,0,1,0,100,0),
+(@PATH,22,3039.294,5938.282,130.9514,0,0,1,0,100,0),
+(@PATH,23,3028.456,5913.517,130.8795,0,0,1,0,100,0),
+(@PATH,24,3019.764,5891.665,130.7868,0,0,1,0,100,0),
+(@PATH,25,3016.764,5884.415,130.7868,0,0,1,0,100,0),
+(@PATH,26,3012.264,5873.915,130.7868,0,0,1,0,100,0),
+(@PATH,27,3009.264,5866.915,130.7868,0,0,1,0,100,0),
+(@PATH,28,3012.196,5873.788,130.7515,0,0,1,0,100,0),
+(@PATH,29,3008.946,5866.788,130.7515,0,0,1,0,100,0),
+(@PATH,30,3008.446,5865.038,130.7515,0,0,1,0,100,0),
+(@PATH,31,2995.446,5836.038,130.5015,0,0,1,0,100,0),
+(@PATH,32,2995.104,5835.657,130.3808,0,0,1,0,100,0),
+(@PATH,33,2991.854,5828.407,130.6308,0,0,1,0,100,0),
+(@PATH,34,2990.604,5827.907,130.3808,0,0,1,0,100,0),
+(@PATH,35,2976.186,5821.571,130.1743,0,0,1,0,100,0),
+(@PATH,36,2970.518,5837.316,130.481,0,0,1,0,100,0),
+(@PATH,37,2971.768,5840.066,130.481,0,0,1,0,100,0),
+(@PATH,38,2980.487,5859.262,131.0515,0,0,1,0,100,0),
+(@PATH,39,2983.987,5866.762,131.0515,0,0,1,0,100,0),
+(@PATH,40,2989.237,5876.512,131.3015,0,0,1,0,100,0);
+-- 0x1C3998424015E28000002300007FC920 .go 3009.127 5920.842 130.9854
+
+DELETE FROM `creature_formations` WHERE `leaderGUID`=78754;
+INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
+(78754, 78754, 0, 0, 2, 0, 0),
+(78754, 78755, 7, 0, 0, 0, 0);
+
+-- Expedition Warden SAI
+SET @GUID := -63549;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=17855;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,1,0,100,0,100,200,5000,10000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Expedition Warden - Out of Combat - Play Emote 1");
+
+-- Expedition Warden SAI
+SET @GUID := -63548;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=17855;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID 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
+(@GUID,0,0,0,1,0,100,0,100,200,10000,40000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Expedition Warden - Out of Combat - Play Emote 1");
+
+-- Pathing for Entry: 17855 'TDB FORMAT'
+SET @NPC := 63550;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3022.651,`position_y`=5963.609,`position_z`=130.7766 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3022.651,5963.609,130.7766,0,6000,0,0,100,0),
+(@PATH,2,3032.096,5959.558,130.6869,0,6000,0,0,100,0);
+-- 0x1C39984240116FC000002300027FC920 .go 3022.651 5963.609 130.7766
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql
new file mode 100644
index 00000000000..cb453b9b4a6
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql
@@ -0,0 +1,59 @@
+--
+-- Pathing for Entry: 2802 'TDB FORMAT'
+SET @NPC := 38101;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1442.487,`position_y`=36.32697,`position_z`=-62.02626 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1442.487,36.32697,-62.02626,0,0,0,0,100,0),
+(@PATH,2,1435.487,32.07697,-62.02626,0,0,0,0,100,0),
+(@PATH,3,1416.445,21.46703,-62.02588,0,0,0,0,100,0),
+(@PATH,4,1405.551,23.91475,-62.0261,0,0,0,0,100,0),
+(@PATH,5,1402.301,26.41475,-62.0261,0,0,0,0,100,0),
+(@PATH,6,1387.127,36.88569,-62.02647,0,0,0,0,100,0),
+(@PATH,7,1381.627,49.88569,-62.02647,0,0,0,0,100,0),
+(@PATH,8,1379.005,56.32278,-62.02669,0,0,0,0,100,0),
+(@PATH,9,1379.755,60.82278,-62.02669,0,0,0,0,100,0),
+(@PATH,10,1383.399,83.51677,-62.03289,0,0,0,0,100,0),
+(@PATH,11,1388.399,87.51677,-62.03289,0,0,0,0,100,0),
+(@PATH,12,1395.899,94.01677,-62.28289,0,0,0,0,100,0),
+(@PATH,13,1400.163,97.49232,-62.05746,0,0,0,0,100,0),
+(@PATH,14,1412.663,127.9923,-62.05746,0,0,0,0,100,0),
+(@PATH,15,1413.663,130.2423,-62.05746,0,0,0,0,100,0),
+(@PATH,16,1415.163,134.2423,-62.05746,0,0,0,0,100,0),
+(@PATH,17,1418.154,141.2391,-62.04066,0,0,0,0,100,0),
+(@PATH,18,1423.404,143.7391,-62.04066,0,0,0,0,100,0),
+(@PATH,19,1434.169,149.9652,-62.03992,0,0,0,0,100,0),
+(@PATH,20,1435.669,148.4652,-62.03992,0,0,0,0,100,0),
+(@PATH,21,1445.419,139.4652,-62.03992,0,0,0,0,100,0),
+(@PATH,22,1447.836,137.2073,-61.75176,0,0,0,0,100,0),
+(@PATH,23,1450.836,133.7073,-61.75176,0,0,0,0,100,0),
+(@PATH,24,1452.086,132.4573,-61.75176,0,0,0,0,100,0),
+(@PATH,25,1453.836,130.4573,-60.00176,0,0,0,0,100,0),
+(@PATH,26,1456.336,127.4573,-60.00176,0,0,0,0,100,0),
+(@PATH,27,1462.008,120.8724,-59.94119,0,0,0,0,100,0),
+(@PATH,28,1465.152,111.2505,-59.94151,0,0,0,0,100,0),
+(@PATH,29,1471.402,105.7505,-59.94151,0,0,0,0,100,0),
+(@PATH,30,1479.847,98.11646,-59.9706,0,0,0,0,100,0),
+(@PATH,31,1480.847,97.36646,-59.9706,0,0,0,0,100,0),
+(@PATH,32,1482.847,96.11646,-61.4706,0,0,0,0,100,0),
+(@PATH,33,1484.347,95.11646,-61.7206,0,0,0,0,100,0),
+(@PATH,34,1483.158,95.78064,-61.62843,0,0,0,0,100,0),
+(@PATH,35,1484.658,94.78064,-61.87843,0,0,0,0,100,0),
+(@PATH,36,1485.158,94.53064,-61.87843,0,0,0,0,100,0),
+(@PATH,37,1489.658,90.78064,-61.87843,0,0,0,0,100,0),
+(@PATH,38,1499.658,82.28064,-61.87843,0,0,0,0,100,0),
+(@PATH,39,1499.686,82.06802,-62.047,0,0,0,0,100,0),
+(@PATH,40,1500.436,81.31802,-62.047,0,0,0,0,100,0),
+(@PATH,41,1494.936,71.31802,-62.047,0,0,0,0,100,0),
+(@PATH,42,1481.826,47.66472,-62.03592,0,0,0,0,100,0),
+(@PATH,43,1469.576,44.16472,-62.03592,0,0,0,0,100,0),
+(@PATH,44,1466.576,43.41472,-62.03592,0,0,0,0,100,0),
+(@PATH,45,1464.826,42.91472,-62.03592,0,0,0,0,100,0),
+(@PATH,46,1452.326,39.16472,-62.03592,0,0,0,0,100,0),
+(@PATH,47,1442.51,36.29097,-62.02619,0,0,0,0,100,0),
+(@PATH,48,1435.51,32.29097,-62.02619,0,0,0,0,100,0),
+(@PATH,49,1416.5,21.42531,-62.02593,0,0,0,0,100,0);
+-- 0x1C191C000002BC80000028000002D330 .go 1442.487 36.32697 -62.02626
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql
new file mode 100644
index 00000000000..b639c813766
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql
@@ -0,0 +1,3 @@
+--
+DELETE FROM `gossip_menu` WHERE `entry`=5004;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (5004, 6062);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql
new file mode 100644
index 00000000000..3330613ef6c
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql
@@ -0,0 +1,8 @@
+--
+-- Scarlet Initiate SAI
+SET @ENTRY := 1507;
+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,7,0,0,0,100,0,0,0,3500,5000,11,20793,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Initiate - In Combat - Cast 'Fireball'"),
+(@ENTRY,0,10,0,23,0,100,0,12544,0,5000,10000,11,12544,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Initiate - On Has Aura 'Frost Armor' - Cast 'Frost Armor'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql
new file mode 100644
index 00000000000..7eb2c704211
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql
@@ -0,0 +1,13 @@
+--
+-- Keryn Sylvius SAI
+SET @ENTRY := 917;
+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,62,0,100,0,381,4,0,0,11,21100,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keryn Sylvius - On Gossip Option 4 Selected - Cast 'Conjure Elegant Letter'");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=381 AND `SourceEntry`=4;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 381, 4, 0, 0, 15, 0, 8, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a rogue'),
+(15, 381, 4, 0, 0, 27, 0, 24, 3, 0, 0, 0, 0, '', 'Show gossip text if level >= 24'),
+(15, 381, 4, 0, 0, 2, 0, 17126, 1, 0, 1, 0, 0, '', 'Show gossip option if player does not have Elegant Letter');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql
new file mode 100644
index 00000000000..f88dd641542
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql
@@ -0,0 +1,153 @@
+-- A Crew Under Fire
+UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=8380;
+UPDATE `quest_template` SET `SpecialFlags`=2 WHERE `Id`=3382;
+UPDATE `creature_template` SET `ScriptName`='' WHERE `entry` IN (12205, 12204);
+UPDATE `creature` SET orientation = 2.43043 WHERE guid = 35899;
+
+-- Captain Vanessa Beltis SAI
+SET @ENTRY := 8380;
+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,1,19,0,100,0,3382,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Quest 'A Crew Under Fire' Taken - Run Script"),
+(@ENTRY,0,1,4,61,0,100,0,3382,0,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Quest 'A Crew Under Fire' Taken - Set Faction 250"),
+(@ENTRY,0,2,5,11,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Respawn - Set Faction 35"),
+(@ENTRY,0,3,0,6,0,100,0,0,0,0,0,6,3382,0,0,0,0,0,17,0,50,0,0,0,0,0,"Captain Vanessa Beltis - On Just Died - Fail Quest 'A Crew Under Fire'"),
+(@ENTRY,0,4,0,61,0,100,0,3382,0,0,0,82,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Quest 'A Crew Under Fire' Taken - Add Npc Flag "),
+(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,82,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Respawn - Add Npc Flags Gossip & Questgiver");
+
+-- Spitelash Witch SAI
+SET @ENTRY := 12205;
+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,8,0,100,0,118,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,1,0,8,0,100,0,12824,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,2,0,8,0,100,0,12825,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,3,0,8,0,100,0,12826,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,4,0,54,0,100,0,0,0,0,0,53,1,12205,0,0,0,2,1,0,0,0,0,0,0,0,"Spitelash Witch - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,5,0,1,0,100,0,1000,1000,60000,60000,11,12550,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - Out of Combat - Cast 'Lightning Shield'"),
+(@ENTRY,0,6,0,0,0,100,0,2000,2000,4000,5000,11,9672,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spitelash Witch - In Combat - Cast 'Frostbolt'");
+
+DELETE FROM `waypoints` WHERE `entry`=12205;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(12205, 1, 2370.83,-5893.06,10.6607, 'Spitelash Witch'),
+(12205, 2, 2377.23,-5904.07,11.067, 'Spitelash Witch'),
+(12205, 3, 2378.04,-5915.15,10.7378, 'Spitelash Witch'),
+(12205, 4, 2374.96,-5932,9.66682, 'Spitelash Witch'),
+(12205, 5, 2374.06,-5963.62,9.89577, 'Spitelash Witch');
+
+-- Spitelash Raider SAI
+SET @ENTRY := 12204;
+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,8,0,100,0,118,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,1,0,8,0,100,0,12824,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,2,0,8,0,100,0,12825,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,3,0,8,0,100,0,12826,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"),
+(@ENTRY,0,4,0,54,0,100,0,0,0,0,0,53,1,12204,0,0,0,2,1,0,0,0,0,0,0,0,"Spitelash Raider - On Just Summoned - Start Waypoint"),
+(@ENTRY,0,5,0,0,0,100,0,40,1000,6500,9000,11,12545,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spitelash Raider - In Combat - Cast 'Spitelash'"),
+(@ENTRY,0,6,0,0,0,100,0,1000,2500,11000,15000,11,12548,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spitelash Raider - In Combat - Cast 'Frost Shock'");
+
+DELETE FROM `waypoints` WHERE `entry`=12204;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(12204, 1, 2370.83,-5893.06,10.6607, 'Spitelash Raider'),
+(12204, 2, 2379.97,-5904.9,10.7712, 'Spitelash Raider'),
+(12204, 3, 2376.15,-5924.8,9.84824, 'Spitelash Raider'),
+(12204, 4, 2373.41,-5962.79,9.70075, 'Spitelash Raider');
+
+-- Actionlist SAI
+SET @ENTRY := 1220500;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,11,29124,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Polymorph'"),
+(@ENTRY,9,1,0,0,0,100,0,5000,5000,0,0,11,28406,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Polymorph Backfire'"),
+(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,11,6924,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Remove Polymorph'"),
+(@ENTRY,9,3,0,0,0,100,0,1000,1000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Despawn Instant");
+
+-- Actionlist SAI
+SET @ENTRY := 838000;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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,9,0,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Active On"),
+(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Say Line 0"),
+(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,9,0,0,50,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Data 1 1"),
+-- 1. wave
+(@ENTRY,9,3,0,0,0,100,0,4000,4000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,-5893.06,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+-- 2nd wave
+(@ENTRY,9,7,0,0,0,100,0,50000,50000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,8,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,9,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+(@ENTRY,9,10,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+-- 3. wave
+(@ENTRY,9,11,0,0,0,100,0,52000,52000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,12,0,0,0,100,0,1000,1000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+(@ENTRY,9,13,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,14,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+-- 4. wave
+(@ENTRY,9,15,0,0,0,100,0,54000,54000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,16,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,17,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,18,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+-- 5. wave
+(@ENTRY,9,19,0,0,0,100,0,55000,55000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+(@ENTRY,9,20,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,21,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,22,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+-- 6. wave
+(@ENTRY,9,23,0,0,0,100,0,55000,55000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+(@ENTRY,9,24,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,25,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"),
+(@ENTRY,9,26,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"),
+(@ENTRY,9,27,0,0,0,100,0,10000,10000,0,0,15,3382,0,0,0,0,0,17,0,30,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Quest Credit 'A Crew Under Fire'"),
+(@ENTRY,9,28,0,0,0,100,0,0,0,0,0,48,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Active Off"),
+(@ENTRY,9,29,0,0,0,100,0,0,0,0,0,45,2,2,0,0,0,0,9,0,0,50,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Data 2 2"),
+(@ENTRY,9,30,0,0,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Faction 35"),
+(@ENTRY,9,31,0,0,0,100,0,0,0,0,0,82,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - set NPC-Flag");
+
+DELETE FROM `creature_text` WHERE `entry`=8380;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES
+(8380, 0, 0, 'Stand Prepared! The naga won\'t wait long to press their advantage once they know we\'re alive.', 12, 0, 100, 0, 0, 0, 'Captain Vanessa Beltis', 4658);
+
+-- Lindros SAI
+SET @ENTRY := 8381;
+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,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lindros - On Data Set 1 1 - Set Faction 250"),
+(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lindros - On Data Set 2 2 - Set Faction 35"),
+(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,11,11975,0,0,0,0,0,2,0,0,0,0,0,0,0,"Lindros - On Aggro - Cast 'Arcane Explosion'"),
+(@ENTRY,0,3,0,0,0,100,0,1000,4000,3000,4000,11,20823,0,0,0,0,0,2,0,0,0,0,0,0,0,"Lindros - In Combat - Cast 'Fireball'");
+
+-- Alexandra Blazen SAI
+SET @ENTRY := 8378;
+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,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - On Data Set 1 1 - Set Faction 250"),
+(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - On Data Set 2 2 - Set Faction 35"),
+(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,11,1006,2,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - On Aggro - Cast 'Inner Fire'"),
+(@ENTRY,0,3,0,2,0,100,0,0,0,20000,20000,11,11640,0,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - Between 0-0% Health - Cast 'Renew'");
+
+-- Patrick Mills SAI
+SET @ENTRY := 8382;
+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,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Patrick Mills - On Data Set 1 1 - Set Faction 250"),
+(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Patrick Mills - On Data Set 2 2 - Set Faction 35"),
+(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,11,1032,2,0,0,0,0,1,0,0,0,0,0,0,0,"Patrick Mills - On Aggro - Cast 'Devotion Aura'"),
+(@ENTRY,0,3,0,0,0,100,0,2000,2000,4000,4000,11,17143,0,0,0,0,0,2,0,0,0,0,0,0,0,"Patrick Mills - In Combat - Cast 'Holy Strike'");
+
+-- Horizon Scout Crewman SAI
+SET @ENTRY := 8386;
+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,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horizon Scout Crewman - On Data Set 1 1 - Set Faction 250"),
+(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horizon Scout Crewman - On Data Set 2 2 - Set Faction 35"),
+(@ENTRY,0,2,0,0,0,100,0,2000,2000,4000,4000,11,6660,2,0,0,0,0,2,0,0,0,0,0,0,0,"Horizon Scout Crewman - In Combat - Cast 'Shoot'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql
new file mode 100644
index 00000000000..a74f3f67554
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql
@@ -0,0 +1,8 @@
+--
+DELETE FROM `creature_text` WHERE `entry`=18209;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(18209, 0, 0, 'It''s an ambush! Defend yourself!', 12, 0, 100, 0, 0, 0, 15044, 0, 'Kurenai Captive'),
+(18209, 1, 0, 'More of them coming! Watch out!', 12, 0, 100, 0, 0, 0, 15000, 0, 'Kurenai Captive'),
+(18209, 2, 0, 'Ride the lightning, filth!', 12, 1, 100, 0, 0, 0, 15006, 0, 'Kurenai Captive'),
+(18209, 3, 0, 'We are surrounded!', 14, 0, 100, 0, 0, 0, 15047, 0, 'Kurenai Captive'),
+(18209, 4, 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, 7, 100, 0, 0, 0, 15048, 0, 'Kurenai Captive');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql
new file mode 100644
index 00000000000..9fc5a435615
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql
@@ -0,0 +1,20 @@
+-- Portal Kruul SAI
+SET @ENTRY := 184289;
+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,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19652,10,0,0,0,0,0,"Portal Kruul - On Gameobject State Changed - Cast spell 'Hellfire Fire'");
+-- Portal Xilus SAI
+SET @ENTRY := 184290;
+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,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19717,10,0,0,0,0,0,"Portal Xilus - On Gameobject State Changed - Cast spell 'Hellfire Fire'");
+-- Portal Grimh SAI
+SET @ENTRY := 184414;
+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,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19652,10,0,0,0,0,0,"Portal Grimh - On Gameobject State Changed - Cast spell 'Hellfire Fire'");
+-- Portal Kaalez SAI
+SET @ENTRY := 184415;
+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,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19717,10,0,0,0,0,0,"Portal Kaalez - On Gameobject State Changed - Cast spell 'Hellfire Fire'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql
new file mode 100644
index 00000000000..2a0886c6ece
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `faction` = 1576 WHERE `entry` = 8564;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql
new file mode 100644
index 00000000000..60b305829cb
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql
@@ -0,0 +1,105 @@
+-- Azure Spellweaver SAI
+SET @ENTRY := 31403;
+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,0,0,100,0,0,0,2400,3800,11,34447,64,0,0,0,0,2,0,0,0,0,0,0,0,"Azure Spellweaver - Combat CMC - Cast 'Arcane Missiles'");
+
+-- Gatekeeper Melindra SAI
+SET @ENTRY := 32373;
+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,1,0,100,0,1000,1000,1800000,1800000,11,12544,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gatekeeper Melindra - Out of Combat - Cast 'Frost Armor'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,3400,4800,11,17290,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gatekeeper Melindra - Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,2,0,0,0,100,0,8000,11000,19000,25000,11,12738,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gatekeeper Melindra - In Combat - Cast 'Amplify Damage'");
+
+-- Syreian the Bonecarver SAI
+SET @ENTRY := 32438;
+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,3,4,0,100,1,0,0,0,0,11,38952,64,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - On Aggro CMC - Cast 'Frost Arrow' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,2300,3900,2300,3900,11,50092,64,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,2,0,0,0,100,0,12000,15000,11000,14000,11,38952,1,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - In Combat - Cast 'Frost Arrow'"),
+(@ENTRY,0,3,0,9,0,100,0,0,5,12000,16000,11,47168,1,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - Within 0-5 Range - Cast 'Improved Wing Clip'");
+
+-- Unbound Seer SAI
+SET @ENTRY := 33422;
+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,0,0,100,0,0,0,3400,4800,11,38204,64,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Seer - Combat CMC - Cast 'Arcane Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,9000,12000,12000,15000,11,58667,33,0,0,0,0,5,0,0,0,0,0,0,0,"Unbound Seer - In Combat - Cast 'Ley Curse'");
+
+-- Mistcaller Yngvar SAI
+SET @ENTRY := 34965;
+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,1,0,100,1,1000,1000,0,0,11,45658,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mistcaller Yngvar - Out of Combat - Cast 'Call of the Mist'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mistcaller Yngvar - Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,2,0,0,0,100,0,6000,9000,12000,17000,11,49816,0,0,0,0,0,5,0,0,0,0,0,0,0,"Mistcaller Yngvar - Combat - Cast 'Mist of Strangulation'"),
+(@ENTRY,0,3,0,2,0,100,0,0,30,120000,120000,11,49871,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mistcaller Yngvar - 0-30% Health - Cast 'Rune of Retribution'");
+
+-- Drottinn Hrothgar SAI
+SET @ENTRY := 34980;
+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,1,0,100,1,0,0,0,0,11,66625,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drottinn Hrothgar - Out of Combat - Cast 'Cloud Aura' (No Repeat)"),
+(@ENTRY,0,1,0,1,0,100,1,1500,1500,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Drottinn Hrothgar - Out of Combat - Say Line 0 (No Repeat)"),
+(@ENTRY,0,2,0,9,0,100,0,0,5,5000,7000,11,15496,0,0,0,0,0,2,0,0,0,0,0,0,0,"Drottinn Hrothgar - Within 0-5 Range - Cast 'Cleave'"),
+(@ENTRY,0,3,0,0,0,100,0,12000,16000,15000,21000,11,67038,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drottinn Hrothgar - In Combat - Cast 'Smash'");
+
+-- Ornolf the Scarred SAI
+SET @ENTRY := 35012;
+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,0,0,100,0,1000,1000,8000,11000,11,38557,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ornolf the Scarred - Combat - Cast 'Throw'"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,5000,7000,11,43410,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ornolf the Scarred - Within 0-5 Range - Cast 'Chop'"),
+(@ENTRY,0,2,0,0,0,100,0,8000,11000,8000,11000,11,67037,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ornolf the Scarred - Combat - Cast 'Whirlwind'"),
+(@ENTRY,0,3,0,2,0,100,0,0,30,40000,40000,11,3019,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ornolf the Scarred - 0-30% Health - Cast 'Frenzy'");
+
+-- Kul the Reckless SAI
+SET @ENTRY := 34956;
+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,8,0,100,0,66531,0,0,0,80,3495600,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kul the Reckless - On Spellhit 'Open Black Cage' - Run Script");
+
+-- Kvaldir Harpooner SAI
+SET @ENTRY := 34907;
+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,0,0,100,0,0,0,2300,3900,11,66489,64,0,0,0,0,2,0,0,0,0,0,0,0,"Kvaldir Harpooner - Combat CMC - Cast 'Spear Throw'");
+
+-- Deep Jormungar SAI
+SET @ENTRY := 34920;
+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,1,1,0,100,1,0,0,500,500,11,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Out of Combat - Cast 'Submerge' (No Repeat)"),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,18,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Out of Combat - Set Flags Not Attackable & Not Selectable (No Repeat)"),
+(@ENTRY,0,2,3,4,0,100,1,0,0,0,0,28,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Remove Aura 'Submerge' (No Repeat)"),
+(@ENTRY,0,3,4,61,0,100,0,0,0,0,0,28,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Remove Aura 'Tunnel Bore Passive' (No Repeat)"),
+(@ENTRY,0,4,5,61,0,100,0,0,0,0,0,11,37752,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Cast 'Stand' (No Repeat)"),
+(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Disable Combat Movement (No Repeat)"),
+(@ENTRY,0,6,0,61,0,100,0,0,0,0,0,19,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Remove Flags Not Attackable & Not Selectable (No Repeat)"),
+(@ENTRY,0,7,0,0,0,100,0,1000,1000,3000,5000,11,61597,64,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Jormungar - In Combat CMC - Cast 'Acid Spit'"),
+(@ENTRY,0,8,0,0,0,100,0,11000,16000,15000,20000,11,61598,1,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - In Combat - Cast 'Sweep'"),
+(@ENTRY,0,9,0,0,0,100,0,10000,20000,45000,50000,11,32738,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Jormungar - In Combat - Cast 'Bore'"),
+(@ENTRY,0,10,11,9,0,100,1,30,60,0,0,11,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 30-60 Range - Cast 'Submerge' (No Repeat)"),
+(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,11,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 30-60 Range - Cast 'Tunnel Bore Passive' (No Repeat)"),
+(@ENTRY,0,12,13,9,0,100,1,0,8,0,0,28,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Remove Aura 'Submerge' (No Repeat)"),
+(@ENTRY,0,13,14,61,0,100,0,0,0,0,0,28,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Remove Aura 'Tunnel Bore Passive' (No Repeat)"),
+(@ENTRY,0,14,15,61,0,100,0,0,0,0,0,11,37752,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Cast 'Stand' (No Repeat)"),
+(@ENTRY,0,15,16,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Disable Combat Movement (No Repeat)"),
+(@ENTRY,0,16,0,61,0,100,0,0,0,0,0,19,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Remove Flags Not Attackable & Not Selectable (No Repeat)"),
+(@ENTRY,0,17,18,7,0,100,1,0,0,0,0,11,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Cast 'Submerge' (No Repeat)"),
+(@ENTRY,0,18,19,61,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Set Event Phase 1 (No Repeat)"),
+(@ENTRY,0,19,20,61,0,100,0,0,0,0,0,11,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Cast 'Tunnel Bore Passive' (No Repeat)"),
+(@ENTRY,0,20,21,61,0,100,0,0,0,0,0,14,0,100,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Set All Threat 0-100 (No Repeat)"),
+(@ENTRY,0,21,0,61,0,100,0,0,0,0,0,18,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Set Flags Not Attackable & Not Selectable (No Repeat)");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql
new file mode 100644
index 00000000000..98bd8be7da1
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql
@@ -0,0 +1,223 @@
+-- Gnarlhide SAI
+SET @ENTRY := 30003;
+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,0,0,100,0,0,0,3400,4800,11,38391,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gnarlhide - Combat CMC - Cast 'Scorch'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,6000,20000,25000,11,60290,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gnarlhide - Combat - Cast 'Blast Wave'"),
+(@ENTRY,0,2,0,0,0,100,0,9000,12000,19000,24000,11,35250,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gnarlhide - Combat - Cast 'Dragon's Breath'"),
+(@ENTRY,0,3,0,0,0,100,0,5000,8000,9000,12000,11,20832,0,0,0,0,0,5,0,0,0,0,0,0,0,"Gnarlhide - Combat - Cast 'Fire Blast'");
+
+-- Yulda the Stormspeaker SAI
+SET @ENTRY := 30046;
+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,0,0,100,0,0,0,3400,4800,11,32018,64,0,0,0,0,2,0,0,0,0,0,0,0,"Yulda the Stormspeaker - Combat CMC - Cast 'Call Lightning'"),
+(@ENTRY,0,1,0,0,0,100,0,9000,12000,15000,18000,11,55087,0,0,0,0,0,2,0,0,0,0,0,0,0,"Yulda the Stormspeaker - Combat - Cast 'Typhoon'");
+
+-- Sigrid Iceborn SAI
+SET @ENTRY := 30086;
+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,0,0,100,0,0,0,3500,4100,11,61168,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sigrid Iceborn - Combat CMC - Cast 'Throw'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,7000,13000,16700,11,61164,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sigrid Iceborn - Combat - Cast 'Impale'"),
+(@ENTRY,0,2,0,13,0,100,0,12000,18000,0,0,11,57635,0,0,0,0,0,6,1,0,0,0,0,0,0,"Sigrid Iceborn - Target Casting - Cast 'Disengage'"),
+(@ENTRY,0,3,0,1,0,100,0,500,1000,600000,600000,11,61165,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Out of Combat - Cast 'Frostbite Weapon'"),
+(@ENTRY,0,4,5,62,0,100,0,9870,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Close Gossip"),
+(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,42,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Set Invincibility Hp 1"),
+(@ENTRY,0,6,7,61,0,100,0,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Remove Flags Immune To Players & Immune To NPC's"),
+(@ENTRY,0,7,8,61,0,100,0,0,0,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Set Faction 14"),
+(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Say Line 0"),
+(@ENTRY,0,9,10,2,0,100,0,0,1,0,0,33,30086,0,0,0,0,0,7,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Quest Credit 'Eliminate the Competition'"),
+(@ENTRY,0,10,11,61,0,100,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Set Faction 0"),
+(@ENTRY,0,11,12,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Say Line 1"),
+(@ENTRY,0,12,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Evade");
+
+-- Twilight Worshipper SAI
+SET @ENTRY := 30111;
+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,0,0,100,2,0,0,3400,4800,11,17290,64,0,0,0,0,2,0,0,0,0,0,0,0,"Twilight Worshipper - Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,5000,8000,11,61567,64,0,0,0,0,5,0,0,0,0,0,0,0,"Twilight Worshipper - Combat CMC - Cast 'Fireball' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,9000,12000,14000,17000,11,56858,1,0,0,0,0,5,0,0,0,0,0,0,0,"Twilight Worshipper - Combat - Cast 'Flamestrike' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,9000,12000,14000,17000,11,61568,1,0,0,0,0,5,0,0,0,0,0,0,0,"Twilight Worshipper - Combat - Cast 'Flamestrike' (Heroic Dungeon)");
+
+-- Onu'zun SAI
+SET @ENTRY := 30180;
+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,1,0,100,0,500,1000,600000,600000,11,18100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - Out of Combat - Cast 'Frost Armor'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,3400,4700,11,15242,64,0,0,0,0,2,0,0,0,0,0,0,0,"Onu'zun - Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,2,0,0,0,100,0,5000,5000,14500,17800,11,15244,0,0,0,0,0,2,0,0,0,0,0,0,0,"Onu'zun - Combat - Cast 'Cone of Cold'"),
+(@ENTRY,0,3,0,13,0,100,0,12000,18000,0,0,11,15122,0,0,0,0,0,6,1,0,0,0,0,0,0,"Onu'zun - Target Casting - Cast 'Counterspell'"),
+(@ENTRY,0,4,5,62,0,100,0,9878,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Close Gossip"),
+(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,42,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Set Invincibility Hp 1"),
+(@ENTRY,0,6,7,61,0,100,0,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Remove Flags Immune To Players & Immune To NPC's"),
+(@ENTRY,0,7,8,61,0,100,0,0,0,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Set Faction 14"),
+(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Say Line 0"),
+(@ENTRY,0,9,10,2,0,100,0,0,1,0,0,33,30180,0,0,0,0,0,7,0,0,0,0,0,0,0,"Onu'zun - Between 0-1% Health - Quest Credit 'Eliminate the Competition'"),
+(@ENTRY,0,10,11,61,0,100,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - Between 0-1% Health - Set Faction 0"),
+(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - Between 0-1% Health - Evade");
+
+-- Sunreaver Scout SAI
+SET @ENTRY := 30233;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Scout - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Scout - Within 5-30 Range - Cast 'Concussive Shot'"),
+(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Scout - Within 5-30 Range - Cast 'Multi-Shot'");
+
+-- Silver Covenant Scout SAI
+SET @ENTRY := 30238;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Scout - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Scout - Within 5-30 Range - Cast 'Concussive Shot'"),
+(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Scout - Within 5-30 Range - Cast 'Multi-Shot'");
+
+-- Silver Covenant Horseman SAI
+SET @ENTRY := 30263;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Horseman - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Horseman - Within 5-30 Range - Cast 'Concussive Shot'"),
+(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Horseman - Within 5-30 Range - Cast 'Multi-Shot'");
+
+-- Sunreaver Hawkrider SAI
+SET @ENTRY := 30265;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Hawkrider - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Hawkrider - Within 5-30 Range - Cast 'Concussive Shot'"),
+(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Hawkrider - Within 5-30 Range - Cast 'Multi-Shot'");
+
+-- Ahn'kahar Spell Flinger SAI
+SET @ENTRY := 30278;
+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,0,0,100,2,0,0,23000,27000,11,56698,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Blast' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,23000,27000,11,59102,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Blast' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,10000,14000,13000,16000,11,56702,65,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Sickle' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,10000,14000,13000,16000,11,59103,65,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Sickle' (Heroic Dungeon)");
+
+-- Eye of Taldaram SAI
+SET @ENTRY := 30285;
+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,0,0,100,2,0,0,3400,4800,11,17439,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Combat CMC - Cast 'Shadow Shock' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,17289,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Combat CMC - Cast 'Shadow Shock' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,13,0,100,3,0,0,0,0,11,56730,0,0,0,0,0,7,0,0,0,0,0,0,0,"Eye of Taldaram - Target Casting - Cast 'Dark Counterspell' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,3,0,13,0,100,5,0,0,0,0,11,59111,0,0,0,0,0,7,0,0,0,0,0,0,0,"Eye of Taldaram - Target Casting - Cast 'Dark Counterspell' (No Repeat) (Heroic Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,6,15000,19000,23000,27000,11,56728,1,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Combat - Cast 'Eyes in the Dark' (Dungeon)"),
+(@ENTRY,0,5,0,6,0,100,3,0,0,0,0,11,56733,7,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Just Died - Cast 'Shadowfury' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,6,0,6,0,100,5,0,0,0,0,11,61463,7,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Just Died - Cast 'Shadowfury' (No Repeat) (Heroic Dungeon)");
+
+-- Frostbringer SAI
+SET @ENTRY := 30286;
+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,0,0,100,2,0,0,3400,4800,11,57825,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frostbringer - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,61461,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frostbringer - Combat CMC - Cast 'Frostbolt' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,9000,12000,15000,18000,11,15063,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frostbringer - Combat - Cast 'Frost Nova' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,9000,12000,15000,18000,11,61462,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frostbringer - Combat - Cast 'Frost Nova' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,2,0,100,6,0,30,120000,130000,11,56716,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frostbringer - 0-30% Health - Cast 'Icy Winds' (Dungeon)");
+
+-- Stormforged Amplifier SAI
+SET @ENTRY := 30591;
+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,0,0,100,0,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Stormforged Amplifier - Combat CMC - Cast 'Lightning Bolt'");
+
+-- Veteran Mage Hunter SAI
+SET @ENTRY := 30665;
+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,1,0,100,7,1000,1000,0,0,11,58040,0,0,0,0,0,1,0,0,0,0,0,0,0,"Veteran Mage Hunter - Out of Combat - Cast 'Destroy Door Seal' (Dungeon)"),
+(@ENTRY,0,1,0,4,0,100,6,0,0,0,0,30,1,2,3,0,0,0,1,0,0,0,0,0,0,0,"Veteran Mage Hunter - Aggro - Set Random Phase(1, 2, 3) (Dungeon)"),
+(@ENTRY,0,2,0,0,1,100,2,0,0,2400,3800,11,15043,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Frostbolt' (Phase 1) (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,1,100,4,0,0,2400,3800,11,20822,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Frostbolt' (Phase 1) (Heroic Dungeon)"),
+(@ENTRY,0,4,0,9,2,100,2,0,0,2400,3800,11,12466,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Fireball' (Phase 2) (Normal Dungeon)"),
+(@ENTRY,0,5,0,9,2,100,4,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Fireball' (Phase 2) (Heroic Dungeon)"),
+(@ENTRY,0,6,0,9,4,100,2,0,0,2400,3800,11,13748,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Arcane Bolt' (Phase 3) (Normal Dungeon)"),
+(@ENTRY,0,7,0,9,4,100,4,0,0,2400,3800,11,20829,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Arcane Bolt' (Phase 3) (Heroic Dungeon)"),
+(@ENTRY,0,8,0,2,0,100,7,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Veteran Mage Hunter - Between 0-15% Health - Flee For Assist (No Repeat) (Dungeon)");
+
+-- Portal Keeper SAI
+SET @ENTRY := 30695;
+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,0,0,100,2,0,0,6000,8000,11,58531,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Missiles' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,6000,8000,11,61593,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Missiles' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,9,0,100,2,0,8,13000,19000,11,58532,1,0,0,0,0,1,0,0,0,0,0,0,0,"Portal Keeper - 0-8 Range - Cast 'Frostbolt Volley' (Normal Dungeon)"),
+(@ENTRY,0,3,0,9,0,100,4,0,8,13000,19000,11,61594,1,0,0,0,0,1,0,0,0,0,0,0,0,"Portal Keeper - 0-8 Range - Cast 'Frostbolt Volley' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,6,0,8,9000,14000,11,58534,1,0,0,0,0,6,0,0,0,0,0,0,0,"Portal Keeper - Combat - Cast 'Deep Freeze' (Dungeon)");
+
+-- Nesingwary Game Warden SAI
+SET @ENTRY := 30737;
+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,0,0,100,0,0,0,2300,3900,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Nesingwary Game Warden - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,0,20,9000,13000,11,6533,1,0,0,0,0,2,0,0,0,0,0,0,0,"Nesingwary Game Warden - 0-20 Range - Cast 'Net'"),
+(@ENTRY,0,2,0,9,0,100,0,5,30,8000,10000,11,31942,0,0,0,0,0,5,0,0,0,0,0,0,0,"Nesingwary Game Warden - 5-30 Range - Cast 'Multi-Shot'"),
+(@ENTRY,0,3,0,9,0,100,0,0,45,7000,9000,11,23337,1,0,0,0,0,6,0,0,0,0,0,0,0,"Nesingwary Game Warden - 0-45 Range - Cast 'Shoot'");
+
+-- Unbound Dryad SAI
+SET @ENTRY := 30860;
+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,0,0,100,0,0,0,2300,3900,11,55217,64,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Dryad - Combat CMC - Cast 'Throw Spear'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,9000,9000,13000,11,11976,0,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Dryad - In Combat - Cast 'Strike'");
+
+-- Shandaral Hunter Spirit SAI
+SET @ENTRY := 30864;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Shandaral Hunter Spirit - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,0,0,100,0,4000,8000,9000,14000,11,54615,1,0,0,0,0,2,0,0,0,0,0,0,0,"Shandaral Hunter Spirit - Combat - Cast 'Aimed Shot'"),
+(@ENTRY,0,2,0,0,0,100,0,9000,15000,15000,22000,11,47168,0,0,0,0,0,5,0,0,0,0,0,0,0,"Shandaral Hunter Spirit - Combat - Cast 'Improved Wing Clip'");
+
+-- Unbound Corrupter SAI
+SET @ENTRY := 30868;
+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,0,0,100,0,0,0,3400,5400,11,38204,64,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Corrupter - Combat CMC - Cast 'Arcane Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,20000,30000,45000,60000,11,58667,1,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Corrupter - Combat - Cast 'Ley Curse'"),
+(@ENTRY,0,2,0,2,0,100,0,0,30,30000,35000,11,58270,1,0,0,0,0,1,0,0,0,0,0,0,0,"Unbound Corrupter - 0-30% Health - Cast 'Transferred Power'");
+
+-- Portal Keeper SAI
+SET @ENTRY := 30893;
+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,0,0,100,2,0,45,6000,8000,11,58536,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Volley' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,45,6000,8000,11,61591,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Volley' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,9,0,100,2,0,45,13000,19000,11,58535,0,0,0,0,0,5,0,0,0,0,0,0,0,"Portal Keeper - 0-45 Range - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,3,0,9,0,100,4,0,45,13000,19000,11,61590,0,0,0,0,0,5,0,0,0,0,0,0,0,"Portal Keeper - 0-45 Range - Cast 'Frostbolt' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,6,0,8,9000,14000,11,58537,1,0,0,0,0,6,0,0,0,0,0,0,0,"Portal Keeper - Combat - Cast 'Polymorph' (Dungeon)");
+
+-- Azure Binder SAI
+SET @ENTRY := 31007;
+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,0,0,100,6,0,0,3400,4800,11,58456,64,0,0,0,0,2,0,0,0,0,0,0,0,"Azure Binder - Combat CMC - Cast 'Arcane Barrage' (Dungeon)"),
+(@ENTRY,0,1,0,9,0,100,2,0,8,9000,15000,11,58455,1,0,0,0,0,1,0,0,0,0,0,0,0,"Azure Binder - 0-8 Range - Cast 'Arcane Explosion' (Normal Dungeon)"),
+(@ENTRY,0,2,0,9,0,100,4,0,8,9000,15000,11,59257,1,0,0,0,0,1,0,0,0,0,0,0,0,"Azure Binder - 0-8 Range - Cast 'Arcane Blast' (Heroic Dungeon)");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql
new file mode 100644
index 00000000000..6cd793dd55f
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql
@@ -0,0 +1,165 @@
+-- Spirit of Koosu SAI
+SET @ENTRY := 29034;
+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,0,0,100,0,0,0,3500,4100,11,21971,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spirit of Koosu - Combat CMC - Cast 'Poison Bolt'");
+
+-- Anub'ar Necromancer SAI
+SET @ENTRY := 29064;
+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,0,0,100,6,0,0,4000,6000,11,53333,64,0,0,0,0,2,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,6,14000,17000,23000,27000,11,53334,1,0,0,0,0,1,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat - Cast 'Animate Bones' (Dungeon)");
+
+-- Anub'ar Necromancer SAI
+SET @ENTRY := 29098;
+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,0,0,100,6,0,0,4000,6000,11,53333,64,0,0,0,0,2,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,6,14000,17000,23000,27000,11,53334,1,0,0,0,0,1,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat - Cast 'Animate Bones' (Dungeon)");
+
+
+-- Anub'ar Prime Guard SAI
+SET @ENTRY := 29128;
+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,0,0,100,2,0,0,10000,13000,11,54309,64,0,0,0,0,5,0,0,0,0,0,0,0,"Anub'ar Prime Guard - Combat CMC - Cast 'Mark of Darkness' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,10000,13000,11,59352,64,0,0,0,0,5,0,0,0,0,0,0,0,"Anub'ar Prime Guard - Combat CMC - Cast 'Mark of Darkness' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,9,0,100,7,0,5,0,0,11,54314,33,0,0,0,0,1,0,0,0,0,0,0,0,"Anub'ar Prime Guard - 0-5 Range - Cast 'Drain Power' (No Repeat) (Dungeon)");
+
+
+-- Lost Drakkari Spirit SAI
+SET @ENTRY := 29129;
+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,23,0,100,0,17327,0,2000,2000,11,17327,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lost Drakkari Spirit - On Has Aura 'Spirit Particles' - Cast 'Spirit Particles'"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,1500,1500,11,37361,65,0,0,0,0,2,0,0,0,0,0,0,0,"Lost Drakkari Spirit - Combat CMC - Cast 'Arcane Bolt'"),
+(@ENTRY,0,2,0,0,0,100,0,10000,16000,15000,18000,11,24050,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lost Drakkari Spirit - In Combat - Cast 'Spirit Burst'");
+
+-- Onslaught Harbor Guard SAI
+SET @ENTRY := 29330;
+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,0,0,100,0,0,0,3400,4700,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Onslaught Harbor Guard - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,0,0,100,0,8000,8000,12000,14000,11,50750,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onslaught Harbor Guard - Combat - Cast 'Raven Heal'");
+
+-- Sifreldar Runekeeper SAI
+SET @ENTRY := 29331;
+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,0,0,100,0,0,0,3400,4800,11,20792,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sifreldar Runekeeper - Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,1,0,2,0,100,1,0,30,15000,22000,11,52714,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sifreldar Runekeeper - 0-30% Health - Cast 'Revitalizing Rune' (No Repeat)");
+
+-- Onslaught Raven Bishop SAI
+SET @ENTRY := 29338;
+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,0,0,100,0,0,0,3400,4700,11,50740,64,0,0,0,0,2,0,0,0,0,0,0,0,"Onslaught Raven Bishop - Combat CMC - Cast 'Raven Flock'"),
+(@ENTRY,0,1,0,2,0,100,1,10,50,2000,8000,11,50750,0,0,0,0,0,2,0,0,0,0,0,0,0,"Onslaught Raven Bishop - 10-50% Health - Cast 'Raven Heal' (No Repeat)");
+
+-- Savage Hill Scavenger SAI
+SET @ENTRY := 29404;
+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,0,0,100,0,0,0,5000,8000,11,50403,64,0,0,0,0,5,0,0,0,0,0,0,0,"Savage Hill Scavenger - Combat CMC - Cast 'Bone Toss'");
+
+-- Savage Hill Mystic SAI
+SET @ENTRY := 29622;
+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,0,0,100,0,0,0,4400,5800,11,50273,64,0,0,0,0,2,0,0,0,0,0,0,0,"Savage Hill Mystic - Combat CMC - Cast 'Arcane Barrage'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Savage Hill Mystic - 0-15% Health - Flee For Assist");
+
+-- Stormforged Tracker SAI
+SET @ENTRY := 29652;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Stormforged Tracker - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,0,0,100,0,9000,12000,9000,12000,11,46982,1,0,0,0,0,5,0,0,0,0,0,0,0,"Stormforged Tracker - Combat - Cast 'Lightning Gun Shot'");
+
+-- Spitting Cobra SAI
+SET @ENTRY := 29774;
+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,0,0,100,2,0,0,12000,15000,11,32860,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,12000,15000,11,38378,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Shadow Bolt' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,5000,10000,17000,20000,11,55703,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Cobra Strike' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,5000,10000,17000,20000,11,59020,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Cobra Strike' (Heroic Dungeon)");
+
+-- Drakkari God Hunter SAI
+SET @ENTRY := 29820;
+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,0,0,100,2,0,0,2300,5000,11,35946,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat CMC - Cast 'Shoot' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,2300,5000,11,59146,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat CMC - Cast 'Shoot' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,7000,10000,12000,15000,11,55624,1,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Arcane Shot' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,7000,10000,12000,15000,11,58973,1,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Arcane Shot' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,6,3000,5000,33000,37000,11,55798,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Flare' (Dungeon)"),
+(@ENTRY,0,5,0,0,0,100,6,18000,21000,19000,23000,11,55625,0,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Tranquillizing Shot' (Dungeon)"),
+(@ENTRY,0,6,0,2,0,100,6,0,30,12000,15000,11,31567,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari God Hunter - 0-30% Health - Cast 'Deterrence' (Dungeon)");
+
+-- Drakkari Fire Weaver SAI
+SET @ENTRY := 29822;
+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,0,0,100,2,0,0,8000,9000,11,55659,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Lava Burst' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,8000,9000,11,58972,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Lava Burst' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,4000,7000,12000,15000,11,55613,65,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Flame Shock' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,4000,7000,10000,14000,11,58971,65,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Flame Shock' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,9,0,100,6,0,5,10000,16000,11,61362,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari Fire Weaver - 0-5 Range - Cast 'Blast Wave' (Dungeon)");
+
+-- Drakkari Battle Rider SAI
+SET @ENTRY := 29836;
+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,0,0,100,2,0,0,5000,7000,11,55348,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat CMC - Cast 'Throw' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,5000,7000,11,58966,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat CMC - Cast 'Throw' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,12000,15000,16000,22000,11,55521,33,0,0,0,0,6,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat - Cast 'Poisoned Spear' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,12000,15000,16000,22000,11,58967,33,0,0,0,0,6,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat - Cast 'Poisoned Spear' (Heroic Dungeon)");
+
+-- Mildred the Cruel SAI
+SET @ENTRY := 29885;
+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,0,0,100,0,0,30,3400,4800,11,15587,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mildred the Cruel - Combat CMC - Cast 'Mind Blast'"),
+(@ENTRY,0,1,0,0,0,100,0,7000,11000,12000,15000,11,14032,0,0,0,0,0,5,0,0,0,0,0,0,0,"Mildred the Cruel - Combat - Cast 'Shadow Word: Pain'"),
+(@ENTRY,0,2,0,2,0,100,0,0,15,10000,15000,11,47697,1,0,0,0,0,5,0,0,0,0,0,0,0,"Mildred the Cruel - 0-15% Health - Cast 'Shadow Word: Death'");
+
+-- K3 Bruiser SAI
+SET @ENTRY := 29910;
+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,9,0,100,1,0,20,11000,16000,11,12024,1,0,0,0,0,2,0,0,0,0,0,0,0,"K3 Bruiser - Within 0-20 Range - Cast 'Net' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,23337,64,0,0,0,0,2,0,0,0,0,0,0,0,"K3 Bruiser - Combat CMC - Cast 'Shoot'");
+
+-- Earthen Stoneguard SAI
+SET @ENTRY := 29960;
+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,9,0,100,1,0,20,11000,16000,11,12024,1,0,0,0,0,2,0,0,0,0,0,0,0,"Earthen Stoneguard - Within 0-20 Range - Cast 'Net' (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,23337,64,0,0,0,0,2,0,0,0,0,0,0,0,"Earthen Stoneguard - Combat CMC - Cast 'Shoot'");
+
+-- Iron Dwarf Magus SAI
+SET @ENTRY := 29979;
+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,0,0,100,0,0,30,3400,4800,11,12058,64,0,0,0,0,2,0,0,0,0,0,0,0,"Iron Dwarf Magus - Combat CMC - Cast 'Chain Lightning'");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql
new file mode 100644
index 00000000000..fa123614224
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql
@@ -0,0 +1,173 @@
+-- Wastes Scavenger SAI
+SET @ENTRY := 28005;
+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,0,0,100,0,0,0,3000,5000,11,50403,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wastes Scavenger - Combat CMC - Cast 'Bone Toss'"),
+(@ENTRY,0,1,0,8,0,100,0,50430,0,0,0,80,2800500,2,0,0,0,0,1,0,0,0,0,0,0,0,"Wastes Scavenger - On spellhit Devour Ghoul - Run script");
+
+-- Emperor Cobra SAI
+SET @ENTRY := 28011;
+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,0,0,100,0,0,0,3400,4800,11,32093,32,0,0,0,0,2,0,0,0,0,0,0,0,"Emperor Cobra - Combat CMC - Cast 'Poison Spit'");
+
+-- Rainspeaker Oracle SAI
+SET @ENTRY := 28025;
+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,0,0,100,0,0,0,6000,8000,11,15305,64,0,0,0,0,2,0,0,0,0,0,0,0,"Rainspeaker Oracle - Combat CMC - Cast 'Chain Lightning'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,6000,12000,15000,11,54919,1,0,0,0,0,5,0,0,0,0,0,0,0,"Rainspeaker Oracle - Combat - Cast 'Warped Armor'");
+
+-- Frenzyheart Tracker SAI
+SET @ENTRY := 28077;
+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,1,54,0,100,0,0,0,0,0,66,0,0,0,0,0,0,21,50,0,0,0,0,0,0,"Frenzyheart Tracker - On Just Summoned - Set Orientation"),
+(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzyheart Tracker - On Just Summoned - Say Line 1"),
+(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,41,8000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzyheart Tracker - On Just Summoned - Despawn After 8 seconds"),
+(@ENTRY,0,3,0,0,0,100,0,0,0,3000,5000,11,22907,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzyheart Tracker - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,4,0,0,0,100,0,10000,14000,60000,65000,11,53432,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzyheart Tracker - Combat - Cast 'Bear Trap'");
+
+-- Frenzyheart Hunter SAI
+SET @ENTRY := 28079;
+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,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzyheart Hunter - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,0,0,100,0,8000,11000,12000,15000,11,52270,1,0,0,0,0,5,0,0,0,0,0,0,0,"Frenzyheart Hunter - Combat - Cast 'Multi-Shot'");
+
+-- Frenzyheart Scavenger SAI
+SET @ENTRY := 28081;
+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,0,0,100,0,0,0,2300,3900,11,54617,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzyheart Scavenger - Combat CMC - Cast 'Throw Spear'");
+
+-- Sparktouched Oracle SAI
+SET @ENTRY := 28112;
+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,0,0,100,0,0,0,3400,4800,11,54916,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sparktouched Oracle - Combat CMC - Cast 'Lightning Burst'"),
+(@ENTRY,0,1,0,9,0,100,0,0,30,9000,12000,11,12549,1,0,0,0,0,2,0,0,0,0,0,0,0,"Sparktouched Oracle - Within 0-30 Range - Cast 'Forked Lightning'");
+
+-- Don Carlos SAI
+SET @ENTRY := 28132;
+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,1,0,100,7,1000,1000,0,0,11,50736,1,0,0,0,0,1,0,0,0,0,0,0,0,"Don Carlos - Out of Combat - Cast 'Summon Guerrero' (No Repeat) (Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2300,5000,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Don Carlos - Combat CMC - Cast 'Shoot' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,4,0,0,2300,5000,11,16496,64,0,0,0,0,2,0,0,0,0,0,0,0,"Don Carlos - Combat CMC - Cast 'Shoot' (Heroic Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,2,9000,14000,22000,26000,11,12024,1,0,0,0,0,5,0,0,0,0,0,0,0,"Don Carlos - In Combat - Cast 'Net' (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,4,9000,14000,22000,26000,11,50762,1,0,0,0,0,5,0,0,0,0,0,0,0,"Don Carlos - In Combat - Cast 'Net' (Heroic Dungeon)");
+
+-- Snowflake SAI
+SET @ENTRY := 28153;
+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,0,0,100,2,0,0,3400,4800,11,50721,64,0,0,0,0,2,0,0,0,0,0,0,0,"Snowflake - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,59280,64,0,0,0,0,2,0,0,0,0,0,0,0,"Snowflake - Combat CMC - Cast 'Frostbolt' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,7,5000,9000,0,0,11,44604,0,0,0,0,0,1,0,0,0,0,0,0,0,"Snowflake - In Combat - Cast 'Enchantment of Spell Haste' (No Repeat) (Dungeon)");
+
+-- Dark Necromancer SAI
+SET @ENTRY := 28200;
+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,0,0,100,2,0,0,5000,7000,11,15537,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,5000,7000,11,61558,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat CMC - Cast 'Shadow Bolt' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,7000,11000,21000,25000,11,20812,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Cripple' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,7000,11000,21000,25000,11,52498,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Cripple' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,2,14000,18000,15000,21000,11,58772,1,0,0,0,0,6,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Drain Mana' (Normal Dungeon)"),
+(@ENTRY,0,5,0,0,0,100,4,14000,18000,15000,21000,11,58770,1,0,0,0,0,6,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Drain Mana' (Heroic Dungeon)");
+
+-- Drakkari Water Binder SAI
+SET @ENTRY := 28303;
+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,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Water Binder - Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,8000,16000,25000,30000,11,54399,1,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Water Binder - Combat - Cast 'Water Bubble'");
+
+-- Ymirjar Necromancer SAI
+SET @ENTRY := 28368;
+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,0,0,100,2,0,0,5000,7000,11,51432,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,5000,7000,11,59254,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,9000,14000,18000,22000,11,49205,0,0,0,0,0,5,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat - Cast 'Shadow Bolt Volley' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,4,9000,14000,18000,22000,11,59255,0,0,0,0,0,5,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat - Cast 'Shadow Bolt Volley' (Heroic Dungeon)");
+
+-- Har'koan Subduer SAI
+SET @ENTRY := 28403;
+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,1,0,100,0,2000,20000,40000,60000,80,2840300,2,0,0,0,0,1,0,0,0,0,0,0,0,"Har'koan Subduer - Out of Combat - Run Script"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2800,3500,11,20822,64,0,0,0,0,2,0,0,0,0,0,0,0,"Har'koan Subduer - Combat CMC - Cast 'Frostbolt'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Har'koan Subduer - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Dragonflayer Spiritualist SAI
+SET @ENTRY := 28410;
+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,0,0,100,6,0,0,2400,3800,11,51587,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonflayer Spiritualist - Combat CMC - Cast 'Lightning Bolt' (Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,6,1500,4000,8000,10000,11,51588,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonflayer Spiritualist - Combat - Cast 'Flame Shock' (Dungeon)"),
+(@ENTRY,0,2,0,14,0,100,6,7000,100,7000,7000,11,51586,1,0,0,0,0,7,0,0,0,0,0,0,0,"Dragonflayer Spiritualist - Friendly At 7000 Health - Cast 'Healing Wave' (Dungeon)");
+
+-- Hath'ar Broodmaster SAI
+SET @ENTRY := 28412;
+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,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hath'ar Broodmaster - Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,5000,15000,25000,11,54453,1,0,0,0,0,2,0,0,0,0,0,0,0,"Hath'ar Broodmaster - Combat - Cast 'Web Wrap'");
+
+-- Hemet Nesingwary SAI
+SET @ENTRY := 28451;
+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,0,0,100,0,0,0,2300,3900,11,51742,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hemet Nesingwary - Combat CMC - Cast 'Arcane Shot'");
+
+-- Storming Vortex SAI
+SET @ENTRY := 28547;
+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,0,0,100,2,0,0,3400,4800,11,53044,64,0,0,0,0,2,0,0,0,0,0,0,0,"Storming Vortex - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,59169,64,0,0,0,0,2,0,0,0,0,0,0,0,"Storming Vortex - Combat CMC - Cast 'Lightning Bolt' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,9,0,100,6,0,5,9000,18000,11,60236,0,0,0,0,0,6,0,0,0,0,0,0,0,"Storming Vortex - Within 0-5 Range - Cast 'Cyclone' (Dungeon)");
+
+-- Hardened Steel Skycaller SAI
+SET @ENTRY := 28580;
+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,0,0,100,2,0,0,2300,5000,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat CMC - Cast 'Shoot' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,4,0,0,2300,5000,11,61515,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat CMC - Cast 'Shoot' (Heroic Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,9000,12000,15000,20000,11,52754,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Shot' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,2,7000,12000,12000,18000,11,52775,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Multi-Shot' (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,4,9000,12000,15000,20000,11,59148,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Shot' (Heroic Dungeon)"),
+(@ENTRY,0,5,0,0,0,100,4,7000,12000,12000,18000,11,59147,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Multi-Shot' (Heroic Dungeon)"),
+(@ENTRY,0,6,0,9,0,100,6,0,5,6000,9000,11,61507,0,0,0,0,0,1,0,0,0,0,0,0,0,"Hardened Steel Skycaller - 0-5 Range - Cast 'Disengage' (Dungeon)");
+
+-- Titanium Vanguard SAI
+SET @ENTRY := 28838;
+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,0,0,100,3,0,0,0,0,11,53059,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - On Aggro - Cast 'Poison Tipped Spear' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,1,0,9,0,100,2,5,30,14000,21000,11,53059,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - Within 5-30 Range - Cast 'Poison Tipped Spear' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,5,0,0,0,0,11,59178,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - On Aggro - Cast 'Poison Tipped Spear' (No Repeat) (Heroic Dungeon)"),
+(@ENTRY,0,3,0,9,0,100,4,5,30,14000,21000,11,59178,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - Within 5-30 Range - Cast 'Poison Tipped Spear' (Heroic Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,7,4000,6000,0,0,11,58619,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - In Combat - Cast 'Charge' (No Repeat) (Dungeon)"),
+(@ENTRY,0,5,0,0,0,100,6,12000,15000,12000,15000,11,58619,0,0,0,0,0,6,0,0,0,0,0,0,0,"Titanium Vanguard - In Combat - Cast 'Charge' (Dungeon)");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql
new file mode 100644
index 00000000000..237bbe658ce
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql
@@ -0,0 +1,11 @@
+--
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=46104;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(17,0,46104,0,0,31,1,3,25835,0,0,0,0,'','Nesingwary Trapper can be killed by the Trapped!');
+
+DELETE FROM `creature_text` WHERE `entry` IN (25835) ;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(25835, 0, 0, 'It''s a miracle! The beast skinned itself!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25029),
+(25835, 0, 1, 'Jackpot!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25034),
+(25835, 0, 2, 'Stupid beasts!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25030),
+(25835, 0, 3, 'This is the last one that I need for the set of Nesingwary steak knives!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25031);
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql
new file mode 100644
index 00000000000..20167f615b6
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql
@@ -0,0 +1,342 @@
+-- Prince Raze SAI
+SET @ENTRY := 10647;
+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,0,0,100,0,0,0,4700,5800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Prince Raze - Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,1,0,9,0,100,0,0,40,13000,16000,11,16570,1,0,0,0,0,5,0,0,0,0,0,0,0,"Prince Raze - 0-40 Range - Cast 'Charged Arcane Bolt'"),
+(@ENTRY,0,2,0,9,0,100,0,0,8,12000,18000,11,11969,1,0,0,0,0,1,0,0,0,0,0,0,0,"Prince Raze - 0-8 Range - Cast 'Fire Nova'"),
+(@ENTRY,0,3,4,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Prince Raze - 0-15% Health - Flee For Assist (No Repeat)"),
+(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,11,6925,1,0,0,0,0,1,0,0,0,0,0,0,0,"Prince Raze - 0-15% Health - Cast 'Gift of the Xavian' (No Repeat)");
+
+-- Summoned Blackhand Dreadweaver SAI
+SET @ENTRY := 10680;
+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,1,0,100,3,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Out of Combat - Say Line 0 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,6400,11,12739,64,0,0,0,0,2,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,14500,19200,27600,39600,11,7068,0,0,0,0,0,2,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Combat - Cast 'Veil of Shadow' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,4,0,1,0,100,2,10000,10000,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Out of Combat - Kill Self (No Repeat) (Normal Dungeon)");
+
+-- Duggan Wildhammer SAI
+SET @ENTRY := 10817;
+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,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"Duggan Wildhammer - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,15284,1,0,0,0,0,2,0,0,0,0,0,0,0,"Duggan Wildhammer - 0-5 Range - Cast 'Cleave'"),
+(@ENTRY,0,2,0,2,0,100,0,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Duggan Wildhammer - 0-15% Health - Flee For Assist");
+
+-- Death-Hunter Hawkspear SAI
+SET @ENTRY := 10824;
+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,9,0,100,0,0,5,2300,3900,11,12057,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ranger Lord Hawkspear - 0-5 Range - Cast 'Strike'"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,7000,9000,11,11978,1,0,0,0,0,2,0,0,0,0,0,0,0,"Ranger Lord Hawkspear - 0-5 Range - Cast 'Kick'");
+
+-- Deathspeaker Selendre SAI
+SET @ENTRY := 10827;
+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,0,0,100,0,0,0,3000,5000,11,12471,64,0,0,0,0,2,0,0,0,0,0,0,0,"Deathspeaker Selendre - Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,3000,5000,15000,18000,11,12889,1,0,0,0,0,2,0,0,0,0,0,0,0,"Deathspeaker Selendre - Combat - Cast 'Curse of Tongues'"),
+(@ENTRY,0,2,0,2,0,100,0,0,30,12000,19000,11,17238,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deathspeaker Selendre - 0-30% Health - Cast 'Drain Life'");
+
+-- Risen Rifleman SAI
+SET @ENTRY := 11054;
+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,0,0,100,2,0,0,2300,3900,11,17353,64,0,0,0,0,2,0,0,0,0,0,0,0,"Crimson Rifleman - Combat CMC - Cast 'Shoot' (Normal Dungeon)");
+
+-- Ragefire Shaman SAI
+SET @ENTRY := 11319;
+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,0,0,100,2,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ragefire Shaman - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,74,0,100,3,0,40,30000,35000,11,11986,1,0,0,0,0,9,0,0,0,0,0,0,0,"Ragefire Shaman - On Friendly Between 0-40% Health - Cast 'Healing Wave' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ragefire Shaman - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Searing Blade Warlock SAI
+SET @ENTRY := 11324;
+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,1,0,100,3,1000,1000,0,0,11,12746,0,0,0,0,0,1,0,0,0,0,0,0,0,"Searing Blade Warlock - Out of Combat - Cast 'Summon Voidwalker' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,3400,6500,11,20791,64,0,0,0,0,2,0,0,0,0,0,0,0,"Searing Blade Warlock - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Searing Blade Warlock - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Gordok Ogre-Mage SAI
+SET @ENTRY := 11443;
+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,4,0,20,1,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gordok Ogre-Mage - On Aggro - Say Line 0 (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat CMC - Cast 'Fireball'"),
+(@ENTRY,0,2,0,0,0,100,0,5000,12000,35000,45000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat - Cast 'Bloodlust'"),
+(@ENTRY,0,3,0,4,0,20,3,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gordok Ogre-Mage - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,2,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,5,0,0,0,100,2,5000,12000,35000,45000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat - Cast 'Bloodlust' (Normal Dungeon)");
+
+-- Gordok Mage-Lord SAI
+SET @ENTRY := 11444;
+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,4,0,20,3,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gordok Mage-Lord - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,15530,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,7000,14000,12000,15000,11,14145,0,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat - Cast 'Fire Blast' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,2,12000,17000,19000,25000,11,16102,0,0,0,0,0,5,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat - Cast 'Flamestrike' (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,2,7000,9000,16000,20000,11,13323,1,0,0,0,0,6,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat - Cast 'Polymorph' (Normal Dungeon)"),
+(@ENTRY,0,5,6,2,0,100,3,0,30,0,0,11,16170,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Mage-Lord - Between 0-30% Health - Cast 'Bloodlust' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,6,0,61,0,100,3,0,30,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Mage-Lord - Between 0-30% Health - Say Line 1 (No Repeat) (Normal Dungeon)");
+
+-- Gordok Warlock SAI
+SET @ENTRY := 11448;
+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,1,0,100,2,1000,1000,1800000,1800000,11,13787,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Warlock - Out of Combat - Cast 'Demon Armor' (Normal Dungeon)"),
+(@ENTRY,0,1,0,1,0,100,3,3000,3000,0,0,11,22865,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Warlock - Out of Combat - Cast 'Summon Doomguard' (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,2,0,4,0,20,3,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Warlock - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,2,0,0,2400,3800,11,15232,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Warlock - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,2,9000,15000,26000,30000,11,17883,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Warlock - Combat - Cast 'Immolate' (Normal Dungeon)"),
+(@ENTRY,0,5,0,0,0,100,2,5000,9000,20000,25000,11,13338,0,0,0,0,0,5,0,0,0,0,0,0,0,"Gordok Warlock - Combat - Cast 'Curse of Tongues' (Normal Dungeon)"),
+(@ENTRY,0,6,0,0,0,100,2,7000,15000,20000,26000,11,8994,1,0,0,0,0,6,0,0,0,0,0,0,0,"Gordok Warlock - Combat - Cast 'Banish' (Normal Dungeon)");
+
+-- Wildspawn Betrayer SAI
+SET @ENTRY := 11454;
+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,0,0,100,2,0,0,2300,3900,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - Combat CMC - Cast 'Shoot' (Normal Dungeon)"),
+(@ENTRY,0,1,0,9,0,100,2,5,30,7800,11400,11,18649,40,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - 5-30 Range - Cast 'Shadow Shot' (Normal Dungeon)"),
+(@ENTRY,0,2,0,9,0,100,2,5,30,9900,13600,11,7896,40,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - 5-30 Range - Cast 'Exploding Shot' (Normal Dungeon)"),
+(@ENTRY,0,3,0,9,0,100,2,0,5,6000,11000,11,11428,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - 0-5 Range - Cast 'Knockdown' (Normal Dungeon)"),
+(@ENTRY,0,4,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Betrayer - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Wildspawn Felsworn SAI
+SET @ENTRY := 11455;
+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,1,0,100,2,1000,1000,1800000,1800000,11,12542,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Felsworn - Out of Combat - Cast 'Fear' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,15537,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,7000,12000,38000,45000,11,22417,1,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat - Cast 'Shadow Shield' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,1,100,2,11000,17000,23000,30000,11,15654,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat - Cast 'Shadow Word: Pain' (Normal Dungeon)"),
+(@ENTRY,0,4,0,0,0,100,2,6000,10000,10000,15000,11,12542,1,0,0,0,0,5,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat - Cast 'Fear' (Normal Dungeon)");
+
+-- Wildspawn Hellcaller SAI
+SET @ENTRY := 11457;
+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,0,0,100,2,0,0,2400,3800,11,15228,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Hellcaller - Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,8000,14000,18000,25000,11,20754,3,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Hellcaller - Combat - Cast 'Rain of Fire' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Hellcaller - 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Highborne Summoner SAI
+SET @ENTRY := 11466;
+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,0,0,100,2,0,0,2400,3800,11,12466,64,0,0,0,0,2,0,0,0,0,0,0,0,"Highborne Summoner - Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,8000,11000,9000,12000,11,13341,0,0,0,0,0,5,0,0,0,0,0,0,0,"Highborne Summoner - Combat - Cast 'Fire Blast' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,12000,16000,18000,22000,11,15063,1,0,0,0,0,1,0,0,0,0,0,0,0,"Highborne Summoner - Combat - Cast 'Frost Nova' (Normal Dungeon)");
+
+-- Eldreth Apparition SAI
+SET @ENTRY := 11471;
+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,1,0,100,2,1000,1000,1800000,1800000,11,18100,1,0,0,0,0,1,0,0,0,0,0,0,0,"Eldreth Apparition - Out of Combat - Cast 'Frost Armor' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,16799,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eldreth Apparition - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,7000,12000,20000,27500,11,22744,1,0,0,0,0,6,0,0,0,0,0,0,0,"Eldreth Apparition - Combat - Cast 'Chains of Ice' (Normal Dungeon)"),
+(@ENTRY,0,3,0,0,0,100,2,11000,14000,20000,30000,11,15244,1,0,0,0,0,2,0,0,0,0,0,0,0,"Eldreth Apparition - Combat - Cast 'Cone of Cold' (Normal Dungeon)");
+
+-- Irondeep Shaman SAI
+SET @ENTRY := 11600;
+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,0,0,100,2,0,0,3400,4800,11,15801,64,0,0,0,0,2,0,0,0,0,0,0,0,"Irondeep Shaman - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,7000,9000,55000,65000,11,15786,1,0,0,0,0,1,0,0,0,0,0,0,0,"Irondeep Shaman - Combat - Cast 'Earthbind Totem' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,2,0,50,15000,20000,11,12492,1,0,0,0,0,1,0,0,0,0,0,0,0,"Irondeep Shaman - 0-50% Health - Cast 'Healing Wave' (Normal Dungeon)"),
+(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Irondeep Shaman - 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Whitewhisker Geomancer SAI
+SET @ENTRY := 11604;
+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,0,0,100,2,0,0,3400,4800,11,15228,64,0,0,0,0,2,0,0,0,0,0,0,0,"Whitewhisker Geomancer - Combat CMC - Cast 'Fireball' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,500,1000,600000,600000,11,18968,1,0,0,0,0,1,0,0,0,0,0,0,0,"Whitewhisker Geomancer - Combat - Cast 'Fire Shield' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Whitewhisker Geomancer - 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)");
+
+-- Morloch SAI
+SET @ENTRY := 11657;
+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,0,0,100,2,0,0,3400,4800,11,15537,64,0,0,0,0,2,0,0,0,0,0,0,0,"Morloch - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,6000,9000,120000,130000,11,12741,1,0,0,0,0,2,0,0,0,0,0,0,0,"Morloch - Combat - Cast 'Curse of Weakness' (Normal Dungeon)"),
+(@ENTRY,0,2,0,0,0,100,2,11000,14000,9000,15000,11,17228,0,0,0,0,0,2,0,0,0,0,0,0,0,"Morloch - Combat - Cast 'Shadow Bolt Volley' (Normal Dungeon)");
+
+-- Snowblind Windcaller SAI
+SET @ENTRY := 11675;
+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,0,0,100,2,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Snowblind Windcaller - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,5000,8000,12000,16000,11,9532,1,0,0,0,0,6,0,0,0,0,0,0,0,"Snowblind Windcaller - Combat - Cast 'Lightning Bolt' (Normal Dungeon)");
+
+-- Horde Scout SAI
+SET @ENTRY := 11680;
+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,4,0,15,1,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Horde Scout - On Aggro - Say Line 0 (No Repeat)"),
+(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Horde Scout - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,2,0,9,0,100,0,5,30,12000,15000,11,18545,0,0,0,0,0,2,0,0,0,0,0,0,0,"Horde Scout - Within 5-30 Range - Cast 'Scorpid Sting'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horde Scout - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Warsong Shaman SAI
+SET @ENTRY := 11683;
+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,0,0,100,0,0,0,3400,4800,11,20805,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Shaman - Combat CMC - Cast 'Lightning Bolt'"),
+(@ENTRY,0,1,0,2,0,100,0,0,30,30000,35000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Shaman - 0-30% Health - Cast 'Bloodlust'"),
+(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Shaman - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Wildpaw Mystic SAI
+SET @ENTRY := 11838;
+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,0,0,100,2,0,0,3400,4800,11,37361,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildpaw Mystic - Combat CMC - Cast 'Arcane Bolt' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,6000,9000,16000,19000,11,12058,1,0,0,0,0,2,0,0,0,0,0,0,0,"Wildpaw Mystic - Combat - Cast 'Chain Lightning' (Normal Dungeon)"),
+(@ENTRY,0,2,0,2,0,100,2,0,50,12000,16000,11,11986,1,0,0,0,0,1,0,0,0,0,0,0,0,"Wildpaw Mystic - 0-50% Health - Cast 'Healing Wave' (Normal Dungeon)");
+
+-- Nathanos Blightcaller SAI
+SET @ENTRY := 11878;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Nathanos Blightcaller - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,0,0,100,0,4000,6000,8000,11000,11,18651,0,0,0,0,0,5,0,0,0,0,0,0,0,"Nathanos Blightcaller - Combat - Cast 'Multi-Shot'"),
+(@ENTRY,0,2,0,9,0,100,0,0,5,7000,9000,11,6253,1,0,0,0,0,2,0,0,0,0,0,0,0,"Nathanos Blightcaller - 0-5 Range - Cast 'Backhand'"),
+(@ENTRY,0,3,0,15,0,100,1,0,0,10,0,11,13704,1,0,0,0,0,1,0,0,0,0,0,0,0,"Nathanos Blightcaller - Friendly Crowd Controlled - Cast 'Psychic Scream'");
+
+-- Lord Vyletongue SAI
+SET @ENTRY := 12236;
+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,0,0,100,2,0,0,2300,3900,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Lord Vyletongue - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,2,5,30,7000,9500,11,21390,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lord Vyletongue - 5-30 Range - Cast 'Multi-Shot'"),
+(@ENTRY,0,2,0,0,0,100,2,20000,30000,20000,30000,11,21655,1,0,0,0,0,1,0,0,0,0,0,0,0,"Lord Vyletongue - Combat - Cast 'Blink'"),
+(@ENTRY,0,3,0,0,0,100,2,8000,12000,14000,18000,11,7964,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lord Vyletongue - Combat - Cast 'Smoke Bomb'");
+
+-- Quel'Lithien Protector SAI
+SET @ENTRY := 12322;
+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,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"Quel'Lithien Protector - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,5000,7000,11,12057,0,0,0,0,0,2,0,0,0,0,0,0,0,"Quel'Lithien Protector - 0-5 Range - Cast 'Strike'"),
+(@ENTRY,0,2,0,9,0,100,0,0,5,8000,13000,11,11978,0,0,0,0,0,2,0,0,0,0,0,0,0,"Quel'Lithien Protector - 0-5 Range - Cast 'Kick'"),
+(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quel'Lithien Protector - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Damned Soul SAI
+SET @ENTRY := 12378;
+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,0,0,100,0,0,0,3400,4800,11,20825,64,0,0,0,0,2,0,0,0,0,0,0,0,"Damned Soul - Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,7000,9000,7000,9000,11,13748,0,0,0,0,0,2,0,0,0,0,0,0,0,"Damned Soul - Combat - Cast 'Arcane Bolt'");
+
+-- Mastok Wrilehiss SAI
+SET @ENTRY := 12737;
+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,0,0,100,0,0,0,2300,3900,11,15620,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mastok Wrilehiss - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,0,5,5000,7000,11,15284,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mastok Wrilehiss - 0-5 Range - Cast 'Cleave'"),
+(@ENTRY,0,2,0,0,0,100,0,9000,15000,14000,18000,11,23600,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mastok Wrilehiss - Combat - Cast 'Piercing Howl'"),
+(@ENTRY,0,3,4,2,0,100,0,0,30,120000,130000,11,8599,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mastok Wrilehiss - 0-30% Health - Cast 'Enrage'"),
+(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mastok Wrilehiss - 0-30% Health - Say 0");
+
+DELETE FROM `creature_text` WHERE `entry` IN (12737);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`comment`) VALUES
+(12737,0,0,'$s becomes enraged!',16,0,100,0,0,0,24144,'Mastok Wrilehiss enrage at 30%');
+
+-- Ashenvale Outrunner SAI
+SET @ENTRY := 12856;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ashenvale Outrunner - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,5,30,35900,52300,11,18545,1,0,0,0,0,2,0,0,0,0,0,0,0,"Ashenvale Outrunner - Within 5-30 Range - Cast 'Scorpid Sting'"),
+(@ENTRY,0,2,0,9,0,100,0,0,5,7100,15300,11,8646,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ashenvale Outrunner - Within 0-5 Range - Cast 'Snap Kick'");
+
+-- Warsong Scout SAI
+SET @ENTRY := 12862;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Scout - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Scout - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Warsong Runner SAI
+SET @ENTRY := 12863;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Runner - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Runner - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Warsong Outrider SAI
+SET @ENTRY := 12864;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Outrider - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,9,0,100,0,5,30,35900,52300,11,18545,1,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Outrider - Within 5-30 Range - Cast 'Scorpid Sting'");
+
+-- Ambassador Malcin SAI
+SET @ENTRY := 12865;
+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,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ambassador Malcin - Combat CMC - Cast 'Shadow Bolt'"),
+(@ENTRY,0,1,0,0,0,100,0,5000,9000,15000,25000,11,8282,32,0,0,0,0,2,0,0,0,0,0,0,0,"Ambassador Malcin - Combat - Cast 'Curse of Blood'");
+
+-- Silverwing Sentinel SAI
+SET @ENTRY := 12896;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Silverwing Sentinel - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silverwing Sentinel - 0-15% Health - Flee For Assist (No Repeat)");
+
+-- Lorgus Jett SAI
+SET @ENTRY := 12902;
+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,1,0,100,2,1000,1000,600000,600000,11,12550,1,0,0,0,0,1,0,0,0,0,0,0,0,"Lorgus Jett - Out of Combat - Cast 'Lightning Shield' (Normal Dungeon)"),
+(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,12167,64,0,0,0,0,2,0,0,0,0,0,0,0,"Lorgus Jett - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)");
+
+-- Mounted Ironforge Mountaineer SAI
+SET @ENTRY := 12996;
+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,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mounted Ironforge Mountaineer - Combat CMC - Cast 'Shoot'"),
+(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mounted Ironforge Mountaineer - 0-15% Health - Flee For Assist (No Repeat)");
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql
new file mode 100644
index 00000000000..8b91179bb48
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql
@@ -0,0 +1,14 @@
+DELETE FROM `smart_scripts` WHERE `entryorguid`=202443 AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=20244300 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
+(202443, 1, 0, 1, 64, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dedication of Honor - On Gossip Hello - Store Targetlist'),
+(202443, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 20244300, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dedication of Honor - On Gossip Hello - Run Script'),
+(202443, 1, 2, 0, 1, 0, 100, 1, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 14, 151164, 202616, 0, 0, 0, 0, 0, 'Dedication of Honor - OOC - Activate Go (No Repeat)'),
+(20244300, 9, 0, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 68, 16, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Dedication of Honor - On Script - Play Movie 16');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=202443 and `SourceId`=1;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 1, 202443, 1, 0, 17, 0, 4530, 0, 0, 0, 0, 0, '', 'Only run SAI if Player has achievement'),
+(22, 1, 202443, 1, 1, 17, 0, 4597, 0, 0, 0, 0, 0, '', 'Only run SAI if Player has achievement'),
+(22, 3, 202443, 1, 0, 40, 1, 4576, 0, 0, 0, 0, 0, '', 'Only run SAI if realm first rewarded');
+UPDATE `gameobject` SET `state`=1 WHERE `guid`=151164;
+UPDATE `gameobject_template` SET `flags`=32 WHERE `entry`=202616;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql
new file mode 100644
index 00000000000..79d0b382d12
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql
@@ -0,0 +1,35 @@
+DELETE FROM `creature_text` WHERE `entry` = 16287 AND `groupid`= 0;
+DELETE FROM `creature_text` WHERE `entry` = 10181 AND `groupid` = 2;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(16287, 0, 0, 'That could have gone better. $n, come here, please. I have something I need you to take care of for me.', 15, 0, 100, 0, 0, 0, 12157, 0, 'Ambassador Sunsorrow SAY_SUNSORROW_WHISPER'),
+(10181, 2, 0, '%s looks down at the discarded necklace. In her sadness, the lady incants a glamour, which beckons forth Highborne spirits. The chamber resonates with their ancient song about the Sin''dorei...', 16, 0, 100, 0, 0, 0, 19197, 0, 'Lady Sylvanas Windrunner EMOTE_LAMENT');
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id` = 7178 AND `id`= 0;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextId`) VALUES
+(7178, 0, 0, 'What is it that you have for me, ambassador?', 19205, 1, 1, 7178, 0, 0, 0, '', 0);
+
+UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 16287;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 16287 AND `source_type` = 0 AND `id` IN (0, 1, 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
+(16287,0,0,1,62,0,100,0,7178,0,0,0,11,37084,1,0,0,0,0,7,0,0,0,0,0,0,0,'Ambassador Sunsorrow - On Gossip Option 0 Selected - Create Item \'Lament of the Highborne\''),
+(16287,0,1,0,61,0,100,0,0,0,0,0,98,7178,10378,0,0,0,0,7,0,0,0,0,0,0,0,'Ambassador Sunsorrow - On Gossip Option 0 Selected - SEND_GOSSIP_MENU TEXT'),
+(16287,0,2,0,64,0,100,0,0,0,0,0,98,7178,8458,0,0,0,0,7,0,0,0,0,0,0,0,'Ambassador Sunsorrow - On Gossip Hello - SEND_GOSSIP_MENU TEXT');
+
+DELETE FROM `npc_text` WHERE `id` IN (10378, 8458);
+INSERT INTO `npc_text` (`id`, `text0_0`, `text0_1`, `prob0`, `em0_1`, `BroadcastTextID0`) VALUES
+(8458, "Greetings, $r. I am Ambassador Sunsorrow of the sin'dorei, or blood elves as we are commonly known. I have high hopes that this new bond between us and the Horde will be mutually beneficial.", "Greetings, $r. I am Ambassador Sunsorrow of the sin'dorei, or blood elves as we are commonly known. I have high hopes that this new bond between us and the Horde will be mutually beneficial.", 1, 2, 12161),
+(10378, "Just a small songbook that I thought you might like to have. It contains the lyrics to a song known as the Lament of the Highborne; the one that Lady Sylvanas glamoured from the air.", "", 1, 1, 19206);
+
+DELETE FROM `gossip_menu` WHERE `entry`=7178 AND `text_id` IN (10378, 8458, 8740);
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(7178,10378),
+(7178,8740),
+(7178,8458);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 7178 AND `SourceEntry` = 0 AND `SourceId` = 0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 7178, 0, 0, 0, 8, 0, 9180, 0, 0, 0, 0, 0, '', 'Ambassador Sunsorrow show gossip only if quest Journey to Undercity is rewarded'),
+(15, 7178, 0, 0, 0, 16, 0, 512, 0, 0, 0, 0, 0, '', 'Ambassador Sunsorrow show gossip only if player is Blood Elf'),
+(15, 7178, 0, 0, 0, 2, 0, 30632, 1, 0, 1, 0, 0, '', 'Ambassador Sunsorrow show gossip only if player doesn\'t have item Lament of Highborn');
+
+UPDATE `creature_text` SET `type` = 12 WHERE `entry` = 10181 AND `groupid` = 1;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql
new file mode 100644
index 00000000000..1d87dafb9f1
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql
@@ -0,0 +1,4 @@
+UPDATE `trinity_string` SET `content_default` = 'Map: %u (%s) Zone: %u (%s) Area: %u (%s) Phase: %u\nX: %f Y: %f Z: %f Orientation: %f' WHERE `entry` = 101;
+DELETE FROM `trinity_string` WHERE `entry` = 178;
+INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
+(178, 'grid[%u,%u]cell[%u,%u] InstanceID: %u\n ZoneX: %f ZoneY: %f\nGroundZ: %f FloorZ: %f Have height data (Map: %u VMap: %u MMap: %u)');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql
new file mode 100644
index 00000000000..93083732c4d
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql
@@ -0,0 +1,13 @@
+--
+UPDATE `creature_template` SET `spell1`=49285,`spell2`=29577,`flags_extra`=2,`ainame`='SmartAI' WHERE `entry`=26472;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=26472 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
+(26472,0,0,0,8,0,100,0,49266,0,0,0,69,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Highland Mustang - On Spell Hit(Dangle Wild Carrot) - Move To Player'),
+(26472,0,1,2,34,0,100,0,0,1,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Highland Mustang - On Movement Inform - Set Root'),
+(26472,0,2,0,61,0,100,0,0,0,0,0,85,49282,0,0,0,0,0,1,0,0,0,0,0,0,0,'Highland Mustang - Link With Previous - Invoker Cast Ride Highland Mustang'),
+(26472,0,3,0,27,0,100,0,0,0,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Highland Mustang - On Passenger Boarded - Remove Root');
+
+DELETE FROM `spell_script_names` WHERE `spell_id`=49285;
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(49285,'spell_q12414_hand_over_reins');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql
new file mode 100644
index 00000000000..a489bcc9a4e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `link`=0, `event_flags`=0, `comment`='Syreian the Bonecarver - On Aggro CMC - Cast \'Frost Arrow\'' WHERE `entryorguid`=32438 AND `source_type`=0 AND `id`=0 AND `link`=3;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql
new file mode 100644
index 00000000000..05c120274da
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql
@@ -0,0 +1,23 @@
+-- Updates base tables
+DROP TABLE IF EXISTS `updates`;
+CREATE TABLE `updates` (
+ `name` VARCHAR(200) NOT NULL COMMENT 'filename with extension of the update.',
+ `hash` CHAR(40) NULL DEFAULT '' COMMENT 'sha1 hash of the sql file.',
+ `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.',
+ `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.',
+ `speed` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'time the query takes to apply in ms.',
+ PRIMARY KEY (`name`)
+)
+COMMENT='List of all applied updates in this database.'
+COLLATE='utf8_general_ci'
+ENGINE=MyISAM;
+
+DROP TABLE IF EXISTS `updates_include`;
+CREATE TABLE `updates_include` (
+ `path` VARCHAR(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.',
+ `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.',
+ PRIMARY KEY (`path`)
+)
+COMMENT='List of directories where we want to include sql updates.'
+COLLATE='utf8_general_ci'
+ENGINE=MyISAM;
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql
new file mode 100644
index 00000000000..e8f9680dbee
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql
@@ -0,0 +1,6 @@
+-- World database update data
+TRUNCATE TABLE `updates_include`;
+INSERT INTO `updates_include` (`path`, `state`) VALUES
+('$/sql/updates/world', 'RELEASED'),
+('$/sql/custom/world', 'RELEASED'),
+('$/sql/old/3.3.5a/world', 'ARCHIVED');
diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql
new file mode 100644
index 00000000000..2786dc1ef4e
--- /dev/null
+++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql
@@ -0,0 +1,339 @@
+INSERT IGNORE INTO `updates` (`name`, `hash`, `state`) VALUES
+('2014_10_19_00_world.sql', 'DD3A24E92A894418F58C8AC280CBDAE2AC849B6C', 'ARCHIVED'),
+('2014_10_19_01_world.sql', '76D19F7888A41B1B4AB4A5F366AE98057F066128', 'ARCHIVED'),
+('2014_10_20_00_world.sql', 'E74390D42EF46218FE189C22A2A68BC454293F30', 'ARCHIVED'),
+('2014_10_21_00_world.sql', '0E29A91E897F5EF08BFD09893475B483084F9BB9', 'ARCHIVED'),
+('2014_10_22_00_world.sql', 'AD4925A3B6326E0E599693964BAABA38A0ED3FEF', 'ARCHIVED'),
+('2014_10_23_00_world.sql', '73AD951F22484AD30C04B1514ECC1DFCB7A764C7', 'ARCHIVED'),
+('2014_10_23_01_world.sql', '2D53A8A4A079CDF881CD1B7F142208E6453FF51A', 'ARCHIVED'),
+('2014_10_24_00_world.sql', 'E743491473D33A8CCE30D580B1234BBC2E9D46B9', 'ARCHIVED'),
+('2014_10_24_01_world.sql', '5A6EFA81F56575F85B27709944371C3E0A75D5D6', 'ARCHIVED'),
+('2014_10_26_00_world.sql', 'FA22609D1B1D0B56760595FEA7445B0724A44EE6', 'ARCHIVED'),
+('2014_10_27_00_world.sql', 'DA9FF17FA413017913715AAD27AD28F486340085', 'ARCHIVED'),
+('2014_10_27_01_world_335.sql', '702C94D55094B6C94548B1357DC0811EBF0B5A45', 'ARCHIVED'),
+('2014_10_27_02_world.sql', '3DAEB7EC510D924B37BFAC7D8CA06B8E38D60FEA', 'ARCHIVED'),
+('2014_10_28_00_world.sql', 'C59E8BCC1A58FB150B08A6D2F4003E5EC151E696', 'ARCHIVED'),
+('2014_10_29_00_world.sql', 'F478D2AE25B9C36E3456DD35884357063556AA36', 'ARCHIVED'),
+('2014_10_30_00_world.sql', '46D284FE1E2847CE99FE707ECC0BDAB4C9F7EE06', 'ARCHIVED'),
+('2014_10_30_02_world.sql', '6F0FFB389D698B8AFFA723EF55895C6CF2CBF7D3', 'ARCHIVED'),
+('2014_11_01_00_world.sql', 'F874E451AD388BB495A6EF18EE9ACCC8A8EE6BAE', 'ARCHIVED'),
+('2014_11_01_01_world.sql', '635673300CACA15DBCB955FFF135C626F4839676', 'ARCHIVED'),
+('2014_11_01_02_world.sql', '030ABB19FC45B686C1980FA3412C46CC68B11DF0', 'ARCHIVED'),
+('2014_11_01_03_world.sql', '43D89B12E9BB1A792683F18094A869F20DFE56AD', 'ARCHIVED'),
+('2014_11_02_00_world.sql', 'F30EE29A22CD3109A3A592A6981EA02FF0C3027E', 'ARCHIVED'),
+('2014_11_02_01_world.sql', 'C6C572068126299A5D97B5A076220DA2B11AC914', 'ARCHIVED'),
+('2014_11_04_00_world.sql', '517BE655C4F39EAAA3025F843B29A0F276559FEF', 'ARCHIVED'),
+('2014_11_05_00_world.sql', '0C1F022696DF96302AB62B4A215FC37FAD66FA35', 'ARCHIVED'),
+('2014_11_07_00_world.sql', '16A0E153EDE2AB8C63A3BA6656AD71BB237FBCF3', 'ARCHIVED'),
+('2014_11_07_01_world.sql', '5DCE2E3A55185587AD2DF83D5FB146C7A7D794A3', 'ARCHIVED'),
+('2014_11_07_02_world.sql', '24FF1EA9DFB75FDF0FB0BF639A40BDDDFE2A5FA6', 'ARCHIVED'),
+('2014_11_07_03_world.sql', '58D676DB962E4AF5A2B56238F3E54783EBD921AC', 'ARCHIVED'),
+('2014_11_08_00_world.sql', '136936E2E16955DCD4B0EEA34AA3D22B6852A031', 'ARCHIVED'),
+('2014_11_09_00_world.sql', '1EC2C8EF22A8E7B26D8E30762149C00339B96671', 'ARCHIVED'),
+('2014_11_10_00_world.sql', '98E33F8928A52C0FA5CDE00B4C3025923852E42F', 'ARCHIVED'),
+('2014_11_10_01_world.sql', '670F0A9C49B5CC59F38E1361855AAAD8AED62FC3', 'ARCHIVED'),
+('2014_11_10_02_world.sql', '0E646076699FD04B7AFEE7068212403FF4A55A31', 'ARCHIVED'),
+('2014_11_10_03_world.sql', '8734F326B496D24871E16809D167F055B10D6F93', 'ARCHIVED'),
+('2014_11_10_04_world.sql', 'F22AB772400FB35B1BFF6F58534CA681BF769281', 'ARCHIVED'),
+('2014_11_10_05_world.sql', '4DC43402104F8296FA992C40916036B76F35560C', 'ARCHIVED'),
+('2014_11_11_00_world.sql', '8BD5D844D0EDE1ACC72495D368E54702D155B6B9', 'ARCHIVED'),
+('2014_11_11_01_world.sql', 'E7A8D259AF4FA21D6433A81FEF6B2A4662D12140', 'ARCHIVED'),
+('2014_11_13_00_world.sql', 'F5044137D5AE5F3DF7F8234990E50DDC4836E723', 'ARCHIVED'),
+('2014_11_16_00_world.sql', '178BA69418C7784475F36518CEE6D3C0233A3A07', 'ARCHIVED'),
+('2014_11_17_00_world.sql', '5BF38AD9646A3282799D036EEABC2097CEF04BA5', 'ARCHIVED'),
+('2014_11_19_00_world.sql', '6E1D3D0451297EAE3A85903D4901E824BB4B5E50', 'ARCHIVED'),
+('2014_11_19_01_world.sql', 'FF6BA950F542A73EBB000B641B0359CD940E05AF', 'ARCHIVED'),
+('2014_11_19_02_world.sql', '9AC0C9130AF6426980611AD319F5052CADB1D8C5', 'ARCHIVED'),
+('2014_11_20_00_world.sql', 'AD9D0A6F657F0A3DB2DE5B2D0F304AC8270965B4', 'ARCHIVED'),
+('2014_11_20_01_world.sql', '2FC08035F0F09783E228788781D5D492452803F7', 'ARCHIVED'),
+('2014_11_20_02_world.sql', '92143904667CDE981DAFF2A2F2FBFB72F9D8D060', 'ARCHIVED'),
+('2014_11_20_03_world.sql', '8142DE63DCD1CB415336C73F29BE8D137FD49B48', 'ARCHIVED'),
+('2014_11_20_04_world.sql', 'D52B5EF4374EE67FE77D3C1AF004E42E1425DB10', 'ARCHIVED'),
+('2014_11_20_05_world.sql', '24A8F2ABEB2165424CE9476562E8B2F7149DD3C4', 'ARCHIVED'),
+('2014_11_21_00_world.sql', '3A4461A509B39A3A4F3190F3E131E509C7D1DC62', 'ARCHIVED'),
+('2014_11_21_01_world.sql', '4BA6FE2B55D4C83A2D4A7D3BD7D9D7041C6A6D0E', 'ARCHIVED'),
+('2014_11_21_02_world.sql', '9853F7519702607305B89AD6AA6A4A116B5FC43F', 'ARCHIVED'),
+('2014_11_22_00_world.sql', '9F3DF132A1361293310E3FD0068CFB412681A757', 'ARCHIVED'),
+('2014_11_23_00_world.sql', 'A0F6F1ADB3E5EE23ADEB6B62152DAC3A3B824F1D', 'ARCHIVED'),
+('2014_11_23_01_world.sql', 'DA7E05D771C87839F9E716264075F973ACDE1F5F', 'ARCHIVED'),
+('2014_11_23_02_world.sql', 'F72CAC3E13C989A067F4877F379FE9272E6CD6A0', 'ARCHIVED'),
+('2014_11_23_03_world.sql', '88661B16A67F3DA4546CC7869A37BBACA35F8BF2', 'ARCHIVED'),
+('2014_11_23_04_world.sql', 'F0E9DDCF540B58123811993D09F61A2EFA34BC8D', 'ARCHIVED'),
+('2014_11_24_00_world.sql', '35A5ED435EEA251DCB77EA64EE5AC90A6ADDFC0F', 'ARCHIVED'),
+('2014_11_24_01_world.sql', 'A92185C01A2BD5A8749A6046531EE5A2914BF4CE', 'ARCHIVED'),
+('2014_11_24_02_world.sql', '5DA05026C4F14BA0AEDC2B2E868485725A0DFC25', 'ARCHIVED'),
+('2014_11_24_03_world.sql', 'C03D82E6D66BB958AB4B11E6C72AD0474E894CB2', 'ARCHIVED'),
+('2014_11_24_04_world.sql', '8CBA6F45C04490763BF79D481102B2A63A99B450', 'ARCHIVED'),
+('2014_11_25_00_world.sql', 'BF84443D6633723C26F35C9F87D34207935A8E46', 'ARCHIVED'),
+('2014_11_25_01_world.sql', '36C805A7F35539C215C8D94D2380790E3FF21429', 'ARCHIVED'),
+('2014_11_26_00_world.sql', 'A564902A142C6747E7CF334E45B74871EF581879', 'ARCHIVED'),
+('2014_11_27_00_world.sql', 'B91B254E548AA0E59B3720BB03074A91F159023A', 'ARCHIVED'),
+('2014_11_27_01_world.sql', 'B02FAB47E4FC1209CC97B2854A42807ACB815683', 'ARCHIVED'),
+('2014_11_28_00_world.sql', '7215A2E204BACB04DDE4FDC944DDBD981F76DEF5', 'ARCHIVED'),
+('2014_11_28_01_world.sql', 'DCF0E0F31CEC5CB12F1DDBA15A5B005A2E91EDD8', 'ARCHIVED'),
+('2014_11_29_00_world.sql', '513ABD50C6097E60E5EDC7A9E253AC7B6D50573C', 'ARCHIVED'),
+('2014_12_02_00_world.sql', '79D4705344B2B6B5125E5B7CD39DD63241653E94', 'ARCHIVED'),
+('2014_12_03_00_world.sql', '1C55F7E222557C2B94A4127BEAFBFC53E10E2267', 'ARCHIVED'),
+('2014_12_04_00_world.sql', '92B53420220CFD02B5BB4F1FB87C74EF89A687FF', 'ARCHIVED'),
+('2014_12_05_00_world.sql', '00BCE89B80E3F387369AB182D8BABA8BD06738ED', 'ARCHIVED'),
+('2014_12_05_01_world.sql', '7A6EB0C29F9E5151A64112A055DB862356C275E3', 'ARCHIVED'),
+('2014_12_09_00_world.sql', '4EE336088D6B18CD7036A23D0E8532E471CBD44B', 'ARCHIVED'),
+('2014_12_09_01_world.sql', 'D335CA5679B748454A8740B620A2869B6339B9A5', 'ARCHIVED'),
+('2014_12_09_02_world.sql', '5A6A84B52CE1D81E5F554A30D05902C3B9FDE87F', 'ARCHIVED'),
+('2014_12_09_03_world.sql', '05A557A57010732FB526C7133FB3C7AD088A9B0D', 'ARCHIVED'),
+('2014_12_09_04_world.sql', '84080AC56AF1D7878F24DE2E2B533B85F31AAB27', 'ARCHIVED'),
+('2014_12_11_00_world.sql', '9BD187258DD3D7AB8BA56176F7AFED913DDC7EA0', 'ARCHIVED'),
+('2014_12_11_01_world.sql', '2983BE4BF4FACE83262CE794676C0E66068F4DBC', 'ARCHIVED'),
+('2014_12_12_00_world.sql', '3E31732550055B7EB72443C30EA2ED975862215D', 'ARCHIVED'),
+('2014_12_12_01_world.sql', 'BFB07C36367BD9A198BB9CC34103EC0C401A09E8', 'ARCHIVED'),
+('2014_12_13_00_world.sql', '394CF64309B1BACD7BDF1A6BF7D88DE2A335FFEE', 'ARCHIVED'),
+('2014_12_14_00_world.sql', 'E540554C57BFE99D35D0B324F0D8ADA347E81E18', 'ARCHIVED'),
+('2014_12_14_01_world.sql', '8DA26FD3DC3056DF34CC6DB7F490C11070D42026', 'ARCHIVED'),
+('2014_12_14_02_world.sql', '0930DC3E10808F1E55C42F55B6C9E015BEF16711', 'ARCHIVED'),
+('2014_12_15_00_world.sql', '88FF35DC8B665070E96249CA01AA079DBE995BBB', 'ARCHIVED'),
+('2014_12_16_00_world.sql', 'A1CEF65E6829841A9A97722D212C5A15AA6BC11B', 'ARCHIVED'),
+('2014_12_17_00_world.sql', '545A3022BB1D85E8FCF9BC1086D5C3864BF1F0CA', 'ARCHIVED'),
+('2014_12_18_00_world.sql', 'D0AF91CBF2B7AB16EC05AFF45B9E8124A133ACC0', 'ARCHIVED'),
+('2014_12_21_00_world.sql', '4F07D137F7628A7DABED5FDD8EDB1B1A83086C0B', 'ARCHIVED'),
+('2014_12_22_00_world.sql', 'FD642CF297E2B97325878EF0451EB3020EBBAF91', 'ARCHIVED'),
+('2014_12_26_00_world.sql', '1DEED382A0CA4FFDC3329133CDDB718ADA87A27D', 'ARCHIVED'),
+('2014_12_26_01_world.sql', '58564849E75F397C8E1C744692191ADE39DFA514', 'ARCHIVED'),
+('2014_12_27_00_world.sql', 'E50AD029788BB42019794276C6C031041EBAF1AC', 'ARCHIVED'),
+('2014_12_27_01_world_335.sql', '97D824705A26B9839E9CBB0ED6B4B868C2032442', 'ARCHIVED'),
+('2014_12_27_02_world.sql', '73CB9DC61F1561C924CF7EB4EE40C33CB8581482', 'ARCHIVED'),
+('2014_12_27_03_world.sql', '70C1936BC930000EE5CC3943E0B69F786647174C', 'ARCHIVED'),
+('2014_12_27_04_world.sql', '9C376FE601EA95E05DE6DEA7FF9CCF1C10DDA3C9', 'ARCHIVED'),
+('2014_12_27_05_world.sql', '40D43FC1B6A5007424A282F6C1E0412A1FD0D17A', 'ARCHIVED'),
+('2014_12_27_06_world.sql', '87B1AA417FBA9C2ECFD42FCB8572280455571618', 'ARCHIVED'),
+('2014_12_27_07_world.sql', 'F88EAD8F73639240BD87D99DAD9BE9395F8F9B60', 'ARCHIVED'),
+('2014_12_27_08_world.sql', '35259FF08825E06EA1C494C321693D5185036F97', 'ARCHIVED'),
+('2014_12_27_09_world.sql', 'F56FCF5BBE53DFD5EA2CF64D28EE30573D180EBD', 'ARCHIVED'),
+('2014_12_27_10_world.sql', '5343C6F21C31BC930C6615C62175655393E0CC7A', 'ARCHIVED'),
+('2014_12_27_11_world.sql', '79386ABE46C96E2ECD639F3E1C20A92F085DAB22', 'ARCHIVED'),
+('2014_12_27_12_world.sql', '02812768BC41BE72801909EA06944097138CCF84', 'ARCHIVED'),
+('2014_12_28_00_world.sql', '4321A8A3C7FFC24EEE409758D9DA2899FC40465D', 'ARCHIVED'),
+('2014_12_28_01_world.sql', '58A8781F79C8968B5A16D6CADC5355483D80A54C', 'ARCHIVED'),
+('2014_12_28_02_world.sql', '53E8B3A24AEB4467C5765FFF2B99CB646CC77319', 'ARCHIVED'),
+('2014_12_28_03_world.sql', 'AA56071ACFE2F5858C575EA9882713B4C37724AA', 'ARCHIVED'),
+('2014_12_28_04_world.sql', '277DFC82FE17489C519001A778ABE17F0FBCC605', 'ARCHIVED'),
+('2014_12_28_05_world.sql', '717CF0E7F4795A972096EDFECCAAB561FBD8E987', 'ARCHIVED'),
+('2014_12_29_00_world.sql', 'D1240CA18A858174112F403A238DE1811CEF4216', 'ARCHIVED'),
+('2014_12_29_01_world.sql', '7F49A01DBC65106150F6F6755A25D0CF0FF3B62C', 'ARCHIVED'),
+('2014_12_29_02_world.sql', '31D25589F914F4B6F6A645B70901877839233B98', 'ARCHIVED'),
+('2014_12_30_00_world.sql', '9A5BF5AF7928E7F90607AA56972C027EBA3E70B7', 'ARCHIVED'),
+('2014_12_30_01_world.sql', '215A8A5870BD6B739C768399E112D6E9374C92B1', 'ARCHIVED'),
+('2014_12_31_00_world.sql', '0ECDB859228284ACBB124109F730D0B1AFA62354', 'ARCHIVED'),
+('2015_01_01_00_world.sql', '0859CA1CA62DA6D22ADD6A1752657221C400F003', 'ARCHIVED'),
+('2015_01_07_00_world.sql', '2E6F5ECB971C6C385C7E407D31E1B354F8D55FD1', 'ARCHIVED'),
+('2015_01_08_00_world.sql', '0FB250F5B41C9BFF073A2B26659218F022EC1A4F', 'ARCHIVED'),
+('2015_01_09_00_world.sql', '2C2DB1FF3E27595766C8DD49A00CA9CED1F25812', 'ARCHIVED'),
+('2015_01_09_01_world.sql', 'D3CB658D8C880BF5988E31D2789DC1188AF12244', 'ARCHIVED'),
+('2015_01_11_00_world.sql', 'D82B37FDF21C20D7C4AD901D694DCAEC55FB3F7D', 'ARCHIVED'),
+('2015_01_11_01_world.sql', 'D50C7E01233D8E96B0D469D07EF44D88189426D4', 'ARCHIVED'),
+('2015_01_12_00_world.sql', '3227E335F9FFA02CDBE02400AAE0BC7BCEEC8A8E', 'ARCHIVED'),
+('2015_01_12_01_world.sql', 'CB62D8927520732802B1972EB8FCB939EDDD3001', 'ARCHIVED'),
+('2015_01_12_02_world.sql', 'D8CBED7B2E00357E5535B252061DE4935A4F3E29', 'ARCHIVED'),
+('2015_01_16_00_world.sql', 'E6471500DB443D29EE2E8A68329138571D766732', 'ARCHIVED'),
+('2015_01_17_00_world.sql', '571B36B8FDD658CAD36BB9B98E39F979950534E7', 'ARCHIVED'),
+('2015_01_18_00_world.sql', 'F61B99920FDC39EB2121D54AC46D80066AD48223', 'ARCHIVED'),
+('2015_01_21_00_world.sql', '5B84E438A8775299182D7608CF3DC67058F2A39B', 'ARCHIVED'),
+('2015_01_22_00_world.sql', '0F7F69CD48FA6A82443DB4E43E2A05FE106FB6F4', 'ARCHIVED'),
+('2015_01_25_00_world.sql', '3D6B8414B7D47BAAF8E4F1926F70983BCAD31222', 'ARCHIVED'),
+('2015_01_27_00_world.sql', '3DBD87A8C21D4998954E9DC1F24620BB7A90C9F8', 'ARCHIVED'),
+('2015_01_30_00_world.sql', 'E18282EE743A88D2EDEF677489C6B93817399CA0', 'ARCHIVED'),
+('2015_01_31_00_335.sql', 'CEC1C0C4C6A79C8FA2A5F5C2911A89F82BBEEC3D', 'ARCHIVED'),
+('2015_02_02_00_world.sql', '4A7F644212D0BC1D8B4BDC7E27BA70BBBCF5C1A8', 'ARCHIVED'),
+('2015_02_05_00_world.sql', '38F13F6FC99172DDB4FA2D5784363AD9F2D0C2BB', 'ARCHIVED'),
+('2015_02_06_00_world.sql', '94062B928DC098C3BC21ECA381D74C157975BEA0', 'ARCHIVED'),
+('2015_02_06_01_world.sql', 'DB4C759DC3FE146C78E5108A3D4C8F7690DE2329', 'ARCHIVED'),
+('2015_02_06_02_world.sql', '5DB5CB82FD4B545440380AE2875F36A8965B87C8', 'ARCHIVED'),
+('2015_02_06_03_world.sql', '9E668BA77990F4F2C246C2727A755CAD29B12854', 'ARCHIVED'),
+('2015_02_06_04_world.sql', '4054010C47223827AF2C66D7DF8695F12668C818', 'ARCHIVED'),
+('2015_02_06_05_world.sql', '0AE6B9713495B1D0E2B29323027EBF94C9DC20B0', 'ARCHIVED'),
+('2015_02_06_06_world.sql', '656086116C0F561C264B5DCABA1811EE6A9352E2', 'ARCHIVED'),
+('2015_02_06_07_world.sql', 'B59FEF5851B9DA2C0FC9E8454486F57EAE112996', 'ARCHIVED'),
+('2015_02_06_08_world.sql', '8BDF881C53077DA04544BA6890921D49018693CB', 'ARCHIVED'),
+('2015_02_06_09_world.sql', 'EDF8CDC077B79843213B7E015BDF8756A41922C7', 'ARCHIVED'),
+('2015_02_06_10_world.sql', '0444E8AC273B886330EC119300675774618EA463', 'ARCHIVED'),
+('2015_02_06_11_world.sql', 'D995A9DD8E2CBAD243D48E2B55A019D6DD72CF5E', 'ARCHIVED'),
+('2015_02_06_12_world.sql', '83931738DD68110A93DBE1DBE1D4BA66351BD469', 'ARCHIVED'),
+('2015_02_06_13_world_335.sql', '9F769C1E8BBF6488DBE332D4218B119FF7C2BA1E', 'ARCHIVED'),
+('2015_02_07_00_world.sql', '5ABC7660D593224BB3533C56988A1D7D28F0EEFD', 'ARCHIVED'),
+('2015_02_07_01_world.sql', '9CBEE43FC6C5E58BD76F6A6E1A947D051F29B12B', 'ARCHIVED'),
+('2015_02_09_00_world.sql', '22DC8522928C16AB4C620652C3B53BD17594D663', 'ARCHIVED'),
+('2015_02_09_01_world.sql', 'DC7C43F2EA5E8938CA6648AED595B6BF3EA8D937', 'ARCHIVED'),
+('2015_02_09_02_world.sql', '7EE5458CFD14C343F397877F0A2509D1E8AA5803', 'ARCHIVED'),
+('2015_02_09_03_world.sql', '561E3721B9F06D5A3F060FFFFB05AA1BF9D39E76', 'ARCHIVED'),
+('2015_02_09_04_world.sql', 'BBCEE2D1C837B1B6FB4D6B7E0F32CA8EB33A251F', 'ARCHIVED'),
+('2015_02_09_05_world.sql', '4D32D3BD4863BDA74FD25DA8910B7937648A7639', 'ARCHIVED'),
+('2015_02_09_06_world.sql', '89CC8CDB51D9FA2437E61E18AE261259AF7D998B', 'ARCHIVED'),
+('2015_02_09_07_world.sql', '8763439D3B13DD7F0397DD11E10DB93111D5E7BE', 'ARCHIVED'),
+('2015_02_09_08_world.sql', '0BABD51056D66A0100B940C4F53AAA8EE7E001E1', 'ARCHIVED'),
+('2015_02_09_09_world.sql', 'D87D1ED50CA9273BD548AF01AD376FAD79AD731D', 'ARCHIVED'),
+('2015_02_09_10_world.sql', '0B24AA9924383F3F0BD515FBDC18E7DFE75BD6BB', 'ARCHIVED'),
+('2015_02_09_11_world.sql', 'F871DEECC735582259193BB524B031DFE3810535', 'ARCHIVED'),
+('2015_02_09_12_world.sql', '758083A309171B8FEF4CA8E3A1E0758412C62BE7', 'ARCHIVED'),
+('2015_02_09_13_world.sql', '5F2523B534ACF194860EB7F6530E083C0E086BBA', 'ARCHIVED'),
+('2015_02_09_14_world.sql', 'C6294ADFA086060C842EE524A03B6CDCA8C34D86', 'ARCHIVED'),
+('2015_02_09_15_world.sql', 'B675FFBF3A5B34F99BE7D7759ACC94C5C3639EC1', 'ARCHIVED'),
+('2015_02_10_00_world.sql', 'CD1826303ECB7C1B82F6BE40BD6FCC91E239C098', 'ARCHIVED'),
+('2015_02_10_01_world.sql', '29E25D672C5F85E20D17691D77F62B8AEB5FF0D6', 'ARCHIVED'),
+('2015_02_10_02_world.sql', '7AB6A48ABE89D5D66B4F9F960A0E5B1A62A75CC6', 'ARCHIVED'),
+('2015_02_10_03_world.sql', '111973198B2D5E6F4C5C2516E30A2D2B14C41EEC', 'ARCHIVED'),
+('2015_02_10_04_world.sql', 'EED7D1133C94A78A43FFEB6A51A934142BE224D0', 'ARCHIVED'),
+('2015_02_10_05_world.sql', '53A40BD0DE58CE6D88B142D54D8774666F74081C', 'ARCHIVED'),
+('2015_02_10_06_world.sql', '3E997E7CF1ABA6723FAAC9B2F9D493B2AC88A562', 'ARCHIVED'),
+('2015_02_10_07_world.sql', 'DCCBABEC0514D380E50746A15C29628DD4379504', 'ARCHIVED'),
+('2015_02_10_08_world.sql', 'C3B9AAA017751F06F81F85BA2E849CCF438D78AD', 'ARCHIVED'),
+('2015_02_10_09_world.sql', '55FCB77B78EC36BE7CE1989829FA2BE6451C7C01', 'ARCHIVED'),
+('2015_02_11_00_world.sql', 'F5C741A373374EA8365834ACE769072C4F9DA8F6', 'ARCHIVED'),
+('2015_02_11_01_world.sql', '23CB3EBEE69BA59ACB183C6D31527C88508A4EE4', 'ARCHIVED'),
+('2015_02_11_02_world.sql', '159860281A22005101DCB29D103EB9C40C041910', 'ARCHIVED'),
+('2015_02_11_03_world.sql', '57C46103FABC911DE3455A7B4D8457FA937E12AE', 'ARCHIVED'),
+('2015_02_11_04_world.sql', '45AD1E641084C4E0F22C6F34087F10533C1E29DE', 'ARCHIVED'),
+('2015_02_11_05_world.sql', '0E232D2810CBFC314EA65944D649CA4AC46D821E', 'ARCHIVED'),
+('2015_02_12_00_world.sql', 'CBB58AF3CA19E7713A282E79F05FCB23B0F3F5B8', 'ARCHIVED'),
+('2015_02_12_01_world.sql', '91975F888AB8F542EBB11EB31CDA0E201EABB141', 'ARCHIVED'),
+('2015_02_12_02_world.sql', '42D6DF618F929E41014B9B17A4A0D66F9E70374C', 'ARCHIVED'),
+('2015_02_12_03_world.sql', '2C4F77BC61CD8A1D8BC8C126F69D66D5E388F7A1', 'ARCHIVED'),
+('2015_02_12_04_world.sql', 'CB379D0FD46FDFCF32F9A851E378B8F1FA4C88CD', 'ARCHIVED'),
+('2015_02_12_05_world.sql', '62EDAD0D718F10F025CB287A8D596EBD8905EEEB', 'ARCHIVED'),
+('2015_02_12_06_world.sql', '4E731729A44F3C13353BF65C7C10F862902832AA', 'ARCHIVED'),
+('2015_02_12_07_world.sql', '08BB67B5E8D07FACFC6945E022CD31928FCCA40B', 'ARCHIVED'),
+('2015_02_12_08_world.sql', 'B46AC2A8008AD32380E06BE4024344661A6E4E58', 'ARCHIVED'),
+('2015_02_12_09_world.sql', '7BD015AE62CBE7348CFF7BBA1C9554D08B996491', 'ARCHIVED'),
+('2015_02_12_10_world.sql', 'F9D6251BA0CA2DBF0E6F1330B4A31C0821944BF5', 'ARCHIVED'),
+('2015_02_13_00_world.sql', 'B5DBE0F36514434E7D8EC6D3AEAE55C95F0F3FD7', 'ARCHIVED'),
+('2015_02_13_01_world.sql', 'D6DA260F0B2C74C7304422750A3BAF0B0FD0748F', 'ARCHIVED'),
+('2015_02_13_02_world.sql', '8B172CBAC67D280FABA1B853285FF4301A715876', 'ARCHIVED'),
+('2015_02_13_03_world.sql', '9E85F0E44F14A489379311D0F3802F58D847827A', 'ARCHIVED'),
+('2015_02_13_04_world.sql', '36DA1C4C2BC969AFB421E8047E0AA22B9E4B6F50', 'ARCHIVED'),
+('2015_02_13_05_world.sql', 'E48073A920A754FD6F4AE0ED01C9D41072D7DD13', 'ARCHIVED'),
+('2015_02_13_06_world.sql', 'CD3D63C6C11C825D5C7EC0C859AA282D2A6BD166', 'ARCHIVED'),
+('2015_02_13_07_world.sql', '61E3135F3126C6790E42743CE53D95305EF905F2', 'ARCHIVED'),
+('2015_02_13_08_world.sql', '4DA9FB4C377C175DF71A44D338BA60FD2C7B620F', 'ARCHIVED'),
+('2015_02_13_09_world.sql', 'EF84AF4C6EFF2E6FABD52B9224348BBE198EAC82', 'ARCHIVED'),
+('2015_02_14_00_world.sql', 'CC5511E0F41D79606D3E4468B6A080AF5D6428A1', 'ARCHIVED'),
+('2015_02_14_01_world.sql', '6EC493C9A790DBCDEF70B1EFBF2E2A8E9C0247CB', 'ARCHIVED'),
+('2015_02_14_02_world.sql', '7E85DB767AF4A6B74FD6658BCA7C3188BD297355', 'ARCHIVED'),
+('2015_02_14_03_world.sql', 'F1D179F37F833B8796D891DF2D990453A86544A9', 'ARCHIVED'),
+('2015_02_14_04_world.sql', '39C4A09A3C213578965053A8518156179B1B3F08', 'ARCHIVED'),
+('2015_02_14_05_world.sql', '06218EA0397DBE3120E3E54A4F7734AF687D8156', 'ARCHIVED'),
+('2015_02_15_00_world.sql', '5BDDF4410B1EFEB8CA5D22414342F28BD89D632F', 'ARCHIVED'),
+('2015_02_15_01_world.sql', '9A1696F20A6FA6DB3156B8F26959C6D9EFDFCB78', 'ARCHIVED'),
+('2015_02_15_02_world.sql', '44D8AF1F64B0FA6CD8B8CC98836FAB2855CB9D17', 'ARCHIVED'),
+('2015_02_15_03_world.sql', 'F4661478999F173A978A4481AB49AC7427E31FB8', 'ARCHIVED'),
+('2015_02_15_04_world.sql', '06970DBB20CA78C9D46790E56419CE4DF891692D', 'ARCHIVED'),
+('2015_02_15_05_world.sql', 'A0ABF430DB7689C5A4C81E9365CB62FDC6D751E1', 'ARCHIVED'),
+('2015_02_15_06_world.sql', '213158CF2559AB62D96F5D87CBCDB894B5CE6656', 'ARCHIVED'),
+('2015_02_15_07_world.sql', '66E80F9160CDE708586850D2873FDC12D97CCB2A', 'ARCHIVED'),
+('2015_02_15_08_world.sql', '7A80E85E1117C0886DF840C3E57ED3A37CC05B92', 'ARCHIVED'),
+('2015_02_15_09_world.sql', '04C18E50C1D7F1D098A89CD61F4596448B27C5CA', 'ARCHIVED'),
+('2015_02_15_10_world.sql', '39A86967CEB92A595756EF08BDC8B02BCC66A65C', 'ARCHIVED'),
+('2015_02_15_11_world.sql', 'C2C3AFC0A6A8547FF75D8A444BC70032F0FAD5C8', 'ARCHIVED'),
+('2015_02_15_12_world.sql', '8BFB17EAACFB73BC966F0130240EBE6896EBD861', 'ARCHIVED'),
+('2015_02_15_13_world.sql', '7BA1F085FF528182D39667E0865AA747CFC679D9', 'ARCHIVED'),
+('2015_02_15_14_world.sql', '4C428B313B19663A5AC947336E76B3FFAA8FBBFA', 'ARCHIVED'),
+('2015_02_16_00_world.sql', '186FFEF331127382F282A13D9A6FC878A4053AD2', 'ARCHIVED'),
+('2015_02_16_01_world.sql', 'FA1D413ADB609C601BE1D9D68BD555DC284A5377', 'ARCHIVED'),
+('2015_02_16_02_world.sql', '973E420ED39F8C138A64CE0D78581ECAA0B7937B', 'ARCHIVED'),
+('2015_02_16_03_world.sql', 'F4DB971B2C1F775543D2CCBDE56CB471A57BAF2C', 'ARCHIVED'),
+('2015_02_16_04_world.sql', 'E829C54AE39C7D7A9A1FF51D58AD18DC06D6FE50', 'ARCHIVED'),
+('2015_02_16_05_world.sql', '6A4AB1FC25A2613F8FCAD375C69367D034000F1A', 'ARCHIVED'),
+('2015_02_16_06_world.sql', '53CF5C1224FE597B8BC0677A1E3C48E01E4F0E6B', 'ARCHIVED'),
+('2015_02_17_00_world.sql', '9B44A6A414469B5746E50A9E647B93B9D6620CA2', 'ARCHIVED'),
+('2015_02_17_01_world.sql', '49AF6376F02242E6B998F24D1C9E85CFBA2BC368', 'ARCHIVED'),
+('2015_02_17_02_world.sql', '2B55FE84EB9E86C76D8440B4395938B00E543198', 'ARCHIVED'),
+('2015_02_17_03_world.sql', '753257BB90B8CBA20073B6DB08676A9802D8FAC0', 'ARCHIVED'),
+('2015_02_17_04_world.sql', 'CCB8B2D9CC99EBB30BB18B7D4533E1646A6BB8BD', 'ARCHIVED'),
+('2015_02_17_05_world.sql', '99907BBFE2529EDB8AEF468C2098B6BA7713ACA4', 'ARCHIVED'),
+('2015_02_18_00_world.sql', '6CE3FB9845AE14EEB521103135A1F8E94B25BABA', 'ARCHIVED'),
+('2015_02_18_01_world.sql', '73FEA71CD4739F8CCB1924A248FDD006D6F4F811', 'ARCHIVED'),
+('2015_02_18_02_world.sql', 'DBC1F166B84CA4E135D827D8D5A8682EFDDC84B3', 'ARCHIVED'),
+('2015_02_18_03_world.sql', '9224197FD3427974D942FEBCCEDE7ABD40300E23', 'ARCHIVED'),
+('2015_02_19_00_world.sql', '2569C13F6357FD9ED9EB3254133C2BC9BEC20E45', 'ARCHIVED'),
+('2015_02_20_00_world.sql', '776DFDF6D728A260CBDE349B888C913DFD362DEE', 'ARCHIVED'),
+('2015_02_20_01_world.sql', '24EF4FBF8701A73BA307989426F63C68E2B69D4E', 'ARCHIVED'),
+('2015_02_20_02_world.sql', 'AAE9E57EC2ED176842AAD43BCB8932D7B0379321', 'ARCHIVED'),
+('2015_02_20_03_world.sql', '77DE8E0108E079741E0C3CED01AB4FD60260C57A', 'ARCHIVED'),
+('2015_02_20_04_world.sql', 'C8B171835AA13C0325D2EF4CB1245C786508DC34', 'ARCHIVED'),
+('2015_02_21_00_world.sql', 'DF2BF4D30D26181273E510A1D0D887E3250CB325', 'ARCHIVED'),
+('2015_02_22_00_world.sql', '25F9838572A396C41FF1348582DAC9B9E952E410', 'ARCHIVED'),
+('2015_02_23_00_world.sql', '9BBE01B603ECBA91894DF10CFD45F21AB5A3DB52', 'ARCHIVED'),
+('2015_02_23_01_world.sql', 'C4E7234C96912A784AE648CA92F4CD6CA036FEF1', 'ARCHIVED'),
+('2015_02_23_02_world.sql', '94E1F9D35A12A0A594D5150299D35C43A5866260', 'ARCHIVED'),
+('2015_02_23_03_world.sql', 'AC64B1419E78B50B65428424FA93E12B8631EB5F', 'ARCHIVED'),
+('2015_02_23_04_world.sql', '6AB64CD095469CB52FF01928D175B0D9BF51AD3D', 'ARCHIVED'),
+('2015_02_23_05_world.sql', 'F21061BD0E2F620E575A692C0E9C5A19F205AD57', 'ARCHIVED'),
+('2015_02_23_06_world.sql', 'CAD1DC9C406B2D8621E165E94F06C96DB82899BA', 'ARCHIVED'),
+('2015_02_23_07_world.sql', 'B647684F11ABC4ECD26741AB9183E3BBA6A96B1F', 'ARCHIVED'),
+('2015_02_23_08_world.sql', '11174B20B34253E1A589D8A403BD9FFBD0FE3973', 'ARCHIVED'),
+('2015_02_23_09_world.sql', '96911A36C1BB0ABB161AAB1D85B5CD215BEB6B4E', 'ARCHIVED'),
+('2015_02_23_10_world.sql', '58EC7A84326C2612881254F42802BC2A950F5530', 'ARCHIVED'),
+('2015_02_24_00_world.sql', '62586C8082319A83C84426BA228076513CA62721', 'ARCHIVED'),
+('2015_02_24_01_world.sql', '2370977C4F5619F5AFDDEF66FE9016DCCCEABE4D', 'ARCHIVED'),
+('2015_02_25_00_world.sql', '53964FDE738A1324839B5DDA76F15586518B8A23', 'ARCHIVED'),
+('2015_02_27_00_world.sql', '54E76B4BFBDC09231BA4A304100E0D1F75C4C859', 'ARCHIVED'),
+('2015_02_27_01_world.sql', '6FC4CD8E76BD4E3CC6FDDFE181814745F6E2351D', 'ARCHIVED'),
+('2015_02_27_02_world.sql', 'BEBBD48CCC153D87EC0D39CD717D5C533F165356', 'ARCHIVED'),
+('2015_03_01_00_world.sql', '00E3E47B590E37609DA1CC59008553C78425A40F', 'ARCHIVED'),
+('2015_03_02_00_world.sql', 'BF62D0769132CFD9A7968DA98CEF463DD04D9E74', 'ARCHIVED'),
+('2015_03_02_01_world.sql', 'C94C119B766EDE550B60CFBA156EDA5CA40911EE', 'ARCHIVED'),
+('2015_03_02_02_world.sql', 'C37D2D5EBF341A51409C49653DA0584A0C9A0979', 'ARCHIVED'),
+('2015_03_02_03_world.sql', 'BF185DC5D9780B27DF0788C4008EEF88FC4F20CC', 'ARCHIVED'),
+('2015_03_02_04_world.sql', '9053F61D94A83CD4E85B5DB889786ED607B127FC', 'ARCHIVED'),
+('2015_03_02_05_world.sql', 'BBE9A3822502E7B9F069D6C6B481B0B902E9341A', 'ARCHIVED'),
+('2015_03_02_06_world.sql', '360956E421F0A8F5EB9DD9C611C53B53EA33F921', 'ARCHIVED'),
+('2015_03_07_00_world.sql', '9DA807070CA63F4342884DF65C7FE409EEEBAE49', 'ARCHIVED'),
+('2015_03_07_01_world.sql', 'D9E23CFC5B7488C0DAAA6D31032239552DEF6225', 'ARCHIVED'),
+('2015_03_07_02_world.sql', 'C184D7B6B327C328EE98198751783A816C6EBD26', 'ARCHIVED'),
+('2015_03_07_03_world.sql', '3FBA2EDD2A3641A697CA71D0E0C5E716A057C13E', 'ARCHIVED'),
+('2015_03_08_00_world.sql', '9FA6752B038CA5618B7D135983CBEB174896A91B', 'ARCHIVED'),
+('2015_03_08_01_world.sql', 'FD48D1D422A812CAE718C684EF5698E6073EE6B4', 'ARCHIVED'),
+('2015_03_10_00_world.sql', 'BFA0AA6D6F99877D7601ABB52A17F08D0C381EA3', 'ARCHIVED'),
+('2015_03_10_01_world.sql', '052E1B11617503217E01449C16DBA74D215EF69C', 'ARCHIVED'),
+('2015_03_10_02_world.sql', 'BECFD758851E49D958C48BCA2334424CE224FE5D', 'ARCHIVED'),
+('2015_03_10_03_world.sql', 'EB06069B49ACE84F4C580984236A54DE99FBA026', 'ARCHIVED'),
+('2015_03_10_04_world.sql', '380829C6E79DED3B3A7C7D85709376B7D8B01819', 'ARCHIVED'),
+('2015_03_10_05_world.sql', 'C846E361D9921B965D89689B95322C4179013F13', 'ARCHIVED'),
+('2015_03_10_06_world.sql', 'F757056CD733BDBA66E9DE49FC9BCCDBA063A88C', 'ARCHIVED'),
+('2015_03_10_07_world.sql', 'A9FDC376A21F8A7D5C6E0D2314B63863C443BEC5', 'ARCHIVED'),
+('2015_03_10_08_world.sql', 'F7F42C02531CB3B2E5D5CD3956E9224DE17BB0EA', 'ARCHIVED'),
+('2015_03_10_09_world.sql', '2ACF60BF182DA88175890C2F03A5AA6BFCC09131', 'ARCHIVED'),
+('2015_03_10_10_world.sql', '641F1B50398EF7562A233201EF1692A7AEA849D2', 'ARCHIVED'),
+('2015_03_12_00_world.sql', 'C6811FEC6834870BC3A04BB57A3F7B1D6F84FF17', 'ARCHIVED'),
+('2015_03_12_01_world.sql', '24E91D341E658CD2B70A66AFF18F568B02AC50F0', 'ARCHIVED'),
+('2015_03_14_00_world.sql', 'C362E3EF5A194382D361D6215733C4B6F9F46E1F', 'ARCHIVED'),
+('2015_03_14_01_world.sql', 'ABFB47CE7607FA8369299E520A52200B9A0578CD', 'ARCHIVED'),
+('2015_03_14_02_world.sql', 'C7B9EEB9F0D685BDA8ADAE996D967903D5D68F80', 'ARCHIVED'),
+('2015_03_15_00_world.sql', '48E0D4A881CF9A55CA7C1D2CB74E7CFC1617FD54', 'ARCHIVED'),
+('2015_03_15_01_world.sql', '224CCC1CAB129B6015227BA09EBC86E9BC4C345E', 'ARCHIVED'),
+('2015_03_15_02_world.sql', 'CD8163944E0B5FF444F41B5D5BE392F792F71051', 'ARCHIVED'),
+('2015_03_15_03_world.sql', 'DE058F6096EB44433CDA1EC7C22F6C1210D8CA4E', 'ARCHIVED'),
+('2015_03_15_04_world.sql', 'F00232122D2F1957EDD9AE6E4E3FB7A628CE69C3', 'ARCHIVED'),
+('2015_03_15_05_world.sql', '295FF7503CC35E803C52F31E867ABE9D1E169F6A', 'ARCHIVED'),
+('2015_03_15_06_world.sql', '6AB7AB871B2FE6967097EC98B991AC64BDEBA13C', 'ARCHIVED'),
+('2015_03_15_07_world.sql', 'E373B6D1F3D86AC4B6F7DF0247ABF377A04C805F', 'ARCHIVED'),
+('2015_03_15_08_world.sql', '01E780198F1758F1EE4A96795EE13E8C37CF218F', 'ARCHIVED'),
+('2015_03_15_09_world.sql', '57681C975B5242D749E60F57D7D481C4A7EA0AD1', 'ARCHIVED'),
+('2015_03_15_10_world.sql', 'C2A820073BD679E3A1EE7CFFF840EF30383AC176', 'ARCHIVED'),
+('2015_03_15_11_world.sql', '455B95B5F89EEEAB2D62776445813C48E9184B27', 'ARCHIVED'),
+('2015_03_15_12_world.sql', 'A986A98F9FF74C288C2288C3B88C01BCFF7C1EDA', 'ARCHIVED'),
+('2015_03_15_13_world.sql', '9FF82DA5F3C1E4B506B481DF5CA9B954E6D5D843', 'ARCHIVED'),
+('2015_03_15_14_world.sql', 'FBC07BEADB265662AAFE23FD9C36A90A5F1508FD', 'ARCHIVED'),
+('2015_03_16_00_world.sql', '836E4FEA197C5ECE330642C976EBC4599FFBC001', 'ARCHIVED'),
+('2015_03_16_01_world_335.sql', '91A90BEF14D353250671EB95DFA854064592800A', 'ARCHIVED'),
+('2015_03_16_02_world.sql', 'E88EB7C67969EECC025F0CBFC578ED39B8D36E54', 'ARCHIVED'),
+('2015_03_16_03_world.sql', 'FBFCCCEBC57755A99F64816A17CADD8EBEC04FC1', 'ARCHIVED'),
+('2015_03_16_04_world.sql', '7FDC23F3B4DAABF91156D40CDDC2E4A4E133A55B', 'ARCHIVED'),
+('2015_03_16_05_world.sql', '39F873A5FAE5D0D0D95515A8E434BC8FAC24955C', 'ARCHIVED'),
+('2015_03_16_06_world.sql', 'C782DF0FA4B99ED6B0557A5CAC4A101F71EBF5F1', 'ARCHIVED'),
+('2015_03_17_00_world.sql', '31F53F813A604442DB08AAA1D0C359E5BF5A545B', 'ARCHIVED'),
+('2015_03_17_01_world.sql', '8E3DD14F9A9C43345B843826153579A4F334787C', 'ARCHIVED'),
+('2015_03_17_02_world.sql', '6212A1CF186600907CBAE1000B9D6AF2026B6E7D', 'ARCHIVED'),
+('2015_03_19_00_world.sql', 'CC3E1954E10F06C62A41A04D39A0FF3F138DE477', 'ARCHIVED'),
+('2015_03_20_00_world.sql', '8E7C56D7C5F6FC85C291BEEFCEDF036431A399E9', 'ARCHIVED'),
+('2015_03_20_01_world.sql', '3C09B97025F2311420DF3B6364AC26B97B57935E', 'ARCHIVED'),
+('2015_03_20_02_world.sql', 'B761760804EA73BD297F296C5C1919687DF7191C', 'ARCHIVED'),
+('2015_03_20_03_world.sql', 'F721BC06369843A998B6339D52423F28B6168137', 'ARCHIVED'),
+('2015_03_20_04_world.sql', '', 'ARCHIVED');
diff --git a/sql/updates/world/2015_03_21_00_world.sql b/sql/updates/world/2015_03_21_00_world.sql
new file mode 100644
index 00000000000..d1eee836dd0
--- /dev/null
+++ b/sql/updates/world/2015_03_21_00_world.sql
@@ -0,0 +1 @@
+UPDATE `version` SET `db_version`='TDB 335.58', `cache_id`=58 LIMIT 1;
diff --git a/sql/updates/world/2015_03_21_01_world.sql b/sql/updates/world/2015_03_21_01_world.sql
new file mode 100644
index 00000000000..82b5304ef7b
--- /dev/null
+++ b/sql/updates/world/2015_03_21_01_world.sql
@@ -0,0 +1,60 @@
+SET @CGUID := 69713; -- 4 free guid set by TC
+SET @OGUID := 6144; -- 2 free guid set by TC
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID AND @CGUID+3;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 21318, 530, 1, 1, -3800.380, 2601.100, 90.14300, 5.481630, 180, 6986, 0, 0),
+(@CGUID+1, 21310, 530, 1, 1, -3802.939, 2594.501, 92.709, 1.605702, 300, 6986, 0, 0),
+(@CGUID+2, 21310, 530, 1, 1, -3794.054, 2588.724, 92.709, 1.905461, 300, 6986, 0, 0),
+(@CGUID+3, 21310, 530, 1, 1, -3788.540, 2597.479, 92.709, 3.382006, 300, 6986, 0, 0);
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1;
+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, 184731, 530, 1, 1, -3802.939, 2594.501, 92.18282, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 184731 (Area: -1)
+(@OGUID+1, 184731, 530, 1, 1, -3794.054, 2588.724, 92.18282, 1.905461, 0, 0, 0, 1, 120, 255, 1); -- 184731 (Area: -1)
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (21310, 21309);
+UPDATE `creature_template` SET `InhabitType`=4, `gossip_menu_id`=8287, `AIName`='SmartAI' WHERE `entry`=21292;
+UPDATE `creature_template` SET `gossip_menu_id`=8288, `AIName`='SmartAI' WHERE `entry`=21318;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-@CGUID+1, -@CGUID+2, -@CGUID+3, -74618, 21318, 21292, 21309);
+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
+(-74618,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'),
+(-@CGUID+1,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'),
+(-@CGUID+2,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'),
+(-@CGUID+3,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'),
+(21292,0,0,0,20,0,100,0,10528,0,0,0,45,0,1,0,0,0,0,19,21318,20,0,0,0,0,0, 'Ar''tor, Son of Oronok - -On quest Rewarded - Set Data'),
+(21318,0,0,0,38,0,100,0,0,1,0,0,1,0,0,0,0,0,0,21,30,0,0,0,0,0,0, 'Spirit of Ar''tor -On Data set - Talk'),
+(21309,0,0,0,0,0,100,0,5000,7000,20000,25000,11,38048,0,0,0,0,0,2,0,0,0,0,0,0,0,"Painmistress Gabrissa - In Combat - Cast 'Curse of Pain'"),
+(21309,0,1,0,0,0,100,0,6000,7000,17000,20000,11,38169,0,0,0,0,0,2,0,0,0,0,0,0,0,"Painmistress Gabrissa - In Combat - Cast 'Curse of Pain'"),
+(21309,0,2,0,25,0,100,0,0,0,0,0,11,32783,0,0,0,0,0,1,0,0,0,0,0,0,0,"Painmistress Gabrissa - On reset - Cast 'Arcane Channeling'");
+
+DELETE FROM `creature_text` WHERE `entry`=21318;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES
+(21318,0,0,'I... I have died... I was in so much pain... engulfed in darkness... Can you see me, $r?',12,0,100,0,0,0, 'Spirit of Ar''tor ', 18993);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+1, @CGUID+2, @CGUID+3, 74618);
+INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES
+(@CGUID+1,0,4097,0,"60194"),
+(@CGUID+2,0,4097,0,"60194"),
+(@CGUID+3,0,4097,0,"60194"),
+(74618,0,4097,0,"60194");
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (21307, 21292);
+INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES
+(21292,0,4097,383,""),
+(21307,0,4097,0,"31261");
+
+DELETE FROM `gossip_menu` WHERE `entry`=8288 AND `text_id`=10327;
+DELETE FROM `gossip_menu` WHERE `entry`=8287 AND `text_id`=10323;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(8287, 10323),
+(8288, 10327);
+
+DELETE FROM `spell_area` WHERE `spell`=60197 AND `area`=3752;
+INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES
+(60197, 3752, 10528, 0, 0, 0, 2, 1, 64, 0);
+
+DELETE FROM `spell_area` WHERE `spell`=60194 AND `area`=3752;
+INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES
+(60194, 3752, 0, 10528, 0, 0, 2, 1, 0, 11);
diff --git a/sql/updates/world/2015_03_21_02_world.sql b/sql/updates/world/2015_03_21_02_world.sql
new file mode 100644
index 00000000000..831bf907912
--- /dev/null
+++ b/sql/updates/world/2015_03_21_02_world.sql
@@ -0,0 +1,5 @@
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 23161;
+INSERT INTO `spell_linked_spell` VALUES (23161, 31725, 0, 'Summon Nightmare');
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 5784;
+INSERT INTO `spell_linked_spell` VALUES (5784, 31725, 0, 'Summon felsteed');
diff --git a/sql/updates/world/2015_03_22_00_world.sql b/sql/updates/world/2015_03_22_00_world.sql
new file mode 100644
index 00000000000..97ecb115bc2
--- /dev/null
+++ b/sql/updates/world/2015_03_22_00_world.sql
@@ -0,0 +1,243 @@
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21181,21310,17008,21052,21685,21686,21687,21738,21739,21740,21741,21049) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(2118100,2131000,2102401) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` =21024 AND `source_type`=0 AND `id`>1;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE entry IN (21181, 17008, 21052, 21685, 21686, 21687, 21310,21738,21739,21740,21741,21049);
+
+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
+(21049, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - On spawn - set Phase 1'),
+(21049, 0, 1, 0, 1, 1, 100, 0, 0, 180000, 90000, 180000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - OOC (Phase 1) - Say Line 0'),
+(21049, 0, 2, 0, 38, 0, 100, 0, 1, 1, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - On Data Set 1 1 - set Phase 2'),
+(21049, 0, 3, 0, 1, 2, 100, 0, 300000, 300000, 300000, 300000, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - OOC (Phase 2) - Set Phase 1'),
+(21738, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Air - OOC (No Repeat) - Cast Elemental Spawn-in'),
+(21739, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Earth - OOC (No Repeat) - Cast Elemental Spawn-in'),
+(21740, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Fire - OOC (No Repeat) - Cast Elemental Spawn-in'),
+(21741, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Water - OOC (No Repeat) - Cast Elemental Spawn-in'),
+(21024, 0, 2, 0, 38, 1, 100, 0, 1, 1, 0, 0, 80, 2102401, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - On Data Set 1 1 - Run Script 2'),
+(21181, 0, 0 ,0, 9, 0, 100, 0, 0,20,10000,15000,11,18945,2,0,0,0,0,7,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Range - Cast Knock-Away'),
+(21181, 0, 1 ,0, 0, 0, 100, 0, 3000,5000,5000,11000,11,39429,2,0,0,0,0,5,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - IC - Cast Fel Flamestrike'),
+(21181, 0, 2 ,0, 9, 0, 100, 0, 0,20,8000,13000,11,39425,2,0,0,0,0,5,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Range - Cast Trample'),
+(21181, 0, 3 ,0, 11, 0, 100, 0, 0,0,0,0,18,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Spawn - Set Unit Flags'),
+(21181, 0, 4 ,0, 38, 0, 100, 0, 1,1,0,0,53,0,21181,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Data Set 1 1 - Start WP'),
+(21181, 0, 5 ,6, 40, 0, 100, 0, 1,21181,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Set Home Position'),
+(21181, 0, 6 ,7, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Set Unit Flags'),
+(21181, 0, 7 ,8, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Set Aggresive'),
+(21181, 0, 8 ,9, 61, 0, 100, 0, 0,0,0,0,49,0,0,0,0,0,0,19,21685,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Start Attack'),
+(21181, 0, 9 ,10, 61, 0, 100, 0, 0,0,0,0,45,2,2,0,0,0,0,19,21686,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Start Attack'),
+(21181, 0, 10 ,0, 61, 0, 100, 0, 0,0,0,0,45,2,2,0,0,0,0,19,21687,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Start Attack'),
+(21181, 0, 11 ,0, 1, 0, 100, 0, 0,0,15000,30000,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - IC - Say'),
+(21181, 0, 12 ,0, 6, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21024,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Death - Set Data'),
+(21181, 0, 13 ,0, 54, 0, 100, 0, 0,0,0,0,11,36329,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Just SUmmoned - Cast Cyrukh Fire Kit'),
+(17008, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,11,35996,0,0,0,0,0,1,0,0,0,0,0,0,0,'Guldan - On Data Set 1 1 - Cast Guldan Channel'),
+(17008, 0, 1 ,0, 38, 0, 100, 0, 2,2,0,0,28,35996,0,0,0,0,0,1,0,0,0,0,0,0,0,'Guldan - On Data Set 2 2 - Remove Aura Guldan Channel'),
+(17008, 0, 2 ,0, 38, 0, 100, 0, 3,3,0,0,66,0,0,0,0,0,0,19,21049,0,0,0,0,0,0,'Guldan - On Data Set 3 3 - Set Orientation'),
+(17008, 0, 3 ,0, 38, 0, 100, 0, 4,4,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.95674,'Guldan - On Data Set 3 3 - Set Orientation'),
+(21052, 0, 0 ,0, 1, 2, 100, 0, 0,0,500,1000,11,35997,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation - OOC (Phase 2) - Cast Fel Flames'),
+(21052, 0, 1 ,0, 1, 2, 100, 0, 30000,30000,30000,30000,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation - OOC (Phase 2) - Set Phase 1'),
+(21052, 0, 2 ,0, 1, 2, 100, 0, 0,1000,1000,3000,11,35757,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation - OOC (Phase 2) - Cast Ultris Destroyed'),
+(21052, 0, 3 ,0, 38, 0, 100, 0, 1,1,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation -On Data Set 1 1 - Set Phase 2'),
+(21685, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set 1 1 - Set NPC Flags Gossip'),
+(21685, 0, 1 ,2, 62, 0, 100, 0, 8350,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Store Targetlist'),
+(21685, 0, 2 ,3, 61, 0, 100, 0, 0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Set NPC Flags None'),
+(21685, 0, 3 ,4, 61, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21686,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Set Data'),
+(21685, 0, 4 ,5, 61, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21687,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Set Data'),
+(21685, 0, 5 ,0, 61, 0, 100, 0, 0,0,0,0,53,0,21685,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Start WP'),
+(21685, 0, 6 ,7, 40, 0, 100, 0, 12,21685,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Home Position'),
+(21685, 0, 7 ,8, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Unit Flags'),
+(21685, 0, 8 ,9, 61, 0, 100, 0, 0,0,0,0,2,495,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Faction'),
+(21685, 0, 9 ,10, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Aggresive'),
+(21685, 0, 10 ,0, 61, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21181,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Data on Cyrukh the Firelord <The Dirge of Karabor>'),
+(21685, 0, 11 ,0, 0, 0, 100, 0, 0,0,8000,11000,11,16006,0,0,0,0,0,2,0,0,0,0,0,0,0,'Oronok Torn-heart - IC - Cast Chain Lightning'),
+(21685, 0, 12 ,0, 0, 0, 100, 0, 0,0,6000,8000,11,12548,0,0,0,0,0,2,0,0,0,0,0,0,0,'Oronok Torn-heart - IC - Cast Frost Shock'),
+(21685, 0, 13 ,0, 2, 0, 100, 0, 0,40,5000,8000,11,12491,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Less than 40% HP - Cast Healing Wave'),
+(21685, 0, 14 ,0, 38, 0, 100, 0, 5,5,0,0,11,12491,0,0,0,0,0,19,21687,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set - Cast Healing Wave'),
+(21685, 0, 15 ,16, 38, 0, 100, 0, 6,6,0,0,71,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set 6 6 - Unequip weapon'),
+(21685, 0, 16 ,0, 61, 0, 100, 0, 0,0,0,0,15,10588,0,0,0,0,0,12,1,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set 6 6 - Complete Quest - The Cipher of Damnation'),
+(21685, 0, 17 ,0, 7, 0, 100, 0, 0,0,0,0,53,0,2168500,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Evade - Start WP (Path 2)'),
+(21685, 0, 18 ,0, 40, 0, 100, 0, 1,2168500,0,0,66,0,0,0,0,0,0,19,21024,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP1 (Path 2) - Set Orientation'),
+(21686, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,53,0,21686,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Data Set - Start WP'),
+(21686, 0, 1 ,2, 40, 0, 100, 0, 18,21686,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Home Position'),
+(21686, 0, 2 ,3, 61, 0, 100, 0, 0,0,0,0,2,495,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Faction'),
+(21686, 0, 3 ,4, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Unit Flags'),
+(21686, 0, 4 ,0, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Aggresive'),
+(21686, 0, 5 ,0, 38, 0, 100, 0, 2,2,0,0,49,0,0,0,0,0,0,19,21181,0,0,0,0,0,0,'Borak, Son of Oronok - On Data Set - Start Attack'),
+(21686, 0, 6 ,0, 9, 0, 100, 0, 0,5,3000,6000,11,27611,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Range - Cast Eviscerate'),
+(21686, 0, 7 ,0, 9, 0, 100, 0, 0,5,15000,18000,11,30470,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Range - Cast Slice and Dice'),
+(21686, 0, 8 ,0, 38, 0, 100, 0, 3,3,0,0,71,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Data Set 3 3 - Unequip weapon'),
+(21686, 0, 9 ,0, 7, 0, 100, 0, 0,0,0,0,53,0,2168600,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Evade - Start WP (Path 2)'),
+(21686, 0, 10 ,0, 40, 0, 100, 0, 1,2168600,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.660839,'Borak, Son of Oronok - On Reached WP1 (Path 2) - Set Orientation'),
+(21687, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,53,0,21687,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Data Set - Start WP'),
+(21687, 0, 1 ,2, 40, 0, 100, 0, 17,21687,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Home Position'),
+(21687, 0, 2 ,3, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Unit Flags'),
+(21687, 0, 3 ,4, 61, 0, 100, 0, 0,0,0,0,2,495,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Faction'),
+(21687, 0, 4 ,0, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Aggresive'),
+(21687, 0, 5 ,0, 38, 0, 100, 0, 2,2,0,0,49,0,0,0,0,0,0,19,21181,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Data Set - Start Attack'),
+(21687, 0, 6 ,0, 4, 0, 100, 0, 0,0,0,0,11,31403,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Agro - Cast Battle Shout'),
+(21687, 0, 7 ,0, 9, 0, 100, 0, 0,5,3000,7000,11,29426,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Range - Cast Heroic Strike'),
+(21687, 0, 8 ,0, 9, 0, 100, 0, 0,5,8000,13000,11,12169,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Range - Cast Shield Block'),
+(21687, 0, 9 ,0, 9, 0, 100, 0, 0,5,18000,23000,11,15062,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Range - Cast Shield Wall'),
+(21687, 0, 10 ,0, 0, 0, 100, 0, 0,5000,5000,8000,11,26281,0,0,0,0,0,2,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - IC - Cast Taunt'),
+(21687, 0, 11 ,0, 2, 0, 100, 0, 0,40,5000,8000,45,4,4,0,0,0,0,19,21685,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Less than 40% HP - Set Data Oronok Torn-heart'),
+(21687, 0, 12 ,0, 38, 0, 100, 0, 3,3,0,0,71,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Data Set 3 3 - Unequip weapon'),
+(21687, 0, 13 ,0, 7, 0, 100, 0, 0,0,0,0,53,0,2168700,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Evade - Start WP (Path 2)'),
+(21687, 0, 14 ,0, 40, 0, 100, 0, 1,2168700,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.503118,'Gromtor, Son of Oronok - On Reached WP1 (Path 2) - Set Orientation'),
+(21310, 0, 3 ,0, 54, 0, 100, 0, 0,0,0,0,80,2131000,2,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - On Spawn - Run Script'),
+(2102401, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Phase 2'),
+(2102401, 9, 1, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 6 (Oronok Torn-heart)'), -- 18:45:48.094
+(2102401, 9, 2, 0, 0, 0, 100, 0, 20000, 20000, 0, 0, 1, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 11'), -- 18:46:05.594
+(2102401, 9, 3, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 107, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Summon Group 2'), -- 18:46:08.938
+(2102401, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 7 (Oronok Torn-heart)'), -- 18:46:13.844
+(2102401, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21739, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 1 (Redeemed Spirit of Earth)'), -- 18:46:18.938
+(2102401, 9, 6, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21740, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 0 (Redeemed Spirit of Fire)'), -- 18:46:27.953
+(2102401, 9, 7, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 8'), -- 18:46:34.235
+(2102401, 9, 8, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21739, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 0 (Redeemed Spirit of Earth)'), -- 18:46:38.813
+(2102401, 9, 9, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 1 (Oronok Torn-heart)'), -- 18:46:42.844
+(2102401, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 2 (Oronok Torn-heart)'), -- 18:46:42.844
+(2102401, 9, 11, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 3 (Oronok Torn-heart)'), -- 18:46:48.860
+(2102401, 9, 12, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 6, 6, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Data 6 6 Oronok Torn-heart'), -- 18:46:48.860
+(2102401, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 21686, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Data 3 3 Borak, Son of Oronok'), -- 18:46:48.860
+(2102401, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 21687, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Data 3 3 Gromtor, Son of Oronok'), -- 18:46:48.860
+(2102401, 9, 15, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Despawn '), -- 18:46:48.860
+(2102401, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21686, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Despawn'), -- 18:46:48.860
+(2102401, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21687, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Despawn'), -- 18:46:48.860
+(2102401, 9, 18, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Phase 1'),
+(2131000, 9, 1 ,0, 0, 0, 100, 0, 0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 1'),
+(2131000, 9, 2 ,0, 0, 0, 100, 0, 0,0,0,0,45,3,3,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 3 3 on Gul''Dan'),
+(2131000, 9, 3 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,0,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 1 on Gul''Dan'),
+(2131000, 9, 4 ,0, 0, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,9,21049,0,200,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Spirit of the Past'),
+(2131000, 9, 5 ,0, 0, 0, 100, 0, 6000,6000,0,0,45,4,4,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 4 4 on Gul''Dan'),
+(2131000, 9, 6 ,0, 0, 0, 100, 0, 1000,1000,0,0,45,1,1,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Gul''Dan'),
+(2131000, 9, 7 ,0, 0, 0, 100, 0, 0,0,0,0,1,1,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 2 on Gul''Dan'),
+(2131000, 9, 8 ,0, 0, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,9,21052,0,200,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Camera Shaker - Altar of Damnation'),
+(2131000, 9, 9 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,2,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 3 on Gul''Dan'),
+(2131000, 9, 10 ,0, 0, 0, 100, 0, 4000,4000,0,0,12,21181,2,600000,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Summon Cyrukh the Firelord <The Dirge of Karabor>'),
+(2131000, 9, 11 ,0, 0, 0, 100, 0, 0,0,0,0,1,3,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 4 on Gul''Dan'),
+(2131000, 9, 12 ,0, 0, 0, 100, 0, 1000,1000,0,0,1,0,0,0,0,0,0,19,21181,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 4 on Cyrukh the Firelord <The Dirge of Karabor>'),
+(2131000, 9, 13 ,0, 0, 0, 100, 0, 3000,3000,0,0,107,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Summon Group'),
+(2131000, 9, 14 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,0,0,0,0,0,0,19,21685,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 1 on Oronok Torn-heart'),
+(2131000, 9, 15 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,4,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 5 on Gul''Dan'),
+(2131000, 9, 16 ,0, 0, 0, 100, 0, 6000,6000,0,0,1,5,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 6 on Gul''Dan'),
+(2131000, 9, 17 ,0, 0, 0, 100, 0, 0,0,0,0,45,2,2,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 2 2 on Gul''Dan'),
+(2131000, 9, 18 ,0, 0, 0, 100, 0, 6000,6000,0,0,1,5,0,0,0,0,0,19,21685,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 2 on Oronok Torn-heart'),
+(2131000, 9, 19 ,0, 0, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21685,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Oronok Torn-heart'),
+(2131000, 9, 20 ,0, 0, 0, 100, 0, 0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Despawn');
+
+DELETE FROM `waypoints` WHERE `entry` IN(21685,21686,21687,21181,2168500,2168600,2168700);
+
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(21687, 1,-3620.271, 1862.062, 48.44324, 'Gromtor, Son of Oronok'),
+(21687, 2,-3623.021, 1861.062, 48.94324, 'Gromtor, Son of Oronok'),
+(21687, 3,-3626.021, 1860.062, 49.94324, 'Gromtor, Son of Oronok'),
+(21687, 4,-3629.771, 1858.812, 50.94324, 'Gromtor, Son of Oronok'),
+(21687, 5,-3631.521, 1858.312, 51.69324, 'Gromtor, Son of Oronok'),
+(21687, 6,-3633.521, 1857.562, 52.44324, 'Gromtor, Son of Oronok'),
+(21687, 7,-3634.521, 1857.312, 53.44324, 'Gromtor, Son of Oronok'),
+(21687, 8,-3636.271, 1856.562, 54.19324, 'Gromtor, Son of Oronok'),
+(21687, 9,-3637.271, 1856.312, 55.19324, 'Gromtor, Son of Oronok'),
+(21687, 10,-3640.271, 1855.312, 55.69324, 'Gromtor, Son of Oronok'),
+(21687, 11,-3643.021, 1854.562, 56.44324, 'Gromtor, Son of Oronok'),
+(21687, 12,-3642.169, 1854.779, 56.43678, 'Gromtor, Son of Oronok'),
+(21687, 13,-3644.919, 1854.529, 56.68678, 'Gromtor, Son of Oronok'),
+(21687, 14,-3642.169, 1854.779, 56.43678, 'Gromtor, Son of Oronok'),
+(21687, 15,-3644.919, 1854.529, 56.68678, 'Gromtor, Son of Oronok'),
+(21687, 16,-3646.248, 1853.079, 57.05591, 'Gromtor, Son of Oronok'),
+(21687, 17,-3647.998, 1852.079, 57.80591, 'Gromtor, Son of Oronok'),
+(21686, 1,-3618.578, 1866.529, 48.23744, 'Borak, Son of Oronok'),
+(21686, 2,-3620.311, 1865.76, 48.47595, 'Borak, Son of Oronok'),
+(21686, 3,-3622.811, 1865.26, 48.97595, 'Borak, Son of Oronok'),
+(21686, 4,-3624.811, 1864.51, 49.47595, 'Borak, Son of Oronok'),
+(21686, 5,-3626.313, 1863.896, 50.1328, 'Borak, Son of Oronok'),
+(21686, 6,-3628.313, 1863.396, 50.8828, 'Borak, Son of Oronok'),
+(21686, 7,-3630.313, 1862.646, 51.3828, 'Borak, Son of Oronok'),
+(21686, 8,-3632.813, 1861.896, 52.1328, 'Borak, Son of Oronok'),
+(21686, 9,-3634.813, 1861.396, 52.8828, 'Borak, Son of Oronok'),
+(21686, 10,-3634.81, 1861.143, 53.03374, 'Borak, Son of Oronok'),
+(21686, 11,-3636.56, 1860.643, 53.78374, 'Borak, Son of Oronok'),
+(21686, 12,-3639.31, 1859.893, 54.28374, 'Borak, Son of Oronok'),
+(21686, 13,-3641.06, 1859.393, 55.03374, 'Borak, Son of Oronok'),
+(21686, 14,-3643.06, 1858.643, 56.03374, 'Borak, Son of Oronok'),
+(21686, 15,-3643.157, 1857.902, 56.33821, 'Borak, Son of Oronok'),
+(21686, 16,-3644.657, 1857.152, 57.08821, 'Borak, Son of Oronok'),
+(21686, 17,-3646.227, 1855.506, 57.3797, 'Borak, Son of Oronok'),
+(21686, 18,-3648.227, 1853.756, 58.3797, 'Borak, Son of Oronok'),
+(21685, 1,-3619.83, 1857.978, 48.17765, 'Oronok Torn-heart'),
+(21685, 2,-3624.58, 1856.228, 48.67765, 'Oronok Torn-heart'),
+(21685, 3,-3625.787, 1855.872, 49.38496, 'Oronok Torn-heart'),
+(21685, 4,-3627.787, 1855.122, 50.13496, 'Oronok Torn-heart'),
+(21685, 5,-3629.537, 1854.622, 51.13496, 'Oronok Torn-heart'),
+(21685, 6,-3630.287, 1854.372, 51.63496, 'Oronok Torn-heart'),
+(21685, 7,-3631.287, 1854.122, 53.13496, 'Oronok Torn-heart'),
+(21685, 8,-3632.287, 1853.872, 53.88496, 'Oronok Torn-heart'),
+(21685, 9,-3632.533, 1853.489, 54.04154, 'Oronok Torn-heart'),
+(21685, 10,-3634.533, 1852.989, 56.29154, 'Oronok Torn-heart'),
+(21685, 11,-3637.033, 1852.239, 57.79154, 'Oronok Torn-heart'),
+(21685, 12,-3640.951, 1852.142, 57.46563, 'Oronok Torn-heart'),
+(21181, 1,-3617.7155, 1823.1611, 39.7751, 'Cyrukh the Firelord <The Dirge of Karabor>'),
+(2168500, 1,-3600.319, 1898.602, 47.36539, 'Oronok Torn-heart (Path 2)'),
+(2168600, 1,-3597.452, 1895.446, 47.36539, 'Borak, Son of Oronok (Path 2)'),
+(2168700, 1,-3603.953, 1895.167, 47.36539, 'Gromtor, Son of Oronok (Path 2)');
+
+DELETE FROM `creature_text` WHERE `entry` IN(21685,17008,21181,21310,21049,21739,21740);
+DELETE FROM `creature_text` WHERE `entry` IN(21024) and `groupid`>10;
+
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES
+(21024, 11, 0, 'I hear what you hear, brother. Look behind you...', 12, 0, 100, 1, 0, 0, 'Earthmender Torlok to Cyrukh the Firelord',19336),
+
+(21685, 0, 0, 'You do not fight alone, $n! Together, we will banish this spawn of hellfire!', 14, 0, 100, 0, 0, 0, 'Oronok Torn-heart',19304),
+(21685, 1, 0, 'We leave, then, Torlok. I have only one request...', 12, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19341),
+(21685, 2, 0, 'The Torn-heart men give their weapons to Earthmender Torlok.', 16, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19342),
+(21685, 3, 0, 'Give these to the heroes that made this possible.', 12, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19343),
+(21685, 4, 0, 'We will set the elements free of your grasp by force!', 14, 0, 100, 0, 0, 0, 'Oronok Torn-heart',19309),
+(21685, 5, 0, 'We will fight when you are ready.', 12, 0, 100, 0, 0, 0, 'Oronok Torn-heart',19310),
+(21685, 6, 0, 'What say the elements, Torlok? I hear only silence.', 12, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19334),
+(21685, 7, 0, 'They are redeemed! Then we have won?', 12, 0, 100, 5, 0, 0, 'Oronok Torn-heart',19337),
+(17008, 0, 0, 'Be silent! The shattering is soon to come!', 12, 0, 100, 15, 0, 0, 'Gul''dan',18701),
+(17008, 1, 0, 'Bear witness to the undeniable power of our dark master!', 12, 0, 100, 0, 0, 0, 'Gul''dan',18702),
+(17008, 2, 0, 'With his gift, I shall raze this land and reform it!', 12, 0, 100, 0, 0, 0, 'Gul''dan',18703),
+(17008, 3, 0, 'Watch! See the ground shatter before us! Watch as the energy flows! It will feed our armies...', 12, 0, 100, 0, 0, 0, 'Gul''dan',18704),
+(17008, 4, 0, 'We will never be without power! I have secured our future! Bask in my glory!', 12, 0, 100, 0, 0, 0, 'Gul''dan',18705),
+(17008, 5, 0, 'It... is... done...', 12, 0, 100, 0, 0, 0, 'Gul''dan',18706),
+(21181, 0, 0, 'Cyrukh has awoken!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19298),
+(21181, 1, 0, 'Cyrukh comes for you!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19301),
+(21181, 1, 1, 'You will suffer eternally!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19299),
+(21181, 1, 2, 'Those that dare play with fire will be incinerated!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19302),
+(21181, 1, 3, 'Little creature made of flesh, your wish is granted! Death comes for you!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19308),
+(21310, 0, 0, 'A flaming vortex takes shape.', 16, 0, 100, 0, 0, 0, 'Shadowmoon Valley Invisible Trigger (Tiny)',19303),
+(21049, 0, 0, 'You have damned us all... We are lost.', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18700),
+(21049, 0, 1, 'Stop! You must stop!', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18698),
+(21049, 0, 2, 'Do not do this, Gul''dan! The elements will never forgive us!', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18697),
+(21049, 0, 3, 'Think of our younglings, Gul''dan! You will destroy us all!', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18699),
+(21049, 0, 4, 'We will take from the land if it refuses to give!', 12, 0, 100, 15, 0, 0, 'Spirit of the Past',18696),
+(21049, 0, 5, 'Tear the land asunder, Gul''dan! Sever the tie!', 12, 0, 100, 15, 0, 0, 'Spirit of the Past',18694),
+(21049, 0, 6, 'They have abandoned us! Do not forget!', 12, 0, 100, 15, 0, 0, 'Spirit of the Past',18695),
+(21740, 0, 0, 'Yes... Well enough for the elements that are here, but the cipher is known to another... The spirits of fire are in turmoil... If this force is not stopped, the world where these mortals came from will cease.', 12, 0, 100, 0, 0, 0, 'Redeemed Spirit of Fire',19339),
+(21739, 0, 0, 'Farewell, mortals... The earthmender knows what fire feels...', 12, 0, 100, 0, 0, 0, 'Redeemed Spirit of Earth',19340),
+(21739, 1, 0, 'It is now as it should be, shaman. You have done well.', 12, 0, 100, 0, 0, 0, 'Redeemed Spirit of Earth',19338);
+
+DELETE FROM `creature_template_addon` WHERE `entry` BETWEEN 21738 AND 21741;
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(21741, 0, 0x0, 0x1, ''), -- 21741
+(21740, 0, 0x0, 0x1, ''), -- 21740
+(21739, 0, 0x0, 0x1, ''), -- 21739
+(21738, 0, 0x0, 0x1, ''); -- 21738
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=35997;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 35997, 0, 0, 35, 1, 0, 20, 1, 0, 0, 0, '', 'Fel Flames target must not be self'),
+(13, 1, 35997, 0, 0, 31, 0, 3, 21052, 0, 0, 0, 0, '', 'Fel Flames target has to be Camera Shaker - Altar of Damnation');
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`IN(21310);
+DELETE FROM `creature_summon_groups` WHERE `summonerId`IN(21024) AND `groupId`=1;
+
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
+(21024, 0, 1, 21738, -3587.229, 1892.889, 47.32373, 2.199115, 1, 37000),
+(21024, 0, 1, 21739, -3598.681, 1888.016, 47.32373, 1.692969, 1, 37000),
+(21024, 0, 1, 21740, -3605.315, 1884.477, 47.32373, 1.308997, 1, 37000),
+(21024, 0, 1, 21741, -3591.871, 1886.822, 47.32373, 1.850049, 1, 37000),
+(21310, 0, 0, 21685, -3600.319, 1898.602, 47.36539, 4.921828, 1, 600000),
+(21310, 0, 0, 21686, -3603.865, 1900.854, 47.36539, 4.931085, 1, 600000),
+(21310, 0, 0, 21687, -3597.99, 1902.118, 47.3654, 4.848677, 1, 600000);
+
+DELETE FROM `event_scripts` WHERE id=13961;
+INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES
+(13961, 3, 10, 21310, 50000, 0, -3590.538574, 1832.343506, 41.749908, 1.65);
diff --git a/sql/updates/world/2015_03_22_01_world.sql b/sql/updates/world/2015_03_22_01_world.sql
new file mode 100644
index 00000000000..07e759465dc
--- /dev/null
+++ b/sql/updates/world/2015_03_22_01_world.sql
@@ -0,0 +1,100 @@
+SET @Cannon:= 186432;
+SET @Tethyr:=23899;
+SET @Marksman:=23900;
+SET @Blast:=42578;
+SET @Mills:=23905;
+SET @Counter:=52500;
+
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@Tethyr, @Mills, @Marksman);
+UPDATE `creature_template` SET `InhabitType`=2 WHERE `entry` IN (@Tethyr);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@Cannon;
+
+DELETE FROM `creature_text` WHERE `entry`=@Mills;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES
+(@Mills,0,0,'Marksmen, form up and take your positions!',14,0,100,0,0,0, 'Major Mills', 22447),
+(@Mills,1,0,'Prepare to fire upon my command! Ready, aim...',14,0,100,0,0,0, 'Major Mills', 22448),
+(@Mills,2,0,'FIRE AT WILL!',14,0,100,0,0,0, 'Major Mills', 22449),
+(@Mills,3,0,'We did it! We''ve defeated Tethyr!',14,0,100,0,0,0, 'Major Mills', 22633);
+
+DELETE FROM `waypoints` WHERE `entry`=@Tethyr;
+INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES
+(@Tethyr,1, -3882.588379,-4670.275391,-1.823548,'Tethyr');
+UPDATE `quest_template` SET `SpecialFlags`=2 WHERE `Id`=11198;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Cannon) AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman*100) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Mills) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Mills*100) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman*100) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman*100+1) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Tethyr) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Tethyr*100) AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Tethyr*100+1) 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
+(@Mills,0,0,0,19,0,100,0,11198,0,0,0,80,@Mills*100,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Major Mills: On quest accept call main script'),
+(@Mills*100,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Remove npcflag'),
+(@Mills*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, 'Take Down Tethyr: Talk'),
+(@Mills*100,9,2,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3904.77,-4635.09,9.62735,5.49334, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,3,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3856.59,-4622.45,9.24753,3.87856, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,4,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3917.6,-4648.53,9.32604,5.56795, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,5,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3890.48,-4620.7,9.55527,4.99383, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,6,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3865.94,-4617.2,9.26262,4.16523, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,7,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3834.8,-4645.41,9.25827,3.61152, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,8,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3826.61,-4655.32,9.21484,3.13243, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,9,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3830.76,-4673.74,9.50962,2.70832, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,10,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3843.65,-4687.59,9.6436,2.43735, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,11,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3858.49,-4703.49,9.17411,2.33525, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,12,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3851.97,-4697.24,9.36834,2.33525, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,13,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3924.35,-4656.55,9.15409,5.80749, 'Take Down Tethyr: Summon Theramore Marksman'),
+(@Mills*100,9,14,0,0,0,100,0,0,0,0,0,12,@Tethyr,1,900000,0,0,0,8,0,0,0,-3897.365479, -4750.632813, -1.719010, 1.791049, 'Take Down Tethyr: Summon Tethyr'),
+(@Mills*100,9,15,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Talk'),
+(@Mills*100,9,16,0,0,0,100,0,10000,10000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Talk'),
+(@Mills*100,9,17,0,0,0,100,0,0,0,0,0,106,16,0,0,0,0,0,14,10824,@Cannon,0,0, 0, 0, 0, 'Take Down Tethyr: Remove Flag from GO'),
+(@Mills*100,9,18,0,0,0,100,0,0,0,0,0,106,16,0,0,0,0,0,14,10227,@Cannon,0,0, 0, 0, 0, 'Take Down Tethyr: Remove Flag from GO'),
+(@Mills*100,9,19,0,0,0,100,0,0,0,0,0,106,16,0,0,0,0,0,14,11186,@Cannon,0,0, 0, 0, 0, 'Take Down Tethyr: Remove Flag from GO'),
+(@Tethyr,0,0,0,54,0,100,0,0,0,0,0,80,@Tethyr*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Just Summoned - Action list'),
+(@Tethyr*100,9,0,0,0,0,100,0,0,0,0,0,53,0,@Tethyr,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - Start wp'),
+(@Tethyr*100,9,1,0,0,0,100,0,0,0,0,0,102,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - REGEN HEALTH OFF'),
+(@Tethyr*100,9,2,0,0,0,100,0,0,0,0,0,18,128,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - Add unit flag'),
+(@Tethyr,0,1,0,23,0,100,1,@Counter,5,0,0,80,@Tethyr*100+1,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - ActionList'),
+(@Tethyr*100+1,9,3,0,0,0,100,0,0,0,0,0,6,11198,0,0,0,0,0,18,90,0,0,0,0,0,0,'Tethyr - Action list - Quest Failed'),
+(@Tethyr*100+1,9,4,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,11,@Marksman,80,0,0,0,0,0,'Tethyr - Action list - Despawn'),
+(@Tethyr*100+1,9,5,0,0,0,100,0,0,0,0,0,45,0,2,0,0,0,0,10,31075,@Mills,0,0,0,0,0,'Tethyr - Action list - Set Data'),
+(@Tethyr*100+1,9,6,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - Despawn'),
+(@Tethyr,0,1,2,40,0,100,0,1,@Tethyr,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Waypoint reached - Set home position'),
+(@Tethyr,0,2,0,61,0,100,0,0,0,0,0,19,128,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Just Summoned - Remove unit flag'),
+(@Tethyr,0,3,0,0,0,100,0,3000,3000,7000,7000,11,42584,0,0,0,0,0,5,0,0,0,0,0,0,0,'Tethyr - Occ - Cast'),
+(@Tethyr,0,4,0,0,0,100,0,5000,5000,8000,8000,11,42574,0,0,0,0,0,5,0,0,0,0,0,0,0,'Tethyr - Occ - Cast'),
+(@Tethyr,0,5,0,8,0,100,0,@Blast,0,0,0,11,36662,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Spell Hist - Cast'),
+(@Tethyr,0,6,7,6,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,31075,@Mills,0,0,0,0,0,'Tethyr - On Death - Set Data'),
+(@Tethyr,0,7,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,11,@Marksman,80,0,0,0,0,0,'Tethyr - On Death - Set Data'),
+(@Mills,0,1,2,38,0,100,0,0,1,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - Add npcflag'),
+(@Mills,0,2,3,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - talk'),
+(@Mills,0,3,0,61,0,100,0,0,0,0,0,15,11198,0,0,0,0,0,18,100,0,0,0,0,0,0,'Tethyr - On data sett - Area explored'),
+(@Mills,0,4,0,38,0,100,0,0,2,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - Add npcflag'),
+(@Marksman,0,0,0,38,0,100,0,0,1,0,0,80,@Marksman*100+1,2,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - On DATA set - Action List'),
+(@Marksman*100+1,9,1,0,0,0,100,0,2000,2000,0,0,11,66402,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'),
+(@Marksman*100+1,9,2,0,0,0,100,0,2000,2000,0,0,11,66400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'),
+(@Marksman*100+1,9,3,0,0,0,100,0,2000,2000,0,0,11,66402,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'),
+(@Marksman*100+1,9,4,0,0,0,100,0,2000,2000,0,0,11,66400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'),
+(@Marksman*100+1,9,5,0,0,0,100,0,2000,2000,0,0,11,66402,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'),
+(@Marksman*100+1,9,6,0,0,0,100,0,2000,2000,0,0,11,66400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'),
+(@Marksman*100+1,9,7,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Just Summoned - Despawn'),
+(@Marksman,0,1,0,54,0,100,1,0,0,0,0,80,@Marksman*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Just Summoned - Action list'),
+(@Marksman*100,9,0,0,0,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - React passif'),
+(@Marksman*100,9,1,0,0,0,100,0,0,0,0,0,18,131072,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - Add unit flag'),
+(@Marksman*100,9,2,0,0,0,100,0,16000,16000,0,0,19,131072,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - Remove unit flag'),
+(@Marksman,0,2,0,1,0,100,0,3000,3000,2000,2000,11,42580,0,0,0,0,0,19,@Tethyr,80,0,0,0,0,0,'Tethyr - Occ - Cast'),
+(@Marksman,0,3,0,0,0,100,0,3000,3000,2000,2000,11,42580,0,0,0,0,0,19,@Tethyr,80,0,0,0,0,0,'Tethyr - IC - Cast'),
+(@Marksman,0,4,0,6,0,100,0,0,0,0,0,75,@Counter,0,0,0,0,0,19,@Tethyr,80,0,0,0,0,0,'Tethyr - On death - Set data1');
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = @Blast;
+INSERT INTO `spell_linked_spell` VALUES (@Blast, 42576, 0, 'Theramore Cannon blast');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@Blast;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, @Blast, 0, 31, 3, @Tethyr, 0, 0, '', 'Blast cannon target');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=42576;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 42576, 0, 31, 3, @Tethyr, 0, 0, '', 'Blast cannon target');
diff --git a/sql/updates/world/2015_03_22_02_world.sql b/sql/updates/world/2015_03_22_02_world.sql
new file mode 100644
index 00000000000..4fd3f5b8e25
--- /dev/null
+++ b/sql/updates/world/2015_03_22_02_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `creature` WHERE `id` = 34137;
+DELETE FROM `creature_addon` WHERE `guid` = 26148;
+INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (26148, 261480);
diff --git a/sql/updates/world/2015_03_22_03_world.sql b/sql/updates/world/2015_03_22_03_world.sql
new file mode 100644
index 00000000000..8b59ea0824c
--- /dev/null
+++ b/sql/updates/world/2015_03_22_03_world.sql
@@ -0,0 +1,68 @@
+SET @GUID:=69717; -- 3 free Gob guid set by TC
+SET @WESTERN_TP := 22348;
+SET @EASTERN_TP := 22351;
+SET @CENTRAL_TP := 22350;
+SET @Teleporter := 185215;
+
+DELETE FROM `gameobject` WHERE `guid` IN (@GUID+0, @GUID+1, @GUID+2);
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@GUID+0, @Teleporter, 530, 1, 1, 4697.5, 3298.68, 178.892, 2.02823, 0, 0, 0.849013, 0.528372, 120, 0, 1),
+(@GUID+1, @Teleporter, 530, 1, 1, 4734.71, 3193.67, 161.48, 0.386745, 0, 0, 0.19217, 0.981362, 120, 0, 1),
+(@GUID+2, @Teleporter, 530, 1, 1, 4673.28, 3126.67, 166.725, 5.42979, 0, 0, 0.413867, -0.910337, 120, 0, 1);
+
+UPDATE `creature_template` SET `spell2`=36255,`spell3`=8599,`spell4`=38920 WHERE `entry`=16943;
+UPDATE `creature_template` SET `spell2`=37179,`spell3`=36251,`spell4`=38920 WHERE `entry`=20928;
+UPDATE `creature_template` SET `AIName`='SmartAI', `unit_flags`=33555200, `flags_extra`=130 WHERE `entry` IN (@CENTRAL_TP, @EASTERN_TP, @WESTERN_TP);
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (20928);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-70125,-70122,-70124,-70126,-70123,-70116,-70115,-70117,-70118,-70119,-70128,-70127,-70121,-70120, -70131, -70130, -70129, -70112, -70113, -70114, -70132, -70133, -70135, -70134, -70138, -70136, -70139, -70137) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@WESTERN_TP, @EASTERN_TP, @CENTRAL_TP, 20928) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (16943) AND `source_type`=0 AND id IN (3,4,5);
+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
+(@WESTERN_TP,0,0,0,8,0,100,0,38920,0,0,0,45,0,1,0,0,0,0,7,0,0,0,0,0,0,0,"WESTERN_TP - On spell hit - SET data"),
+(@EASTERN_TP,0,1,0,8,0,100,0,38920,0,0,0,45,0,2,0,0,0,0,7,0,0,0,0,0,0,0,"EASTERN_TP - On spell hit - SET data"),
+(@CENTRAL_TP,0,2,0,8,0,100,0,38920,0,0,0,45,0,3,0,0,0,0,7,0,0,0,0,0,0,0,"CENTRAL_TP - On spell hit - SET data"),
+(16943,0,3,0,38,0,100,0,0,1,0,0,86,38982,0,23,0,0,0,1,0,0,0,0,0,0,0,"16943 - On data set - Cast Credit"),
+(16943,0,4,0,38,0,100,0,0,2,0,0,86,38983,0,23,0,0,0,1,0,0,0,0,0,0,0,"16943 - On data set - Cast Credit"),
+(16943,0,5,0,38,0,100,0,0,3,0,0,86,38984,0,23,0,0,0,1,0,0,0,0,0,0,0,"16943 - On data set - Cast Credit"),
+(20928,0,0,0,0,0,100,0,1000,1000,7000,9000,11,37179,0,0,0,0,0,2,0,0,0,0,0,0,0,"20928 - IC- Cast"),
+(20928,0,1,0,0,0,100,0,4000,4000,5000,5000,11,36251,0,0,0,0,0,2,0,0,0,0,0,0,0,"20928 - IC- Cast"),
+(20928,0,2,0,4,0,100,0,0,0,0,0,11,33962,0,0,0,0,0,1,0,0,0,0,0,0,0,"20928 - On Aggro - Cast"),
+(20928,0,3,0,38,0,100,0,0,1,0,0,86,38982,0,23,0,0,0,1,0,0,0,0,0,0,0,"20928 - On data set - Cast Credit"),
+(20928,0,4,0,38,0,100,0,0,2,0,0,86,38983,0,23,0,0,0,1,0,0,0,0,0,0,0,"20928 - On data set - Cast Credit"),
+(20928,0,5,0,38,0,100,0,0,3,0,0,86,38984,0,23,0,0,0,1,0,0,0,0,0,0,0,"20928 - On data set - Cast Credit"),
+(-70115,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70116,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70118,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70116,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70117,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70116,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70119,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70120,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70128,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70120,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70121,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70120,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70127,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70126,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70123,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70122,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70123,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70124,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70123,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70125,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70114,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70132,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70133,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70129,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70131,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70130,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70129,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70131,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70130,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70113,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70112,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70112,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70113,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70135,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70134,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70138,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70136,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'),
+(-70139,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target');
+
+DELETE FROM `conditions` WHERE `SourceEntry`=38920 AND `SourceTypeOrReferenceId`=13;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,7,38920,0,1,31,0,3,@WESTERN_TP,0,0,0,'', 'Detonate all 3 implicit effects can hit western teleporter'),
+(13,7,38920,0,2,31,0,3,@EASTERN_TP,0,0,0,'', 'Detonate all 3 implicit effects can hit eastern teleporter'),
+(13,7,38920,0,3,31,0,3,@CENTRAL_TP,0,0,0,'', 'Detonate all 3 implicit effects can hit central teleporter');
+
+DELETE FROM `conditions` WHERE `SourceEntry`=38915 AND `SourceTypeOrReferenceId`=17;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(17,0,38915,0,1,31,1,3,16943,0,0,0,'', 'Mental interference target can be Cyber-Rage Forgelord'),
+(17,0,38915,0,2,31,1,3,20928,0,0,0,'', 'Mental interference target can be Ironspine Forgelord');
diff --git a/sql/updates/world/2015_03_22_04_world.sql b/sql/updates/world/2015_03_22_04_world.sql
new file mode 100644
index 00000000000..d468134a279
--- /dev/null
+++ b/sql/updates/world/2015_03_22_04_world.sql
@@ -0,0 +1,88 @@
+-- Pathing for Winter Revenant Entry: 34134
+SET @NPC := 136272;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1863.794,`position_y`=-291.2315,`position_z`=412.549 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1863.794,-291.2315,412.549,0,0,0,0,100,0),
+(@PATH,2,1863.79,-270.939,412.549,0,0,0,0,100,0),
+(@PATH,3,1863.947,-228.3612,412.549,0,0,0,0,100,0),
+(@PATH,4,1869.661,-213.3534,412.5491,0,0,0,0,100,0),
+(@PATH,5,1865.418,-223.9702,412.5492,0,0,0,0,100,0),
+(@PATH,6,1864.278,-260.7524,412.5491,0,0,0,0,100,0);
+
+-- Pathing for Winter Revenant Entry: 34134
+SET @NPC := 136273;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1923.732,`position_y`=-359.4886,`position_z`=421.7067 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1923.732,-359.4886,421.7067,0,0,0,0,100,0),
+(@PATH,2,1910.024,-354.7222,418.0154,0,0,0,0,100,0),
+(@PATH,3,1918.405,-348.7433,419.1237,0,0,0,0,100,0),
+(@PATH,4,1939.619,-338.1754,423.0634,0,0,0,0,100,0),
+(@PATH,5,1963.408,-334.0208,424.2783,0,0,0,0,100,0),
+(@PATH,6,1980.856,-335.2691,424.5296,0,0,0,0,100,0),
+(@PATH,7,1986.183,-330.6932,425.169,0,0,0,0,100,0),
+(@PATH,8,1995.423,-314.1808,429.2899,0,0,0,0,100,0),
+(@PATH,9,1991.416,-322.2818,428.0239,0,0,0,0,100,0),
+(@PATH,10,1986.513,-331.125,425.358,0,0,0,0,100,0),
+(@PATH,11,1985.857,-349.7383,423.7158,0,0,0,0,100,0),
+(@PATH,12,1981.682,-366.153,421.861,0,0,0,0,100,0),
+(@PATH,13,1977.274,-369.6335,421.7955,0,0,0,0,100,0),
+(@PATH,14,1979.401,-369.707,421.2126,0,0,0,0,100,0),
+(@PATH,15,1984.034,-359.9644,422.6329,0,0,0,0,100,0),
+(@PATH,16,1984.393,-335.8026,424.7922,0,0,0,0,100,0),
+(@PATH,17,1988.928,-328.356,425.7399,0,0,0,0,100,0),
+(@PATH,18,1995.36,-317.4339,428.2936,0,0,0,0,100,0),
+(@PATH,19,1986.51,-331.1359,425.4233,0,0,0,0,100,0),
+(@PATH,20,1985.911,-349.9874,423.6323,0,0,0,0,100,0),
+(@PATH,21,1981.283,-367.6224,421.5562,0,0,0,0,100,0),
+(@PATH,22,1977.089,-370.4861,421.7415,0,0,0,0,100,0),
+(@PATH,23,1980.1,-368.3475,421.1914,0,0,0,0,100,0),
+(@PATH,24,1983.74,-359.1452,422.7472,0,0,0,0,100,0),
+(@PATH,25,1984.766,-343.7218,423.7823,0,0,0,0,100,0),
+(@PATH,26,1995.432,-314.0199,429.2879,0,0,0,0,100,0),
+(@PATH,27,1989.344,-326.1992,426.7511,0,0,0,0,100,0),
+(@PATH,28,1982.792,-334.583,424.959,0,0,0,0,100,0),
+(@PATH,29,1966.594,-333.5218,424.746,0,0,0,0,100,0),
+(@PATH,30,1947.611,-335.2066,424.0862,0,0,0,0,100,0),
+(@PATH,31,1926.362,-345.1485,420.9026,0,0,0,0,100,0),
+(@PATH,32,1910.392,-351.3752,417.4246,0,0,0,0,100,0),
+(@PATH,33,1920.583,-357.5619,420.6503,0,0,0,0,100,0),
+(@PATH,34,1930.703,-367.3549,424.857,0,0,0,0,100,0),
+(@PATH,35,1948.212,-376.7307,427.6352,0,0,0,0,100,0);
+
+-- Pathing for Winter Revenant Entry: 34134
+SET @NPC := 136282;
+SET @PATH := @NPC * 10;
+DELETE FROM `creature` WHERE `guid`=@NPC;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@NPC,34134,603,3,1,1819.619,-357.7437,413.1524,0.42,604800,0, 2);
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,1819.619,-357.7437,413.1524,0,0,0,0,100,0),
+(@PATH,2,1805.549,-360.7479,413.217,0,0,0,0,100,0),
+(@PATH,3,1794.583,-359.7582,412.7976,0,0,0,0,100,0),
+(@PATH,4,1781.751,-356.4551,412.6638,0,0,0,0,100,0),
+(@PATH,5,1767.5,-360.8076,412.4928,0,0,0,0,100,0),
+(@PATH,6,1786.507,-358.0201,412.7365,0,0,0,0,100,0),
+(@PATH,7,1804.042,-360.811,413.1808,0,0,0,0,100,0),
+(@PATH,8,1815.088,-359.1276,413.0786,0,0,0,0,100,0),
+(@PATH,9,1826.932,-355.8406,413.2609,0,0,0,0,100,0),
+(@PATH,10,1837.789,-356.2162,413.0187,0,0,0,0,100,0),
+(@PATH,11,1851.447,-344.2731,412.6318,0,0,0,0,100,0),
+(@PATH,12,1860.773,-334.8643,412.6426,0,0,0,0,100,0),
+(@PATH,13,1874.715,-338.0733,412.809,0,0,0,0,100,0),
+(@PATH,14,1882.154,-355.1157,412.7476,0,0,0,0,100,0),
+(@PATH,15,1872.645,-369.4694,413.3637,0,0,0,0,100,0),
+(@PATH,16,1862.287,-378.0733,413.9054,0,0,0,0,100,0),
+(@PATH,17,1850.775,-374.4587,412.9799,0,0,0,0,100,0),
+(@PATH,18,1841.932,-359.4829,413.0605,0,0,0,0,100,0),
+(@PATH,19,1823.803,-358.0992,412.858,0,0,0,0,100,0);
diff --git a/sql/updates/world/2015_03_22_05_world.sql b/sql/updates/world/2015_03_22_05_world.sql
new file mode 100644
index 00000000000..6e81be445da
--- /dev/null
+++ b/sql/updates/world/2015_03_22_05_world.sql
@@ -0,0 +1,42 @@
+-- Pathing for Freya Entry: 32906
+SET @NPC := 136554;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2338.461,`position_y`=-52.32549,`position_z`=425.5522 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2338.461,-52.32549,425.5522,0,0,0,0,100,0),
+(@PATH,2,2327.021,-69.61578,426.0348,0,0,0,0,100,0),
+(@PATH,3,2303.438,-90.47264,429.1589,0,0,0,0,100,0),
+(@PATH,4,2301.615,-91.41477,429.1122,3.649395,13000,0,488,100,0),
+(@PATH,5,2333.003,-57.68308,425.5663,0,0,0,0,100,0),
+(@PATH,6,2342.892,-46.95139,425.5204,3.298672,60000,0,0,100,0),
+(@PATH,7,2397.739,-42.16927,422.8524,0,0,0,0,100,0),
+(@PATH,8,2409.762,-74.47346,420.6727,0,0,0,0,100,0),
+(@PATH,9,2400.14,-96.78609,424.1808,0,0,0,0,100,0),
+(@PATH,10,2399.105,-98.47173,424.2316,4.866657,13000,0,489,100,0),
+(@PATH,11,2397.637,-46.43726,423.2978,0,0,0,0,100,0),
+(@PATH,12,2358.936,-41.11687,425.6092,0,0,0,0,100,0),
+(@PATH,13,2349.045,-40.70486,425.7578,3.176499,60000,0,0,100,0),
+(@PATH,14,2403.443,-26.94002,419.8143,0,0,0,0,100,0),
+(@PATH,15,2411.195,-22.77497,419.1813,0,0,0,0,100,0),
+(@PATH,16,2436.248,12.27234,422.2727,0,0,0,0,100,0),
+(@PATH,17,2437.145,16.83826,424.929,0,0,0,0,100,0),
+(@PATH,18,2437.777,19.35069,426.0522,1.399542,13000,0,490,100,0),
+(@PATH,19,2412.994,-11.56424,420.4819,0,0,0,0,100,0),
+(@PATH,20,2359.694,-40.27568,425.3726,0,75000,0,0,100,0);
+
+DELETE FROM `waypoint_scripts` WHERE `id` IN (488,489,490);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`guid`) VALUES
+(488,3,15,63295,4,33575,30,891),(489,3,15,63292,4,33575,30,892),(490,3,15,63294,4,33575,30,893);
+
+UPDATE `creature` SET `modelid`=0,`spawndist`=0,`MovementType`=0, `curhealth`=1 WHERE `id`=33575;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=33575;
+
+-- Add spell target condition for Freya Dummy
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=2 AND `SourceEntry` IN (63292,63294,63295);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 2, 63292, 0, 0, 31, 3, 33575, 0, 0, '', 'Freya Dummy Yellow targets Channel Stalker Freya'),
+(13, 2, 63294, 0, 0, 31, 3, 33575, 0, 0, '', 'Freya Dummy Blue targets Channel Stalker Freya'),
+(13, 2, 63295, 0, 0, 31, 3, 33575, 0, 0, '', 'Freya Dummy Green targets Channel Stalker Freya');
diff --git a/sql/updates/world/2015_03_22_06_world.sql b/sql/updates/world/2015_03_22_06_world.sql
new file mode 100644
index 00000000000..db8227afff8
--- /dev/null
+++ b/sql/updates/world/2015_03_22_06_world.sql
@@ -0,0 +1,62 @@
+-- Pathing for Guardian of Life Entry: 33528
+SET @NPC := 137528;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2267.131,`position_y`=25.01511,`position_z`=428.6021 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2267.131,25.01511,428.6021,0,0,0,0,100,0),
+(@PATH,2,2267.036,24.98481,428.7653,0,0,0,0,100,0),
+(@PATH,3,2266.606,38.24471,428.8724,0,0,0,0,100,0),
+(@PATH,4,2266.924,24.55858,428.5795,0,0,0,0,100,0),
+(@PATH,5,2267.036,24.98481,428.7653,0,0,0,0,100,0),
+(@PATH,6,2266.606,38.24471,428.8724,0,0,0,0,100,0),
+(@PATH,7,2267.153,24.9108,428.5908,0,0,0,0,100,0),
+(@PATH,8,2267.036,24.98481,428.7653,0,0,0,0,100,0),
+(@PATH,9,2266.606,38.24471,428.8724,0,0,0,0,100,0);
+
+-- Pathing for Guardian of Life Entry: 33528
+SET @NPC := 137529;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2366.774,`position_y`=4.869098,`position_z`=427.116 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2366.774,4.869098,427.116,0,0,0,0,100,0),
+(@PATH,2,2362.121,4.529948,427.9323,0,0,0,0,100,0),
+(@PATH,3,2348.469,20.28589,429.8685,0,0,0,0,100,0),
+(@PATH,4,2364.304,30.57164,430.7769,0,0,0,0,100,0),
+(@PATH,5,2361.717,29.00374,430.3431,0,0,0,0,100,0),
+(@PATH,6,2353.135,9.205807,428.5914,0,0,0,0,100,0);
+
+-- Pathing for Guardian of Life Entry: 33528
+SET @NPC := 137530;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2258.508,`position_y`=-45.42564,`position_z`=427.925 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2258.508,-45.42564,427.925,0,0,0,0,100,0),
+(@PATH,2,2251.779,-49.15427,426.946,0,0,0,0,100,0),
+(@PATH,3,2250.673,-49.80873,426.6561,0,0,0,0,100,0),
+(@PATH,4,2252.392,-71.85374,427.5378,0,0,0,0,100,0),
+(@PATH,5,2247.761,-65.52759,426.7502,0,0,0,0,100,0),
+(@PATH,6,2245.5,-62.23093,426.3374,0,0,0,0,100,0);
+
+-- Pathing for Guardian of Life Entry: 33528
+SET @NPC := 137531;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2337.467,`position_y`=-207.8645,`position_z`=442.2937 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2337.467,-207.8645,442.2937,0,0,0,0,100,0),
+(@PATH,2,2344.242,-198.5094,441.5296,0,0,0,0,100,0),
+(@PATH,3,2348.561,-192.5445,440.9542,0,0,0,0,100,0),
+(@PATH,4,2324.5,-181.2047,442.9576,0,0,0,0,100,0),
+(@PATH,5,2333.28,-177.3987,441.4766,0,0,0,0,100,0),
+(@PATH,6,2337.545,-175.9973,441.1203,0,0,0,0,100,0);
diff --git a/sql/updates/world/2015_03_22_07_world.sql b/sql/updates/world/2015_03_22_07_world.sql
new file mode 100644
index 00000000000..1e5c6607bee
--- /dev/null
+++ b/sql/updates/world/2015_03_22_07_world.sql
@@ -0,0 +1,318 @@
+-- Pathing for Guardian Lasher Entry: 33430 'TDB FORMAT'
+SET @NPC := 136608;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2409.214,`position_y`=39.68574,`position_z`=430.8202 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2409.214,39.68574,430.8202,0,0,0,0,100,0),
+(@PATH,2,2419.765,55.44238,432.5078,0,0,0,0,100,0),
+(@PATH,3,2412.965,68.34785,436.2759,0,0,0,0,100,0),
+(@PATH,4,2392.464,56.26165,433.3107,0,0,0,0,100,0);
+
+-- Pathing for Guardian Lasher Entry: 33430 'TDB FORMAT'
+SET @NPC := 136606;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2279.508,`position_y`=-143.8644,`position_z`=435.7896 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2279.508,-143.8644,435.7896,0,0,0,0,100,0),
+(@PATH,2,2294.608,-141.4411,434.8279,0,0,0,0,100,0),
+(@PATH,3,2297.896,-140.7821,434.6606,0,0,0,0,100,0),
+(@PATH,4,2300.045,-107.6998,432.8321,0,0,0,0,100,0),
+(@PATH,5,2282.262,-122.0434,432.8238,0,0,0,0,100,0),
+(@PATH,6,2262.708,-113.97,431.0626,0,0,0,0,100,0),
+(@PATH,7,2246.123,-120.2917,433.473,0,0,0,0,100,0),
+(@PATH,8,2252.349,-127.7779,432.1354,0,0,0,0,100,0);
+
+-- Pathing for Guardian Lasher Entry: 33430 'TDB FORMAT'
+SET @NPC := 136604;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2348.184,`position_y`=-33.40479,`position_z`=425.1163 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2348.184,-33.40479,425.1163,0,0,0,0,100,0),
+(@PATH,2,2321.229,-1.325779,426.4646,0,0,0,0,100,0),
+(@PATH,3,2314.177,14.98683,429.6667,0,0,0,0,100,0),
+(@PATH,4,2318.373,3.474962,427.6927,0,0,0,0,100,0),
+(@PATH,5,2346.51,-30.4225,424.8373,0,0,0,0,100,0),
+(@PATH,6,2325.816,-64.16115,426.2005,0,0,0,0,100,0);
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136355;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-714.6555,`position_y`=-17.16721,`position_z`=429.8806 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-714.6555,-17.16721,429.8806,3.124139,2000,0,0,100,0), -- 10:58:06
+(@PATH,2,-718.4268,-23.51997,429.8806,0,0,0,0,100,0), -- 10:58:08
+(@PATH,3,-718.511,-23.33659,430.1306,0,0,0,0,100,0), -- 10:58:10
+(@PATH,4,-722.3708,-23.03671,430.1306,0,0,0,0,100,0), -- 10:58:12
+(@PATH,5,-724.927,-20.31805,430.1306,0,0,0,0,100,0), -- 10:58:13
+(@PATH,6,-725.4897,-15.76975,429.8806,6.178465,3000,0,0,100,0), -- 10:58:16
+(@PATH,7,-724.358,-22.59787,429.8806,0,0,0,0,100,0), -- 10:58:19
+(@PATH,8,-724.1555,-22.44646,430.1306,0,0,0,0,100,0), -- 10:58:20
+(@PATH,9,-719.5723,-23.93241,430.1306,0,0,0,0,100,0), -- 10:58:23
+(@PATH,10,-715.4219,-21.92954,430.1306,0,0,0,0,100,0); -- 10:58:25
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136359;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-821.8198,`position_y`=-33.27892,`position_z`=430.2184 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-821.8198,-33.27892,430.2184,0,0,0,0,100,0),
+(@PATH,2,-822.3601,-31.65381,430.2184,0,0,0,0,100,0),
+(@PATH,3,-824.5154,-34.64041,429.9684,0,0,0,0,100,0),
+(@PATH,4,-824.2672,-34.39585,430.2184,0,0,0,0,100,0),
+(@PATH,5,-821.0198,-37.88292,429.9684,0.4537856,2000,0,0,100,0);
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136357;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-754.7864,`position_y`=-36.70388,`position_z`=429.9034 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-754.7864,-36.70388,429.9034,0,0,0,0,100,0),
+(@PATH,2,-751.721,-35.1428,429.9657,0,0,0,0,100,0),
+(@PATH,3,-751.8016,-34.96943,430.1835,0,0,0,0,100,0),
+(@PATH,4,-751.6813,-31.36849,429.9659,2.617994,2000,0,0,100,0);
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136347;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-806.7797,`position_y`=-61.91017,`position_z`=430.2184 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-806.7797,-61.91017,430.2184,0,0,0,0,100,0), -- 10:58:05
+(@PATH,2,-805.1627,-65.66473,430.1716,0,0,0,0,100,0), -- 10:58:06
+(@PATH,3,-807.4543,-68.63271,429.8748,2.460914,2000,0,0,100,0), -- 10:58:09
+(@PATH,4,-810.992,-72.29839,429.8748,0,0,0,0,100,0), -- 10:58:11
+(@PATH,5,-811.0092,-71.93497,430.1248,0,0,0,0,100,0), -- 10:58:12
+(@PATH,6,-819.4515,-69.41702,429.9216,0,0,0,0,100,0), -- 10:58:16
+(@PATH,7,-821.9469,-64.33131,430.2059,0,0,0,0,100,0), -- 10:58:18
+(@PATH,8,-819.5031,-58.79203,430.2184,0,0,0,0,100,0), -- 10:58:20
+(@PATH,9,-817.4072,-59.57487,429.9684,4.729842,2000,0,0,100,0), -- 10:58:23
+(@PATH,10,-807.0515,-61.87196,429.9684,0,0,0,0,100,0); -- 10:58:25
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136356;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-785.7463,`position_y`=-41.38455,`position_z`=429.9659 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-785.7463,-41.38455,429.9659,0,0,0,0,100,0), -- 10:58:08
+(@PATH,2,-785.3948,-41.14034,430.2159,0,0,0,0,100,0), -- 10:58:09
+(@PATH,3,-782.2135,-41.35977,430.2159,0,0,0,0,100,0), -- 10:58:10
+(@PATH,4,-779.5613,-40.3548,430.2159,0,0,0,0,100,0), -- 10:58:11
+(@PATH,5,-777.8319,-36.41965,430.183,0,0,0,0,100,0), -- 10:58:14
+(@PATH,6,-778.6835,-33.0957,429.9001,3.420845,2000,0,0,100,0), -- 10:58:16
+(@PATH,7,-779.9354,-28.00385,429.9001,0,0,0,0,100,0), -- 10:58:18
+(@PATH,8,-779.8657,-28.03287,430.1501,0,0,0,0,100,0), -- 10:58:20
+(@PATH,9,-784.348,-25.80318,430.1501,0,0,0,0,100,0), -- 10:58:21
+(@PATH,10,-788.9271,-27.93935,430.183,0,0,0,0,100,0), -- 10:58:23
+(@PATH,11,-791.5985,-34.02659,430.1966,0,0,0,0,100,0), -- 10:58:26
+(@PATH,12,-790.8046,-36.75038,430.2113,0,0,0,0,100,0); -- 10:58:27
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136349;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-808.118,`position_y`=-40.2321,`position_z`=429.9684 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-808.118,-40.2321,429.9684,0,0,0,0,100,0),
+(@PATH,2,-807.7555,-40.07573,430.2184,0,0,0,0,100,0),
+(@PATH,3,-804.9432,-39.92784,430.2184,0,0,0,0,100,0),
+(@PATH,4,-807.1721,-39.73579,430.2184,0,0,0,0,100,0),
+(@PATH,5,-808.9033,-36.34509,430.2184,0,0,0,0,100,0);
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136350;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-712.0216,`position_y`=-106.3855,`position_z`=430.3862 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-712.0216,-106.3855,430.3862,0,0,0,0,100,0), -- 10:58:08
+(@PATH,2,-712.1302,-106.2594,430.5872,0,0,0,0,100,0), -- 10:58:09
+(@PATH,3,-712.4497,-100.7512,430.033,0,0,0,0,100,0), -- 10:58:11
+(@PATH,4,-714.1099,-98.13288,430.1651,0,0,0,0,100,0), -- 10:58:12
+(@PATH,5,-717.9264,-97.92854,430.2126,0,0,0,0,100,0), -- 10:58:14
+(@PATH,6,-720.3586,-98.40739,430.1744,0,0,0,0,100,0), -- 10:58:18
+(@PATH,7,-722.0936,-101.579,430.1653,0,0,0,0,100,0), -- 10:58:20
+(@PATH,8,-722.2216,-104.0047,430.1362,0,0,0,0,100,0), -- 10:58:21
+(@PATH,9,-721.8704,-107.3522,429.9794,0,0,0,0,100,0), -- 10:58:22
+(@PATH,10,-719.009,-109.2184,430.31,0,0,0,0,100,0), -- 10:58:23
+(@PATH,11,-717.5231,-108.9742,430.4017,0,0,0,0,100,0); -- 10:58:25
+
+-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT'
+SET @NPC := 136360;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-805.7245,`position_y`=-92.51467,`position_z`=429.9373 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-805.7245,-92.51467,429.9373,0,0,0,0,100,0),
+(@PATH,2,-809.9697,-93.78546,430.1968,0,0,0,0,100,0),
+(@PATH,3,-813.4847,-92.64854,429.9998,1.518436,3000,0,0,100,0),
+(@PATH,4,-821.6218,-88.66959,429.8748,0,0,0,0,100,0),
+(@PATH,5,-821.3884,-88.30928,430.1454,0,0,0,0,100,0),
+(@PATH,6,-820.6511,-83.99181,430.1248,0,0,0,0,100,0),
+(@PATH,7,-819.0802,-80.95631,430.1201,0,0,0,0,100,0),
+(@PATH,8,-815.6989,-79.63522,429.9362,0,0,0,0,100,0),
+(@PATH,9,-812.4637,-81.22309,429.9998,4.45059,2000,0,0,100,0),
+(@PATH,10,-805.8566,-83.38759,429.9998,0,0,0,0,100,0),
+(@PATH,11,-805.8384,-83.39809,430.1873,0,0,0,0,100,0),
+(@PATH,12,-804.1865,-87.55893,430.1577,0,0,0,0,100,0);
+
+-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT'
+SET @NPC := 136369;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-741.3947,`position_y`=-207.9769,`position_z`=431.7578 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-741.3947,-207.9769,431.7578,0,0,0,0,100,0),
+(@PATH,2,-742.5634,-205.1704,431.0431,0,0,0,0,100,0),
+(@PATH,3,-746.6194,-203.6891,430.4383,0,0,0,0,100,0),
+(@PATH,4,-751.6924,-207.3801,430.4216,0,0,0,0,100,0),
+(@PATH,5,-752.3352,-214.3417,431.4221,0,0,0,0,100,0),
+(@PATH,6,-751.818,-216.1215,431.7806,0,0,0,0,100,0),
+(@PATH,7,-752.1444,-209.4591,430.6995,0,0,0,0,100,0),
+(@PATH,8,-752.5813,-208.6543,430.434,0,0,0,0,100,0),
+(@PATH,9,-749.45,-205.2882,430.5325,0,0,0,0,100,0),
+(@PATH,10,-742.3865,-205.8632,431.1866,0,0,0,0,100,0),
+(@PATH,11,-740.8467,-209.625,432.1345,0,0,0,0,100,0),
+(@PATH,12,-740.2542,-212.8133,432.6738,3.438299,3000,0,0,100,0);
+
+-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT'
+SET @NPC := 136366;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-712.1467,`position_y`=-168.2411,`position_z`=432.9551 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-712.1467,-168.2411,432.9551,0,0,0,0,100,0),
+(@PATH,2,-711.2845,-169.7373,433.5219,0,0,0,0,100,0),
+(@PATH,3,-718.3967,-173.3105,431.6536,0,0,0,0,100,0),
+(@PATH,4,-722.842,-172.8361,430.3402,0,0,0,0,100,0),
+(@PATH,5,-723.5557,-172.3758,430.0638,0,0,0,0,100,0),
+(@PATH,6,-724.2864,-166.9745,429.9667,0.7853982,3000,0,0,100,0),
+(@PATH,7,-727.4843,-162.5646,429.9667,0,0,0,0,100,0),
+(@PATH,8,-727.1448,-162.4384,430.2167,0,0,0,0,100,0),
+(@PATH,9,-725.0723,-159.2923,430.2167,0,0,0,0,100,0),
+(@PATH,10,-719.7878,-157.1184,430.2519,0,0,0,0,100,0),
+(@PATH,11,-715.3311,-160.4503,430.7693,0,0,0,0,100,0),
+(@PATH,12,-713.6705,-163.3997,431.3184,0,0,0,0,100,0);
+
+-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT'
+SET @NPC := 136361;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-715.4345,`position_y`=-120.4184,`position_z`=430.8215 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-715.4345,-120.4184,430.8215,0,0,0,0,100,0),
+(@PATH,2,-715.2732,-119.9876,430.8068,0,0,0,0,100,0),
+(@PATH,3,-713.6184,-118.4633,430.9174,0,0,0,0,100,0),
+(@PATH,4,-714.1099,-115.8266,430.8853,0,0,0,0,100,0),
+(@PATH,5,-718.0544,-115.391,430.4921,0,0,0,0,100,0),
+(@PATH,6,-720.8175,-116.2792,430.0629,0,0,0,0,100,0),
+(@PATH,7,-721.2681,-119.6442,430.1362,0,0,0,0,100,0),
+(@PATH,8,-721.4601,-123.3716,430.1362,0,0,0,0,100,0),
+(@PATH,9,-721.3339,-127.6245,429.9487,0,0,0,0,100,0),
+(@PATH,10,-718.5485,-128.1067,430.2194,0,0,0,0,100,0);
+
+-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT'
+SET @NPC := 136365;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-798.1786,`position_y`=-248.1221,`position_z`=432.4507 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-798.1786,-248.1221,432.4507,0,0,0,0,100,0),
+(@PATH,2,-798.7401,-245.9213,431.4652,0,0,0,0,100,0),
+(@PATH,3,-799.3177,-242.9683,430.5485,0,0,0,0,100,0),
+(@PATH,4,-797.5398,-247.3222,432.0694,0,0,0,0,100,0),
+(@PATH,5,-796.4919,-249.3278,432.7336,0,0,0,0,100,0),
+(@PATH,6,-789.5071,-248.2485,433.1029,0,0,0,0,100,0),
+(@PATH,7,-786.5637,-240.1779,432.2992,0,0,0,0,100,0),
+(@PATH,8,-789.908,-234.2144,431.4653,0,0,0,0,100,0),
+(@PATH,9,-791.3019,-233.3431,430.7617,4.206244,2000,0,0,100,0),
+(@PATH,10,-787.354,-241.1295,432.3823,0,0,0,0,100,0),
+(@PATH,11,-786.8214,-247.0664,433.4664,0,0,0,0,100,0),
+(@PATH,12,-787.0446,-247.7635,433.499,0,0,0,0,100,0);
+
+-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT'
+SET @NPC := 136367;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-767.8429,`position_y`=-217.267,`position_z`=429.9667 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-767.8429,-217.267,429.9667,0,0,0,0,100,0),
+(@PATH,2,-767.6378,-217.1616,430.0292,0,0,0,0,100,0),
+(@PATH,3,-761.6285,-219.4796,430.4327,0,0,0,0,100,0),
+(@PATH,4,-760.9791,-222.4792,430.8569,3.281219,2000,0,0,100,0),
+(@PATH,5,-761.7565,-231.0529,432.8887,0,0,0,0,100,0),
+(@PATH,6,-761.9493,-231.9112,433.0276,0,0,0,0,100,0),
+(@PATH,7,-770.1174,-232.0044,432.3535,0,0,0,0,100,0),
+(@PATH,8,-772.8343,-227.3204,431.1874,0,0,0,0,100,0),
+(@PATH,9,-772.8062,-223.4772,430.3036,0,0,0,0,100,0),
+(@PATH,10,-772.7734,-222.031,429.9667,0,0,0,0,100,0);
+
+-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT'
+SET @NPC := 136368;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-731.2537,`position_y`=-177.8654,`position_z`=430.2253 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-731.2537,-177.8654,430.2253,0,0,0,0,100,0),
+(@PATH,2,-727.3505,-179.0715,430.0485,4.39823,3000,0,0,100,0),
+(@PATH,3,-734.2864,-179.9329,429.8522,0,0,0,0,100,0),
+(@PATH,4,-734.1282,-180.0425,429.9078,0,0,0,0,100,0),
+(@PATH,5,-735.3954,-183.6396,429.8522,5.8294,2000,0,0,100,0),
+(@PATH,6,-731.4017,-177.9422,429.9667,0,0,0,0,100,0);
+
+-- Pathing for Weslex Quickwrench Entry: 33629 'TDB FORMAT'
+SET @NPC := 136370;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-744.1992,`position_y`=-41.8189,`position_z`=429.9657 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,14374,0,257,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-744.1992,-41.8189,429.9657,1.919862,3000,0,0,100,0),
+(@PATH,2,-722.2444,-31.58008,429.8806,0,0,0,0,100,0),
+(@PATH,3,-722.0319,-31.24901,430.1359,0,0,0,0,100,0),
+(@PATH,4,-715.6211,-29.15961,429.8806,1.884956,2000,0,0,100,0),
+(@PATH,5,-743.2397,-42.08398,429.9657,0,0,0,0,100,0);
+
+-- Earthen Stoneshaper ,Goran Steelbreaker, Ulduar Shield Bunny should not have movement
+UPDATE `creature` SET `modelid`=0,`spawndist`=0,`MovementType`=0, `curhealth`=1 WHERE `id` IN (33620,33622,33779);
diff --git a/sql/updates/world/2015_03_23_00_world.sql b/sql/updates/world/2015_03_23_00_world.sql
new file mode 100644
index 00000000000..32f90e439d6
--- /dev/null
+++ b/sql/updates/world/2015_03_23_00_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (23214, 13819);
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `comment`) VALUES
+(23214, 31726, 'Summon Charger'),
+(13819, 31726, 'Summon Warhorse');
diff --git a/sql/updates/world/2015_03_23_01_world.sql b/sql/updates/world/2015_03_23_01_world.sql
new file mode 100644
index 00000000000..d6f8d4591ff
--- /dev/null
+++ b/sql/updates/world/2015_03_23_01_world.sql
@@ -0,0 +1,5 @@
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (28273, -28273);
+INSERT INTO `spell_linked_spell` VALUES
+(28273, -28274, 0, 'Bloodthistle'),
+(-28273, 28274, 0, 'Bloodthistle');
diff --git a/sql/updates/world/2015_03_23_02_world.sql b/sql/updates/world/2015_03_23_02_world.sql
new file mode 100644
index 00000000000..3bc255d569e
--- /dev/null
+++ b/sql/updates/world/2015_03_23_02_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `action_type`=18, `action_param1`=512, `comment`='Hyldsmeet Warbear - Out of Combat - Set Unit_flag immune to npc (No Repeat)' WHERE `entryorguid`=30174 AND `id`=0;
diff --git a/sql/updates/world/2015_03_23_03_world.sql b/sql/updates/world/2015_03_23_03_world.sql
new file mode 100644
index 00000000000..bb0a1609876
--- /dev/null
+++ b/sql/updates/world/2015_03_23_03_world.sql
@@ -0,0 +1,12 @@
+--
+SET @Disco :=190351;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (@Disco);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Disco 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
+(@Disco, 1, 0, 0, 64, 0, 100, 0, 0, 0, 0, 0, 85, 50493 , 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Disco - On gossip hello - cast Listening to Music');
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (-50314, -50493, 50493);
+INSERT INTO `spell_linked_spell` VALUES
+(-50314, -50493, 0, 'Disco Ball'),
+(-50493, -50314, 0, 'Disco Ball(Listening to Music)'),
+(50493, 50314, 0, 'Disco Ball(Listening to Music)');
diff --git a/sql/updates/world/2015_03_23_04_world.sql b/sql/updates/world/2015_03_23_04_world.sql
new file mode 100644
index 00000000000..1425f517d0a
--- /dev/null
+++ b/sql/updates/world/2015_03_23_04_world.sql
@@ -0,0 +1,15 @@
+--
+SET @Bird1 :=22337;
+SET @Bird2 :=22339;
+SET @Egg :=185211;
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Bird2);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (@Egg);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Egg*100 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Egg*100+1 AND `source_type`=9;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Egg 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
+(@Egg, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 87, @Egg*100, @Egg*100+1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cursed egg - On State 2 - Action random action list'),
+(@Egg*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Bird2, 3, 15000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cursed egg - Action list - Summon'),
+(@Egg*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Bird1, 3, 40000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cursed egg - Action list - Summon');
diff --git a/sql/updates/world/2015_03_23_05_world.sql b/sql/updates/world/2015_03_23_05_world.sql
new file mode 100644
index 00000000000..e574ff22bea
--- /dev/null
+++ b/sql/updates/world/2015_03_23_05_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature` SET `unit_flags`=4104 WHERE `id`=12423;
diff --git a/sql/updates/world/2015_03_23_06_world.sql b/sql/updates/world/2015_03_23_06_world.sql
new file mode 100644
index 00000000000..e8820a341e2
--- /dev/null
+++ b/sql/updates/world/2015_03_23_06_world.sql
@@ -0,0 +1,22 @@
+--
+SET @CGUID := 45834; -- 1 free guid set by TC
+SET @Triggger:=21321;
+DELETE FROM `creature` WHERE `guid`=@CGUID;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID, 21321, 530, 1, 1, 1316.625854, 6689.878418, -18.672377, 0.160565, 0, 0, 0);
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (36587);
+INSERT INTO `spell_linked_spell` VALUES
+(36587, 36573, 0, 'Vision Guide');
+
+UPDATE `creature_template` SET `AIName`='SmartAI', `flags_extra`= 2 WHERE `entry` IN (@Triggger);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@Triggger 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
+(@Triggger,0,0,1,10,0,100,0,1,10,5000,5000,15,10525,0,0,0,0,0,7,0,0,0,0,0,0,0,'Triggger - LOS - AREAEXPLOREDOREVENTHAPPENS'),
+(@Triggger,0,1,0,61,0,100,0,0,0,0,0,28,36573,0,0,0,0,0,7,0,0,0,0,0,0,0,'Triggger - LOS - remove aura'),
+(@Triggger,0,2,0,63,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Triggger - Just created - Set invisible');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Triggger;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,1,@Triggger,0,1,36573,1,0,0,'','event require Aura 36573');
diff --git a/sql/updates/world/2015_03_23_07_world.sql b/sql/updates/world/2015_03_23_07_world.sql
new file mode 100644
index 00000000000..ca9bffaf728
--- /dev/null
+++ b/sql/updates/world/2015_03_23_07_world.sql
@@ -0,0 +1,43 @@
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE entry IN (21332,21334,20427);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21318) AND `source_type`=0 AND `id`>0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21332,21334,20427) 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
+(21318, 0, 1, 2, 62, 0, 100, 0, 8288, 0, 0, 0, 85, 36620, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit of Ar''tor - On Gossip Option 0 Selected - Invoker Cast Spirit of Ar''tor'),
+(21318, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit of Ar''tor - On Gossip Option 0 Selected - Close Gossip'),
+(21318, 0, 3, 0, 19, 0, 100, 0, 10540, 0, 0, 0, 85, 36620, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit of Ar''tor - On Quest Accept (10540) - Invoker Cast Spirit of Ar''tor'),
+(21332, 0, 0, 0, 38, 0, 100, 1, 3, 3, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21334, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Data Set 3 3 - Set Data 1 1 to Veneratus Spawn Node'),
+(21332, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 20427, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Data Set - Start Attack'),
+(21332, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 1, 0, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Data Set - Say Line 0'),
+(21332, 0, 3, 0, 52, 0, 100, 0, 0, 21332, 0, 0, 1, 1, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Text Over Line 0 - Say Line 1'),
+(21332, 0, 4, 0, 52, 0, 100, 0, 1, 21332, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Text Over Line 1 - Despawn'),
+(21332, 0, 5, 0, 54, 0, 100, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Just Summoned - Turn HP Regen off'),
+(21334, 0, 0, 0, 1, 0, 100, 0, 0, 0, 2000, 2000, 45, 3, 3, 0, 0, 0, 0, 19, 21332, 40, 0, 0, 0, 0, 0, 'Veneratus Spawn Node - OOC - Set Data to Spirit Hunter'),
+(21334, 0, 1, 0, 38, 0, 100, 0, 1, 1, 60000, 60000, 11, 36616, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veneratus Spawn Node - On Data Set 1 1 - Cast Veneratus Spawn'),
+(20427, 0, 0, 1, 1, 0, 100, 1, 100, 100, 0, 0, 11, 24240, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Spawn - Cast Spawn - Red Lightning'),
+(20427, 0, 1, 2, 61, 0, 100, 1, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Spawn - Set Hostile'),
+(20427, 0, 2, 0, 61, 0, 100, 1, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21334, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Spawn - Despawn - Veneratus Spawn Node'),
+(20427, 0, 3, 0, 6, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 21332, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Death - Set Data on Spirit Hunter'),
+(20427, 0, 4, 0, 1, 0, 100, 1, 5000, 5000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21332, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - OOC - Set Data on Spirit Hunter (No repeat)');
+
+DELETE FROM `creature_text` WHERE `entry`=21332;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(21332, 0, 0, 'It is dying! The second part of the Cipher of Damnation is ours. I...', 12, 0, 100, 1, 0, 0, 19040, 'Spirit Hunter to Veneratus the Many'),
+(21332, 1, 0, 'I am fading... Return to Ar''tor... Ret... rn... to...', 12, 0, 100, 1, 0, 0, 19041, 'Spirit Hunter to Veneratus the Many');
+
+UPDATE `spell_dbc` SET `Effect2`=28,`EffectMiscValueB2`=64 WHERE `Id`=36616;
+
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=8288;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(8288, 0, 0, 'I require the aid of another spirit hunter, Ar''tor.', 19017, 1, 1, 0, 0, 0, 0, NULL, 0);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8288;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 8288, 0, 0, 0, 9, 0, 10540, 0, 0, 0, 0, 0, '', 'Gossip Option requires quest 10540 taken'),
+(15, 8288, 0, 0, 0, 1, 0, 36620, 2, 0, 1, 0, 0, '', 'Gossip Option requires player does not have aura 36620'),
+(15, 8288, 0, 0, 0, 29, 1, 21332, 40, 0, 1, 0, 0, '', 'Gossip Option requires no npc 21332 present');
+
+DELETE FROM `creature_template_addon` WHERE `entry`=21332;
+INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
+(21332, 0, 0, 0, 0, 0, '36613');
diff --git a/sql/updates/world/2015_03_23_08_world.sql b/sql/updates/world/2015_03_23_08_world.sql
new file mode 100644
index 00000000000..7eec8650632
--- /dev/null
+++ b/sql/updates/world/2015_03_23_08_world.sql
@@ -0,0 +1,37 @@
+DELETE FROM `creature_text` WHERE `entry`=21411;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(21411, 0, 0, '%s cracks the rotten egg open and - to the horror and dismay of all around him - begins to drink from its putrid core.', 16, 0, 100, 92, 0, 0, 19098, 'Tobias the Filth Gorger to Player'),
+(21411, 1, 0, 'That was life-changing... Excuse me for one minute.', 12, 0, 100, 273, 0, 0, 19099, 'Tobias the Filth Gorger to Player'),
+(21411, 2, 0, '%s lets loose the most foul belch ever heard or smelled.', 16, 0, 100, 15, 0, 10593, 19100, 'Tobias the Filth Gorger to Player'),
+(21411, 3, 0, 'Ok then, back to business.', 12, 0, 100, 1, 0, 0, 19101, 'Tobias the Filth Gorger to Player');
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` =21411;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` =21411 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` =2141100 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
+(21411, 0, 0, 1, 19, 0, 100, 0, 10550, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - On Quest 10550 taken - Store Targetlist'),
+(21411, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2141100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - On Quest 10550 taken - Run script'),
+(21411, 0, 2, 0, 34, 0, 100, 0, 0, 1, 0, 0, 54, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - On Reached WP1 - Pause WP'),
+(21411, 0, 3, 0, 34, 0, 100, 0, 0, 2, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0.3141593, 'Tobias the Filth Gorger - On Reached WP2 - Set Orientation'),
+(2141100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Set NPC Flags'),
+(2141100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 20468, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Equip Item'),
+(2141100, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 0'),
+(2141100, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Play Emote OneShotEatNoSheathe'),
+(2141100, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Set Orientation'),
+(2141100, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - UnEquip Item'),
+(2141100, 9, 6, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 1'),
+(2141100, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 53, 0, 21411, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Start WP'),
+(2141100, 9, 8, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 2'),
+(2141100, 9, 9, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 11, 36823, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Cast Overwhelming Odor'),
+(2141100, 9, 10, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 5.544791, 'Tobias the Filth Gorger - Script - Set Orientation'),
+(2141100, 9, 11, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 11, 36824, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Cast Overwhelming Odor'),
+(2141100, 9, 12, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 2'),
+(2141100, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Set NPC Flags');
+
+DELETE FROM `waypoints` WHERE `entry` =21411;
+
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(21411, 1,-2080.307, 5296.746, -37.32356, 'Tobias the Filth Gorger'),
+(21411, 2,-2083.831, 5299.953, -37.32356, 'Tobias the Filth Gorger');
diff --git a/sql/updates/world/2015_03_23_09_world.sql b/sql/updates/world/2015_03_23_09_world.sql
new file mode 100644
index 00000000000..d90f7fc9249
--- /dev/null
+++ b/sql/updates/world/2015_03_23_09_world.sql
@@ -0,0 +1,14 @@
+DELETE FROM `creature_text` WHERE `entry`=18417;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(18417, 0, 0, 'The information you seek... I cannot give you that freely. You will have to prove that your enemies are the same as mine.', 12, 0, 100, 25, 0, 0, 19890, 'Altruis the Sufferer to Player'),
+(18417, 1, 0, 'This book would give me unlimited power over my enemies... I would become... unstoppable!', 12, 0, 100, 1, 0, 0, 19614, 'Altruis the Sufferer to Player'),
+(18417, 2, 0, 'No... you must take this from me, $n! I feel its dark power swaying my will already! Use it to destroy Varedis.', 12, 0, 100, 274, 0, 0, 19615, 'Altruis the Sufferer to Player');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` =18417 AND `source_type`=0 AND `id`>2;
+
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `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
+(18417, 0, 3, 0, 20, 0, 100, 0, 10640, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Quest reward 10640 - Say Line 0'),
+(18417, 0, 4, 0, 20, 0, 100, 0, 10689, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Quest reward 10689 - Say Line 0'),
+(18417, 0, 5, 0, 20, 0, 100, 0, 10649, 0, 0, 0, 1, 1, 4000, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Quest reward 10649 - Say Line 1'),
+(18417, 0, 6, 0, 52, 0, 100, 0, 1, 18417, 0, 0, 1, 2, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Text Over Line 1 - Say Line 2');
+
diff --git a/sql/updates/world/2015_03_23_10_world.sql b/sql/updates/world/2015_03_23_10_world.sql
new file mode 100644
index 00000000000..d83e5c212a0
--- /dev/null
+++ b/sql/updates/world/2015_03_23_10_world.sql
@@ -0,0 +1,11 @@
+--
+UPDATE `smart_scripts` SET `entryorguid`= -69714 WHERE `entryorguid`= -69712;
+UPDATE `smart_scripts` SET `entryorguid`= -69715 WHERE `entryorguid`= -69711;
+UPDATE `smart_scripts` SET `entryorguid`= -69716 WHERE `entryorguid`= -69710;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-69712, -69711, -69710);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (69713);
+INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES
+(69713,0,4097,0,"37497");
+
+UPDATE `creature_template_addon` SET `auras`= "37467" WHERE `entry`=21292;
diff --git a/sql/updates/world/2015_03_23_11_world.sql b/sql/updates/world/2015_03_23_11_world.sql
new file mode 100644
index 00000000000..2d3b346d18e
--- /dev/null
+++ b/sql/updates/world/2015_03_23_11_world.sql
@@ -0,0 +1,83 @@
+UPDATE `creature_template` SET `gossip_menu_id`=8372 WHERE `entry`=21700;
+UPDATE `creature_template` SET `unit_flags`=768 WHERE `entry`=21768;
+UPDATE `creature_template` SET `unit_flags`=33536 WHERE `entry`=21776;
+
+DELETE FROM `gossip_menu` WHERE `entry`=8372;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(8372, 10447); -- 21700
+
+DELETE FROM `creature_text` WHERE `entry`IN(21700,21768,21699);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(21700, 0, 0, 'Have no fear, $r. Just play along.', 15, 0, 100, 0, 0, 0, 19402, 'Akama to Player'),
+(21700, 1, 0, 'A mere nuisance, I assure you! Tell the Master his prisoner will not escape while Akama and his Deathsworn watch over her.', 14, 0, 100, 0, 0, 0, 19403, 'Akama to Player'),
+(21700, 2, 0, 'Forgive my harsh methods, but the Betrayer cannot learn of the truth. My secret must be kept at all costs!', 12, 0, 100, 0, 0, 0, 19405, 'Akama to Player'),
+(21700, 3, 0, 'In due time, Maiev. I''ve spent years preparing to make my move - I can''t afford to put my plans in peril by tipping my hand too soon.', 12, 0, 100, 0, 0, 0, 19408, 'Akama to Player'),
+(21700, 4, 0, 'The Heart of Fury... I witnessed its power long ago, when Velen wielded it. I feel the same power coursing through it right now!', 12, 0, 100, 0, 0, 0, 19858, 'Akama to Player'),
+(21700, 5, 0, 'With this crystal''s powers, my Deathsworn and I... we''d be unstoppable! We could destroy Illidan! We could... replace him as lords of Outland!', 12, 0, 100, 0, 0, 0, 19859, 'Akama to Player'),
+(21700, 6, 0, 'But that is not part of the vision I was granted... that is not... how my people will be freed.', 12, 0, 100, 0, 0, 0, 19860, 'Akama to Player'),
+(21700, 7, 0, 'Please, $n. You must take the Heart of Fury somewhere safe... you must take it to A''dal!', 12, 0, 100, 0, 0, 0, 19870, 'Akama to Player'),
+(21699, 0, 0, 'Release me immediately or face my wrath!', 12, 0, 100, 15, 0, 0, 19395, 'Maiev Shadowsong'),
+(21699, 1, 0, 'If we truly desire the same thing, Akama, then release me! If Illidan is to die, it shall be by my hand!', 12, 0, 100, 22, 0, 0, 0, 'Maiev Shadowsong to Player'),
+(21699, 2, 0, 'Curse you, Akama! I am not a pawn in your game... my will is my own. When I unleash my wrath upon Illidan it will have nothing to do with your foolish scheme!', 12, 0, 100, 0, 0, 0, 19409, 'Maiev Shadowsong to Player'),
+(21768, 0, 0, 'Mortals, here? What is the meaning of this, pathetic Broken!', 14, 0, 100, 0, 0, 0, 19401, 'Vagath to Player'),
+(21768, 1, 0, 'You''d do well not to toy with me, Akama. Illidan has given me specific orders to keep a close watch on the Warden. If I find out you''re hiding anything from me, I will crush you with my own hands!', 12, 0, 100, 0, 0, 0, 19404, 'Vagath to Player');
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(21700,21768,21776,21669);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21700,21768,21776,21669) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` in(2170000,2170001) 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
+(21768, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 53, 0, 21768, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On Just Summoned - Start WP'),
+(21768, 0, 1, 0, 40, 0, 100, 0, 2, 21768, 0, 0, 54, 15000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On Reached WP2 - Pause WP'),
+(21768, 0, 2, 3, 40, 0, 100, 0, 4, 21768, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 21776, 0, 100, 0, 0, 0, 0, 'Vagath - On Reached WP4 - Despawn Illidari Temptress'),
+(21768, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On Reached WP4 - Despawn'),
+(21776, 0, 0, 0, 1, 0, 100, 0, 0, 0, 1000, 1000, 29, 0, 0, 0, 0, 0, 0, 19, 21768, 0, 0, 0, 0, 0, 0, 'Illidari Temptress - On Just Summoned - Follow Vagath'),
+(21669, 0, 0, 0, 1, 0, 100, 0, 0, 300000, 300000, 900000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev Shadowsong - OOC - Say Line 0'),
+(21700, 0, 0, 1, 20, 0, 100, 0, 10628, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10628 rewarded - Store Targetlist'),
+(21700, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2170000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10628 rewarded - Run Script'),
+(21700, 0, 2, 3, 20, 0, 100, 0, 10707, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10707 rewarded - Store Targetlist'),
+(21700, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2170001, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10707 rewarded - Run Script'),
+(2170000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script - Set NPC Flags'),
+(2170000, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script - Summon Group'),
+(2170000, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21768, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 0 on Vagath'), -- 15:52:01.922
+(2170000, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2.530727, 'Akama - Script - Set Orientation'), -- 15:52:02.032
+(2170000, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 0'), -- 15:52:07.141
+(2170000, 9, 5, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 11, 37448, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Cast Chain Lightning'), -- 15:52:13.110
+(2170000, 9, 6, 0, 0, 0, 100, 0, 50, 50, 0, 0, 85, 37493, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - InVoker Cast Feign Death'), -- 15:52:13.125
+(2170000, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 1'), -- 15:52:13.188
+(2170000, 9, 8, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21768, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 1 on Vagath'), -- 15:52:21.219
+(2170000, 9, 9, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 2'), -- 15:52:38.500
+(2170000, 9, 10, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 37449, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Cast Resurrect'), -- 15:52:40.813
+(2170000, 9, 11, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 28, 37493, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Remove Aura Feign Death'), -- 15:52:43.828
+(2170000, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 1, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Set Unit Flags 2 on Player'), -- 15:52:13.125
+(2170000, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script - Set Npc Flags'),
+(2170000, 9, 14, 0, 0, 0, 100, 0, 17000, 17000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21699, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 1 on Maiev Shadowsong '), -- 15:52:53.000
+(2170000, 9, 15, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 3'), -- 15:52:59.016
+(2170000, 9, 16, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 21699, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 2 on Maiev Shadowsong '), -- 15:53:05.063
+(2170001, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Set NPC Flags'),
+(2170001, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Set Orientation'),
+(2170001, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 4'), -- 15:23:44.859
+(2170001, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 5'), -- 15:23:50.906
+(2170001, 9, 4, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 6'), -- 15:23:59.359
+(2170001, 9, 5, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Set NPC Flags'), -- 15:24:05.265
+(2170001, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 6'); -- 15:24:05.422
+
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=21700;
+
+INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
+(21700, 0, 0, 21768, -3726.069,1040.505, 56.03978, 4.852015, 1, 60000),
+(21700, 0, 0, 21776, -3730.32, 1041.369, 56.03996, 4.72222, 1, 60000),
+(21700, 0, 0, 21776, -3722.402, 1041.253, 56.0398, 4.72222, 1, 60000);
+
+DELETE FROM `waypoints` WHERE `entry` =21768;
+
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(21768, 1,-3724.426, 1030.954, 55.95728, 'Vagath'),
+(21768, 2,-3721.095, 1030.279, 55.95773, 'Vagath'),
+(21768, 3,-3725.885, 1035.806, 55.95677, 'Vagath'),
+(21768, 4,-3726.25, 1040.238, 55.95593, 'Vagath');
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=37493;
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+(37493, 31261, 2, 'Feign Death');
diff --git a/sql/updates/world/2015_03_23_12_world.sql b/sql/updates/world/2015_03_23_12_world.sql
new file mode 100644
index 00000000000..2471e9bdcf1
--- /dev/null
+++ b/sql/updates/world/2015_03_23_12_world.sql
@@ -0,0 +1,20 @@
+--
+UPDATE `smart_scripts` SET `action_param2`=6, `action_param3`=60000 WHERE `entryorguid`=23310 AND `source_type`=0 AND `id`=2 AND `link`=3;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=23310;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(22, 3, 23310, 0, 0, 29, 1, 25003, 200, 0, 1, 0, 0, '', 'Only run SAI if no Emissary of Hate nearby');
+
+-- Irespeaker SAI
+SET @ENTRY := 24999;
+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,0,0,100,0,1500,3000,10000,15000,11,35913,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Fel Fireball'"),
+(@ENTRY,0,1,0,0,0,100,0,13000,16000,20000,35000,11,18267,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Curse of Weakness'"),
+(@ENTRY,0,2,0,6,0,100,0,5000,5000,10000,10000,45,1,1,0,0,0,0,10,79450,23310,0,0,0,0,0,"Irespeaker - On Just Died - Set Data 1 1"),
+(@ENTRY,0,3,0,25,0,100,0,0,0,0,0,11,45023,0,0,0,0,0,19,25953,13,0,0,0,0,0,"Irespeaker - On Reset - Cast 'Fel Consumption'");
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `id`=0 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `id`=1 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `id`=2 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=3 AND `link`=0;
diff --git a/sql/updates/world/2015_03_23_13_world.sql b/sql/updates/world/2015_03_23_13_world.sql
new file mode 100644
index 00000000000..7e42213583f
--- /dev/null
+++ b/sql/updates/world/2015_03_23_13_world.sql
@@ -0,0 +1,93 @@
+-- Add conditions to prevent Anti-Air Rocket friendly fire
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62363;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,62363,0,1,31,0,3,33236,0,0,0,'','Anti-Air Rocket can hit Steelforged Defender'),
+(13,2,62363,0,1,31,0,3,33236,0,0,0,'','Anti-Air Rocket can hit Steelforged Defender'),
+(13,1,62363,0,2,31,0,3,34234,0,0,0,'','Anti-Air Rocket can hit Runeforged Sentry'),
+(13,2,62363,0,2,31,0,3,34234,0,0,0,'','Anti-Air Rocket can hit Runeforged Sentry'),
+(13,1,62363,0,3,31,0,3,33237,0,0,0,'','Anti-Air Rocket can hit Ulduar Colossus'),
+(13,2,62363,0,3,31,0,3,33237,0,0,0,'','Anti-Air Rocket can hit Ulduar Colossus'),
+(13,1,62363,0,4,31,0,3,34164,0,0,0,'','Anti-Air Rocket can hit Mechagnome Battletank'),
+(13,2,62363,0,4,31,0,3,34164,0,0,0,'','Anti-Air Rocket can hit Mechagnome Battletank'),
+(13,1,62363,0,5,31,0,3,33264,0,0,0,'','Anti-Air Rocket can hit Ironwork Canon'),
+(13,2,62363,0,5,31,0,3,33264,0,0,0,'','Anti-Air Rocket can hit Ironwork Canon'),
+(13,1,62363,0,6,31,0,3,33214,0,0,0,'','Anti-Air Rocket can hit Mechanolift 304-A'),
+(13,2,62363,0,6,31,0,3,33214,0,0,0,'','Anti-Air Rocket can hit Mechanolift 304-A'),
+(13,1,62363,0,7,31,0,3,33113,0,0,0,'','Anti-Air Rocket can hit Flame Leviathan'),
+(13,2,62363,0,7,31,0,3,33113,0,0,0,'','Anti-Air Rocket can hit Flame Leviathan'),
+(13,1,62363,0,8,31,0,3,34161,0,0,0,'','Anti-Air Rocket can hit Mechanostriker 54-A'),
+(13,2,62363,0,8,31,0,3,34161,0,0,0,'','Anti-Air Rocket can hit Mechanostriker 54-A'),
+(13,1,62363,0,9,31,0,3,34275,0,0,0,'','Anti-Air Rocket can hit Ward of Life'),
+(13,2,62363,0,9,31,0,3,34275,0,0,0,'','Anti-Air Rocket can hit Ward of Life'),
+(13,1,62363,0,10,31,0,3,33387,0,0,0,'','Anti-Air Rocket can hit Writhing Lasher'),
+(13,2,62363,0,10,31,0,3,33387,0,0,0,'','Anti-Air Rocket can hit Writhing Lasher');
+-- Add conditions to prevent Hurl Boulder friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62307;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,62307,0,1,31,0,3,33236,0,0,0,'','Hurl Boulder can hit Steelforged Defender'),
+(13,1,62307,0,2,31,0,3,34234,0,0,0,'','Hurl Boulder can hit Runeforged Sentry'),
+(13,1,62307,0,3,31,0,3,33237,0,0,0,'','Hurl Boulder can hit Ulduar Colossus'),
+(13,1,62307,0,4,31,0,3,34164,0,0,0,'','Hurl Boulder can hit Mechagnome Battletank'),
+(13,1,62307,0,5,31,0,3,33264,0,0,0,'','Hurl Boulder can hit Ironwork Canon'),
+(13,1,62307,0,6,31,0,3,33214,0,0,0,'','Hurl Boulder can hit Mechanolift 304-A'),
+(13,1,62307,0,7,31,0,3,33113,0,0,0,'','Hurl Boulder can hit Flame Leviathan'),
+(13,1,62307,0,8,31,0,3,33090,0,0,0,'','Hurl Boulder can hit Pool of Tar'),
+(13,1,62307,0,9,31,0,3,34161,0,0,0,'','Hurl Boulder can hit Mechanostriker 54-A'),
+(13,1,62307,0,10,31,0,3,34275,0,0,0,'','Hurl Boulder can hit Ward of Life'),
+(13,1,62307,0,11,31,0,3,33387,0,0,0,'','Hurl Boulder can hit Writhing Lasher');
+-- Add conditions to prevent Mortar friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62635;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,62635,0,1,31,0,3,33236,0,0,0,'','Mortar can hit Steelforged Defender'),
+(13,1,62635,0,2,31,0,3,34234,0,0,0,'','Mortar can hit Runeforged Sentry'),
+(13,1,62635,0,3,31,0,3,33237,0,0,0,'','Mortar can hit Ulduar Colossus'),
+(13,1,62635,0,4,31,0,3,34164,0,0,0,'','Mortar can hit Mechagnome Battletank'),
+(13,1,62635,0,5,31,0,3,33264,0,0,0,'','Mortar can hit Ironwork Canon'),
+(13,1,62635,0,6,31,0,3,33214,0,0,0,'','Mortar can hit Mechanolift 304-A'),
+(13,1,62635,0,7,31,0,3,33113,0,0,0,'','Mortar can hit Flame Leviathan'),
+(13,1,62635,0,8,31,0,3,33090,0,0,0,'','Mortar can hit Pool of Tar'),
+(13,1,62635,0,9,31,0,3,34161,0,0,0,'','Mortar can hit Mechanostriker 54-A'),
+(13,1,62635,0,10,31,0,3,34275,0,0,0,'','Mortar can hit Ward of Life'),
+(13,1,62635,0,11,31,0,3,33387,0,0,0,'','Mortar can hit Writhing Lasher');
+-- Add conditions to prevent Fire Cannon friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62357;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,62357,0,1,31,0,3,33236,0,0,0,'','Fire Cannon can hit Steelforged Defender'),
+(13,1,62357,0,2,31,0,3,34234,0,0,0,'','Fire Cannon can hit Runeforged Sentry'),
+(13,1,62357,0,3,31,0,3,33237,0,0,0,'','Fire Cannon can hit Ulduar Colossus'),
+(13,1,62357,0,4,31,0,3,34164,0,0,0,'','Fire Cannon can hit Mechagnome Battletank'),
+(13,1,62357,0,5,31,0,3,33264,0,0,0,'','Fire Cannon can hit Ironwork Canon'),
+(13,1,62357,0,6,31,0,3,33214,0,0,0,'','Fire Cannon can hit Mechanolift 304-A'),
+(13,1,62357,0,7,31,0,3,33113,0,0,0,'','Fire Cannon can hit Flame Leviathan'),
+(13,1,62357,0,8,31,0,3,33090,0,0,0,'','Fire Cannon can hit Pool of Tar'),
+(13,1,62357,0,9,31,0,3,34161,0,0,0,'','Fire Cannon can hit Mechanostriker 54-A'),
+(13,1,62357,0,10,31,0,3,34275,0,0,0,'','Fire Cannon can hit Ward of Life'),
+(13,1,62357,0,11,31,0,3,33387,0,0,0,'','Fire Cannon can hit Writhing Lasher');
+-- Add conditions to prevent Burning Tar friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62290;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,62290,0,1,31,0,3,33236,0,0,0,'','Burning Tar can hit Steelforged Defender'),
+(13,1,62290,0,2,31,0,3,34234,0,0,0,'','Burning Tar can hit Runeforged Sentry'),
+(13,1,62290,0,3,31,0,3,33237,0,0,0,'','Burning Tar can hit Ulduar Colossus'),
+(13,1,62290,0,4,31,0,3,34164,0,0,0,'','Burning Tar can hit Mechagnome Battletank'),
+(13,1,62290,0,5,31,0,3,33264,0,0,0,'','Burning Tar can hit Ironwork Canon'),
+(13,1,62290,0,6,31,0,3,33214,0,0,0,'','Burning Tar can hit Mechanolift 304-A'),
+(13,1,62290,0,7,31,0,3,33113,0,0,0,'','Burning Tar can hit Flame Leviathan'),
+(13,1,62290,0,8,31,0,3,33090,0,0,0,'','Burning Tar can hit Pool of Tar'),
+(13,1,62290,0,9,31,0,3,34161,0,0,0,'','Burning Tar can hit Mechanostriker 54-A'),
+(13,1,62290,0,10,31,0,3,34275,0,0,0,'','Burning Tar can hit Ward of Life'),
+(13,1,62290,0,11,31,0,3,33387,0,0,0,'','Burning Tar can hit Writhing Lasher');
+-- Add conditions to prevent Blue Pyrite friendly fire
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62489;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,62489,0,1,31,0,3,33236,0,0,0,'','Blue Pyrite can hit Steelforged Defender'),
+(13,1,62489,0,2,31,0,3,34234,0,0,0,'','Blue Pyrite can hit Runeforged Sentry'),
+(13,1,62489,0,3,31,0,3,33237,0,0,0,'','Blue Pyrite can hit Ulduar Colossus'),
+(13,1,62489,0,4,31,0,3,34164,0,0,0,'','Blue Pyrite can hit Mechagnome Battletank'),
+(13,1,62489,0,5,31,0,3,33264,0,0,0,'','Blue Pyrite can hit Ironwork Canon'),
+(13,1,62489,0,6,31,0,3,33214,0,0,0,'','Blue Pyrite can hit Mechanolift 304-A'),
+(13,1,62489,0,7,31,0,3,33113,0,0,0,'','Blue Pyrite can hit Flame Leviathan'),
+(13,1,62489,0,8,31,0,3,33090,0,0,0,'','Blue Pyrite can hit Pool of Tar'),
+(13,1,62489,0,9,31,0,3,34161,0,0,0,'','Blue Pyrite can hit Mechanostriker 54-A'),
+(13,1,62489,0,10,31,0,3,34275,0,0,0,'','Blue Pyrite can hit Ward of Life'),
+(13,1,62489,0,11,31,0,3,33387,0,0,0,'','Blue Pyrite can hit Writhing Lasher');
diff --git a/sql/updates/world/2015_03_24_00_world.sql b/sql/updates/world/2015_03_24_00_world.sql
new file mode 100644
index 00000000000..752272710b4
--- /dev/null
+++ b/sql/updates/world/2015_03_24_00_world.sql
@@ -0,0 +1,2 @@
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21685 AND `source_type`=0 AND `id`=16 AND `link`=0;
+UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=21685 AND `source_type`=0 AND `id`=15 AND `link`=16;
diff --git a/sql/updates/world/2015_03_24_01_world.sql b/sql/updates/world/2015_03_24_01_world.sql
new file mode 100644
index 00000000000..31034d87c4a
--- /dev/null
+++ b/sql/updates/world/2015_03_24_01_world.sql
@@ -0,0 +1,10 @@
+
+DELETE FROM `gameobject` WHERE `guid` IN (69717, 69718, 69719, 6220,6221,6222) AND `id`=185215;
+DELETE FROM `gameobject` WHERE `guid` IN (69717, 69718, 69719) AND `id` IN(2040,1732,1733);
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(6220, 185215, 530, 1, 1, 4697.5, 3298.68, 178.892, 2.02823, 0, 0, 0.849013, 0.528372, 120, 0, 1),
+(6221, 185215, 530, 1, 1, 4734.71, 3193.67, 161.48, 0.386745, 0, 0, 0.19217, 0.981362, 120, 0, 1),
+(6222, 185215, 530, 1, 1, 4673.28, 3126.67, 166.725, 5.42979, 0, 0, 0.413867, -0.910337, 120, 0, 1),
+(69717, 2040, 0, 1, 1, -1246, -2071, 50.241, 2.284, 0, 0, 0, 0, 900, 255, 1),
+(69718, 1732, 0, 1, 1, -1246, -2071, 50.241, 2.284, 0, 0, 0, 0, 900, 255, 1),
+(69719, 1733, 0, 1, 1, -1246, -2071, 50.241, 2.284, 0, 0, 0, 0, 900, 255, 1);
diff --git a/sql/updates/world/2015_03_24_02_world.sql b/sql/updates/world/2015_03_24_02_world.sql
new file mode 100644
index 00000000000..b9a49dcc9ba
--- /dev/null
+++ b/sql/updates/world/2015_03_24_02_world.sql
@@ -0,0 +1,6 @@
+UPDATE `creature_template` SET `AIName`='' WHERE `entry`=21669;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=21699;
+DELETE FROM `smart_scripts` WHERE `entryorguid` In(21669,21699) 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
+(21669, 0, 0, 0, 1, 0, 100, 0, 0, 300000, 300000, 900000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev Shadowsong - OOC - Say Line 0');
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 and `SourceEntry`=35997;
diff --git a/sql/updates/world/2015_03_24_03_world.sql b/sql/updates/world/2015_03_24_03_world.sql
new file mode 100644
index 00000000000..3012bb6b82a
--- /dev/null
+++ b/sql/updates/world/2015_03_24_03_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `conditions` SET `SourceGroup`=3 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (63292,63294, 63295);
+UPDATE `conditions` SET `ConditionTypeOrReference`=39 WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=3 AND `SourceEntry`=202443 AND `SourceId`=1 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=40 AND `ConditionTarget`=1 AND `ConditionValue1`=4576 AND `ConditionValue2`=0 AND `ConditionValue3`=0;
diff --git a/sql/updates/world/2015_03_24_04_world.sql b/sql/updates/world/2015_03_24_04_world.sql
new file mode 100644
index 00000000000..74488cd00bd
--- /dev/null
+++ b/sql/updates/world/2015_03_24_04_world.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `smart_scripts` SET `entryorguid`=21699 WHERE `entryorguid`=21669 AND `source_type`=0 AND `id`=0 AND `link`=0;
diff --git a/sql/updates/world/2015_03_24_05_world.sql b/sql/updates/world/2015_03_24_05_world.sql
new file mode 100644
index 00000000000..c9faf951751
--- /dev/null
+++ b/sql/updates/world/2015_03_24_05_world.sql
@@ -0,0 +1,16 @@
+-- Remove Clockwork Mechanic & Arachnopod Destroyer Incorrect spawns "Ulduar"
+DELETE FROM `creature` WHERE `guid` IN (137561,137562,137563,136543,136544,136547,136551);
+
+-- Arachnopod Destroyer SAI "Still needs combat AI"
+SET @ENTRY := 34183;
+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,1,0,100,1,0,0,0,0,11,64703,0,0,0,0,0,1,0,0,0,0,0,0,0,"Arachnopod Destroyer - OOC - Cast Summon Clockwork Mechanic");
+
+-- Clockwork Mechanic SAI "Still needs combat AI"
+SET @ENTRY := 34184;
+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,0,0,0,0,0,11,63313,0,0,0,0,0,7,0,0,0,0,0,0,0,"Clockwork Mechanic - Just Summoned - Cast Ride Vehicle");
diff --git a/sql/updates/world/2015_03_25_00_world.sql b/sql/updates/world/2015_03_25_00_world.sql
new file mode 100644
index 00000000000..06d4910fe05
--- /dev/null
+++ b/sql/updates/world/2015_03_25_00_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature_addon` WHERE `guid` IN (137561,137562,137563);
diff --git a/sql/updates/world/2015_03_25_01_world.sql b/sql/updates/world/2015_03_25_01_world.sql
new file mode 100644
index 00000000000..29dd214f262
--- /dev/null
+++ b/sql/updates/world/2015_03_25_01_world.sql
@@ -0,0 +1,9 @@
+-- assign spellscript for Spell: 'Infected Worgen Bite'
+
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=53095;
+INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
+(53095,-53094,2,'Infected Worgen Bite - Worgen\'s Call Immunity');
+
+DELETE FROM `spell_script_names` WHERE `spell_id`=53094;
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(53094,'spell_infected_worgen_bite');
diff --git a/sql/updates/world/2015_03_25_02_world.sql b/sql/updates/world/2015_03_25_02_world.sql
new file mode 100644
index 00000000000..10b8903f3fb
--- /dev/null
+++ b/sql/updates/world/2015_03_25_02_world.sql
@@ -0,0 +1,13 @@
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (62539,64614,64629,64630,64631,64632,64633,64634,64635,64636,67393);
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(62539,'spell_gen_eject_passenger'),
+(64614,'spell_gen_eject_passenger'),
+(64629,'spell_gen_eject_passenger'),
+(64630,'spell_gen_eject_passenger'),
+(64631,'spell_gen_eject_passenger'),
+(64632,'spell_gen_eject_passenger'),
+(64633,'spell_gen_eject_passenger'),
+(64634,'spell_gen_eject_passenger'),
+(64635,'spell_gen_eject_passenger'),
+(64636,'spell_gen_eject_passenger'),
+(67393,'spell_gen_eject_passenger');
diff --git a/sql/updates/world/2015_03_25_03_world.sql b/sql/updates/world/2015_03_25_03_world.sql
new file mode 100644
index 00000000000..3706bde1b71
--- /dev/null
+++ b/sql/updates/world/2015_03_25_03_world.sql
@@ -0,0 +1,98 @@
+DELETE FROM `creature_text` WHERE `entry` IN(22865,22820);
+DELETE FROM `creature_text` WHERE `entry` =21700 AND `groupid`>7;
+
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(22865, 0, 0, 'You disappoint me, Akama. I wanted to question the treacherous worm myself! I''m beginning to question your allegiance, Broken.', 12, 0, 100, 1, 0, 11608, 20628, 'Illidan''s Presence to Player'),
+(22865, 1, 0, 'I do not sense lies in your voice, Akama. That Kael''thas would betray me does not come as a big surprise - I''m not as oblivious as some would think. That one of your own was involved with him puts your loyalties into question.', 12, 0, 100, 5, 0, 11609, 20629, 'Illidan''s Presence to Player'),
+(22865, 2, 0, 'Send your Ashtongue into Tempest Keep and slay his most prized possession, the phoenix known as Al''ar. I must know that you''re not on his side. Do not think of betraying me, Broken. We both know who owns your soul!', 12, 0, 100, 1, 0, 11610, 20630, 'Illidan''s Presence to Player'),
+(21700, 8, 0, 'Olum... old friend. It is good to see that you are safe.', 12, 0, 100, 6, 0, 11600, 20490, 'Akama to Player'),
+(21700, 9, 0, 'Illidan will become suspicious... that much is for certain. We will deal with it as we always do.', 12, 0, 100, 0, 0, 11601, 20491, 'Akama to Player'),
+(21700, 10, 0, 'You cannot... be serious, Olum. Your sacrifice has already been too great.', 12, 0, 100, 274, 0, 11602, 20492, 'Akama to Player'),
+(21700, 11, 0, 'It appears your mind is set then. We will guide you to the spirit world with as much kindness as we can.', 12, 0, 100, 396, 0, 11603, 20493, 'Akama to Player'),
+(21700, 12, 0, 'Farewell, dear friend. We shall meet you in the next world when our duties in this one are fulfilled.', 12, 0, 100, 0, 0, 11604, 20494, 'Akama to Player'),
+(21700, 13, 0, 'Master! We''ve found the traitor who escaped Vashj! His body lies in front of me... lifeless!', 12, 0, 100, 0, 0, 11605, 20495, 'Akama to Player'),
+(21700, 14, 0, 'But, sire! You have misjudged my actions... I do have knowledge of someone close to you who plans to betray you. It is that dog, Kael''thas! He has allied with Kil''jaeden and intends to replace you as Lord of Outland!', 12, 0, 100, 0, 0, 11606, 20496, 'Akama to Player'),
+(21700, 15, 0, 'It will be done, my lord!', 12, 0, 100, 66, 0, 11607, 20497, 'Akama to Player'),
+(22820, 0, 0, 'Akama, my friend! Have you been informed? I was found out by Vashj''s followers. Our secret is in peril!', 12, 0, 100, 0, 0, 11611, 20498, 'Seer Olum to Player'),
+(22820, 1, 0, 'Illidan is looking for me. I am not safe here... none of us are.', 12, 0, 100, 1, 0, 11612, 20502, 'Seer Olum to Player'),
+(22820, 2, 0, 'Illidan will find me and when he does... he will pry the Ashtongue secret from me - such is the power of the Betrayer! No... there is only one way. My usefulness to the cause has come to an end. I must venture into the spirit world!', 12, 0, 100, 6, 0, 11613, 20499, 'Seer Olum to Player'),
+(22820, 3, 0, 'My decision is final. I will not be dissuaded. I have devoted my life to our plan. To jeopardize it now would betray all who have died for the cause long before me.', 12, 0, 100, 274, 0, 11614, 20500, 'Seer Olum to Player'),
+(22820, 4, 0, 'I thank you, Akama. You honor me by allowing me this moment, surrounded by my brothers. Farewell, friend. Guide our people well.', 12, 0, 100, 2, 0, 11615, 20501, 'Seer Olum to Player');
+
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(22820,22865,22870);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN(22820,22865,22870) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid` =21700 AND `source_type`=0 AND `id` IN(4,5);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` =2170002 AND `source_type`=9;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=22870;
+
+
+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
+(22870, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 11, 36545, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Just Summoned - Cast Floating Drowned'),
+(22870, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 11, 36550, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Just Summoned - Cast Floating Drowned'),
+(22870, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 0, 22870, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Just Summoned - Start WP'),
+(22870, 0, 3, 0, 40, 0, 100, 0, 1, 22870, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Reached WP1 - Despawn'),
+
+(22820, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Just Summoned - Set NPC Flags'),
+(22820, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 0, 22820, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Just Summoned - Start WP'),
+(22820, 0, 2, 0, 40, 0, 100, 0, 2, 22820, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Reached WP2 - Set Home Position'),
+(22820, 0, 3, 4, 8, 0, 100, 0, 39552, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Spellhit (Olums Sacrifice) - Die'),
+(22820, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 22870, 1, 20000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Spellhit (Olums Sacrifice) - Summon Olums Spirit'),
+
+(22865, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 11, 37816, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Illidans Presence- On Just Summoned - Cast Shadowform'),
+(22865, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Illidans Presence- On Data Set - Play Emote OneShotExclamation (5)'),
+(22865, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 5, 53, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Illidans Presence- On Data Set - Play Emote OneShotBattleRoar (53)'),
+
+
+(21700, 0, 4, 5, 20, 0, 100, 0, 10944, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10944 rewarded - Store Targetlist'),
+(21700, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2170002, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10944 rewarded - Run Script'),
+(2170002, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set NPC Flags'),
+(2170002, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 22820, 1, 180000, 0, 0, 0, 8, 0, 0, 0, -3726.361, 1040.714, 56.03985, 5.846853, 'Akama - Script 3 - Summon Seer Olum'), -- 00:57:39.985 Number: 4250
+(2170002, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 0 on Seer Olum'), -- 00:57:41.328 Number: 4268
+(2170002, 9, 3, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 8'), -- 00:57:51.438 Number: 4412
+(2170002, 9, 4, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 1 on Seer Olum'), -- 00:58:01.547 Number: 4545
+(2170002, 9, 5, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 9'), -- 00:58:08.422 Number: 4613
+(2170002, 9, 6, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 2 on Seer Olum'), -- 00:58:18.485 Number: 4746
+(2170002, 9, 7, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 1, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 10'), -- 00:58:43.578 Number: 5020
+(2170002, 9, 8, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 3 on Seer Olum'), -- 00:58:53.688 Number: 5102
+(2170002, 9, 9, 0, 0, 0, 100, 0, 13000, 13000, 0, 0, 1, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 11'), -- 00:59:06.610 Number: 5239
+(2170002, 9, 10, 0, 0, 0, 100, 0, 14000, 14000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 4 on Seer Olum'), -- 00:59:20.328 Number: 5385
+(2170002, 9, 11, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 11, 39552, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Cast Olums Sacrifice'), -- 00:59:31.532 Number: 5519
+(2170002, 9, 12, 0, 0, 0, 100, 0, 14000, 14000, 0, 0, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 12'), -- 00:59:45.438 Number: 5726
+(2170002, 9, 13, 0, 0, 0, 100, 0, 21000, 21000, 0, 0, 1, 13, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 13'), -- 01:00:06.110 Number: 5970
+(2170002, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Bytes 1'),
+(2170002, 9, 15, 0, 0, 0, 100, 0, 300, 300, 0, 0, 12, 22865, 1, 86000, 0, 0, 0, 8, 0, 0, 0, -3721.867, 1029.501, 56.03928, 0.03490658, 'Akama - Script 3 - Summon Illidans Presence'), -- 01:00:06.438 Number: 5980
+(2170002, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 50, 185520, 86, 0, 0, 0, 0, 8, 0, 0, 0, -3721.867, 1029.501, 56.03928, 0.03490658, 'Akama - Script 3 - Summon Fel Fire (GO)'), -- 01:00:06.438 Number: 5980
+(2170002, 9, 17, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 0 on Illidans Presence'), -- 01:00:14.610 Number: 6082
+(2170002, 9, 18, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Data 1 1 on Illidans Presence'), -- 01:00:19.516 Number: 6135
+(2170002, 9, 19, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Despawn Seer Olum'), -- 01:00:28.000 Number: 6250
+(2170002, 9, 20, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Bytes 1'), -- 01:00:29.219 Number: 6273
+(2170002, 9, 21, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 14'), -- 01:00:29.328 Number: 6276
+(2170002, 9, 22, 0, 0, 0, 100, 0, 16000, 16000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 1 on Illidans Presence'), -- 01:00:45.110 Number: 6432
+(2170002, 9, 23, 0, 0, 0, 100, 0, 23000, 23000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 2 on Illidans Presence'), -- 01:01:08.125 Number: 6672
+(2170002, 9, 24, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Data 2 2 on Illidans Presence'), -- 01:01:14.125 Number: 6731
+(2170002, 9, 25, 0, 0, 0, 100, 0, 17000, 17000, 0, 0, 1, 15, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 15'), -- 01:01:31.188 Number: 6926
+(2170002, 9, 26, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 15'); -- Set NPC Flags
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN(22870,22865);
+INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES
+(22870, 0, 0x0, 0x1, '36545'), -- 22870 - 36545
+(22865, 0, 0x0, 0x1, '37816'); -- 22865 - 37816
+
+DELETE FROM `waypoints` WHERE `entry` IN(22820,22870);
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(22820, 1,-3724.758, 1036.542, 55.99855, 'Seer Olum'),
+(22820, 2,-3723.388, 1033.147, 56.20685, 'Seer Olum'),
+(22870, 1,-3718.94, 1032.773, 63.84426, 'Olums Spirit');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=39552;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13, 1, 39552, 0, 0, 31, 0, 3, 22820, 0, 0, 0, 0, '', 'Olums Sacrifice targets Seer Olum'),
+(22, 1, 22820, 0, 0, 23, 1, 3821, 0, 0, 0, 0, 0, '', 'The Lich King - Only Run SAI in The Wardens Cage');
+
+UPDATE `creature_template` SET `gossip_menu_id`=8564 WHERE `entry`=22820;
+
+DELETE FROM `gossip_menu` WHERE `entry`=8564;
+INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
+(8564, 10733); -- 22820
diff --git a/sql/updates/world/2015_03_25_04_world.sql b/sql/updates/world/2015_03_25_04_world.sql
new file mode 100644
index 00000000000..017a0162c5d
--- /dev/null
+++ b/sql/updates/world/2015_03_25_04_world.sql
@@ -0,0 +1,18 @@
+--
+SET @CGUID := 370474;
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+13;
+INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
+(@CGUID+0, 37543, 530, 1, 1, 9633.195, -7136.578, 30.51368, 0, 120, 0, 0), -- 37543 (Area: 3665) 3.3.5a
+(@CGUID+1, 37543, 530, 1, 1, 9648.338, -7119.096, 28.47594, 0, 120, 0, 0), -- 37543 (Area: 3665) 3.3.5a
+(@CGUID+2, 37543, 530, 1, 1, 9665.38, -7136.049, 28.58942, 0, 120, 0, 0), -- 37543 (Area: 3665) 3.3.5a
+(@CGUID+3, 37574, 530, 1, 1, 9568.38, -7194.522, 24.68986, 4.660029, 120, 0, 0), -- 37574 (Area: 0) 3.3.5a
+(@CGUID+4, 37574, 530, 1, 1, 9530.643, -7189.838, 31.87009, 4.660029, 120, 0, 0), -- 37574 (Area: 0) 3.3.5a
+(@CGUID+5, 37543, 530, 1, 1, 9530.571, -7220.372, 30.44205, 1.22173, 120, 0, 0), -- 37543 (Area: 0) 3.3.5a
+(@CGUID+6, 37574, 530, 1, 1, 9520.098, -7188.818, 31.84313, 4.660029, 120, 0, 0), -- 37574 (Area: 0) 3.3.5a
+(@CGUID+7, 37574, 530, 1, 1, 9676.034, -7346.333, 22.96401, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a
+(@CGUID+8, 37574, 530, 1, 1, 9683.437, -7394.599, 24.14162, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a
+(@CGUID+9, 37574, 530, 1, 1, 9532.216, -7239.835, 24.74386, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a
+(@CGUID+10, 37574, 530, 1, 1, 9574.714, -7221.677, 23.17951, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a
+(@CGUID+11, 37543, 530, 1, 1, 9648.606, -7151.55, 28.7944, 0, 120, 0, 0), -- 37543 (Area: 3482) 3.3.5a
+(@CGUID+12, 37543, 530, 1, 1, 9467.849, -7269.604, 34.85052, 0, 120, 0, 0), -- 37543 (Area: 3482) 3.3.5a
+(@CGUID+13, 37543, 530, 1, 1, 9467.499, -7287.613, 36.13566, 0, 120, 0, 0); -- 37543 (Area: 3482) 3.3.5a
diff --git a/sql/updates/world/2015_03_26_00_world.sql b/sql/updates/world/2015_03_26_00_world.sql
new file mode 100644
index 00000000000..ab759e628f6
--- /dev/null
+++ b/sql/updates/world/2015_03_26_00_world.sql
@@ -0,0 +1,586 @@
+-- Pathing for Stonevault Ambusher Entry: 7175 'TDB FORMAT'
+SET @NPC := 27536;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-210.1764,`position_y`=109.2886,`position_z`=-47.71453 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-210.1764,109.2886,-47.71453,0,0,1,0,100,0), -- 19:46:17
+(@PATH,2,-210.9264,115.0386,-47.71453,0,0,1,0,100,0), -- 19:46:17
+(@PATH,3,-211.1764,117.7886,-46.96453,0,0,1,0,100,0), -- 19:46:17
+(@PATH,4,-211.4264,120.0386,-46.46453,0,0,1,0,100,0), -- 19:46:17
+(@PATH,5,-211.3505,121.1287,-46.46464,0,0,1,0,100,0), -- 19:46:20
+(@PATH,6,-211.3505,124.6287,-46.46464,0,0,1,0,100,0), -- 19:46:20
+(@PATH,7,-211.3505,126.8787,-46.46464,0,0,1,0,100,0), -- 19:46:20
+(@PATH,8,-206.7831,137.7592,-46.55875,0,0,1,0,100,0), -- 19:46:21
+(@PATH,9,-204.5331,138.0092,-46.55875,0,0,1,0,100,0), -- 19:46:21
+(@PATH,10,-200.7831,138.2592,-46.55875,0,0,1,0,100,0), -- 19:46:21
+(@PATH,11,-199.5331,138.5092,-46.55875,0,0,1,0,100,0), -- 19:46:21
+(@PATH,12,-198.5331,138.5092,-47.05875,0,0,1,0,100,0), -- 19:46:21
+(@PATH,13,-198.2273,138.9003,-47.06185,0,0,1,0,100,0), -- 19:46:23
+(@PATH,14,-192.7273,139.1503,-47.06185,0,0,1,0,100,0), -- 19:46:23
+(@PATH,15,-174.9689,143.976,-47.15791,0,0,1,0,100,0), -- 19:46:25
+(@PATH,16,-174.9137,144.2064,-47.1599,0,0,1,0,100,0), -- 19:46:26
+(@PATH,17,-174.1637,144.9564,-47.1599,0,0,1,0,100,0), -- 19:46:26
+(@PATH,18,-174.2672,156.425,-47.16148,0,0,1,0,100,0), -- 19:46:27
+(@PATH,19,-178.1581,166.2433,-47.16,0,0,1,0,100,0), -- 19:46:28
+(@PATH,20,-182.0437,167.7564,-47.15718,0,0,1,0,100,0), -- 19:46:29
+(@PATH,21,-187.5437,168.5064,-47.15718,0,0,1,0,100,0), -- 19:46:29
+(@PATH,22,-198.6023,169.4236,-47.01919,0,0,1,0,100,0), -- 19:46:30
+(@PATH,23,-199.8523,169.4236,-46.26919,0,0,1,0,100,0), -- 19:46:30
+(@PATH,24,-206.3523,169.1736,-44.51919,0,0,1,0,100,0), -- 19:46:30
+(@PATH,25,-208.6023,169.1736,-44.51919,0,0,1,0,100,0), -- 19:46:30
+(@PATH,26,-211.6879,169.1373,-44.53472,0,0,1,0,100,0), -- 19:46:33
+(@PATH,27,-215.1879,168.8873,-44.53472,0,0,1,0,100,0), -- 19:46:33
+(@PATH,28,-219.4723,168.7791,-44.37992,0,0,1,0,100,0), -- 19:46:34
+(@PATH,29,-239.9498,168.602,-44.37992,0,0,1,0,100,0), -- 19:46:37
+(@PATH,30,-246.9581,168.9306,-44.51655,0,0,1,0,100,0), -- 19:46:38
+(@PATH,31,-249.2081,168.9306,-44.51655,0,0,1,0,100,0), -- 19:46:38
+(@PATH,32,-252.4581,169.1806,-45.51655,0,0,1,0,100,0), -- 19:46:38
+(@PATH,33,-255.7081,169.4306,-46.26655,0,0,1,0,100,0), -- 19:46:38
+(@PATH,34,-256.7081,169.4306,-47.01655,0,0,1,0,100,0), -- 19:46:38
+(@PATH,35,-256.8999,169.2992,-47.01842,0,0,1,0,100,0), -- 19:46:39
+(@PATH,36,-260.1499,169.5492,-47.01842,0,0,1,0,100,0), -- 19:46:39
+(@PATH,37,-271.5681,169.6401,-47.15585,0,0,1,0,100,0), -- 19:46:40
+(@PATH,38,-278.7491,167.1944,-47.1574,0,0,1,0,100,0), -- 19:46:41
+(@PATH,39,-281.8345,159.0635,-47.15884,0,0,1,0,100,0), -- 19:46:43
+(@PATH,40,-281.6717,149.2611,-47.15874,0,0,1,0,100,0), -- 19:46:44
+(@PATH,41,-281.4217,147.0111,-47.15874,0,0,1,0,100,0), -- 19:46:44
+(@PATH,42,-280.9217,143.0111,-47.15874,0,0,1,0,100,0), -- 19:46:44
+(@PATH,43,-280.6221,142.876,-47.15683,0,0,1,0,100,0), -- 19:46:45
+(@PATH,44,-280.6221,141.876,-47.15683,0,0,1,0,100,0), -- 19:46:45
+(@PATH,45,-279.6221,141.376,-47.15683,0,0,1,0,100,0), -- 19:46:45
+(@PATH,46,-273.4069,138.0354,-47.15511,0,0,1,0,100,0), -- 19:46:46
+(@PATH,47,-256.2716,137.7599,-46.55902,0,0,1,0,100,0), -- 19:46:47
+(@PATH,48,-251.2716,137.7599,-46.55902,0,0,1,0,100,0), -- 19:46:47
+(@PATH,49,-245.0504,137.672,-46.46387,0,0,1,0,100,0), -- 19:46:50
+(@PATH,50,-230.932,137.3019,-46.46301,0,0,1,0,100,0), -- 19:46:51
+(@PATH,51,-219.4549,136.5503,-46.46327,0,0,1,0,100,0), -- 19:46:52
+(@PATH,52,-212.4549,136.0503,-46.46327,0,0,1,0,100,0), -- 19:46:52
+(@PATH,53,-211.8714,135.753,-46.46384,0,0,1,0,100,0), -- 19:46:54
+(@PATH,54,-211.8714,127.003,-46.46384,0,0,1,0,100,0), -- 19:46:54
+(@PATH,55,-211.7341,126.9009,-46.65929,0,0,1,0,100,0), -- 19:46:55
+(@PATH,56,-211.7341,124.6509,-46.65929,0,0,1,0,100,0), -- 19:46:55
+(@PATH,57,-211.7341,123.6509,-46.65929,0,0,1,0,100,0), -- 19:46:55
+(@PATH,58,-211.7341,119.9009,-46.65929,0,0,1,0,100,0), -- 19:46:55
+(@PATH,59,-211.7341,117.6509,-47.15929,0,0,1,0,100,0), -- 19:46:55
+(@PATH,60,-211.7341,115.1509,-47.65929,0,0,1,0,100,0), -- 19:46:55
+(@PATH,61,-211.6735,112.9518,-47.72739,0,0,1,0,100,0); -- 19:46:57
+-- 0x1C16F408C00701C00059E900030B2760 .go -210.1764 109.2886 -47.71453
+
+-- Pathing for Stonevault Ambusher Entry: 7175 'TDB FORMAT'
+SET @NPC := 27535;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-260.9756,`position_y`=61.2314,`position_z`=-48.54825 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-260.9756,61.2314,-48.54825,0,0,1,0,100,0), -- 19:46:55
+(@PATH,2,-279.7831,63.47712,-48.54804,0,0,1,0,100,0), -- 19:46:57
+(@PATH,3,-282.5231,65.95476,-48.55443,0,0,1,0,100,0), -- 19:46:58
+(@PATH,4,-288.7731,67.95476,-48.55443,0,0,1,0,100,0), -- 19:46:58
+(@PATH,5,-293.4806,70.74025,-48.55671,0,0,1,0,100,0), -- 19:47:00
+(@PATH,6,-295.2306,72.99025,-48.55671,0,0,1,0,100,0), -- 19:47:00
+(@PATH,7,-292.8817,80.33412,-48.55592,0,0,1,0,100,0), -- 19:47:01
+(@PATH,8,-288.8817,83.33412,-48.55592,0,0,1,0,100,0), -- 19:47:01
+(@PATH,9,-280.2568,88.74796,-48.5517,0,0,1,0,100,0), -- 19:47:03
+(@PATH,10,-273.2597,91.43516,-48.54511,0,0,1,0,100,0), -- 19:47:05
+(@PATH,11,-256.2809,91.47353,-47.96152,0,0,1,0,100,0), -- 19:47:06
+(@PATH,12,-254.0309,91.47353,-47.96152,0,0,1,0,100,0), -- 19:47:06
+(@PATH,13,-250.0309,91.47353,-47.96152,0,0,1,0,100,0), -- 19:47:06
+(@PATH,14,-246.0933,91.76448,-47.96255,0,0,1,0,100,0), -- 19:47:07
+(@PATH,15,-244.1956,114.8135,-47.86117,0,0,1,0,100,0), -- 19:47:09
+(@PATH,16,-244.0928,116.6703,-47.67337,0,0,1,0,100,0), -- 19:47:11
+(@PATH,17,-244.0928,119.6703,-46.42337,0,0,1,0,100,0), -- 19:47:11
+(@PATH,18,-244.3428,126.6703,-46.42337,0,0,1,0,100,0), -- 19:47:11
+(@PATH,19,-244.2846,127.0505,-46.63219,0,0,1,0,100,0), -- 19:47:12
+(@PATH,20,-251.2605,136.6456,-46.55659,0,0,1,0,100,0), -- 19:47:13
+(@PATH,21,-256.0104,137.6456,-46.55659,0,0,1,0,100,0), -- 19:47:13
+(@PATH,22,-257.2604,137.8956,-47.05659,0,0,1,0,100,0), -- 19:47:13
+(@PATH,23,-259.69,138.2683,-47.05939,0,0,1,0,100,0), -- 19:47:16
+(@PATH,24,-278.1556,142.2052,-47.15575,0,0,1,0,100,0), -- 19:47:17
+(@PATH,25,-278.9056,143.2052,-47.15575,0,0,1,0,100,0), -- 19:47:17
+(@PATH,26,-281.2275,147.3071,-47.15728,0,0,1,0,100,0), -- 19:47:18
+(@PATH,27,-281.9775,148.5571,-47.15728,0,0,1,0,100,0), -- 19:47:18
+(@PATH,28,-277.5583,166.0385,-47.15807,0,0,1,0,100,0), -- 19:47:20
+(@PATH,29,-270.8185,168.1763,-47.15633,0,0,1,0,100,0), -- 19:47:21
+(@PATH,30,-257.0093,169.4798,-47.01865,0,0,1,0,100,0), -- 19:47:23
+(@PATH,31,-256.0093,169.4798,-46.26865,0,0,1,0,100,0), -- 19:47:23
+(@PATH,32,-252.7593,169.4798,-45.51865,0,0,1,0,100,0), -- 19:47:23
+(@PATH,33,-249.2593,169.4798,-44.51865,0,0,1,0,100,0), -- 19:47:23
+(@PATH,34,-247.0093,169.4798,-44.51865,0,0,1,0,100,0), -- 19:47:23
+(@PATH,35,-246.7646,169.5961,-44.52259,0,0,1,0,100,0), -- 19:47:25
+(@PATH,36,-244.5146,169.5961,-44.52259,0,0,1,0,100,0), -- 19:47:25
+(@PATH,37,-240.0146,169.5961,-44.52259,0,0,1,0,100,0), -- 19:47:25
+(@PATH,38,-215.2646,169.3461,-44.52259,0,0,1,0,100,0), -- 19:47:25
+(@PATH,39,-208.8364,169.3836,-44.51604,0,0,1,0,100,0), -- 19:47:29
+(@PATH,40,-206.5864,169.6336,-44.51604,0,0,1,0,100,0), -- 19:47:29
+(@PATH,41,-200.0864,169.8836,-46.26604,0,0,1,0,100,0), -- 19:47:29
+(@PATH,42,-198.8364,169.8836,-47.01604,0,0,1,0,100,0), -- 19:47:29
+(@PATH,43,-197.5312,170.0583,-47.003,0,0,1,0,100,0), -- 19:47:31
+(@PATH,44,-186.4549,169.675,-47.1562,0,0,1,0,100,0), -- 19:47:33
+(@PATH,45,-178.1893,166.1073,-47.15907,0,0,1,0,100,0), -- 19:47:34
+(@PATH,46,-174.5692,160.0448,-47.16045,0,0,1,0,100,0), -- 19:47:35
+(@PATH,47,-177.7394,141.6598,-47.16039,0,0,1,0,100,0), -- 19:47:36
+(@PATH,48,-178.7611,140.6003,-47.15852,0,0,1,0,100,0), -- 19:47:37
+(@PATH,49,-187.544,138.534,-47.15597,0,0,1,0,100,0), -- 19:47:38
+(@PATH,50,-199.6097,138.1275,-46.55952,0,0,1,0,100,0), -- 19:47:40
+(@PATH,51,-200.3597,138.1275,-46.55952,0,0,1,0,100,0), -- 19:47:40
+(@PATH,52,-204.6097,138.1275,-46.55952,0,0,1,0,100,0), -- 19:47:40
+(@PATH,53,-210.2272,138.1704,-46.66569,0,0,1,0,100,0), -- 19:47:41
+(@PATH,54,-219.309,137.7214,-46.46365,0,0,1,0,100,0), -- 19:47:42
+(@PATH,55,-227.5786,137.2641,-46.46313,0,0,1,0,100,0), -- 19:47:43
+(@PATH,56,-241.2292,133.3628,-46.46293,0,0,1,0,100,0), -- 19:47:45
+(@PATH,57,-244.0938,127.9868,-46.65569,0,0,1,0,100,0), -- 19:47:46
+(@PATH,58,-244.0938,126.7368,-46.65569,0,0,1,0,100,0), -- 19:47:46
+(@PATH,59,-244.0938,119.9868,-46.65569,0,0,1,0,100,0), -- 19:47:46
+(@PATH,60,-244.0938,117.7368,-47.15569,0,0,1,0,100,0), -- 19:47:46
+(@PATH,61,-244.1458,117.4128,-47.17364,0,0,1,0,100,0), -- 19:47:47
+(@PATH,62,-244.1458,115.9128,-47.67364,0,0,1,0,100,0), -- 19:47:47
+(@PATH,63,-243.8958,107.6628,-47.67364,0,0,1,0,100,0), -- 19:47:47
+(@PATH,64,-244.0653,104.803,-47.8754,0,0,1,0,100,0), -- 19:47:50
+(@PATH,65,-249.939,90.39037,-47.9633,0,0,1,0,100,0), -- 19:47:51
+(@PATH,66,-253.939,90.64037,-47.9633,0,0,1,0,100,0), -- 19:47:51
+(@PATH,67,-256.189,90.64037,-47.9633,0,0,1,0,100,0), -- 19:47:51
+(@PATH,68,-257.189,90.64037,-48.4633,0,0,1,0,100,0), -- 19:47:51
+(@PATH,69,-261.1644,90.57747,-48.46085,0,0,1,0,100,0), -- 19:47:53
+(@PATH,70,-278.2355,87.77667,-48.54754,0,0,1,0,100,0), -- 19:47:54
+(@PATH,71,-282.5812,77.72125,-48.55171,0,0,1,0,100,0), -- 19:47:56
+(@PATH,72,-282.8312,75.47125,-48.55171,0,0,1,0,100,0), -- 19:47:56
+(@PATH,73,-283.0587,72.90546,-48.55147,0,0,1,0,100,0), -- 19:47:57
+(@PATH,74,-280.5587,63.15546,-48.55147,0,0,1,0,100,0), -- 19:47:57
+(@PATH,75,-279.8492,62.23659,-48.55054,0,0,1,0,100,0); -- 19:47:58
+-- 0x1C16F408C00701C00059E900038B2760 .go -260.9756 61.2314 -48.54825
+
+-- Pathing for Shrike Bat Entry: 4861 'TDB FORMAT'
+SET @NPC := 30081;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-116.1971,`position_y`=317.7787,`position_z`=-46.08444 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-116.1971,317.7787,-46.08444,0,0,0,0,100,0), -- 19:46:24
+(@PATH,2,-118.9047,317.3614,-45.29679,0,0,0,0,100,0), -- 19:46:29
+(@PATH,3,-126.8644,318.512,-44.13009,0,0,0,0,100,0), -- 19:46:31
+(@PATH,4,-131.6838,323.5452,-43.69198,0,0,0,0,100,0), -- 19:46:33
+(@PATH,5,-133.1838,326.0452,-43.94198,0,0,0,0,100,0), -- 19:46:33
+(@PATH,6,-134.4338,328.2952,-44.19198,0,0,0,0,100,0), -- 19:46:33
+(@PATH,7,-139.5984,330.833,-44.22396,0,0,0,0,100,0), -- 19:46:38
+(@PATH,8,-141.3152,330.4821,-44.35117,0,0,0,0,100,0), -- 19:46:41
+(@PATH,9,-145.4463,327.2668,-46.04215,0,0,0,0,100,0), -- 19:46:43
+(@PATH,10,-153.1682,320.1992,-48.49626,0,0,0,0,100,0), -- 19:46:46
+(@PATH,11,-157.6236,320.5594,-49.23671,0,0,0,0,100,0), -- 19:46:48
+(@PATH,12,-163.7113,322.522,-50.1132,0,0,0,0,100,0), -- 19:46:52
+(@PATH,13,-172.0462,323.2635,-51.23209,0,0,0,0,100,0), -- 19:46:54
+(@PATH,14,-173.7962,323.2635,-51.48209,0,0,0,0,100,0), -- 19:46:54
+(@PATH,15,-177.0651,319.9081,-52.49401,0,0,0,0,100,0), -- 19:46:58
+(@PATH,16,-179.3571,312.8132,-52.80653,0,0,0,0,100,0), -- 19:47:01
+(@PATH,17,-179.3571,311.8132,-52.80653,0,0,0,0,100,0), -- 19:47:01
+(@PATH,18,-181.0257,301.3842,-50.73584,0,0,0,0,100,0), -- 19:47:05
+(@PATH,19,-183.2724,293.4999,-48.85449,0,0,0,0,100,0), -- 19:47:09
+(@PATH,20,-183.7724,292.4999,-48.60449,0,0,0,0,100,0), -- 19:47:09
+(@PATH,21,-184.433,290.7685,-48.27169,0,0,0,0,100,0), -- 19:47:11
+(@PATH,22,-184.683,289.2685,-47.77169,0,0,0,0,100,0), -- 19:47:11
+(@PATH,23,-184.933,288.0185,-47.52169,0,0,0,0,100,0), -- 19:47:11
+(@PATH,24,-187.3712,282.3932,-47.8597,0,0,0,0,100,0), -- 19:47:14
+(@PATH,25,-187.4142,282.2362,-47.91491,0,0,0,0,100,0), -- 19:47:19
+(@PATH,26,-185.3188,287.8494,-47.45733,0,0,0,0,100,0), -- 19:47:21
+(@PATH,27,-185.0688,289.0994,-47.70733,0,0,0,0,100,0), -- 19:47:21
+(@PATH,28,-184.179,290.8317,-48.2381,0,0,0,0,100,0), -- 19:47:23
+(@PATH,29,-183.679,292.5817,-48.4881,0,0,0,0,100,0), -- 19:47:23
+(@PATH,30,-183.429,293.3317,-48.7381,0,0,0,0,100,0), -- 19:47:23
+(@PATH,31,-182.929,295.3317,-49.9881,0,0,0,0,100,0), -- 19:47:23
+(@PATH,32,-180.9205,303.2869,-51.47765,0,0,0,0,100,0), -- 19:47:27
+(@PATH,33,-179.3741,312.776,-52.76653,0,0,0,0,100,0), -- 19:47:31
+(@PATH,34,-179.1241,314.276,-52.76653,0,0,0,0,100,0), -- 19:47:31
+(@PATH,35,-177.1773,319.9679,-52.64116,0,0,0,0,100,0), -- 19:47:34
+(@PATH,36,-176.4273,322.2179,-52.14116,0,0,0,0,100,0), -- 19:47:34
+(@PATH,37,-173.9601,323.1776,-51.58164,0,0,0,0,100,0), -- 19:47:38
+(@PATH,38,-172.4601,323.4276,-51.58164,0,0,0,0,100,0), -- 19:47:38
+(@PATH,39,-167.9601,323.6776,-50.83164,0,0,0,0,100,0), -- 19:47:38
+(@PATH,40,-163.9189,322.6101,-50.14185,0,0,0,0,100,0), -- 19:47:41
+(@PATH,41,-162.9189,322.3601,-49.64185,0,0,0,0,100,0), -- 19:47:41
+(@PATH,42,-158.5166,320.7068,-49.43653,0,0,0,0,100,0), -- 19:47:44
+(@PATH,43,-149.9316,322.1074,-48.67955,0,0,0,0,100,0), -- 19:47:46
+(@PATH,44,-145.6857,327.386,-45.98837,0,0,0,0,100,0), -- 19:47:50
+(@PATH,45,-141.4396,330.4873,-44.44178,0,0,0,0,100,0), -- 19:47:52
+(@PATH,46,-139.9884,330.9608,-44.31651,0,0,0,0,100,0), -- 19:47:55
+(@PATH,47,-131.8122,323.8088,-43.84772,0,0,0,0,100,0), -- 19:47:57
+(@PATH,48,-129.3122,319.8088,-44.34772,0,0,0,0,100,0), -- 19:47:57
+(@PATH,49,-127.2311,318.8854,-44.18322,0,0,0,0,100,0), -- 19:48:01
+(@PATH,50,-123.7311,317.3854,-44.43322,0,0,0,0,100,0), -- 19:48:01
+(@PATH,51,-119.1036,317.5869,-45.31766,0,0,0,0,100,0); -- 19:48:03
+-- 0x1C16F408C004BF400059E900000B2760 .go -116.1971 317.7787 -46.08444
+
+-- Pathing for Shrike Bat Entry: 4861 'TDB FORMAT'
+SET @NPC := 33522;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-34.35824,`position_y`=349.1816,`position_z`=-44.71794 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-34.35824,349.1816,-44.71794,0,0,0,0,100,0), -- 19:54:43
+(@PATH,2,-39.45177,352.6617,-46.25263,0,0,0,0,100,0), -- 19:54:48
+(@PATH,3,-41.51308,355.655,-46.53062,0,0,0,0,100,0), -- 19:54:52
+(@PATH,4,-43.01308,359.905,-47.28062,0,0,0,0,100,0), -- 19:54:52
+(@PATH,5,-44.79412,364.367,-48.26569,0,0,0,0,100,0), -- 19:54:55
+(@PATH,6,-45.79412,367.367,-48.51569,0,0,0,0,100,0), -- 19:54:55
+(@PATH,7,-48.12923,369.0743,-49.55631,0,0,0,0,100,0), -- 19:54:57
+(@PATH,8,-49.62923,369.5743,-49.80631,0,0,0,0,100,0), -- 19:54:57
+(@PATH,9,-58.34222,370.8102,-50.34889,0,0,0,0,100,0), -- 19:55:02
+(@PATH,10,-64.80667,367.5034,-50.34549,0,0,0,0,100,0), -- 19:55:05
+(@PATH,11,-71.09432,360.0078,-51.03568,0,0,0,0,100,0), -- 19:55:08
+(@PATH,12,-72.84432,359.0078,-51.28568,0,0,0,0,100,0), -- 19:55:08
+(@PATH,13,-77.36659,356.679,-50.97245,0,0,0,0,100,0), -- 19:55:12
+(@PATH,14,-79.61659,355.929,-50.72245,0,0,0,0,100,0), -- 19:55:12
+(@PATH,15,-83.36659,354.429,-50.97245,0,0,0,0,100,0), -- 19:55:12
+(@PATH,16,-85.8164,353.4018,-50.05049,0,0,0,0,100,0), -- 19:55:16
+(@PATH,17,-90.8164,351.9018,-49.30049,0,0,0,0,100,0), -- 19:55:16
+(@PATH,18,-99.78505,351.1479,-48.29544,0,0,0,0,100,0), -- 19:55:20
+(@PATH,19,-102.785,351.3979,-48.29544,0,0,0,0,100,0), -- 19:55:20
+(@PATH,20,-96.03415,350.9953,-48.6471,0,0,0,0,100,0), -- 19:55:27
+(@PATH,21,-86.49751,353.2874,-49.41515,0,0,0,0,100,0), -- 19:55:31
+(@PATH,22,-84.99751,353.7874,-50.41515,0,0,0,0,100,0), -- 19:55:31
+(@PATH,23,-84.28488,354.1664,-50.5457,0,0,0,0,100,0), -- 19:55:35
+(@PATH,24,-79.78488,355.6664,-50.5457,0,0,0,0,100,0), -- 19:55:35
+(@PATH,25,-77.28488,356.6664,-50.7957,0,0,0,0,100,0), -- 19:55:35
+(@PATH,26,-71.36815,359.9686,-51.01308,0,0,0,0,100,0), -- 19:55:40
+(@PATH,27,-68.36815,361.9686,-50.76308,0,0,0,0,100,0), -- 19:55:40
+(@PATH,28,-65.49499,366.807,-50.34712,0,0,0,0,100,0), -- 19:55:44
+(@PATH,29,-58.40037,370.9284,-50.30991,0,0,0,0,100,0), -- 19:55:46
+(@PATH,30,-57.15037,371.1784,-50.30991,0,0,0,0,100,0), -- 19:55:46
+(@PATH,31,-55.87487,371.4779,-50.10828,0,0,0,0,100,0), -- 19:55:50
+(@PATH,32,-50.62487,369.9779,-49.85828,0,0,0,0,100,0), -- 19:55:50
+(@PATH,33,-48.12487,369.4779,-49.60828,0,0,0,0,100,0), -- 19:55:50
+(@PATH,34,-45.93803,367.2723,-48.61888,0,0,0,0,100,0), -- 19:55:53
+(@PATH,35,-44.93803,364.7723,-48.36888,0,0,0,0,100,0), -- 19:55:53
+(@PATH,36,-43.17387,359.995,-47.31218,0,0,0,0,100,0), -- 19:55:56
+(@PATH,37,-41.67387,356.745,-46.56218,0,0,0,0,100,0), -- 19:55:56
+(@PATH,38,-35.86934,350.4595,-45.71741,0,0,0,0,100,0); -- 19:56:01
+-- 0x1C16F408C004BF400059E900000B2761 .go -34.35824 349.1816 -44.71794
+
+-- Pathing for Shrike Bat Entry: 4861 'TDB FORMAT'
+SET @NPC := 30085;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-142.7949,`position_y`=225.2512,`position_z`=-45.7625 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-142.7949,225.2512,-45.7625,0,0,0,0,100,0), -- 19:46:47
+(@PATH,2,-136.7979,229.3257,-47.20895,0,0,0,0,100,0), -- 19:46:54
+(@PATH,3,-135.2979,230.3257,-47.45895,0,0,0,0,100,0), -- 19:46:54
+(@PATH,4,-133.7979,231.3257,-47.20895,0,0,0,0,100,0), -- 19:46:54
+(@PATH,5,-132.9678,231.759,-47.66918,0,0,0,0,100,0), -- 19:46:58
+(@PATH,6,-130.4678,233.759,-47.66918,0,0,0,0,100,0), -- 19:46:58
+(@PATH,7,-124.7075,239.272,-48.10035,0,0,0,0,100,0), -- 19:47:01
+(@PATH,8,-122.997,243.3047,-47.74892,0,0,0,0,100,0), -- 19:47:04
+(@PATH,9,-122.2632,250.6377,-48.21873,0,0,0,0,100,0), -- 19:47:06
+(@PATH,10,-122.0635,253.1956,-47.99726,0,0,0,0,100,0), -- 19:47:09
+(@PATH,11,-124.687,265.2274,-46.29008,0,0,0,0,100,0), -- 19:47:11
+(@PATH,12,-125.7654,267.4338,-45.58253,0,0,0,0,100,0), -- 19:47:15
+(@PATH,13,-126.7654,270.4338,-45.58253,0,0,0,0,100,0), -- 19:47:15
+(@PATH,14,-127.0154,271.6838,-45.58253,0,0,0,0,100,0), -- 19:47:15
+(@PATH,15,-128.2654,275.6838,-45.83253,0,0,0,0,100,0), -- 19:47:15
+(@PATH,16,-129.7654,280.1838,-45.58253,0,0,0,0,100,0), -- 19:47:15
+(@PATH,17,-132.0325,283.5439,-45.71447,0,0,0,0,100,0), -- 19:47:21
+(@PATH,18,-133.5325,285.2939,-45.96447,0,0,0,0,100,0), -- 19:47:21
+(@PATH,19,-134.5325,286.5439,-45.96447,0,0,0,0,100,0), -- 19:47:21
+(@PATH,20,-135.2825,287.5439,-45.71447,0,0,0,0,100,0), -- 19:47:21
+(@PATH,21,-136.0218,288.4235,-45.95388,0,0,0,0,100,0), -- 19:47:24
+(@PATH,22,-139.2718,292.4235,-45.95388,0,0,0,0,100,0), -- 19:47:24
+(@PATH,23,-140.0702,299.2286,-46.03945,0,0,0,0,100,0), -- 19:47:27
+(@PATH,24,-140.2864,299.1003,-45.87361,0,0,0,0,100,0), -- 19:47:32
+(@PATH,25,-139.1992,292.5916,-45.83009,0,0,0,0,100,0), -- 19:47:33
+(@PATH,26,-133.8004,285.6141,-45.93703,0,0,0,0,100,0), -- 19:47:37
+(@PATH,27,-132.0504,283.6141,-45.68703,0,0,0,0,100,0), -- 19:47:37
+(@PATH,28,-129.9505,280.1571,-45.59953,0,0,0,0,100,0), -- 19:47:39
+(@PATH,29,-128.7005,275.6571,-45.84953,0,0,0,0,100,0), -- 19:47:39
+(@PATH,30,-127.2005,271.6571,-45.59953,0,0,0,0,100,0), -- 19:47:39
+(@PATH,31,-126.7005,270.4071,-45.59953,0,0,0,0,100,0), -- 19:47:39
+(@PATH,32,-125.7005,267.4071,-45.59953,0,0,0,0,100,0), -- 19:47:39
+(@PATH,33,-123.5866,262.6984,-47.1854,0,0,0,0,100,0), -- 19:47:46
+(@PATH,34,-122.0696,253.5793,-48.02232,0,0,0,0,100,0), -- 19:47:50
+(@PATH,35,-122.1644,250.7279,-48.18776,0,0,0,0,100,0), -- 19:47:52
+(@PATH,36,-122.1644,248.4779,-48.18776,0,0,0,0,100,0), -- 19:47:52
+(@PATH,37,-122.9575,243.5141,-47.85612,0,0,0,0,100,0), -- 19:47:55
+(@PATH,38,-127.747,236.1646,-47.66065,0,0,0,0,100,0), -- 19:47:57
+(@PATH,39,-130.1325,234.0169,-47.69135,0,0,0,0,100,0), -- 19:48:00
+(@PATH,40,-136.8559,229.2036,-47.26409,0,0,0,0,100,0), -- 19:48:02
+(@PATH,41,-138.6059,227.9536,-46.76409,0,0,0,0,100,0); -- 19:48:02
+-- 0x1C16F408C004BF400059E900010B2760 .go -142.7949 225.2512 -45.7625
+
+-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT'
+SET @NPC := 28365;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=157.359,`position_y`=278.6508,`position_z`=-26.48766 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,157.359,278.6508,-26.48766,0,0,0,0,100,0), -- 19:58:53
+(@PATH,2,158.1053,277.0509,-26.33149,0,0,0,0,100,0), -- 19:59:03
+(@PATH,3,159.3106,274.6482,-26.47079,0,0,0,0,100,0), -- 19:59:10
+(@PATH,4,161.3106,270.6482,-27.72079,0,0,0,0,100,0), -- 19:59:10
+(@PATH,5,162.0606,268.6482,-28.22079,0,0,0,0,100,0), -- 19:59:10
+(@PATH,6,162.5606,267.6482,-28.97079,0,0,0,0,100,0), -- 19:59:10
+(@PATH,7,169.1669,252.4363,-29.11036,0,0,0,0,100,0), -- 19:59:20
+(@PATH,8,170.2946,247.0149,-29.11045,0,0,0,0,100,0), -- 19:59:22
+(@PATH,9,141.0065,231.4473,-42.17465,0,0,0,0,100,0), -- 19:59:26
+(@PATH,10,135.2668,228.6892,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,11,126.2668,224.4392,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,12,125.0168,223.9392,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,13,117.7668,220.4392,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,14,115.0168,219.1892,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,15,112.5168,217.9392,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,16,111.5168,217.4392,-42.44057,0,0,0,0,100,0), -- 19:59:38
+(@PATH,17,110.6416,216.7866,-42.73357,0,0,0,0,100,0), -- 19:59:50
+(@PATH,18,91.14159,207.5366,-54.48357,0,0,0,0,100,0), -- 19:59:50
+(@PATH,19,89.71228,206.7954,-54.72824,0,0,0,0,100,0), -- 20:00:01
+(@PATH,20,81.51923,204.1784,-54.72749,0,0,0,0,100,0), -- 20:00:03
+(@PATH,21,70.45786,225.8585,-53.83768,0,0,0,0,100,0), -- 20:00:07
+(@PATH,22,67.45786,231.8585,-52.08768,0,0,0,0,100,0), -- 20:00:07
+(@PATH,23,66.45786,233.8585,-52.08768,0,0,0,0,100,0), -- 20:00:07
+(@PATH,24,65.99206,234.5262,-51.94806,0,0,0,0,100,0), -- 20:00:18
+(@PATH,25,57.07329,252.1399,-51.94805,0,0,0,0,100,0), -- 20:00:25
+(@PATH,26,56.98771,251.7677,-52.19805,0,0,0,0,100,0), -- 20:00:31
+(@PATH,27,57.20819,251.6948,-51.94805,0,0,0,0,100,0), -- 20:00:32
+(@PATH,28,70.53458,225.9198,-53.83727,0,0,0,0,100,0), -- 20:00:41
+(@PATH,29,71.03458,224.9198,-54.58727,0,0,0,0,100,0), -- 20:00:41
+(@PATH,30,78.36176,210.3076,-54.72746,0,0,0,0,100,0), -- 20:00:52
+(@PATH,31,81.43523,204.0119,-54.72772,0,0,0,0,100,0), -- 20:00:54
+(@PATH,32,91.10306,207.5477,-54.68492,0,0,0,0,100,0), -- 20:00:58
+(@PATH,33,115.051,219.2345,-42.26912,0,0,0,0,100,0), -- 20:01:09
+(@PATH,34,117.551,220.4845,-42.26912,0,0,0,0,100,0), -- 20:01:09
+(@PATH,35,124.801,223.7345,-42.26912,0,0,0,0,100,0), -- 20:01:09
+(@PATH,36,126.301,224.4845,-42.26912,0,0,0,0,100,0), -- 20:01:09
+(@PATH,37,135.301,228.7345,-42.26912,0,0,0,0,100,0), -- 20:01:09
+(@PATH,38,141.7687,232.0445,-42.17444,0,0,0,0,100,0), -- 20:01:21
+(@PATH,39,163.1443,242.3607,-29.2016,0,0,0,0,100,0), -- 20:01:33
+(@PATH,40,170.1688,247.0374,-29.11083,0,0,0,0,100,0), -- 20:01:37
+(@PATH,41,162.2002,268.689,-28.2213,0,0,0,0,100,0), -- 20:01:39
+(@PATH,42,161.2002,270.689,-27.7213,0,0,0,0,100,0), -- 20:01:39
+(@PATH,43,159.4502,274.689,-26.4713,0,0,0,0,100,0), -- 20:01:39
+(@PATH,44,158.2711,277.0461,-26.35968,0,0,0,0,100,0); -- 20:01:49
+-- 0x1C16F408C004BF000059E900020B2760 .go 157.359 278.6508 -26.48766
+
+-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT'
+SET @NPC := 27473;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-15.69449,`position_y`=279.0179,`position_z`=-47.67377 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-15.69449,279.0179,-47.67377,0,0,0,0,100,0), -- 19:46:43
+(@PATH,2,-20.67551,276.4372,-47.63821,0,0,0,0,100,0), -- 19:46:46
+(@PATH,3,-21.52459,276.0081,-47.67233,0,0,0,0,100,0), -- 19:46:47
+(@PATH,4,-24.52459,275.5081,-47.92233,0,0,0,0,100,0), -- 19:46:47
+(@PATH,5,-25.77459,275.0081,-47.92233,0,0,0,0,100,0), -- 19:46:47
+(@PATH,6,-34.79898,273.5978,-48.29856,0,0,0,0,100,0), -- 19:46:51
+(@PATH,7,-36.04898,273.5978,-48.29856,0,0,0,0,100,0), -- 19:46:51
+(@PATH,8,-38.79898,273.0978,-48.54856,0,0,0,0,100,0), -- 19:46:51
+(@PATH,9,-39.34219,272.8535,-48.79059,0,0,0,0,100,0), -- 19:46:56
+(@PATH,10,-41.08632,250.9034,-48.67182,0,0,0,0,100,0), -- 19:47:00
+(@PATH,11,-41.49896,245.6531,-48.172,0,0,0,0,100,0), -- 19:47:05
+(@PATH,12,-41.49896,242.6531,-48.172,0,0,0,0,100,0), -- 19:47:05
+(@PATH,13,-41.49896,241.4031,-48.172,0,0,0,0,100,0), -- 19:47:05
+(@PATH,14,-41.85809,240.7104,-48.07686,0,0,0,0,100,0), -- 19:47:08
+(@PATH,15,-53.59785,238.2883,-48.27911,0,0,0,0,100,0), -- 19:47:12
+(@PATH,16,-59.84785,238.2883,-48.02911,0,0,0,0,100,0), -- 19:47:12
+(@PATH,17,-62.09785,238.2883,-48.77911,0,0,0,0,100,0), -- 19:47:12
+(@PATH,18,-64.84785,238.2883,-49.27911,0,0,0,0,100,0), -- 19:47:12
+(@PATH,19,-59.91378,238.0276,-48.03023,0,0,0,0,100,0), -- 19:47:20
+(@PATH,20,-53.66378,238.0276,-48.28023,0,0,0,0,100,0), -- 19:47:20
+(@PATH,21,-52.16378,238.0276,-48.28023,0,0,0,0,100,0), -- 19:47:20
+(@PATH,22,-49.32967,238.2136,-48.07516,0,0,0,0,100,0), -- 19:47:25
+(@PATH,23,-41.65893,245.4057,-48.07581,0,0,0,0,100,0), -- 19:47:29
+(@PATH,24,-41.10932,250.7121,-48.67118,0,0,0,0,100,0), -- 19:47:33
+(@PATH,25,-40.51412,262.4556,-48.76871,0,0,0,0,100,0), -- 19:47:37
+(@PATH,26,-34.8937,273.3388,-48.22985,0,0,0,0,100,0), -- 19:47:42
+(@PATH,27,-32.8937,273.5888,-48.47985,0,0,0,0,100,0), -- 19:47:42
+(@PATH,28,-24.87062,275.2746,-47.7992,0,0,0,0,100,0), -- 19:47:46
+(@PATH,29,-22.12062,275.7746,-47.7992,0,0,0,0,100,0), -- 19:47:46
+(@PATH,30,-18.17185,277.6628,-47.70597,0,0,0,0,100,0); -- 19:47:50
+-- 0x1C16F408C004BF000059E900028B2760 .go -15.69449 279.0179 -47.67377
+
+-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT'
+SET @NPC := 27472;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-90.22527,`position_y`=312.3529,`position_z`=-50.81741 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-90.22527,312.3529,-50.81741,0,0,0,0,100,0), -- 19:46:26
+(@PATH,2,-89.75098,303.8569,-50.53365,0,0,0,0,100,0), -- 19:46:32
+(@PATH,3,-89.58408,299.2126,-49.18354,0,0,0,0,100,0), -- 19:46:37
+(@PATH,4,-89.58408,298.2126,-48.93354,0,0,0,0,100,0), -- 19:46:37
+(@PATH,5,-89.58408,293.9626,-47.43354,0,0,0,0,100,0), -- 19:46:37
+(@PATH,6,-89.33408,291.7126,-47.43354,0,0,0,0,100,0), -- 19:46:37
+(@PATH,7,-89.01637,285.0681,-47.38007,0,0,0,0,100,0), -- 19:46:43
+(@PATH,8,-89.01088,254.6502,-47.48074,0,0,0,0,100,0), -- 19:46:50
+(@PATH,9,-89.01088,251.4002,-47.48074,0,0,0,0,100,0), -- 19:46:50
+(@PATH,10,-88.93411,260.2717,-47.48082,0,0,0,0,100,0), -- 19:46:58
+(@PATH,11,-89.04137,285.1695,-47.38035,0,0,0,0,100,0), -- 19:47:03
+(@PATH,12,-89.46567,293.7497,-47.41035,0,0,0,0,100,0), -- 19:47:12
+(@PATH,13,-89.46567,298.2497,-48.91035,0,0,0,0,100,0), -- 19:47:12
+(@PATH,14,-89.46567,299.2497,-49.16035,0,0,0,0,100,0), -- 19:47:12
+(@PATH,15,-90.22608,307.6347,-50.82426,0,0,0,0,100,0); -- 19:47:18
+-- 0x1C16F408C004BF000059E900030B2760 .go -90.22527 312.3529 -50.81741
+
+-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT'
+SET @NPC := 27471;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-107.2204,`position_y`=202.1764,`position_z`=-40.99639 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-107.2204,202.1764,-40.99639,0,0,0,0,100,0), -- 19:50:58
+(@PATH,2,-106.9112,202.3231,-40.72182,0,0,0,0,100,0), -- 19:50:59
+(@PATH,3,-102.3103,204.8115,-39.65949,0,0,0,0,100,0), -- 19:51:00
+(@PATH,4,-97.74992,214.5336,-41.63697,0,0,0,0,100,0), -- 19:51:03
+(@PATH,5,-96.3933,219.4432,-43.16748,0,0,0,0,100,0), -- 19:51:06
+(@PATH,6,-93.05585,222.2282,-44.29628,0,0,0,0,100,0), -- 19:51:08
+(@PATH,7,-91.30585,222.4782,-45.79628,0,0,0,0,100,0), -- 19:51:08
+(@PATH,8,-89.56384,221.7615,-46.28793,0,0,0,0,100,0), -- 19:51:11
+(@PATH,9,-88.31384,220.2615,-46.03793,0,0,0,0,100,0), -- 19:51:11
+(@PATH,10,-84.37595,219.1314,-47.14322,0,0,0,0,100,0), -- 19:51:14
+(@PATH,11,-82.37595,219.8814,-48.39322,0,0,0,0,100,0), -- 19:51:14
+(@PATH,12,-79.37595,220.6314,-49.39322,0,0,0,0,100,0), -- 19:51:14
+(@PATH,13,-76.82669,224.0322,-49.37569,0,0,0,0,100,0), -- 19:51:17
+(@PATH,14,-75.57669,227.0322,-49.37569,0,0,0,0,100,0), -- 19:51:17
+(@PATH,15,-74.57669,229.2822,-49.37569,0,0,0,0,100,0), -- 19:51:17
+(@PATH,16,-71.33888,233.2636,-49.4961,0,0,0,0,100,0), -- 19:51:22
+(@PATH,17,-65.08888,237.0136,-49.4961,0,0,0,0,100,0), -- 19:51:22
+(@PATH,18,-62.24201,238.0235,-48.78309,0,0,0,0,100,0), -- 19:51:27
+(@PATH,19,-59.99201,238.2735,-48.03309,0,0,0,0,100,0), -- 19:51:27
+(@PATH,20,-53.99201,238.5235,-48.03309,0,0,0,0,100,0), -- 19:51:27
+(@PATH,21,-52.93201,238.7369,-48.07719,0,0,0,0,100,0), -- 19:51:32
+(@PATH,22,-43.56981,231.3157,-48.09142,0,0,0,0,100,0), -- 19:51:35
+(@PATH,23,-42.54251,216.3974,-48.08791,0,0,0,0,100,0), -- 19:51:40
+(@PATH,24,-42.79251,212.3974,-48.08791,0,0,0,0,100,0), -- 19:51:40
+(@PATH,25,-45.2256,206.4191,-48.07826,0,0,0,0,100,0), -- 19:51:46
+(@PATH,26,-45.29718,206.2893,-48.07718,0,0,0,0,100,0), -- 19:51:51
+(@PATH,27,-42.43665,216.1878,-48.09149,0,0,0,0,100,0), -- 19:51:54
+(@PATH,28,-42.18665,219.1878,-48.09149,0,0,0,0,100,0), -- 19:51:54
+(@PATH,29,-43.43148,231.2084,-48.08014,0,0,0,0,100,0), -- 19:51:58
+(@PATH,30,-52.35088,238.3348,-48.08712,0,0,0,0,100,0), -- 19:52:03
+(@PATH,31,-59.86867,238.2005,-48.0407,0,0,0,0,100,0), -- 19:52:08
+(@PATH,32,-62.11867,237.9505,-48.7907,0,0,0,0,100,0), -- 19:52:08
+(@PATH,33,-65.00171,237.1759,-49.39082,0,0,0,0,100,0), -- 19:52:12
+(@PATH,34,-71.50171,233.1759,-49.39082,0,0,0,0,100,0), -- 19:52:12
+(@PATH,35,-74.66057,229.2685,-49.48391,0,0,0,0,100,0), -- 19:52:17
+(@PATH,36,-75.16057,227.0185,-49.48391,0,0,0,0,100,0), -- 19:52:17
+(@PATH,37,-76.66057,224.0185,-49.48391,0,0,0,0,100,0), -- 19:52:17
+(@PATH,38,-77.41057,221.7685,-49.48391,0,0,0,0,100,0), -- 19:52:17
+(@PATH,39,-79.18384,220.6745,-49.24834,0,0,0,0,100,0), -- 19:52:22
+(@PATH,40,-82.18384,219.6745,-48.24834,0,0,0,0,100,0), -- 19:52:22
+(@PATH,41,-83.43384,219.4245,-47.49834,0,0,0,0,100,0), -- 19:52:22
+(@PATH,42,-89.23185,221.8512,-46.51452,0,0,0,0,100,0), -- 19:52:25
+(@PATH,43,-92.72166,222.22,-44.23815,0,0,0,0,100,0), -- 19:52:27
+(@PATH,44,-94.97166,221.72,-43.73815,0,0,0,0,100,0), -- 19:52:27
+(@PATH,45,-96.1684,219.4541,-43.43246,0,0,0,0,100,0), -- 19:52:30
+(@PATH,46,-98.76186,211.6802,-40.79076,0,0,0,0,100,0), -- 19:52:32
+(@PATH,47,-102.1261,204.7718,-39.52556,0,0,0,0,100,0), -- 19:52:36
+(@PATH,48,-103.2557,203.5211,-39.62801,0,0,0,0,100,0); -- 19:52:39
+-- 0x1C16F408C004BF000059E900038B2760 .go -107.2204 202.1764 -40.99639
+
+-- Pathing for Stonevault Brawler Entry: 4855 'TDB FORMAT'
+SET @NPC := 30106;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9.185728,`position_y`=361.806,`position_z`=-42.52501 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,9.185728,361.806,-42.52501,0,0,0,0,100,0), -- 19:55:52
+(@PATH,2,10.68573,361.306,-42.77501,0,0,0,0,100,0), -- 19:55:52
+(@PATH,3,11.68573,361.056,-43.02501,0,0,0,0,100,0), -- 19:55:52
+(@PATH,4,14.93573,360.306,-43.27501,0,0,0,0,100,0), -- 19:55:52
+(@PATH,5,16.43573,360.056,-43.27501,0,0,0,0,100,0), -- 19:55:52
+(@PATH,6,17.27649,359.817,-43.0314,0,0,0,0,100,0), -- 19:55:56
+(@PATH,7,21.02649,359.317,-42.7814,0,0,0,0,100,0), -- 19:55:56
+(@PATH,8,22.77649,359.067,-42.5314,0,0,0,0,100,0), -- 19:55:56
+(@PATH,9,30.55592,356.7866,-42.15283,0,0,0,0,100,0), -- 19:56:01
+(@PATH,10,35.82129,353.2513,-42.55444,0,0,0,0,100,0), -- 19:56:03
+(@PATH,11,38.37708,347.7673,-42.24792,0,0,0,0,100,0), -- 19:56:05
+(@PATH,12,38.87708,346.7673,-41.99792,0,0,0,0,100,0), -- 19:56:05
+(@PATH,13,40.62708,342.7673,-42.24792,0,0,0,0,100,0), -- 19:56:05
+(@PATH,14,39.82348,338.4128,-42.98926,0,0,0,0,100,0), -- 19:56:09
+(@PATH,15,34.19891,331.8911,-42.67289,0,0,0,0,100,0), -- 19:56:13
+(@PATH,16,33.44891,331.1411,-42.17289,0,0,0,0,100,0), -- 19:56:13
+(@PATH,17,31.19891,329.6411,-41.92289,0,0,0,0,100,0), -- 19:56:13
+(@PATH,18,27.54275,327.8886,-40.85126,0,0,0,0,100,0), -- 19:56:18
+(@PATH,19,20.32842,326.7422,-39.95414,0,0,0,0,100,0), -- 19:56:19
+(@PATH,20,19.07842,326.4922,-39.95414,0,0,0,0,100,0), -- 19:56:19
+(@PATH,21,9.621592,325.83,-38.5783,0,0,0,0,100,0), -- 19:56:23
+(@PATH,22,7.871592,325.83,-38.3283,0,0,0,0,100,0), -- 19:56:23
+(@PATH,23,9.734783,325.8379,-38.52752,0,0,0,0,100,0), -- 19:56:27
+(@PATH,24,13.93066,326.2504,-38.2508,0,0,0,0,100,0), -- 19:56:31
+(@PATH,25,22.48125,319.4749,-39.35741,0,0,0,0,100,0), -- 19:56:32
+(@PATH,26,26.9873,314.6351,-39.25242,0,0,0,0,100,0), -- 19:56:37
+(@PATH,27,27.76221,314.1161,-39.14816,0,0,0,0,100,0), -- 19:56:38
+(@PATH,28,37.06132,309.7848,-38.86451,0,0,0,0,100,0), -- 19:56:41
+(@PATH,29,41.82753,309.0237,-39.42388,0,0,0,0,100,0), -- 19:56:43
+(@PATH,30,43.02345,310.306,-39.93136,0,0,0,0,100,0), -- 19:56:44
+(@PATH,31,43.73434,313.0781,-41.1359,0,0,0,0,100,0), -- 19:56:45
+(@PATH,32,43.48434,313.8281,-41.3859,0,0,0,0,100,0), -- 19:56:45
+(@PATH,33,42.98434,315.8281,-41.6359,0,0,0,0,100,0), -- 19:56:45
+(@PATH,34,42.48434,317.0781,-42.1359,0,0,0,0,100,0), -- 19:56:45
+(@PATH,35,42.1835,317.9608,-42.14388,0,0,0,0,100,0), -- 19:56:48
+(@PATH,36,40.1835,321.7108,-42.14388,0,0,0,0,100,0), -- 19:56:48
+(@PATH,37,36.3874,327.808,-42.69028,0,0,0,0,100,0), -- 19:56:52
+(@PATH,38,34.34555,331.4348,-42.79681,0,0,0,0,100,0), -- 19:56:54
+(@PATH,39,36.48765,335.1658,-43.15406,0,0,0,0,100,0), -- 19:56:55
+(@PATH,40,39.48765,338.1658,-43.15406,0,0,0,0,100,0), -- 19:56:55
+(@PATH,41,39.95882,338.9326,-42.81082,0,0,0,0,100,0), -- 19:56:59
+(@PATH,42,40.59457,346.0652,-41.82687,0,0,0,0,100,0), -- 19:57:01
+(@PATH,43,37.89469,351.2465,-42.51594,0,0,0,0,100,0), -- 19:57:02
+(@PATH,44,36.39469,353.2465,-42.51594,0,0,0,0,100,0), -- 19:57:02
+(@PATH,45,35.03273,354.4401,-42.57788,0,0,0,0,100,0), -- 19:57:06
+(@PATH,46,25.94484,356.5529,-42.75359,0,0,0,0,100,0), -- 19:57:09
+(@PATH,47,22.69484,357.5529,-43.00359,0,0,0,0,100,0), -- 19:57:09
+(@PATH,48,16.94927,359.168,-43.14427,0,0,0,0,100,0), -- 19:57:12
+(@PATH,49,11.69927,360.918,-42.89427,0,0,0,0,100,0), -- 19:57:12
+(@PATH,50,10.69927,361.168,-42.64427,0,0,0,0,100,0); -- 19:57:12
+-- 0x1C16F408C004BDC00059E900020B2760 .go 9.185728 361.806 -42.52501
+
+-- Pathing for Ancient Stone Keeper Entry: 7206 'TDB FORMAT'
+SET @NPC := 27553;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-38.42904,`position_y`=221.2527,`position_z`=-48.3663 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-38.42904,221.2527,-48.3663,3.159046,40000,0,0,100,0), -- 20:00:31
+(@PATH,2,-46.91619,220.9454,-48.09736,0,0,0,0,100,0), -- 20:01:17
+(@PATH,3,-54.90334,220.6381,-48.32841,0,40000,0,0,100,0), -- 20:01:17
+(@PATH,4,-43.16619,221.1954,-48.09736,0,0,0,0,100,0); -- 20:02:18
+-- 0x1C16F408C00709800059E900000B2760 .go -38.42904 221.2527 -48.3663
+
+-- Add animation
+DELETE FROM `creature_addon` WHERE `guid` IN (29384, 29488, 29574, 29573, 28536, 28539, 28538, 28537, 28798);
+INSERT INTO `creature_addon` (`guid`, `bytes2`, `emote`, `auras`) VALUES
+(29384, 4097, 233, NULL),
+(29488, 4097, 233, NULL),
+(29574, 4097, 233, NULL),
+(29573, 4097, 233, NULL),
+(28536, 4097, 233, NULL),
+(28539, 4097, 233, NULL),
+(28538, 4097, 233, NULL),
+(28537, 4097, 233, NULL),
+(28798, 4097, 233, NULL),
+(28544, 4097, 233, NULL),
+(28541, 4097, 233, NULL),
+(28542, 4097, 233, NULL),
+(28543, 4097, 233, NULL);
+
+-- Remove too many spawns
+DELETE FROM `creature` WHERE `guid` IN (33523, 33512, 28800, 28799, 28798, 28797, 28796, 28786);
diff --git a/src/genrev/CMakeLists.txt b/src/genrev/CMakeLists.txt
index 8ab3494cd70..e72643c6a6b 100644
--- a/src/genrev/CMakeLists.txt
+++ b/src/genrev/CMakeLists.txt
@@ -10,6 +10,6 @@
# Need to pass old ${CMAKE_BINARY_DIR} as param because its different at build stage
add_custom_target(revision.h ALL
- COMMAND ${CMAKE_COMMAND} -DNO_GIT=${WITHOUT_GIT} -DGIT_EXEC=${GIT_EXECUTABLE} -DBUILDDIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/genrev.cmake
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND "${CMAKE_COMMAND}" -DBUILDDIR="${CMAKE_BINARY_DIR}" -P "${CMAKE_SOURCE_DIR}/cmake/genrev.cmake" "${CMAKE_BINARY_DIR}"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
)
diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt
index edd87a5c347..994a645c528 100644
--- a/src/server/authserver/CMakeLists.txt
+++ b/src/server/authserver/CMakeLists.txt
@@ -43,6 +43,8 @@ endif()
include_directories(
${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
+ ${CMAKE_SOURCE_DIR}/dep/process
${CMAKE_SOURCE_DIR}/src/server/shared
${CMAKE_SOURCE_DIR}/src/server/shared/Configuration
${CMAKE_SOURCE_DIR}/src/server/shared/Database
@@ -53,6 +55,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Logging
${CMAKE_SOURCE_DIR}/src/server/shared/Networking
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Updater
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/Authentication
@@ -78,6 +81,7 @@ endif()
target_link_libraries(authserver
shared
+ format
${MYSQL_LIBRARY}
${OPENSSL_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index cd58ec2bf68..26f1c872150 100644
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -28,6 +28,7 @@
#include "Common.h"
#include "Config.h"
#include "DatabaseEnv.h"
+#include "DatabaseLoader.h"
#include "Log.h"
#include "ProcessPriority.h"
#include "RealmList.h"
@@ -150,33 +151,15 @@ bool StartDB()
{
MySQL::Library_Init();
- std::string dbstring = sConfigMgr->GetStringDefault("LoginDatabaseInfo", "");
- if (dbstring.empty())
- {
- TC_LOG_ERROR("server.authserver", "Database not specified");
- return false;
- }
-
- int32 worker_threads = sConfigMgr->GetIntDefault("LoginDatabase.WorkerThreads", 1);
- if (worker_threads < 1 || worker_threads > 32)
- {
- TC_LOG_ERROR("server.authserver", "Improper value specified for LoginDatabase.WorkerThreads, defaulting to 1.");
- worker_threads = 1;
- }
+ // Load databases
+ // NOTE: While authserver is singlethreaded you should keep synch_threads == 1.
+ // Increasing it is just silly since only 1 will be used ever.
+ DatabaseLoader loader("server.authserver", DatabaseLoader::DATABASE_NONE);
+ loader
+ .AddDatabase(LoginDatabase, "Login");
- int32 synch_threads = sConfigMgr->GetIntDefault("LoginDatabase.SynchThreads", 1);
- if (synch_threads < 1 || synch_threads > 32)
- {
- TC_LOG_ERROR("server.authserver", "Improper value specified for LoginDatabase.SynchThreads, defaulting to 1.");
- synch_threads = 1;
- }
-
- // NOTE: While authserver is singlethreaded you should keep synch_threads == 1. Increasing it is just silly since only 1 will be used ever.
- if (!LoginDatabase.Open(dbstring, uint8(worker_threads), uint8(synch_threads)))
- {
- TC_LOG_ERROR("server.authserver", "Cannot connect to database");
+ if (!loader.Load())
return false;
- }
TC_LOG_INFO("server.authserver", "Started auth database connection pool.");
sLog->SetRealmId(0); // Enables DB appenders when realm is set.
diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist
index b7dee9ac08b..ba9cb5b23b4 100644
--- a/src/server/authserver/authserver.conf.dist
+++ b/src/server/authserver/authserver.conf.dist
@@ -9,6 +9,7 @@
# EXAMPLE CONFIG
# AUTH SERVER SETTINGS
# MYSQL SETTINGS
+# UPDATE SETTINGS
# LOGGING SYSTEM SETTINGS
#
###################################################################################################
@@ -158,6 +159,89 @@ Wrong.Password.Login.Logging = 0
###################################################################################################
###################################################################################################
+# UPDATE SETTINGS
+#
+# Updates.EnableDatabases
+# Description: A mask that describes which databases shall be updated.
+#
+# Following flags are available
+# DATABASE_LOGIN = 1, // Auth database
+#
+# Default: 0 - (All Disabled)
+# 1 - (All Enabled)
+
+Updates.EnableDatabases = 0
+
+#
+# Updates.SourcePath
+# Description: The path to your TrinityCore source directory.
+# If the path is left empty, built-in CMAKE_SOURCE_DIR is used.
+# Example: "../TrinityCore"
+# Default: ""
+
+Updates.SourcePath = ""
+
+#
+# Updates.SourcePath
+# Description: The path to your mysql cli binary.
+# If the path is left empty, built-in path from cmake is used.
+# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe"
+# "mysql.exe"
+# "/usr/bin/mysql"
+# Default: ""
+
+Updates.MySqlCLIPath = ""
+
+#
+# Updates.AutoSetup
+# Description: Auto populate empty databases.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.AutoSetup = 1
+
+#
+# Updates.Redundancy
+# Description: Perform data redundancy checks through hashing
+# to detect changes on sql updates and reapply it.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.Redundancy = 1
+
+#
+# Updates.ArchivedRedundancy
+# Description: Check hashes of archived updates (slows down startup).
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Updates.ArchivedRedundancy = 0
+
+#
+# Updates.AllowRehash
+# Description: Inserts the current file hash in the database if it is left empty.
+# Useful if you want to mark a file as applied but you don't know its hash.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.AllowRehash = 1
+
+#
+# Updates.CleanDeadRefMaxCount
+# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step.
+# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value.
+# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision).
+# Disable this if you want to know if the database is in a possible "dirty state".
+# Default: 3 - (Enabled)
+# 0 - (Disabled)
+# -1 - (Enabled - unlimited)
+
+Updates.CleanDeadRefMaxCount = 3
+
+#
+###################################################################################################
+
+###################################################################################################
#
# LOGGING SYSTEM SETTINGS
#
diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt
index e3c77736d5e..150c32a15a3 100644
--- a/src/server/collision/CMakeLists.txt
+++ b/src/server/collision/CMakeLists.txt
@@ -35,6 +35,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
${CMAKE_SOURCE_DIR}/src/server/shared
${CMAKE_SOURCE_DIR}/src/server/shared/Configuration
${CMAKE_SOURCE_DIR}/src/server/shared/Debugging
diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp
index 170350d4de4..847b7bbd001 100644
--- a/src/server/collision/Management/MMapManager.cpp
+++ b/src/server/collision/Management/MMapManager.cpp
@@ -73,7 +73,7 @@ namespace MMAP
delete [] fileName;
- TC_LOG_INFO("maps", "MMAP:loadMapData: Loaded %03i.mmap", mapId);
+ TC_LOG_DEBUG("maps", "MMAP:loadMapData: Loaded %03i.mmap", mapId);
// store inside our map list
MMapData* mmap_data = new MMapData(mesh);
@@ -156,7 +156,7 @@ namespace MMAP
{
mmap->mmapLoadedTiles.insert(std::pair<uint32, dtTileRef>(packedGridPos, tileRef));
++loadedTiles;
- TC_LOG_INFO("maps", "MMAP:loadMap: Loaded mmtile %03i[%02i, %02i] into %03i[%02i, %02i]", mapId, x, y, mapId, header->x, header->y);
+ TC_LOG_DEBUG("maps", "MMAP:loadMap: Loaded mmtile %03i[%02i, %02i] into %03i[%02i, %02i]", mapId, x, y, mapId, header->x, header->y);
return true;
}
else
@@ -205,7 +205,7 @@ namespace MMAP
{
mmap->mmapLoadedTiles.erase(packedGridPos);
--loadedTiles;
- TC_LOG_INFO("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId);
+ TC_LOG_DEBUG("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId);
return true;
}
@@ -232,13 +232,13 @@ namespace MMAP
else
{
--loadedTiles;
- TC_LOG_INFO("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId);
+ TC_LOG_DEBUG("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId);
}
}
delete mmap;
loadedMMaps.erase(mapId);
- TC_LOG_INFO("maps", "MMAP:unloadMap: Unloaded %03i.mmap", mapId);
+ TC_LOG_DEBUG("maps", "MMAP:unloadMap: Unloaded %03i.mmap", mapId);
return true;
}
@@ -264,7 +264,7 @@ namespace MMAP
dtFreeNavMeshQuery(query);
mmap->navMeshQueries.erase(instanceId);
- TC_LOG_INFO("maps", "MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId);
+ TC_LOG_DEBUG("maps", "MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId);
return true;
}
@@ -295,7 +295,7 @@ namespace MMAP
return NULL;
}
- TC_LOG_INFO("maps", "MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId);
+ TC_LOG_DEBUG("maps", "MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId);
mmap->navMeshQueries.insert(std::pair<uint32, dtNavMeshQuery*>(instanceId, query));
}
diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp
index 72435594ad0..b493ec18f5f 100644
--- a/src/server/collision/Maps/MapTree.cpp
+++ b/src/server/collision/Maps/MapTree.cpp
@@ -386,13 +386,12 @@ namespace VMAP
{
if (!iLoadedSpawns.count(referencedVal))
{
-#ifdef VMAP_DEBUG
if (referencedVal > iNTreeValues)
{
- TC_LOG_DEBUG("maps", "StaticMapTree::LoadMapTile() : invalid tree element (%u/%u)", referencedVal, iNTreeValues);
+ VMAP_ERROR_LOG("maps", "StaticMapTree::LoadMapTile() : invalid tree element (%u/%u) referenced in tile %s", referencedVal, iNTreeValues, tilefile.c_str());
continue;
}
-#endif
+
iTreeValues[referencedVal] = ModelInstance(spawn, model);
iLoadedSpawns[referencedVal] = 1;
}
diff --git a/src/server/collision/Maps/TileAssembler.cpp b/src/server/collision/Maps/TileAssembler.cpp
index 06540ecdc61..ee978211577 100644
--- a/src/server/collision/Maps/TileAssembler.cpp
+++ b/src/server/collision/Maps/TileAssembler.cpp
@@ -391,6 +391,18 @@ namespace VMAP
}
}
+ if (bounds.isEmpty())
+ {
+ std::cout << "\nModel " << std::string(buff, name_length) << " has empty bounding box" << std::endl;
+ continue;
+ }
+
+ if (!bounds.isFinite())
+ {
+ std::cout << "\nModel " << std::string(buff, name_length) << " has invalid bounding box" << std::endl;
+ continue;
+ }
+
fwrite(&displayId, sizeof(uint32), 1, model_list_copy);
fwrite(&name_length, sizeof(uint32), 1, model_list_copy);
fwrite(&buff, sizeof(char), name_length, model_list_copy);
diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp
index 993c298941c..05bd5d360c6 100644
--- a/src/server/collision/Models/GameObjectModel.cpp
+++ b/src/server/collision/Models/GameObjectModel.cpp
@@ -78,6 +78,12 @@ void LoadGameObjectModelList()
break;
}
+ if (v1.isNaN() || v2.isNaN())
+ {
+ VMAP_ERROR_LOG("misc", "File '%s' Model '%s' has invalid v1%s v2%s values!", VMAP::GAMEOBJECT_MODELS, std::string(buff, name_length).c_str(), v1.toString().c_str(), v2.toString().c_str());
+ continue;
+ }
+
model_list.insert
(
ModelList::value_type( displayId, GameobjectModelData(std::string(buff, name_length), AABox(v1, v2)) )
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index e7d39d715eb..5aa6ea8ea7a 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -141,7 +141,7 @@ void UnitAI::DoCast(uint32 spellId)
{
if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
{
- bool playerOnly = (spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) != 0;
+ bool playerOnly = spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS);
target = SelectTarget(SELECT_TARGET_RANDOM, 0, spellInfo->GetMaxRange(false), playerOnly);
}
break;
@@ -156,7 +156,7 @@ void UnitAI::DoCast(uint32 spellId)
{
if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
{
- bool playerOnly = (spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) != 0;
+ bool playerOnly = spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS);
float range = spellInfo->GetMaxRange(false);
DefaultTargetSelector targetSelector(me, range, playerOnly, -(int32)spellId);
@@ -213,7 +213,7 @@ void UnitAI::FillAISpellInfo()
if (!spellInfo)
continue;
- if (spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
AIInfo->condition = AICOND_DIE;
else if (spellInfo->IsPassive() || spellInfo->GetDuration() == -1)
AIInfo->condition = AICOND_AGGRO;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index b00a24129c3..135a0fcee93 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -663,3 +663,8 @@ void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& list, WorldObject*
{
source->GetGameObjectListWithEntryInGrid(list, entry, maxSearchRange);
}
+
+void GetPlayerListInGrid(std::list<Player*>& list, WorldObject* source, float maxSearchRange)
+{
+ source->GetPlayerListInGrid(list, maxSearchRange);
+}
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index cff628a847e..1a4c3064a59 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -425,5 +425,6 @@ Creature* GetClosestCreatureWithEntry(WorldObject* source, uint32 entry, float m
GameObject* GetClosestGameObjectWithEntry(WorldObject* source, uint32 entry, float maxSearchRange);
void GetCreatureListWithEntryInGrid(std::list<Creature*>& list, WorldObject* source, uint32 entry, float maxSearchRange);
void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& list, WorldObject* source, uint32 entry, float maxSearchRange);
+void GetPlayerListInGrid(std::list<Player*>& list, WorldObject* source, float maxSearchRange);
#endif // SCRIPTEDCREATURE_H_
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index e7e5f53f7a2..58b25781035 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -3167,7 +3167,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
std::list<Creature*> list;
me->GetCreatureListWithEntryInGrid(list, e.event.distance.entry, (float)e.event.distance.dist);
- if (list.size() > 0)
+ if (!list.empty())
creature = list.front();
}
@@ -3198,7 +3198,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
std::list<GameObject*> list;
me->GetGameObjectListWithEntryInGrid(list, e.event.distance.entry, (float)e.event.distance.dist);
- if (list.size() > 0)
+ if (!list.empty())
gameobject = list.front();
}
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index c1fde9f53d3..51106d7cfe1 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -55,6 +55,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: // only hardcoded list
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
@@ -700,58 +701,100 @@ void AchievementMgr::CheckAllAchievementCriteria()
}
static const uint32 achievIdByArenaSlot[MAX_ARENA_SLOT] = { 1057, 1107, 1108 };
-static const uint32 achievIdForDungeon[][4] =
-{
- // ach_cr_id, is_dungeon, is_raid, is_heroic_dungeon
- { 321, true, true, true },
- { 916, false, true, false },
- { 917, false, true, false },
- { 918, true, false, false },
- { 2219, false, false, true },
- { 0, false, false, false }
-};
/**
* this function will be called whenever the user might have done a criteria relevant action
*/
void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 /*= 0*/, uint32 miscValue2 /*= 0*/, Unit* unit /*= NULL*/)
{
- TC_LOG_DEBUG("achievement", "AchievementMgr::UpdateAchievementCriteria(%u, %u, %u)", type, miscValue1, miscValue2);
+ if (type >= ACHIEVEMENT_CRITERIA_TYPE_TOTAL)
+ {
+ TC_LOG_DEBUG("achievement", "UpdateAchievementCriteria: Wrong criteria type %u", type);
+ return;
+ }
// disable for gamemasters with GM-mode enabled
if (m_player->IsGameMaster())
+ {
+ TC_LOG_DEBUG("achievement", "UpdateAchievementCriteria: [Player %s GM mode on] %s, %s (%u), %u, %u"
+ , m_player->GetName().c_str(), m_player->GetGUID().ToString().c_str(), AchievementGlobalMgr::GetCriteriaTypeString(type), type, miscValue1, miscValue2);
return;
+ }
+
+ TC_LOG_DEBUG("achievement", "UpdateAchievementCriteria: %s, %s (%u), %u, %u"
+ , m_player->GetGUID().ToString().c_str(), AchievementGlobalMgr::GetCriteriaTypeString(type), type, miscValue1, miscValue2);
AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByType(type);
- for (AchievementCriteriaEntryList::const_iterator i = achievementCriteriaList.begin(); i != achievementCriteriaList.end(); ++i)
+ for (AchievementCriteriaEntry const* achievementCriteria : achievementCriteriaList)
{
- AchievementCriteriaEntry const* achievementCriteria = (*i);
AchievementEntry const* achievement = sAchievementMgr->GetAchievement(achievementCriteria->referredAchievement);
if (!achievement)
continue;
- if (!CanUpdateCriteria(achievementCriteria, achievement))
+ if (!CanUpdateCriteria(achievementCriteria, achievement, miscValue1, miscValue2, unit))
continue;
switch (type)
{
+ // special cases, db data is checked later
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA:
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT:
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT:
+ break;
+ default:
+ if (AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria))
+ if (!data->Meets(GetPlayer(), unit, miscValue1))
+ continue;
+ break;
+ }
+
+ switch (type)
+ {
// std. case: increment at 1
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
+ case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
+ case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
+ case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET:
+ case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
+ case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
+ case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA:
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA: // This also behaves like ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA
+ case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL:
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
+ case ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS:
+ case ACHIEVEMENT_CRITERIA_TYPE_HK_RACE:
+ case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE:
+ case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
case ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS:
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT:
+ case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2:
+ case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL:
+ case ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT:
+ case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN:
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL:
case ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL:
case ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION:
- case ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS: /* FIXME: for online player only currently */
+ case ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS: /* FIXME: for online player only currently */
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM:
+ case ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM:
case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED:
case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED:
case ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED:
case ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN:
+ case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
case ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS:
case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
break;
// std case: increment at miscvalue1
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
+ case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE:
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
+ case ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE:
case ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS:
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS:
case ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD:
@@ -759,14 +802,19 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER:
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL:
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY:
- case ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS:/* FIXME: for online player only currently */
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS: /* FIXME: for online player only currently */
case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED:
case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_ACCUMULATE);
break;
+ // std case: increment at miscvalue2
+ case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
+ case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM:
+ case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
+ SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE);
+ break;
// std case: high value at miscvalue1
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID:
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD: /* FIXME: for online player only currently */
@@ -774,92 +822,27 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED:
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST:
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_HIGHEST);
break;
-
- // specialized cases
- case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
-
- if (achievement->categoryId == CATEGORY_CHILDRENS_WEEK)
- {
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), NULL))
- continue;
- }
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- if (achievementCriteria->win_bg.bgMapID != GetPlayer()->GetMapId())
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- if (achievementCriteria->kill_creature.creatureID != miscValue1)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE);
+ // std. case: set at 1
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL:
+ case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA:
+ case ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP:
+ case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM:
+ case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM:
+ SetCriteriaProgress(achievementCriteria, 1, PROGRESS_SET);
break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue2)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit, miscValue1))
- continue;
- SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE);
- break;
- }
+ // specialized cases
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:
- // update at loading or specific skill update
- if (miscValue1 && miscValue1 != achievementCriteria->reach_skill_level.skillID)
- continue;
if (uint32 skillvalue = GetPlayer()->GetBaseSkillValue(achievementCriteria->reach_skill_level.skillID))
SetCriteriaProgress(achievementCriteria, skillvalue);
break;
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL:
- // update at loading or specific skill update
- if (miscValue1 && miscValue1 != achievementCriteria->learn_skill_level.skillID)
- continue;
if (uint32 maxSkillvalue = GetPlayer()->GetPureMaxSkillValue(achievementCriteria->learn_skill_level.skillID))
SetCriteriaProgress(achievementCriteria, maxSkillvalue);
break;
@@ -868,14 +851,12 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
SetCriteriaProgress(achievementCriteria, 1);
break;
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT:
- {
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetRewardedQuestCount());
break;
- }
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY:
{
time_t nextDailyResetTime = sWorld->GetNextDailyQuestsResetTime();
- CriteriaProgress *progress = GetCriteriaProgress(achievementCriteria);
+ CriteriaProgress const* progress = GetCriteriaProgress(achievementCriteria);
if (!miscValue1) // Login case.
{
@@ -904,10 +885,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
}
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE:
{
- // speedup for non-login case
- if (miscValue1 && miscValue1 != achievementCriteria->complete_quests_in_zone.zoneID)
- continue;
-
uint32 counter = 0;
const RewardedQuestSet &rewQuests = GetPlayer()->getRewardedQuests();
@@ -920,231 +897,11 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
SetCriteriaProgress(achievementCriteria, counter);
break;
}
- case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- if (GetPlayer()->GetMapId() != achievementCriteria->complete_battleground.mapID)
- continue;
- SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- if (GetPlayer()->GetMapId() != achievementCriteria->death_at_map.mapID)
- continue;
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- // skip wrong arena achievements, if not achievIdByArenaSlot then normal total death counter
- bool notfit = false;
- for (int j = 0; j < MAX_ARENA_SLOT; ++j)
- {
- if (achievIdByArenaSlot[j] == achievement->ID)
- {
- Battleground* bg = GetPlayer()->GetBattleground();
- if (!bg || !bg->isArena() || ArenaTeam::GetSlotByType(bg->GetArenaType()) != j)
- notfit = true;
-
- break;
- }
- }
- if (notfit)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
-
- Map const* map = GetPlayer()->IsInWorld() ? GetPlayer()->GetMap() : sMapMgr->FindMap(GetPlayer()->GetMapId(), GetPlayer()->GetInstanceId());
- if (!map || !map->IsDungeon())
- continue;
-
- // search case
- bool found = false;
- for (int j = 0; achievIdForDungeon[j][0]; ++j)
- {
- if (achievIdForDungeon[j][0] == achievement->ID)
- {
- if (map->IsRaid())
- {
- // if raid accepted (ignore difficulty)
- if (!achievIdForDungeon[j][2])
- break; // for
- }
- else if (GetPlayer()->GetDungeonDifficulty() == DUNGEON_DIFFICULTY_NORMAL)
- {
- // dungeon in normal mode accepted
- if (!achievIdForDungeon[j][1])
- break; // for
- }
- else
- {
- // dungeon in heroic mode accepted
- if (!achievIdForDungeon[j][3])
- break; // for
- }
-
- found = true;
- break; // for
- }
- }
- if (!found)
- continue;
-
- //FIXME: work only for instances where max == min for players
- if (map->ToInstanceMap()->GetMaxPlayers() != achievementCriteria->death_in_dungeon.manLimit)
- continue;
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
-
- }
- case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- if (miscValue1 != achievementCriteria->killed_by_creature.creatureEntry)
- continue;
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
-
- // if team check required: must kill by opposition faction
- if (achievement->ID == 318 && miscValue2 == GetPlayer()->GetTeam())
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
-
// miscvalue1 is the ingame fallheight*100 as stored in dbc
SetCriteriaProgress(achievementCriteria, miscValue1);
break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- if (miscValue2 != achievementCriteria->death_from.type)
- continue;
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
- {
- // if miscvalues != 0, it contains the questID.
- if (miscValue1)
- {
- if (miscValue1 != achievementCriteria->complete_quest.questID)
- continue;
- }
- else
- {
- // login case.
- if (!GetPlayer()->GetQuestRewardStatus(achievementCriteria->complete_quest.questID))
- continue;
- }
-
- if (AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria))
- if (!data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET:
- case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2:
- {
- if (!miscValue1 || miscValue1 != achievementCriteria->be_spell_target.spellID)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data)
- continue;
-
- if (!data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
- case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
- {
- if (!miscValue1 || miscValue1 != achievementCriteria->cast_spell.spellID)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data)
- continue;
-
- if (!data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL:
- if (miscValue1 && miscValue1 != achievementCriteria->learn_spell.spellID)
- continue;
-
- if (GetPlayer()->HasSpell(achievementCriteria->learn_spell.spellID))
- SetCriteriaProgress(achievementCriteria, 1);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
- {
- // miscvalue1=loot_type (note: 0 = LOOT_CORPSE and then it ignored)
- // miscvalue2=count of item loot
- if (!miscValue1 || !miscValue2)
- continue;
- if (miscValue1 != achievementCriteria->loot_type.lootType)
- continue;
-
- // zone specific
- if (achievementCriteria->loot_type.lootTypeCount == 1)
- {
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
- }
-
- SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
- // speedup for non-login case
- if (miscValue1 && achievementCriteria->own_item.itemID != miscValue1)
- continue;
- SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE);
- break;
case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA:
- if (!miscValue1) // no update at login
- continue;
-
// additional requirements
if (achievementCriteria->additionalRequirements[0].additionalRequirement_type == ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE)
{
@@ -1160,198 +917,36 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
break;
- case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
-
- if (achievementCriteria->use_item.itemID != miscValue1)
- continue;
-
- // Children's Week achievements have extra requirements
- if (achievement->categoryId == CATEGORY_CHILDRENS_WEEK)
- {
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), NULL))
- continue;
- }
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM:
- // You _have_ to loot that item, just owning it when logging in does _not_ count!
- if (!miscValue1)
- continue;
- if (miscValue1 != achievementCriteria->own_item.itemID)
- continue;
- SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA:
- {
- WorldMapOverlayEntry const* worldOverlayEntry = sWorldMapOverlayStore.LookupEntry(achievementCriteria->explore_area.areaReference);
- if (!worldOverlayEntry)
- break;
-
- bool matchFound = false;
- for (int j = 0; j < MAX_WORLD_MAP_OVERLAY_AREA_IDX; ++j)
- {
- uint32 area_id = worldOverlayEntry->areatableID[j];
- if (!area_id) // array have 0 only in empty tail
- break;
-
- int32 exploreFlag = GetAreaFlagByAreaID(area_id);
- if (exploreFlag < 0)
- continue;
-
- uint32 playerIndexOffset = uint32(exploreFlag) / 32;
- uint32 mask = 1<< (uint32(exploreFlag) % 32);
-
- if (GetPlayer()->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask)
- {
- matchFound = true;
- break;
- }
- }
-
- if (matchFound)
- SetCriteriaProgress(achievementCriteria, 1);
- break;
- }
case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetBankBagSlotCount());
break;
case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION:
{
- // skip faction check only at loading
- if (miscValue1 && miscValue1 != achievementCriteria->gain_reputation.factionID)
- continue;
-
int32 reputation = GetPlayer()->GetReputationMgr().GetReputation(achievementCriteria->gain_reputation.factionID);
if (reputation > 0)
SetCriteriaProgress(achievementCriteria, reputation);
break;
}
case ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION:
- {
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetReputationMgr().GetExaltedFactionCount());
break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP:
- {
- // skip for login case
- if (!miscValue1)
- continue;
- SetCriteriaProgress(achievementCriteria, 1);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM:
- {
- // miscvalue1 = itemid
- // miscvalue2 = itemSlot
- if (!miscValue1)
- continue;
-
- if (miscValue2 != achievementCriteria->equip_epic_item.itemSlot)
- continue;
-
- // check item level and quality via achievement_criteria_data
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), nullptr, miscValue1))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1);
- break;
- }
case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT:
case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT:
{
- // miscvalue1 = itemid
- // miscvalue2 = diced value
- if (!miscValue1)
- continue;
- if (miscValue2 != achievementCriteria->roll_greed_on_loot.rollValue)
- continue;
-
- ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(miscValue1);
- if (!pProto)
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(miscValue1);
+ if (!proto)
continue;
// check item level via achievement_criteria_data
AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), nullptr, pProto->ItemLevel))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE:
- {
- // miscvalue1 = emote
- if (!miscValue1)
- continue;
- if (miscValue1 != achievementCriteria->do_emote.emoteID)
+ if (!data || !data->Meets(GetPlayer(), nullptr, proto->ItemLevel))
continue;
- if (achievementCriteria->do_emote.count)
- {
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
- }
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
break;
}
- case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE:
- case ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE:
- {
- if (!miscValue1)
- continue;
-
- if (achievementCriteria->additionalRequirements[0].additionalRequirement_type == ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP)
- {
- if (GetPlayer()->GetMapId() != achievementCriteria->additionalRequirements[0].additionalRequirement_value)
- continue;
-
- // map specific case (BG in fact) expected player targeted damage/heal
- if (!unit || unit->GetTypeId() != TYPEID_PLAYER)
- continue;
- }
-
- SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM:
- // miscvalue1 = item_id
- if (!miscValue1)
- continue;
- if (miscValue1 != achievementCriteria->equip_item.itemID)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT:
- // miscvalue1 = go entry
- if (!miscValue1)
- continue;
- if (miscValue1 != achievementCriteria->use_gameobject.goEntry)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT:
- if (!miscValue1)
- continue;
- if (miscValue1 != achievementCriteria->fish_in_gameobject.goEntry)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS:
{
- if (miscValue1 && miscValue1 != achievementCriteria->learn_skillline_spell.skillLine)
- continue;
-
uint32 spellCount = 0;
for (PlayerSpellMap::const_iterator spellIter = GetPlayer()->GetSpellMap().begin();
spellIter != GetPlayer()->GetSpellMap().end();
@@ -1367,24 +962,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
SetCriteriaProgress(achievementCriteria, spellCount);
break;
}
- case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL:
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
-
- if (achievementCriteria->win_duel.duelCount)
- {
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data)
- continue;
-
- if (!data->Meets(GetPlayer(), unit))
- continue;
- }
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION:
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetReputationMgr().GetReveredFactionCount());
break;
@@ -1394,23 +971,8 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
case ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS:
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetReputationMgr().GetVisibleFactionCount());
break;
- case ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM:
- case ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM:
- {
- // AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
- if (!miscValue1)
- continue;
- ItemTemplate const* proto = sObjectMgr->GetItemTemplate(miscValue1);
- if (!proto || proto->Quality < ITEM_QUALITY_EPIC)
- continue;
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE:
{
- if (miscValue1 && miscValue1 != achievementCriteria->learn_skill_line.skillLine)
- continue;
-
uint32 spellCount = 0;
for (PlayerSpellMap::const_iterator spellIter = GetPlayer()->GetSpellMap().begin();
spellIter != GetPlayer()->GetSpellMap().end();
@@ -1427,72 +989,21 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
case ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL:
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
break;
- case ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS:
- if (!miscValue1 || miscValue1 != achievementCriteria->hk_class.classID)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_HK_RACE:
- if (!miscValue1 || miscValue1 != achievementCriteria->hk_race.raceID)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED:
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetMoney(), PROGRESS_HIGHEST);
break;
case ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS:
- {
if (!miscValue1)
{
uint32 points = 0;
- for (CompletedAchievementMap::iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr)
- if (AchievementEntry const* pAchievement = sAchievementMgr->GetAchievement(itr->first))
- points += pAchievement->points;
+ for (CompletedAchievementMap::const_iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr)
+ if (AchievementEntry const* completedAchievements = sAchievementMgr->GetAchievement(itr->first))
+ points += completedAchievements->points;
SetCriteriaProgress(achievementCriteria, points, PROGRESS_SET);
}
else
SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_ACCUMULATE);
break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
- {
- if (!miscValue1 || miscValue1 != achievementCriteria->bg_objective.objectiveId)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL:
- case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL:
- case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
- {
- // skip login update
- if (!miscValue1)
- continue;
-
- // those requirements couldn't be found in the dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA:
- {
- if (!miscValue1 || miscValue1 != achievementCriteria->honorable_kill_at_area.areaID)
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING:
{
uint32 reqTeamType = achievementCriteria->highest_team_rating.teamtype;
@@ -1504,7 +1015,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_HIGHEST);
}
- else // login case
+ else // login case
{
for (uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot)
{
@@ -1520,7 +1031,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
break;
}
}
-
break;
}
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING:
@@ -1534,7 +1044,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_HIGHEST);
}
- else // login case
+ else // login case
{
for (uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot)
{
@@ -1556,27 +1066,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
break;
}
- case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA: // This also behaves like ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA
- {
- // Check map id requirement
- if (miscValue1 == achievementCriteria->win_arena.mapID)
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN:
- {
- // This criteria is only called directly after login - with expected miscvalue1 == 1
- if (!miscValue1)
- continue;
-
- // They have no proper requirements in dbc
- AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria);
- if (!data || !data->Meets(GetPlayer(), unit))
- continue;
-
- SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
- break;
- }
// std case: not exist in DBC, not triggered in code as result
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH:
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER:
@@ -2019,7 +1508,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement->ID))
return;
- TC_LOG_INFO("achievement", "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)",
+ TC_LOG_DEBUG("achievement", "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)",
achievement->ID, m_player->GetName().c_str(), m_player->GetGUIDLow());
SendAchievementEarned(achievement);
@@ -2140,18 +1629,53 @@ bool AchievementMgr::HasAchieved(uint32 achievementId) const
return m_completedAchievements.find(achievementId) != m_completedAchievements.end();
}
-bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement)
+bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement, uint32 miscValue1, uint32 miscValue2, Unit const* unit)
{
- if (DisableMgr::IsDisabledFor(DISABLE_TYPE_ACHIEVEMENT_CRITERIA, criteria->ID, NULL))
+ if (DisableMgr::IsDisabledFor(DISABLE_TYPE_ACHIEVEMENT_CRITERIA, criteria->ID, nullptr))
+ {
+ TC_LOG_TRACE("achievement", "CanUpdateCriteria: (Id: %u Type %s) Disabled",
+ criteria->ID, AchievementGlobalMgr::GetCriteriaTypeString(criteria->requiredType));
return false;
+ }
if (achievement->mapID != -1 && GetPlayer()->GetMapId() != uint32(achievement->mapID))
+ {
+ TC_LOG_TRACE("achievement", "CanUpdateCriteria: (Id: %u Type %s Achievement %u) Wrong map",
+ criteria->ID, AchievementGlobalMgr::GetCriteriaTypeString(criteria->requiredType), achievement->ID);
return false;
+ }
if ((achievement->requiredFaction == ACHIEVEMENT_FACTION_HORDE && GetPlayer()->GetTeam() != HORDE) ||
(achievement->requiredFaction == ACHIEVEMENT_FACTION_ALLIANCE && GetPlayer()->GetTeam() != ALLIANCE))
+ {
+ TC_LOG_TRACE("achievement", "CanUpdateCriteria: (Id: %u Type %s Achievement %u) Wrong faction",
+ criteria->ID, AchievementGlobalMgr::GetCriteriaTypeString(criteria->requiredType), achievement->ID);
return false;
+ }
+
+ if (!RequirementsSatisfied(criteria, achievement, miscValue1, miscValue2, unit))
+ {
+ TC_LOG_TRACE("achievement", "CanUpdateCriteria: (Id: %u Type %s) Requirements not satisfied",
+ criteria->ID, AchievementGlobalMgr::GetCriteriaTypeString(criteria->requiredType));
+ return false;
+ }
+ if (!ConditionsSatisfied(criteria))
+ {
+ TC_LOG_TRACE("achievement", "CanUpdateCriteria: (Id: %u Type %s) Conditions not satisfied",
+ criteria->ID, AchievementGlobalMgr::GetCriteriaTypeString(criteria->requiredType));
+ return false;
+ }
+
+ // don't update already completed criteria
+ if (IsCompletedCriteria(criteria, achievement))
+ return false;
+
+ return true;
+}
+
+bool AchievementMgr::ConditionsSatisfied(AchievementCriteriaEntry const* criteria) const
+{
for (uint32 i = 0; i < MAX_CRITERIA_REQUIREMENTS; ++i)
{
if (!criteria->additionalRequirements[i].additionalRequirement_type)
@@ -2172,13 +1696,558 @@ bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria,
}
}
- // don't update already completed criteria
- if (IsCompletedCriteria(criteria, achievement))
- return false;
+ return true;
+}
+
+bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement, uint32 miscValue1, uint32 miscValue2, Unit const* unit) const
+{
+ switch (AchievementCriteriaTypes(achievementCriteria->requiredType))
+ {
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
+ case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
+ case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL:
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA:
+ case ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP:
+ case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
+ case ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS:
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS:
+ case ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS:
+ case ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD:
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING:
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER:
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL:
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY:
+ case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL:
+ case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN:
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL:
+ case ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL:
+ case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS:
+ case ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID:
+ case ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD:
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED:
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED:
+ case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST:
+ case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED:
+ case ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED:
+ case ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN:
+ case ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS:
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS:
+ if (!miscValue1)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT:
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING:
+ case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION:
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION:
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION:
+ case ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS:
+ case ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL:
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED:
+ case ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS:
+ break;
+
+ // specialized cases
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
+ if (!miscValue1)
+ return false;
+ if (achievementCriteria->win_bg.bgMapID != GetPlayer()->GetMapId())
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
+ if (!miscValue1)
+ return false;
+ if (achievementCriteria->kill_creature.creatureID != miscValue1)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL:
+ if (miscValue1 && miscValue1 != achievementCriteria->reach_skill_level.skillID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL:
+ if (miscValue1 && miscValue1 != achievementCriteria->learn_skill_level.skillID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE:
+ if (miscValue1 && miscValue1 != achievementCriteria->complete_quests_in_zone.zoneID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
+ if (!miscValue1)
+ return false;
+ if (GetPlayer()->GetMapId() != achievementCriteria->complete_battleground.mapID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
+ if (!miscValue1)
+ return false;
+ if (GetPlayer()->GetMapId() != achievementCriteria->death_at_map.mapID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
+ if (!miscValue1)
+ return false;
+ for (uint8 j = 0; j < MAX_ARENA_SLOT; ++j)
+ {
+ if (achievIdByArenaSlot[j] == achievement->ID)
+ {
+ Battleground* bg = GetPlayer()->GetBattleground();
+ if (!bg || !bg->isArena() || ArenaTeam::GetSlotByType(bg->GetArenaType()) != j)
+ return false;
+ break;
+ }
+ }
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
+ {
+ if (!miscValue1)
+ return false;
+
+ Map const* map = GetPlayer()->IsInWorld() ? GetPlayer()->GetMap() : sMapMgr->FindMap(GetPlayer()->GetMapId(), GetPlayer()->GetInstanceId());
+ if (!map || !map->IsDungeon())
+ return false;
+
+ //FIXME: work only for instances where max == min for players
+ if (map->ToInstanceMap()->GetMaxPlayers() != achievementCriteria->death_in_dungeon.manLimit)
+ return false;
+ break;
+ }
+ case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
+ if (!miscValue1)
+ return false;
+ if (miscValue1 != achievementCriteria->killed_by_creature.creatureEntry)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
+ if (!miscValue1)
+ return false;
+ // if team check required: must kill by opposition faction
+ if (achievement->ID == 318 && miscValue2 == GetPlayer()->GetTeam())
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
+ if (!miscValue1)
+ return false;
+ if (miscValue2 != achievementCriteria->death_from.type)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
+ // if miscvalues != 0, it contains the questID.
+ if (miscValue1)
+ {
+ if (miscValue1 != achievementCriteria->complete_quest.questID)
+ return false;
+ }
+ else
+ {
+ // login case.
+ if (!GetPlayer()->GetQuestRewardStatus(achievementCriteria->complete_quest.questID))
+ return false;
+ }
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET:
+ case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2:
+ if (!miscValue1 || miscValue1 != achievementCriteria->be_spell_target.spellID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
+ case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
+ if (!miscValue1 || miscValue1 != achievementCriteria->cast_spell.spellID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL:
+ if (miscValue1 && miscValue1 != achievementCriteria->learn_spell.spellID)
+ return false;
+ if (!GetPlayer()->HasSpell(achievementCriteria->learn_spell.spellID))
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
+ // miscvalue1=loot_type (note: 0 = LOOT_CORPSE and then it ignored)
+ // miscvalue2=count of item loot
+ if (!miscValue1 || !miscValue2)
+ return false;
+ if (miscValue1 != achievementCriteria->loot_type.lootType)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
+ if (miscValue1 && achievementCriteria->own_item.itemID != miscValue1)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
+ if (!miscValue1)
+ return false;
+ if (achievementCriteria->use_item.itemID != miscValue1)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM:
+ if (!miscValue1)
+ return false;
+ if (miscValue1 != achievementCriteria->own_item.itemID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA:
+ {
+ WorldMapOverlayEntry const* worldOverlayEntry = sWorldMapOverlayStore.LookupEntry(achievementCriteria->explore_area.areaReference);
+ if (!worldOverlayEntry)
+ return false;
+
+ bool matchFound = false;
+ for (int j = 0; j < MAX_WORLD_MAP_OVERLAY_AREA_IDX; ++j)
+ {
+ uint32 area_id = worldOverlayEntry->areatableID[j];
+ if (!area_id) // array have 0 only in empty tail
+ break;
+
+ int32 exploreFlag = GetAreaFlagByAreaID(area_id);
+ if (exploreFlag < 0)
+ continue;
+
+ uint32 playerIndexOffset = uint32(exploreFlag) / 32;
+ uint32 mask = 1 << (uint32(exploreFlag) % 32);
+
+ if (GetPlayer()->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask)
+ {
+ matchFound = true;
+ break;
+ }
+ }
+
+ if (!matchFound)
+ return false;
+ break;
+ }
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION:
+ if (miscValue1 && miscValue1 != achievementCriteria->gain_reputation.factionID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM:
+ // miscvalue1 = itemid
+ // miscvalue2 = itemSlot
+ if (!miscValue1)
+ return false;
+ if (miscValue2 != achievementCriteria->equip_epic_item.itemSlot)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT:
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT:
+ // miscvalue1 = itemid
+ // miscvalue2 = diced value
+ if (!miscValue1)
+ return false;
+ if (miscValue2 != achievementCriteria->roll_greed_on_loot.rollValue)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE:
+ // miscvalue1 = emote
+ if (!miscValue1)
+ return false;
+ if (miscValue1 != achievementCriteria->do_emote.emoteID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE:
+ case ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE:
+ if (!miscValue1)
+ return false;
+
+ if (achievementCriteria->additionalRequirements[0].additionalRequirement_type == ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP)
+ {
+ if (GetPlayer()->GetMapId() != achievementCriteria->additionalRequirements[0].additionalRequirement_value)
+ return false;
+
+ // map specific case (BG in fact) expected player targeted damage/heal
+ if (!unit || unit->GetTypeId() != TYPEID_PLAYER)
+ return false;
+ }
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM:
+ if (!miscValue1)
+ return false;
+ if (miscValue1 != achievementCriteria->equip_item.itemID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT:
+ if (!miscValue1)
+ return false;
+ if (miscValue1 != achievementCriteria->use_gameobject.goEntry)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT:
+ if (!miscValue1)
+ return false;
+ if (miscValue1 != achievementCriteria->fish_in_gameobject.goEntry)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS:
+ if (miscValue1 && miscValue1 != achievementCriteria->learn_skillline_spell.skillLine)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM:
+ case ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM:
+ {
+ if (!miscValue1)
+ return false;
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(miscValue1);
+ if (!proto || proto->Quality < ITEM_QUALITY_EPIC)
+ return false;
+ break;
+ }
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE:
+ if (miscValue1 && miscValue1 != achievementCriteria->learn_skill_line.skillLine)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS:
+ if (!miscValue1 || miscValue1 != achievementCriteria->hk_class.classID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_HK_RACE:
+ if (!miscValue1 || miscValue1 != achievementCriteria->hk_race.raceID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
+ if (!miscValue1 || miscValue1 != achievementCriteria->bg_objective.objectiveId)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA:
+ if (!miscValue1 || miscValue1 != achievementCriteria->honorable_kill_at_area.areaID)
+ return false;
+ break;
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA:
+ if (miscValue1 != achievementCriteria->win_arena.mapID)
+ return false;
+ break;
+ default:
+ break;
+ }
return true;
}
+char const* AchievementGlobalMgr::GetCriteriaTypeString(uint32 type)
+{
+ return GetCriteriaTypeString(AchievementCriteriaTypes(type));
+}
+
+char const* AchievementGlobalMgr::GetCriteriaTypeString(AchievementCriteriaTypes type)
+{
+ switch (type)
+ {
+ case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
+ return "KILL_CREATURE";
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
+ return "TYPE_WIN_BG";
+ case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
+ return "REACH_LEVEL";
+ case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL:
+ return "REACH_SKILL_LEVEL";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
+ return "COMPLETE_ACHIEVEMENT";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT:
+ return "COMPLETE_QUEST_COUNT";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY:
+ return "COMPLETE_DAILY_QUEST_DAILY";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE:
+ return "COMPLETE_QUESTS_IN_ZONE";
+ case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE:
+ return "DAMAGE_DONE";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
+ return "COMPLETE_DAILY_QUEST";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
+ return "COMPLETE_BATTLEGROUND";
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
+ return "DEATH_AT_MAP";
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
+ return "DEATH";
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
+ return "DEATH_IN_DUNGEON";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID:
+ return "COMPLETE_RAID";
+ case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
+ return "KILLED_BY_CREATURE";
+ case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
+ return "KILLED_BY_PLAYER";
+ case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
+ return "FALL_WITHOUT_DYING";
+ case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
+ return "DEATHS_FROM";
+ case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
+ return "COMPLETE_QUEST";
+ case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET:
+ return "BE_SPELL_TARGET";
+ case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
+ return "CAST_SPELL";
+ case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
+ return "BG_OBJECTIVE_CAPTURE";
+ case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA:
+ return "HONORABLE_KILL_AT_AREA";
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA:
+ return "WIN_ARENA";
+ case ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA:
+ return "PLAY_ARENA";
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL:
+ return "LEARN_SPELL";
+ case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL:
+ return "HONORABLE_KILL";
+ case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
+ return "OWN_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA:
+ return "WIN_RATED_ARENA";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING:
+ return "HIGHEST_TEAM_RATING";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING:
+ return "HIGHEST_PERSONAL_RATING";
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL:
+ return "LEARN_SKILL_LEVEL";
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
+ return "USE_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM:
+ return "LOOT_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA:
+ return "EXPLORE_AREA";
+ case ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK:
+ return "OWN_RANK";
+ case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
+ return "BUY_BANK_SLOT";
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION:
+ return "GAIN_REPUTATION";
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION:
+ return "GAIN_EXALTED_REPUTATION";
+ case ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP:
+ return "VISIT_BARBER_SHOP";
+ case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM:
+ return "EQUIP_EPIC_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT:
+ return "ROLL_NEED_ON_LOOT";
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT:
+ return "GREED_ON_LOOT";
+ case ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS:
+ return "HK_CLASS";
+ case ACHIEVEMENT_CRITERIA_TYPE_HK_RACE:
+ return "HK_RACE";
+ case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE:
+ return "DO_EMOTE";
+ case ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE:
+ return "HEALING_DONE";
+ case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
+ return "GET_KILLING_BLOWS";
+ case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM:
+ return "EQUIP_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS:
+ return "MONEY_FROM_VENDORS";
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS:
+ return "GOLD_SPENT_FOR_TALENTS";
+ case ACHIEVEMENT_CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS:
+ return "NUMBER_OF_TALENT_RESETS";
+ case ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD:
+ return "MONEY_FROM_QUEST_REWARD";
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING:
+ return "GOLD_SPENT_FOR_TRAVELLING";
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER:
+ return "GOLD_SPENT_AT_BARBER";
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL:
+ return "GOLD_SPENT_FOR_MAIL";
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY:
+ return "LOOT_MONEY";
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT:
+ return "USE_GAMEOBJECT";
+ case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2:
+ return "BE_SPELL_TARGET2";
+ case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL:
+ return "SPECIAL_PVP_KILL";
+ case ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT:
+ return "FISH_IN_GAMEOBJECT";
+ case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN:
+ return "ON_LOGIN";
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS:
+ return "LEARN_SKILLLINE_SPELLS";
+ case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL:
+ return "WIN_DUEL";
+ case ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL:
+ return "LOSE_DUEL";
+ case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE:
+ return "KILL_CREATURE_TYPE";
+ case ACHIEVEMENT_CRITERIA_TYPE_GOLD_EARNED_BY_AUCTIONS:
+ return "GOLD_EARNED_BY_AUCTIONS";
+ case ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION:
+ return "CREATE_AUCTION";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID:
+ return "HIGHEST_AUCTION_BID";
+ case ACHIEVEMENT_CRITERIA_TYPE_WON_AUCTIONS:
+ return "WON_AUCTIONS";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_SOLD:
+ return "HIGHEST_AUCTION_SOLD";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED:
+ return "HIGHEST_GOLD_VALUE_OWNED";
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION:
+ return "GAIN_REVERED_REPUTATION";
+ case ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION:
+ return "GAIN_HONORED_REPUTATION";
+ case ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS:
+ return "KNOWN_FACTIONS";
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_EPIC_ITEM:
+ return "LOOT_EPIC_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_RECEIVE_EPIC_ITEM:
+ return "RECEIVE_EPIC_ITEM";
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED:
+ return "ROLL_NEED";
+ case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED:
+ return "ROLL_GREED";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH:
+ return "HIGHEST_HEALTH";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER:
+ return "HIGHEST_POWER";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT:
+ return "HIGHEST_STAT";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER:
+ return "HIGHEST_SPELLPOWER";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_ARMOR:
+ return "HIGHEST_ARMOR";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING:
+ return "HIGHEST_RATING";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT:
+ return "HIT_DEALT";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_RECEIVED:
+ return "HIT_RECEIVED";
+ case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_DAMAGE_RECEIVED:
+ return "TOTAL_DAMAGE_RECEIVED";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEAL_CAST:
+ return "HIGHEST_HEAL_CAST";
+ case ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED:
+ return "TOTAL_HEALING_RECEIVED";
+ case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED:
+ return "HIGHEST_HEALING_RECEIVED";
+ case ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED:
+ return "QUEST_ABANDONED";
+ case ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN:
+ return "FLIGHT_PATHS_TAKEN";
+ case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE:
+ return "LOOT_TYPE";
+ case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
+ return "CAST_SPELL2";
+ case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE:
+ return "LEARN_SKILL_LINE";
+ case ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL:
+ return "EARN_HONORABLE_KILL";
+ case ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS:
+ return "ACCEPTED_SUMMONINGS";
+ case ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS:
+ return "EARN_ACHIEVEMENT_POINTS";
+ case ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS:
+ return "USE_LFD_TO_GROUP_WITH_PLAYERS";
+ }
+ return "MISSING_TYPE";
+}
+
//==========================================================
void AchievementGlobalMgr::LoadAchievementCriteriaList()
{
@@ -2357,7 +2426,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData()
AchievementEntry const* achievement = sAchievementMgr->GetAchievement(criteria->referredAchievement);
if (!achievement)
continue;
- if (achievement->categoryId != CATEGORY_CHILDRENS_WEEK)
+ if (achievement->categoryId != CATEGORY_CHILDRENS_WEEK && achievement->ID != 1785)
continue;
break;
}
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index f8869757e50..078229ea4c8 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -293,9 +293,12 @@ class AchievementMgr
void CompletedCriteriaFor(AchievementEntry const* achievement);
bool IsCompletedCriteria(AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement);
bool IsCompletedAchievement(AchievementEntry const* entry);
- bool CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement);
+ bool CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement, uint32 miscValue1, uint32 miscValue2, Unit const* unit);
void BuildAllDataPacket(WorldPacket* data) const;
+ bool ConditionsSatisfied(AchievementCriteriaEntry const* criteria) const;
+ bool RequirementsSatisfied(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement, uint32 miscValue1, uint32 miscValue2, Unit const* unit) const;
+
Player* m_player;
CriteriaProgressMap m_criteriaProgress;
CompletedAchievementMap m_completedAchievements;
@@ -309,6 +312,9 @@ class AchievementGlobalMgr
~AchievementGlobalMgr() { }
public:
+ static char const* GetCriteriaTypeString(AchievementCriteriaTypes type);
+ static char const* GetCriteriaTypeString(uint32 type);
+
static AchievementGlobalMgr* instance()
{
static AchievementGlobalMgr instance;
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index ac2ceb78346..0235aa7e8b6 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -440,8 +440,6 @@ bool AuctionHouseObject::RemoveAuction(AuctionEntry* auction)
// we need to delete the entry, it is not referenced any more
delete auction;
- auction = NULL;
-
return wasInMap;
}
@@ -469,7 +467,7 @@ void AuctionHouseObject::Update()
continue;
///- Either cancel the auction if there was no bidder
- if (auction->bidder == 0)
+ if (auction->bidder == 0 && auction->bid == 0)
{
sAuctionMgr->SendAuctionExpiredMail(auction, trans);
sScriptMgr->OnAuctionExpire(this, auction);
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp
index 7e8ccb4bb23..c0c753100bc 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp
@@ -204,14 +204,24 @@ void AuctionBotConfig::GetConfigFromFile()
SetConfig(CONFIG_AHBOT_MINTIME, "AuctionHouseBot.MinTime", 1);
SetConfig(CONFIG_AHBOT_MAXTIME, "AuctionHouseBot.MaxTime", 72);
- SetConfigMinMax(CONFIG_AHBOT_BUYER_CHANCE_RATIO_ALLIANCE, "AuctionHouseBot.Buyer.Alliance.Chance.Ratio", 3, 1, 100);
- SetConfigMinMax(CONFIG_AHBOT_BUYER_CHANCE_RATIO_HORDE, "AuctionHouseBot.Buyer.Horde.Chance.Ratio", 3, 1, 100);
- SetConfigMinMax(CONFIG_AHBOT_BUYER_CHANCE_RATIO_NEUTRAL, "AuctionHouseBot.Buyer.Neutral.Chance.Ratio", 3, 1, 100);
SetConfigMinMax(CONFIG_AHBOT_BUYER_RECHECK_INTERVAL, "AuctionHouseBot.Buyer.Recheck.Interval", 20, 1, DAY / MINUTE);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_GRAY, "AuctionHouseBot.Buyer.Baseprice.Gray", 3504);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_WHITE, "AuctionHouseBot.Buyer.Baseprice.White", 5429);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_GREEN, "AuctionHouseBot.Buyer.Baseprice.Green", 21752);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_BLUE, "AuctionHouseBot.Buyer.Baseprice.Blue", 36463);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_PURPLE, "AuctionHouseBot.Buyer.Baseprice.Purple", 87124);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_ORANGE, "AuctionHouseBot.Buyer.Baseprice.Orange", 214347);
+ SetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_YELLOW, "AuctionHouseBot.Buyer.Baseprice.Yellow", 407406);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GRAY, "AuctionHouseBot.Buyer.ChanceMultiplier.Gray", 100);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_WHITE, "AuctionHouseBot.Buyer.ChanceMultiplier.White", 100);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GREEN, "AuctionHouseBot.Buyer.ChanceMultiplier.Green", 100);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_BLUE, "AuctionHouseBot.Buyer.ChanceMultiplier.Blue", 100);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_PURPLE, "AuctionHouseBot.Buyer.ChanceMultiplier.Purple", 100);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_ORANGE, "AuctionHouseBot.Buyer.ChanceMultiplier.Orange", 100);
+ SetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_YELLOW, "AuctionHouseBot.Buyer.ChanceMultiplier.Yellow", 100);
SetConfig(CONFIG_AHBOT_SELLER_ENABLED, "AuctionHouseBot.Seller.Enabled", false);
SetConfig(CONFIG_AHBOT_BUYER_ENABLED, "AuctionHouseBot.Buyer.Enabled", false);
- SetConfig(CONFIG_AHBOT_BUYPRICE_BUYER, "AuctionHouseBot.Buyer.Buyprice", true);
SetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_REQ_LEVEL, "AuctionHouseBot.Class.Misc.Mount.ReqLevel.Min", 0);
SetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MAX_REQ_LEVEL, "AuctionHouseBot.Class.Misc.Mount.ReqLevel.Max", 0);
@@ -229,7 +239,7 @@ void AuctionBotConfig::GetConfigFromFile()
char const* AuctionBotConfig::GetHouseTypeName(AuctionHouseType houseType)
{
- static char const* names[MAX_AUCTION_HOUSE_TYPE] = { "Alliance", "Horde", "Neutral" };
+ static char const* names[MAX_AUCTION_HOUSE_TYPE] = { "Neutral", "Alliance", "Horde" };
return names[houseType];
}
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.h b/src/server/game/AuctionHouseBot/AuctionHouseBot.h
index 964262579e6..d7570c37d44 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBot.h
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.h
@@ -39,9 +39,9 @@ enum AuctionQuality
enum AuctionHouseType
{
- AUCTION_HOUSE_ALLIANCE = 0,
- AUCTION_HOUSE_HORDE = 1,
- AUCTION_HOUSE_NEUTRAL = 2
+ AUCTION_HOUSE_NEUTRAL = 0,
+ AUCTION_HOUSE_ALLIANCE = 1,
+ AUCTION_HOUSE_HORDE = 2
};
#define MAX_AUCTION_HOUSE_TYPE 3
@@ -110,10 +110,21 @@ enum AuctionBotConfigUInt32Values
CONFIG_AHBOT_CLASS_PERMANENT_PRICE_RATIO,
CONFIG_AHBOT_CLASS_MISC_PRICE_RATIO,
CONFIG_AHBOT_CLASS_GLYPH_PRICE_RATIO,
- CONFIG_AHBOT_BUYER_CHANCE_RATIO_ALLIANCE,
- CONFIG_AHBOT_BUYER_CHANCE_RATIO_HORDE,
- CONFIG_AHBOT_BUYER_CHANCE_RATIO_NEUTRAL,
CONFIG_AHBOT_BUYER_RECHECK_INTERVAL,
+ CONFIG_AHBOT_BUYER_BASEPRICE_GRAY,
+ CONFIG_AHBOT_BUYER_BASEPRICE_WHITE,
+ CONFIG_AHBOT_BUYER_BASEPRICE_GREEN,
+ CONFIG_AHBOT_BUYER_BASEPRICE_BLUE,
+ CONFIG_AHBOT_BUYER_BASEPRICE_PURPLE,
+ CONFIG_AHBOT_BUYER_BASEPRICE_ORANGE,
+ CONFIG_AHBOT_BUYER_BASEPRICE_YELLOW,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GRAY,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_WHITE,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GREEN,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_BLUE,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_PURPLE,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_ORANGE,
+ CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_YELLOW,
CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_REQ_LEVEL,
CONFIG_AHBOT_CLASS_MISC_MOUNT_MAX_REQ_LEVEL,
CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_SKILL_RANK,
@@ -143,7 +154,6 @@ enum AuctionBotConfigBoolValues
CONFIG_AHBOT_BIND_USE,
CONFIG_AHBOT_BIND_QUEST,
CONFIG_AHBOT_BUYPRICE_SELLER,
- CONFIG_AHBOT_BUYPRICE_BUYER,
CONFIG_AHBOT_SELLER_ENABLED,
CONFIG_AHBOT_BUYER_ENABLED,
CONFIG_AHBOT_LOCKBOX_ENABLED,
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
index af60316cbec..64463948574 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
@@ -20,7 +20,7 @@
#include "ItemPrototype.h"
#include "AuctionHouseBotBuyer.h"
-AuctionBotBuyer::AuctionBotBuyer(): _checkInterval(20)
+AuctionBotBuyer::AuctionBotBuyer() : _checkInterval(20 * MINUTE)
{
// Define faction for our main data class.
for (int i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
@@ -48,391 +48,394 @@ bool AuctionBotBuyer::Initialize()
if (!activeHouse)
return false;
- //load Check interval
+ // load Check interval
_checkInterval = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_RECHECK_INTERVAL) * MINUTE;
- TC_LOG_DEBUG("ahbot", "AHBot buyer interval between 2 check = %u", _checkInterval);
+ TC_LOG_DEBUG("ahbot", "AHBot buyer interval is %u minutes", _checkInterval / MINUTE);
return true;
}
-void AuctionBotBuyer::LoadBuyerValues(BuyerConfiguration& config)
+void AuctionBotBuyer::LoadConfig()
{
- uint32 factionChance;
-
- switch (config.GetHouseType())
+ for (int i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
{
- case AUCTION_HOUSE_ALLIANCE:
- config.BuyerPriceRatio = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_ALLIANCE_PRICE_RATIO) + 50;
- factionChance = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCE_RATIO_ALLIANCE);
- break;
- case AUCTION_HOUSE_HORDE:
- config.BuyerPriceRatio = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_HORDE_PRICE_RATIO) + 50;
- factionChance = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCE_RATIO_HORDE);
- break;
- default:
- config.BuyerPriceRatio = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_NEUTRAL_PRICE_RATIO) + 50;
- factionChance = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCE_RATIO_NEUTRAL);
- break;
+ _houseConfig[i].BuyerEnabled = sAuctionBotConfig->GetConfigBuyerEnabled(AuctionHouseType(i));
+ if (_houseConfig[i].BuyerEnabled)
+ LoadBuyerValues(_houseConfig[i]);
}
+}
+
+void AuctionBotBuyer::LoadBuyerValues(BuyerConfiguration& /* config */)
+{
- config.FactionChance = 5000 * factionChance;
}
-void AuctionBotBuyer::LoadConfig()
+// Makes an AHbot buyer cycle for AH type if necessary
+bool AuctionBotBuyer::Update(AuctionHouseType houseType)
{
- for (int i = 0; i < MAX_AUCTION_HOUSE_TYPE; ++i)
+ if (!sAuctionBotConfig->GetConfigBuyerEnabled(houseType))
+ return false;
+
+ TC_LOG_DEBUG("ahbot", "AHBot: %s buying ...", AuctionBotConfig::GetHouseTypeName(houseType));
+
+ BuyerConfiguration& config = _houseConfig[houseType];
+ uint32 eligibleItems = GetItemInformation(config);
+ if (eligibleItems)
{
- _houseConfig[i].BuyerEnabled = sAuctionBotConfig->GetConfigBuyerEnabled(AuctionHouseType(i));
- if (_houseConfig[i].BuyerEnabled)
- LoadBuyerValues(_houseConfig[i]);
+ // Prepare list of items to bid or buy - remove old items
+ PrepareListOfEntry(config);
+ // Process buying and bidding items
+ BuyAndBidItems(config);
}
+
+ return true;
}
-uint32 AuctionBotBuyer::GetBuyableEntry(BuyerConfiguration& config)
+// Collects information about item counts and minimum prices to SameItemInfo and updates EligibleItems - a list with new items eligible for bot to buy and bid
+// Returns count of items in AH that were eligible for being bought or bidded on by ahbot buyer (EligibleItems size)
+uint32 AuctionBotBuyer::GetItemInformation(BuyerConfiguration& config)
{
config.SameItemInfo.clear();
- uint32 count = 0;
time_t now = time(nullptr);
+ uint32 count = 0;
AuctionHouseObject* house = sAuctionMgr->GetAuctionsMap(config.GetHouseType());
for (AuctionHouseObject::AuctionEntryMap::const_iterator itr = house->GetAuctionsBegin(); itr != house->GetAuctionsEnd(); ++itr)
{
AuctionEntry* entry = itr->second;
Item* item = sAuctionMgr->GetAItem(entry->itemGUIDLow);
- if (item)
+ if (!item)
+ continue;
+
+ BuyerItemInfo& itemInfo = config.SameItemInfo[item->GetEntry()];
+
+ // Update item entry's count and total bid prices
+ // This can be used later to determine the prices and chances to bid
+ uint32 itemBidPrice = entry->startbid / item->GetCount();
+ itemInfo.TotalBidPrice = itemInfo.TotalBidPrice + itemBidPrice;
+ itemInfo.BidItemCount++;
+
+ // Set minimum bid price
+ if (!itemInfo.MinBidPrice)
+ itemInfo.MinBidPrice = itemBidPrice;
+ else
+ itemBidPrice = std::min(itemInfo.MinBidPrice, itemBidPrice);
+
+ // Set minimum buyout price if item has buyout
+ if (entry->buyout)
+ {
+ // Update item entry's count and total buyout prices
+ // This can be used later to determine the prices and chances to buyout
+ uint32 itemBuyPrice = entry->buyout / item->GetCount();
+ itemInfo.TotalBuyPrice = itemInfo.TotalBuyPrice + itemBuyPrice;
+ itemInfo.BuyItemCount++;
+
+ if (!itemInfo.MinBuyPrice)
+ itemInfo.MinBuyPrice = itemBuyPrice;
+ else
+ itemInfo.MinBuyPrice = std::min(itemInfo.MinBuyPrice, itemBuyPrice);
+ }
+
+ // Add/update to EligibleItems if:
+ // has a bid by player or
+ // has no bids and not owned by bot
+ if ((entry->bid && entry->bidder) || (entry->owner && !entry->bid))
{
- ItemTemplate const * prototype = item->GetTemplate();
- if (prototype)
- {
- ++config.SameItemInfo[item->GetEntry()].ItemCount; // Structure constructor will make sure Element are correctly initialized if entry is created here.
- config.SameItemInfo[item->GetEntry()].BuyPrice = config.SameItemInfo[item->GetEntry()].BuyPrice + (itr->second->buyout / item->GetCount());
- config.SameItemInfo[item->GetEntry()].BidPrice = config.SameItemInfo[item->GetEntry()].BidPrice + (itr->second->startbid / item->GetCount());
- if (itr->second->buyout != 0)
- {
- if (itr->second->buyout / item->GetCount() < config.SameItemInfo[item->GetEntry()].MinBuyPrice)
- config.SameItemInfo[item->GetEntry()].MinBuyPrice = itr->second->buyout / item->GetCount();
- else if (config.SameItemInfo[item->GetEntry()].MinBuyPrice == 0)
- config.SameItemInfo[item->GetEntry()].MinBuyPrice = itr->second->buyout / item->GetCount();
- }
- if (itr->second->startbid / item->GetCount() < config.SameItemInfo[item->GetEntry()].MinBidPrice)
- config.SameItemInfo[item->GetEntry()].MinBidPrice = itr->second->startbid / item->GetCount();
- else if (config.SameItemInfo[item->GetEntry()].MinBidPrice == 0)
- config.SameItemInfo[item->GetEntry()].MinBidPrice = itr->second->startbid / item->GetCount();
-
- if (!entry->owner)
- {
-
- if (entry->bid != 0 && entry->bidder) // Add bid by player
- {
- config.CheckedEntry[entry->Id].LastExist = now;
- config.CheckedEntry[entry->Id].AuctionId = entry->Id;
- ++count;
- }
- }
- else
- {
- if (entry->bid != 0)
- {
- if (entry->bidder)
- {
- config.CheckedEntry[entry->Id].LastExist = now;
- config.CheckedEntry[entry->Id].AuctionId = entry->Id;
- ++count;
- }
- }
- else
- {
- config.CheckedEntry[entry->Id].LastExist = now;
- config.CheckedEntry[entry->Id].AuctionId = entry->Id;
- ++count;
- }
- }
- }
+ config.EligibleItems[entry->Id].LastExist = now;
+ config.EligibleItems[entry->Id].AuctionId = entry->Id;
+ ++count;
}
}
- TC_LOG_DEBUG("ahbot", "AHBot: %u items added to buyable vector for ah type: %u", count, config.GetHouseType());
+ TC_LOG_DEBUG("ahbot", "AHBot: %u items added to buyable/biddable vector for ah type: %u", count, config.GetHouseType());
TC_LOG_DEBUG("ahbot", "AHBot: SameItemInfo size = %u", (uint32)config.SameItemInfo.size());
return count;
}
-void AuctionBotBuyer::PrepareListOfEntry(BuyerConfiguration& config)
+// ahInfo can be NULL
+bool AuctionBotBuyer::RollBuyChance(const BuyerItemInfo* ahInfo, const Item* item, const AuctionEntry* auction, uint32 /*bidPrice*/)
{
- time_t now = time(nullptr) - 5;
+ if (!auction->buyout)
+ return false;
- for (CheckEntryMap::iterator itr = config.CheckedEntry.begin(); itr != config.CheckedEntry.end();)
- {
- if (itr->second.LastExist < (now - 5))
- config.CheckedEntry.erase(itr++);
- else
- ++itr;
- }
+ uint32 itemBuyPrice = auction->buyout / item->GetCount();
+ uint32 itemPrice = item->GetTemplate()->SellPrice ? item->GetTemplate()->SellPrice : GetVendorPrice(item->GetTemplate()->Quality);
+ // The AH cut needs to be added to the price, but we dont want a 100% chance to buy if the price is exactly AH default
+ itemPrice *= 1.4f;
- TC_LOG_DEBUG("ahbot", "AHBot: CheckedEntry size = %u", (uint32)config.CheckedEntry.size());
-}
+ // This value is between 0 and 100 and is used directly as the chance to buy or bid
+ // Value equal or above 100 means 100% chance and value below 0 means 0% chance
+ float chance = 100 / sqrt(itemBuyPrice / float(itemPrice));
-bool AuctionBotBuyer::IsBuyableEntry(uint32 buyoutPrice, double inGameBuyPrice, uint32 maxBuyablePrice, uint32 minBuyPrice, uint32 maxChance, uint32 chanceRatio)
-{
- double ratio = 0;
- uint32 chance = 0;
+ // If a player has bidded on item, have fifth of normal chance
+ if (auction->bidder)
+ chance = chance / 5;
- if (buyoutPrice <= minBuyPrice)
+ if (ahInfo)
{
- if (buyoutPrice <= maxBuyablePrice)
- chance = maxChance;
- else
- {
+ float avgBuyPrice = ahInfo->TotalBuyPrice / float(ahInfo->BuyItemCount);
- if (buyoutPrice > 0 && maxBuyablePrice > 0)
- {
- ratio = double(buyoutPrice) / double(maxBuyablePrice);
- if (ratio < 10)
- chance = maxChance - (ratio * maxChance / 10);
- else
- chance = 1;
- }
- }
- }
- else if (buyoutPrice <= inGameBuyPrice)
- {
- if (buyoutPrice <= maxBuyablePrice)
- chance = maxChance / 5;
- else
- {
+ TC_LOG_DEBUG("ahbot", "AHBot: buyout average: %.1f items with buyout: %u", avgBuyPrice, ahInfo->BuyItemCount);
- if (buyoutPrice > 0 && maxBuyablePrice > 0)
- {
- ratio = double(buyoutPrice) / double(maxBuyablePrice);
- if (ratio < 10)
- chance = (maxChance / 5) - (ratio * maxChance / 50);
- else
- chance = 1;
- }
- }
- }
- else if (buyoutPrice <= maxBuyablePrice)
- chance = maxChance / 10;
- else
- {
- if (buyoutPrice > 0 && maxBuyablePrice > 0)
+ // If there are more than 5 items on AH of this entry, try weigh in the average buyout price
+ if (ahInfo->BuyItemCount > 5)
{
- ratio = double(buyoutPrice) / double(maxBuyablePrice);
- if (ratio < 10)
- chance = (maxChance / 5) - (ratio* maxChance / 50);
- else
- chance = 0;
+ chance *= 1 / sqrt(itemBuyPrice / avgBuyPrice);
}
- else
- chance = 0;
}
- if (urand(1, chanceRatio) <= chance)
- {
- TC_LOG_DEBUG("ahbot", "AHBot: WIN BUY! Chance = %u, num = %u.", chance, chanceRatio);
- return true;
- }
- else
- {
- TC_LOG_DEBUG("ahbot", "AHBot: LOOSE BUY! Chance = %u, num = %u.", chance, chanceRatio);
- return false;
- }
+ // Add config weigh in for quality
+ chance *= GetChanceMultiplier(item->GetTemplate()->Quality) / 100.0f;
+
+ float rand = frand(0, 100);
+ bool win = rand <= chance;
+ TC_LOG_DEBUG("ahbot", "AHBot: %s BUY! chance = %.2f, price = %u, buyprice = %u.", win ? "WIN" : "LOSE", chance, itemPrice, itemBuyPrice);
+ return win;
}
-bool AuctionBotBuyer::IsBidableEntry(uint32 bidPrice, double inGameBuyPrice, double maxBidablePrice, uint32 minBidPrice, uint32 maxChance, uint32 chanceRatio)
+// ahInfo can be NULL
+bool AuctionBotBuyer::RollBidChance(const BuyerItemInfo* ahInfo, const Item* item, const AuctionEntry* auction, uint32 bidPrice)
{
- double ratio = 0;
- uint32 chance = 0;
+ uint32 itemBidPrice = bidPrice / item->GetCount();
+ uint32 itemPrice = item->GetTemplate()->SellPrice ? item->GetTemplate()->SellPrice : GetVendorPrice(item->GetTemplate()->Quality);
+ // The AH cut needs to be added to the price, but we dont want a 100% chance to buy if the price is exactly AH default
+ itemPrice *= 1.4f;
- if (bidPrice <= minBidPrice)
- {
- if (inGameBuyPrice != 0 && bidPrice < inGameBuyPrice - (inGameBuyPrice / 30))
- chance = maxChance;
- else
- {
- if (bidPrice < maxBidablePrice)
- {
- ratio = maxBidablePrice / bidPrice;
- if (ratio < 3)
- chance = maxChance / 500 * ratio;
- else
- chance = maxChance / 500;
- }
- }
- }
- else if (bidPrice < (inGameBuyPrice - (inGameBuyPrice / 30)))
- chance = (maxChance / 10);
- else
+ // This value is between 0 and 100 and is used directly as the chance to buy or bid
+ // Value equal or above 100 means 100% chance and value below 0 means 0% chance
+ float chance = 100 / sqrt(itemBidPrice / float(itemPrice));
+
+ if (ahInfo)
{
- if (bidPrice < maxBidablePrice)
+ float avgBidPrice = ahInfo->TotalBidPrice / float(ahInfo->BidItemCount);
+
+ TC_LOG_DEBUG("ahbot", "AHBot: Bid average: %.1f biddable item count: %u", avgBidPrice, ahInfo->BidItemCount);
+
+ // If there are more than 5 items on AH of this entry, try weigh in the average bid price
+ if (ahInfo->BidItemCount >= 5)
{
- ratio = maxBidablePrice / bidPrice;
- if (ratio < 4)
- chance = maxChance / 1000 * ratio;
- else
- chance = maxChance / 1000;
+ chance *= 1 / sqrt(itemBidPrice / avgBidPrice);
}
}
- if (urand(1, chanceRatio) <= chance)
- {
- TC_LOG_DEBUG("ahbot", "AHBot: WIN BID! Chance = %u, num = %u.", chance, chanceRatio);
- return true;
- }
- else
- {
- TC_LOG_DEBUG("ahbot", "AHBot: LOOSE BID! Chance = %u, num = %u.", chance, chanceRatio);
- return false;
- }
-}
+ // If a player has bidded on item, have fifth of normal chance
+ if (auction->bidder)
+ chance = chance / 5;
-void AuctionBotBuyer::PlaceBidToEntry(AuctionEntry* auction, uint32 bidPrice)
-{
- TC_LOG_DEBUG("ahbot", "AHBot: Bid placed to entry %u, %.2fg", auction->Id, float(bidPrice) / 10000.0f);
- auction->bid = bidPrice;
+ // Add config weigh in for quality
+ chance *= GetChanceMultiplier(item->GetTemplate()->Quality) / 100.0f;
+
+ float rand = frand(0, 100);
+ bool win = rand <= chance;
+ TC_LOG_DEBUG("ahbot", "AHBot: %s BID! chance = %.2f, price = %u, bidprice = %u.", win ? "WIN" : "LOSE", chance, itemPrice, itemBidPrice);
+ return win;
}
-void AuctionBotBuyer::BuyEntry(AuctionEntry* auction)
+// Removes items from EligibleItems that we shouldnt buy or bid on
+// The last existed time on them should be older than now
+void AuctionBotBuyer::PrepareListOfEntry(BuyerConfiguration& config)
{
- TC_LOG_DEBUG("ahbot", "AHBot: Entry %u bought at %.2fg", auction->Id, float(auction->buyout) / 10000.0f);
- auction->bid = auction->buyout;
+ // now - 5 seconds to leave out all old entries but keep the ones just updated a moment ago
+ time_t now = time(nullptr) - 5;
+
+ for (CheckEntryMap::iterator itr = config.EligibleItems.begin(); itr != config.EligibleItems.end();)
+ {
+ if (itr->second.LastExist < now)
+ config.EligibleItems.erase(itr++);
+ else
+ ++itr;
+ }
+
+ TC_LOG_DEBUG("ahbot", "AHBot: EligibleItems size = %u", (uint32)config.EligibleItems.size());
}
-void AuctionBotBuyer::AddNewAuctionBuyerBotBid(BuyerConfiguration& config)
+// Tries to bid and buy items based on their prices and chances set in configs
+void AuctionBotBuyer::BuyAndBidItems(BuyerConfiguration& config)
{
+ time_t now = time(nullptr);
AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(config.GetHouseType());
+ CheckEntryMap& items = config.EligibleItems;
- PrepareListOfEntry(config);
-
- time_t now = time(nullptr);
- uint32 buyCycles;
- if (config.CheckedEntry.size() > sAuctionBotConfig->GetItemPerCycleBoost())
+ // Max amount of items to buy or bid
+ uint32 cycles = sAuctionBotConfig->GetItemPerCycleNormal();
+ if (items.size() > sAuctionBotConfig->GetItemPerCycleBoost())
{
- buyCycles = sAuctionBotConfig->GetItemPerCycleBoost();
+ // set more cycles if there is a huge influx of items
+ cycles = sAuctionBotConfig->GetItemPerCycleBoost();
TC_LOG_DEBUG("ahbot", "AHBot: Boost value used for Buyer! (if this happens often adjust both ItemsPerCycle in worldserver.conf)");
}
- else
- buyCycles = sAuctionBotConfig->GetItemPerCycleNormal();
- for (CheckEntryMap::iterator itr = config.CheckedEntry.begin(); itr != config.CheckedEntry.end();)
+ // Process items eligible to be bidded or bought
+ CheckEntryMap::iterator itr = items.begin();
+ while (cycles && itr != items.end())
{
AuctionEntry* auction = auctionHouse->GetAuction(itr->second.AuctionId);
- if (!auction) // is auction not active now
+ if (!auction)
{
- TC_LOG_DEBUG("ahbot", "AHBot: Entry %u doesn't exists, perhaps bought already?",
- itr->second.AuctionId);
-
- config.CheckedEntry.erase(itr++);
+ TC_LOG_DEBUG("ahbot", "AHBot: Entry %u doesn't exists, perhaps bought already?", itr->second.AuctionId);
+ items.erase(itr++);
continue;
}
- if (itr->second.LastChecked != 0 && (now - itr->second.LastChecked) <= _checkInterval)
+ // Check if the item has been checked once before
+ // If it has been checked and it was recently, skip it
+ if (itr->second.LastChecked && (now - itr->second.LastChecked) <= _checkInterval)
{
TC_LOG_DEBUG("ahbot", "AHBot: In time interval wait for entry %u!", auction->Id);
++itr;
continue;
}
- if (buyCycles == 0)
- break;
-
- uint32 maxChance = 5000;
-
Item* item = sAuctionMgr->GetAItem(auction->itemGUIDLow);
- if (!item) // auction item not accessible, possible auction in payment pending mode
+ if (!item)
{
- config.CheckedEntry.erase(itr++);
+ // auction item not accessible, possible auction in payment pending mode
+ items.erase(itr++);
continue;
}
- ItemTemplate const* prototype = item->GetTemplate();
-
- uint32 basePrice = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYPRICE_BUYER) ? prototype->BuyPrice : prototype->SellPrice;
- basePrice *= item->GetCount();
-
- uint32 maxBuyablePrice = (basePrice * config.BuyerPriceRatio) / 100;
- BuyerItemInfoMap::iterator sameItemItr = config.SameItemInfo.find(item->GetEntry());
- uint32 buyoutPrice = auction->buyout / item->GetCount();
-
+ // price to bid if bidding
uint32 bidPrice;
- uint32 bidPriceByItem;
- uint32 minBidPrice;
- uint32 minBuyPrice;
if (auction->bid >= auction->startbid)
{
- bidPrice = auction->GetAuctionOutBid();
- bidPriceByItem = auction->bid / item->GetCount();
+ // get bid price to outbid previous bidder
+ bidPrice = auction->bid + auction->GetAuctionOutBid();
}
else
{
+ // no previous bidders - use starting bid
bidPrice = auction->startbid;
- bidPriceByItem = auction->startbid / item->GetCount();
}
- double inGameBuyPrice;
- double inGameBidPrice;
- if (sameItemItr == config.SameItemInfo.end())
- {
- inGameBuyPrice = 0;
- inGameBidPrice = 0;
- minBidPrice = 0;
- minBuyPrice = 0;
- }
- else
- {
- if (sameItemItr->second.ItemCount == 1)
- maxBuyablePrice = maxBuyablePrice * 5; // if only one item exist can be bought if the price is high too.
- inGameBuyPrice = sameItemItr->second.BuyPrice / sameItemItr->second.ItemCount;
- inGameBidPrice = sameItemItr->second.BidPrice / sameItemItr->second.ItemCount;
- minBidPrice = sameItemItr->second.MinBidPrice;
- minBuyPrice = sameItemItr->second.MinBuyPrice;
- }
+ const BuyerItemInfo* ahInfo = nullptr;
+ BuyerItemInfoMap::const_iterator sameItemItr = config.SameItemInfo.find(item->GetEntry());
+ if (sameItemItr != config.SameItemInfo.end())
+ ahInfo = &sameItemItr->second;
- uint32 maxBidablePrice = maxBuyablePrice - (maxBuyablePrice / 30); // Max Bidable price defined to 70% of max buyable price
+ TC_LOG_DEBUG("ahbot", "AHBot: Rolling for AHentry %u:", auction->Id);
- TC_LOG_DEBUG("ahbot", "AHBot: Auction added with data:");
- TC_LOG_DEBUG("ahbot", "AHBot: MaxPrice of Entry %u is %.1fg.", itr->second.AuctionId, double(maxBuyablePrice) / 10000.0);
- TC_LOG_DEBUG("ahbot", "AHBot: GamePrice buy=%.1fg, bid=%.1fg.", inGameBuyPrice / 10000, inGameBidPrice / 10000);
- TC_LOG_DEBUG("ahbot", "AHBot: Minimal price see in AH Buy=%ug, Bid=%ug.",
- minBuyPrice / 10000, minBidPrice / 10000);
- TC_LOG_DEBUG("ahbot", "AHBot: Actual Entry price, Buy=%ug, Bid=%ug.", buyoutPrice / 10000, bidPrice / 10000);
+ // Roll buy and bid chances
+ bool successBuy = RollBuyChance(ahInfo, item, auction, bidPrice);
+ bool successBid = RollBidChance(ahInfo, item, auction, bidPrice);
- if (!auction->owner) // Original auction owner
- maxChance = maxChance / 5; // if Owner is AHBot this mean player placed bid on this auction. We divide by 5 chance for AhBuyer to place bid on it. (This make more challenge than ignore entry)
- if (auction->buyout != 0) // Is the item directly buyable?
- {
- if (IsBuyableEntry(buyoutPrice, inGameBuyPrice, maxBuyablePrice, minBuyPrice, maxChance, config.FactionChance))
- {
- if (IsBidableEntry(bidPriceByItem, inGameBuyPrice, maxBidablePrice, minBidPrice, maxChance / 2, config.FactionChance))
- {
- if (urand(0, 5) == 0)
- PlaceBidToEntry(auction, bidPrice);
- else
- BuyEntry(auction);
- }
- else
- BuyEntry(auction);
- }
- else if (IsBidableEntry(bidPriceByItem, inGameBuyPrice, maxBidablePrice, minBidPrice, maxChance / 2, config.FactionChance))
- PlaceBidToEntry(auction, bidPrice);
- }
- else if (IsBidableEntry(bidPriceByItem, inGameBuyPrice, maxBidablePrice, minBidPrice, maxChance, config.FactionChance))
- PlaceBidToEntry(auction, bidPrice);
+ // If roll bidding succesfully and bid price is above buyout -> buyout
+ // If roll for buying was successful but not for bid, buyout directly
+ // If roll bidding was also successful, buy the entry with 20% chance
+ // - Better bid than buy since the item is bought by bot if no player bids after
+ // Otherwise bid if roll for bid was successful
+ if ((auction->buyout && successBid && bidPrice >= auction->buyout) ||
+ (successBuy && (!successBid || urand(1, 5) == 1)))
+ BuyEntry(auction, auctionHouse); // buyout
+ else if (successBid)
+ PlaceBidToEntry(auction, bidPrice); // bid
itr->second.LastChecked = now;
- --buyCycles;
-
+ --cycles;
++itr;
}
+
+ // Clear not needed entries
+ config.SameItemInfo.clear();
}
-bool AuctionBotBuyer::Update(AuctionHouseType houseType)
+uint32 AuctionBotBuyer::GetVendorPrice(uint32 quality)
{
- if (sAuctionBotConfig->GetConfigBuyerEnabled(houseType))
+ switch (quality)
{
- TC_LOG_DEBUG("ahbot", "AHBot: %s buying ...", AuctionBotConfig::GetHouseTypeName(houseType));
- if (GetBuyableEntry(_houseConfig[houseType]) > 0)
- AddNewAuctionBuyerBotBid(_houseConfig[houseType]);
- return true;
+ case ITEM_QUALITY_POOR:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_GRAY);
+ case ITEM_QUALITY_NORMAL:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_WHITE);
+ case ITEM_QUALITY_UNCOMMON:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_GREEN);
+ case ITEM_QUALITY_RARE:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_BLUE);
+ case ITEM_QUALITY_EPIC:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_PURPLE);
+ case ITEM_QUALITY_LEGENDARY:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_ORANGE);
+ case ITEM_QUALITY_ARTIFACT:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_BASEPRICE_YELLOW);
+ default:
+ return 1 * SILVER;
}
+}
+
+uint32 AuctionBotBuyer::GetChanceMultiplier(uint32 quality)
+{
+ switch (quality)
+ {
+ case ITEM_QUALITY_POOR:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GRAY);
+ case ITEM_QUALITY_NORMAL:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_WHITE);
+ case ITEM_QUALITY_UNCOMMON:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_GREEN);
+ case ITEM_QUALITY_RARE:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_BLUE);
+ case ITEM_QUALITY_EPIC:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_PURPLE);
+ case ITEM_QUALITY_LEGENDARY:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_ORANGE);
+ case ITEM_QUALITY_ARTIFACT:
+ return sAuctionBotConfig->GetConfig(CONFIG_AHBOT_BUYER_CHANCEMULTIPLIER_YELLOW);
+ default:
+ return 100;
+ }
+}
+
+// Buys the auction and does necessary actions to complete the buyout
+void AuctionBotBuyer::BuyEntry(AuctionEntry* auction, AuctionHouseObject* auctionHouse)
+{
+ TC_LOG_DEBUG("ahbot", "AHBot: Entry %u bought at %.2fg", auction->Id, float(auction->buyout) / GOLD);
+
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ // Send mail to previous bidder if any
+ if (auction->bidder)
+ sAuctionMgr->SendAuctionOutbiddedMail(auction, auction->buyout, NULL, trans);
+
+ // Set bot as bidder and set new bid amount
+ auction->bidder = 0;
+ auction->bid = auction->buyout;
+
+ // Mails must be under transaction control too to prevent data loss
+ sAuctionMgr->SendAuctionSalePendingMail(auction, trans);
+ sAuctionMgr->SendAuctionSuccessfulMail(auction, trans);
+ sAuctionMgr->SendAuctionWonMail(auction, trans);
+
+ // Delete auction from DB
+ auction->DeleteFromDB(trans);
+
+ // Remove auction item and auction from memory
+ sAuctionMgr->RemoveAItem(auction->itemGUIDLow);
+ auctionHouse->RemoveAuction(auction);
+
+ // Run SQLs
+ CharacterDatabase.CommitTransaction(trans);
+}
+
+// Bids on the auction and does the necessary actions for bidding
+void AuctionBotBuyer::PlaceBidToEntry(AuctionEntry* auction, uint32 bidPrice)
+{
+ TC_LOG_DEBUG("ahbot", "AHBot: Bid placed to entry %u, %.2fg", auction->Id, float(bidPrice) / GOLD);
+
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ // Send mail to previous bidder if any
+ if (auction->bidder)
+ sAuctionMgr->SendAuctionOutbiddedMail(auction, bidPrice, NULL, trans);
+
+ // Set bot as bidder and set new bid amount
+ auction->bidder = 0;
+ auction->bid = bidPrice;
+
+ // Update auction to DB
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_AUCTION_BID);
+ stmt->setUInt32(0, auction->bidder);
+ stmt->setUInt32(1, auction->bid);
+ stmt->setUInt32(2, auction->Id);
+ trans->Append(stmt);
- return false;
+ // Run SQLs
+ CharacterDatabase.CommitTransaction(trans);
}
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h
index bd8d6e46f0e..c030731cb40 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h
@@ -24,7 +24,7 @@
struct BuyerAuctionEval
{
- BuyerAuctionEval(): AuctionId(0), LastChecked(0), LastExist(0) {}
+ BuyerAuctionEval() : AuctionId(0), LastChecked(0), LastExist(0) { }
uint32 AuctionId;
time_t LastChecked;
@@ -33,13 +33,14 @@ struct BuyerAuctionEval
struct BuyerItemInfo
{
- BuyerItemInfo(): ItemCount(0), BuyPrice(0), BidPrice(0), MinBuyPrice(0), MinBidPrice(0) {}
+ BuyerItemInfo() : BidItemCount(0), BuyItemCount(0), MinBuyPrice(0), MinBidPrice(0), TotalBuyPrice(0), TotalBidPrice(0) { }
- uint32 ItemCount;
- double BuyPrice;
- double BidPrice;
+ uint32 BidItemCount;
+ uint32 BuyItemCount;
uint32 MinBuyPrice;
uint32 MinBidPrice;
+ double TotalBuyPrice;
+ double TotalBidPrice;
};
typedef std::map<uint32, BuyerItemInfo> BuyerItemInfoMap;
@@ -47,7 +48,7 @@ typedef std::map<uint32, BuyerAuctionEval> CheckEntryMap;
struct BuyerConfiguration
{
- BuyerConfiguration(): FactionChance(3), BuyerEnabled(false), BuyerPriceRatio(100), _houseType(AUCTION_HOUSE_NEUTRAL) {}
+ BuyerConfiguration() : BuyerEnabled(false), _houseType(AUCTION_HOUSE_NEUTRAL) { }
void Initialize(AuctionHouseType houseType)
{
@@ -57,10 +58,8 @@ struct BuyerConfiguration
AuctionHouseType GetHouseType() const { return _houseType; }
BuyerItemInfoMap SameItemInfo;
- CheckEntryMap CheckedEntry;
- uint32 FactionChance;
+ CheckEntryMap EligibleItems;
bool BuyerEnabled;
- uint32 BuyerPriceRatio;
private:
AuctionHouseType _houseType;
@@ -78,19 +77,23 @@ public:
bool Update(AuctionHouseType houseType) override;
void LoadConfig();
- void AddNewAuctionBuyerBotBid(BuyerConfiguration& config);
+ void BuyAndBidItems(BuyerConfiguration& config);
private:
uint32 _checkInterval;
BuyerConfiguration _houseConfig[MAX_AUCTION_HOUSE_TYPE];
void LoadBuyerValues(BuyerConfiguration& config);
- bool IsBuyableEntry(uint32 buyoutPrice, double inGameBuyPrice, uint32 maxBuyablePrice, uint32 minBuyPrice, uint32 maxChance, uint32 chanceRatio);
- bool IsBidableEntry(uint32 bidPrice, double inGameBuyPrice, double maxBidablePrice, uint32 minBidPrice, uint32 maxChance, uint32 chanceRatio);
+
+ // ahInfo can be NULL
+ bool RollBuyChance(const BuyerItemInfo* ahInfo, const Item* item, const AuctionEntry* auction, uint32 bidPrice);
+ bool RollBidChance(const BuyerItemInfo* ahInfo, const Item* item, const AuctionEntry* auction, uint32 bidPrice);
void PlaceBidToEntry(AuctionEntry* auction, uint32 bidPrice);
- void BuyEntry(AuctionEntry* auction);
+ void BuyEntry(AuctionEntry* auction, AuctionHouseObject* auctionHouse);
void PrepareListOfEntry(BuyerConfiguration& config);
- uint32 GetBuyableEntry(BuyerConfiguration& config);
+ uint32 GetItemInformation(BuyerConfiguration& config);
+ uint32 GetVendorPrice(uint32 quality);
+ uint32 GetChanceMultiplier(uint32 quality);
};
#endif
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
index dff4077d569..733bd5e9ec8 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
@@ -44,14 +44,14 @@ bool AuctionBotSeller::Initialize()
{
std::stringstream includeStream(sAuctionBotConfig->GetAHBotIncludes());
std::string temp;
- while (getline(includeStream, temp, ','))
+ while (std::getline(includeStream, temp, ','))
includeItems.push_back(atoi(temp.c_str()));
}
{
std::stringstream excludeStream(sAuctionBotConfig->GetAHBotExcludes());
std::string temp;
- while (getline(excludeStream, temp, ','))
+ while (std::getline(excludeStream, temp, ','))
excludeItems.push_back(atoi(temp.c_str()));
}
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 7ed05205f39..3b7e9ac3f33 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -179,7 +179,7 @@ bool ArenaTeam::AddMember(ObjectGuid playerGuid)
player->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_MEMBER, 1);
}
- TC_LOG_INFO("bg.arena", "Player: %s [%s] joined arena team type: %u [Id: %u, Name: %s].", playerName.c_str(), playerGuid.ToString().c_str(), GetType(), GetId(), GetName().c_str());
+ TC_LOG_DEBUG("bg.arena", "Player: %s [%s] joined arena team type: %u [Id: %u, Name: %s].", playerName.c_str(), playerGuid.ToString().c_str(), GetType(), GetId(), GetName().c_str());
return true;
}
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index e091df160a3..03b4fe3dea6 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -510,7 +510,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
if (!aura->IsPermanent()
&& aura->GetDuration() <= 30*IN_MILLISECONDS
&& aurApp->IsPositive()
- && (!(aura->GetSpellInfo()->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
+ && (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
&& (!aura->HasEffectType(SPELL_AURA_MOD_INVISIBILITY)))
player->RemoveAura(iter);
else
diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt
index eb8627efa44..fc9265b6ff4 100644
--- a/src/server/game/CMakeLists.txt
+++ b/src/server/game/CMakeLists.txt
@@ -110,6 +110,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/SFMT
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
${CMAKE_SOURCE_DIR}/dep/zlib
${CMAKE_SOURCE_DIR}/src/server/collision
${CMAKE_SOURCE_DIR}/src/server/collision/Management
@@ -128,6 +129,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Networking
${CMAKE_SOURCE_DIR}/src/server/shared/Packets
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Updater
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/Accounts
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 44df1097dd4..3195de9b6bd 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -104,17 +104,6 @@ ChatCommand* ChatHandler::getCommandTable()
return commandTableCache;
}
-std::string ChatHandler::PGetParseString(uint32 entry, ...) const
-{
- const char *format = GetTrinityString(entry);
- char str[1024];
- va_list ap;
- va_start(ap, entry);
- vsnprintf(str, 1024, format, ap);
- va_end(ap);
- return std::string(str);
-}
-
char const* ChatHandler::GetTrinityString(uint32 entry) const
{
return m_session->GetTrinityString(entry);
@@ -258,27 +247,6 @@ void ChatHandler::SendSysMessage(uint32 entry)
SendSysMessage(GetTrinityString(entry));
}
-void ChatHandler::PSendSysMessage(uint32 entry, ...)
-{
- const char *format = GetTrinityString(entry);
- va_list ap;
- char str [2048];
- va_start(ap, entry);
- vsnprintf(str, 2048, format, ap);
- va_end(ap);
- SendSysMessage(str);
-}
-
-void ChatHandler::PSendSysMessage(const char *format, ...)
-{
- va_list ap;
- char str [2048];
- va_start(ap, format);
- vsnprintf(str, 2048, format, ap);
- va_end(ap);
- SendSysMessage(str);
-}
-
bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd)
{
char const* oldtext = text;
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index d712740bd7d..ba59245cdaa 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -20,6 +20,7 @@
#define TRINITYCORE_CHAT_H
#include "SharedDefines.h"
+#include "StringFormat.h"
#include "WorldSession.h"
#include "RBAC.h"
@@ -68,9 +69,24 @@ class ChatHandler
virtual void SendSysMessage(char const* str);
void SendSysMessage(uint32 entry);
- void PSendSysMessage(char const* format, ...) ATTR_PRINTF(2, 3);
- void PSendSysMessage(uint32 entry, ...);
- std::string PGetParseString(uint32 entry, ...) const;
+
+ template<typename... Args>
+ void PSendSysMessage(const char* fmt, Args const&... args)
+ {
+ SendSysMessage(Trinity::StringFormat(fmt, args...).c_str());
+ }
+
+ template<typename... Args>
+ void PSendSysMessage(uint32 entry, Args const&... args)
+ {
+ SendSysMessage(PGetParseString(entry, args...).c_str());
+ }
+
+ template<typename... Args>
+ std::string PGetParseString(uint32 entry, Args const&... args) const
+ {
+ return Trinity::StringFormat(GetTrinityString(entry), args...);
+ }
bool ParseCommands(const char* text);
diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp
index 1eb330cc9e1..732a770645b 100644
--- a/src/server/game/Chat/ChatLink.cpp
+++ b/src/server/game/Chat/ChatLink.cpp
@@ -285,7 +285,7 @@ bool SpellChatLink::ValidateName(char* buffer, const char* context)
ChatLink::ValidateName(buffer, context);
// spells with that flag have a prefix of "$PROFESSION: "
- if (_spell->Attributes & SPELL_ATTR0_TRADESPELL)
+ if (_spell->HasAttribute(SPELL_ATTR0_TRADESPELL))
{
SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(_spell->Id);
if (bounds.first == bounds.second)
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp
index 43057409b9b..cd108e54b9f 100644
--- a/src/server/game/Combat/ThreatManager.cpp
+++ b/src/server/game/Combat/ThreatManager.cpp
@@ -79,7 +79,7 @@ bool ThreatCalcHelper::isValidProcess(Unit* hatedUnit, Unit* hatingUnit, SpellIn
return false;
// spell not causing threat
- if (threatSpell && threatSpell->AttributesEx & SPELL_ATTR1_NO_THREAT)
+ if (threatSpell && threatSpell->HasAttribute(SPELL_ATTR1_NO_THREAT))
return false;
ASSERT(hatingUnit->GetTypeId() == TYPEID_UNIT);
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index eb3d1708675..8400e4cee00 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -99,7 +99,8 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND
{ "Distance", true, true, true },
{ "Alive", false, false, false },
{ "Health Value", true, true, false },
- { "Health Pct", true, true, false }
+ { "Health Pct", true, true, false },
+ { "Realm Achievement", true, false, false }
};
// Checks if object meets the condition
@@ -416,6 +417,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
condMeets = creature->GetCreatureTemplate()->type == ConditionValue1;
break;
}
+ case CONDITION_REALM_ACHIEVEMENT:
+ {
+ AchievementEntry const* achievement = sAchievementMgr->GetAchievement(ConditionValue1);
+ if (achievement && sAchievementMgr->IsRealmCompleted(achievement, std::numeric_limits<uint32>::max()))
+ condMeets = true;
+ break;
+ }
default:
condMeets = false;
break;
@@ -580,6 +588,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_CREATURE_TYPE:
mask |= GRID_MAP_TYPE_MASK_CREATURE;
break;
+ case CONDITION_REALM_ACHIEVEMENT:
+ mask |= GRID_MAP_TYPE_MASK_ALL;
+ break;
default:
ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
break;
@@ -2056,6 +2067,16 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
case CONDITION_PHASEMASK:
case CONDITION_ALIVE:
break;
+ case CONDITION_REALM_ACHIEVEMENT:
+ {
+ AchievementEntry const* achievement = sAchievementMgr->GetAchievement(cond->ConditionValue1);
+ if (!achievement)
+ {
+ TC_LOG_ERROR("sql.sql", "%s has non existing realm first achivement id (%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1);
+ return false;
+ }
+ break;
+ }
default:
break;
}
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 4ca27f0d986..1fdd011633e 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -72,7 +72,8 @@ enum ConditionTypes
CONDITION_ALIVE = 36, // 0 0 0 true if unit is alive
CONDITION_HP_VAL = 37, // hpVal ComparisonType 0 true if unit's hp matches given value
CONDITION_HP_PCT = 38, // hpPct ComparisonType 0 true if unit's hp matches given pct
- CONDITION_MAX = 39 // MAX
+ CONDITION_REALM_ACHIEVEMENT = 39, // achievement_id 0 0 true if realm achievement is complete
+ CONDITION_MAX = 40 // MAX
};
/*! Documentation on implementing a new ConditionSourceType:
diff --git a/src/server/game/DungeonFinding/LFG.cpp b/src/server/game/DungeonFinding/LFG.cpp
index ab06eff7148..8ec638128d8 100644
--- a/src/server/game/DungeonFinding/LFG.cpp
+++ b/src/server/game/DungeonFinding/LFG.cpp
@@ -91,9 +91,6 @@ std::string GetStateString(LfgState state)
case LFG_STATE_DUNGEON:
entry = LANG_LFG_STATE_DUNGEON;
break;
- case LFG_STATE_BOOT:
- entry = LANG_LFG_STATE_BOOT;
- break;
case LFG_STATE_FINISHED_DUNGEON:
entry = LANG_LFG_STATE_FINISHED_DUNGEON;
break;
diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h
index 6145a2324b1..84a25ee49ad 100644
--- a/src/server/game/DungeonFinding/LFG.h
+++ b/src/server/game/DungeonFinding/LFG.h
@@ -64,8 +64,8 @@ enum LfgState
LFG_STATE_ROLECHECK, // Rolecheck active
LFG_STATE_QUEUED, // Queued
LFG_STATE_PROPOSAL, // Proposal active
- LFG_STATE_BOOT, // Vote kick active
- LFG_STATE_DUNGEON, // In LFG Group, in a Dungeon
+ //LFG_STATE_BOOT, // Vote kick active
+ LFG_STATE_DUNGEON = 5, // In LFG Group, in a Dungeon
LFG_STATE_FINISHED_DUNGEON, // In LFG Group, in a finished Dungeon
LFG_STATE_RAIDBROWSER // Using Raid finder
};
diff --git a/src/server/game/DungeonFinding/LFGGroupData.cpp b/src/server/game/DungeonFinding/LFGGroupData.cpp
index 2ab1e0b1e7e..aa6916a39a4 100644
--- a/src/server/game/DungeonFinding/LFGGroupData.cpp
+++ b/src/server/game/DungeonFinding/LFGGroupData.cpp
@@ -22,7 +22,7 @@ namespace lfg
{
LfgGroupData::LfgGroupData(): m_State(LFG_STATE_NONE), m_OldState(LFG_STATE_NONE),
- m_Leader(), m_Dungeon(0), m_KicksLeft(LFG_GROUP_MAX_KICKS)
+ m_Leader(), m_Dungeon(0), m_KicksLeft(LFG_GROUP_MAX_KICKS), m_VoteKickActive(false)
{ }
LfgGroupData::~LfgGroupData()
@@ -126,4 +126,14 @@ uint8 LfgGroupData::GetKicksLeft() const
return m_KicksLeft;
}
+void LfgGroupData::SetVoteKick(bool active)
+{
+ m_VoteKickActive = active;
+}
+
+bool LfgGroupData::IsVoteKickActive() const
+{
+ return m_VoteKickActive;
+}
+
} // namespace lfg
diff --git a/src/server/game/DungeonFinding/LFGGroupData.h b/src/server/game/DungeonFinding/LFGGroupData.h
index 8d8f1dc0f3d..b573e7c309e 100644
--- a/src/server/game/DungeonFinding/LFGGroupData.h
+++ b/src/server/game/DungeonFinding/LFGGroupData.h
@@ -66,6 +66,9 @@ class LfgGroupData
// VoteKick
uint8 GetKicksLeft() const;
+ void SetVoteKick(bool active);
+ bool IsVoteKickActive() const;
+
private:
// General
LfgState m_State; ///< State if group in LFG
@@ -76,6 +79,7 @@ class LfgGroupData
uint32 m_Dungeon; ///< Dungeon entry
// Vote Kick
uint8 m_KicksLeft; ///< Number of kicks left
+ bool m_VoteKickActive;
};
} // namespace lfg
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index d670e0a2949..93ebeca9780 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -311,9 +311,8 @@ void LFGMgr::Update(uint32 diff)
ObjectGuid pguid = itVotes->first;
if (pguid != boot.victim)
SendLfgBootProposalUpdate(pguid, boot);
- SetState(pguid, LFG_STATE_DUNGEON);
}
- SetState(itBoot->first, LFG_STATE_DUNGEON);
+ SetVoteKick(itBoot->first, false);
BootsStore.erase(itBoot);
}
}
@@ -643,7 +642,6 @@ void LFGMgr::LeaveLfg(ObjectGuid guid)
break;
case LFG_STATE_DUNGEON:
case LFG_STATE_FINISHED_DUNGEON:
- case LFG_STATE_BOOT:
if (guid != gguid) // Player
SetState(guid, LFG_STATE_NONE);
break;
@@ -755,7 +753,7 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& playe
{
ObjectGuid guid = (*it);
LfgLockMap const& cachedLockMap = GetLockedDungeons(guid);
- Player* player = ObjectAccessor::FindPlayer(guid);
+ Player* player = ObjectAccessor::FindConnectedPlayer(guid);
for (LfgLockMap::const_iterator it2 = cachedLockMap.begin(); it2 != cachedLockMap.end() && !dungeons.empty(); ++it2)
{
uint32 dungeonId = (it2->first & 0x00FFFFFF); // Compare dungeon ids
@@ -893,7 +891,7 @@ void LFGMgr::MakeNewGroup(LfgProposal const& proposal)
for (GuidList::const_iterator it = players.begin(); it != players.end(); ++it)
{
ObjectGuid pguid = (*it);
- Player* player = ObjectAccessor::FindPlayer(pguid);
+ Player* player = ObjectAccessor::FindConnectedPlayer(pguid);
if (!player)
continue;
@@ -1156,7 +1154,7 @@ void LFGMgr::RemoveProposal(LfgProposalContainer::iterator itProposal, LfgUpdate
*/
void LFGMgr::InitBoot(ObjectGuid gguid, ObjectGuid kicker, ObjectGuid victim, std::string const& reason)
{
- SetState(gguid, LFG_STATE_BOOT);
+ SetVoteKick(gguid, true);
LfgPlayerBoot& boot = BootsStore[gguid];
boot.inProgress = true;
@@ -1170,7 +1168,6 @@ void LFGMgr::InitBoot(ObjectGuid gguid, ObjectGuid kicker, ObjectGuid victim, st
for (GuidSet::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
ObjectGuid guid = (*itr);
- SetState(guid, LFG_STATE_BOOT);
boot.votes[guid] = LFG_ANSWER_PENDING;
}
@@ -1227,13 +1224,10 @@ void LFGMgr::UpdateBoot(ObjectGuid guid, bool accept)
{
ObjectGuid pguid = itVotes->first;
if (pguid != boot.victim)
- {
- SetState(pguid, LFG_STATE_DUNGEON);
SendLfgBootProposalUpdate(pguid, boot);
- }
}
- SetState(gguid, LFG_STATE_DUNGEON);
+ SetVoteKick(gguid, false);
if (agreeNum == LFG_GROUP_KICK_VOTES_NEEDED) // Vote passed - Kick player
{
if (Group* group = sGroupMgr->GetGroupByGUID(gguid.GetCounter()))
@@ -1495,12 +1489,12 @@ LfgState LFGMgr::GetState(ObjectGuid guid)
if (guid.IsGroup())
{
state = GroupsStore[guid].GetState();
- TC_LOG_TRACE("lfg.data.group.state.get", "Group: %s, State: %u", guid.ToString().c_str(), state);
+ TC_LOG_TRACE("lfg.data.group.state.get", "Group: %s, State: %s", guid.ToString().c_str(), GetStateString(state).c_str());
}
else
{
state = PlayersStore[guid].GetState();
- TC_LOG_TRACE("lfg.data.player.state.get", "Player: %s, State: %u", guid.ToString().c_str(), state);
+ TC_LOG_TRACE("lfg.data.player.state.get", "Player: %s, State: %s", guid.ToString().c_str(), GetStateString(state).c_str());
}
return state;
@@ -1523,6 +1517,16 @@ LfgState LFGMgr::GetOldState(ObjectGuid guid)
return state;
}
+bool LFGMgr::IsVoteKickActive(ObjectGuid gguid)
+{
+ ASSERT(gguid.IsGroup());
+
+ bool active = GroupsStore[gguid].IsVoteKickActive();
+ TC_LOG_TRACE("lfg.data.group.votekick.get", "Group: %s, Active: %d", gguid.ToString().c_str(), active);
+
+ return active;
+}
+
uint32 LFGMgr::GetDungeon(ObjectGuid guid, bool asId /*= true */)
{
uint32 dungeon = GroupsStore[guid].GetDungeon(asId);
@@ -1566,7 +1570,7 @@ LfgLockMap const LFGMgr::GetLockedDungeons(ObjectGuid guid)
{
TC_LOG_TRACE("lfg.data.player.dungeons.locked.get", "Player: %s, LockedDungeons.", guid.ToString().c_str());
LfgLockMap lock;
- Player* player = ObjectAccessor::FindPlayer(guid);
+ Player* player = ObjectAccessor::FindConnectedPlayer(guid);
if (!player)
{
TC_LOG_WARN("lfg.data.player.dungeons.locked.get", "Player: %s not ingame while retrieving his LockedDungeons.", guid.ToString().c_str());
@@ -1683,6 +1687,17 @@ void LFGMgr::SetState(ObjectGuid guid, LfgState state)
}
}
+void LFGMgr::SetVoteKick(ObjectGuid gguid, bool active)
+{
+ ASSERT(gguid.IsGroup());
+
+ LfgGroupData& data = GroupsStore[gguid];
+ TC_LOG_TRACE("lfg.data.group.votekick.set", "Group: %s, New state: %d, Previous: %d",
+ gguid.ToString().c_str(), active, data.IsVoteKickActive());
+
+ data.SetVoteKick(active);
+}
+
void LFGMgr::SetDungeon(ObjectGuid guid, uint32 dungeon)
{
TC_LOG_TRACE("lfg.data.group.dungeon.set", "Group: %s, Dungeon: %u", guid.ToString().c_str(), dungeon);
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 0e5fadc85cc..fda9a8b7ce9 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -322,6 +322,8 @@ class LFGMgr
LfgDungeonSet const& GetSelectedDungeons(ObjectGuid guid);
/// Get current lfg state
LfgState GetState(ObjectGuid guid);
+ /// Get current vote kick state
+ bool IsVoteKickActive(ObjectGuid gguid);
/// Get current dungeon
uint32 GetDungeon(ObjectGuid guid, bool asId = true);
/// Get the map id of the current dungeon
@@ -425,6 +427,7 @@ class LFGMgr
void SetSelectedDungeons(ObjectGuid guid, LfgDungeonSet const& dungeons);
void DecreaseKicksLeft(ObjectGuid guid);
void SetState(ObjectGuid guid, LfgState state);
+ void SetVoteKick(ObjectGuid gguid, bool active);
void RemovePlayerData(ObjectGuid guid);
void GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& players, LfgLockPartyMap& lockMap, bool isContinue);
void _SaveToDB(ObjectGuid guid, uint32 db_guid);
diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp
index 683590cebe8..a7c0a1cfa67 100644
--- a/src/server/game/DungeonFinding/LFGQueue.cpp
+++ b/src/server/game/DungeonFinding/LFGQueue.cpp
@@ -377,7 +377,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
// Group with less that MAXGROUPSIZE members always compatible
if (check.size() == 1 && numPlayers != MAXGROUPSIZE)
{
- TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) sigle group. Compatibles", strGuids.c_str());
+ TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) single group. Compatibles", strGuids.c_str());
LfgQueueDataContainer::iterator itQueue = QueueDataStore.find(check.front());
LfgCompatibilityData data(LFG_COMPATIBLES_WITH_LESS_PLAYERS);
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index a44ca68f79b..a3ce6d919c9 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2697,7 +2697,7 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target)
_focusSpell = focusSpell;
SetGuidValue(UNIT_FIELD_TARGET, target->GetGUID());
- if (focusSpell->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_DONT_TURN_DURING_CAST)
+ if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST))
AddUnitState(UNIT_STATE_ROTATING);
// Set serverside orientation if needed (needs to be after attribute check)
@@ -2716,7 +2716,7 @@ void Creature::ReleaseFocus(Spell const* focusSpell)
else
SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty);
- if (focusSpell->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_DONT_TURN_DURING_CAST)
+ if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST))
ClearUnitState(UNIT_STATE_ROTATING);
}
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index b5bcbfd221f..0b97499fc05 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1072,32 +1072,32 @@ ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& st
void MovementInfo::OutDebug()
{
- TC_LOG_INFO("misc", "MOVEMENT INFO");
- TC_LOG_INFO("misc", "%s", guid.ToString().c_str());
- TC_LOG_INFO("misc", "flags %u", flags);
- TC_LOG_INFO("misc", "flags2 %u", flags2);
- TC_LOG_INFO("misc", "time %u current time " UI64FMTD "", flags2, uint64(::time(NULL)));
- TC_LOG_INFO("misc", "position: `%s`", pos.ToString().c_str());
+ TC_LOG_DEBUG("misc", "MOVEMENT INFO");
+ TC_LOG_DEBUG("misc", "%s", guid.ToString().c_str());
+ TC_LOG_DEBUG("misc", "flags %u", flags);
+ TC_LOG_DEBUG("misc", "flags2 %u", flags2);
+ TC_LOG_DEBUG("misc", "time %u current time " UI64FMTD "", flags2, uint64(::time(NULL)));
+ TC_LOG_DEBUG("misc", "position: `%s`", pos.ToString().c_str());
if (flags & MOVEMENTFLAG_ONTRANSPORT)
{
- TC_LOG_INFO("misc", "TRANSPORT:");
- TC_LOG_INFO("misc", "%s", transport.guid.ToString().c_str());
- TC_LOG_INFO("misc", "position: `%s`", transport.pos.ToString().c_str());
- TC_LOG_INFO("misc", "seat: %i", transport.seat);
- TC_LOG_INFO("misc", "time: %u", transport.time);
+ TC_LOG_DEBUG("misc", "TRANSPORT:");
+ TC_LOG_DEBUG("misc", "%s", transport.guid.ToString().c_str());
+ TC_LOG_DEBUG("misc", "position: `%s`", transport.pos.ToString().c_str());
+ TC_LOG_DEBUG("misc", "seat: %i", transport.seat);
+ TC_LOG_DEBUG("misc", "time: %u", transport.time);
if (flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT)
- TC_LOG_INFO("misc", "time2: %u", transport.time2);
+ TC_LOG_DEBUG("misc", "time2: %u", transport.time2);
}
if ((flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING))
- TC_LOG_INFO("misc", "pitch: %f", pitch);
+ TC_LOG_DEBUG("misc", "pitch: %f", pitch);
- TC_LOG_INFO("misc", "fallTime: %u", fallTime);
+ TC_LOG_DEBUG("misc", "fallTime: %u", fallTime);
if (flags & MOVEMENTFLAG_FALLING)
- TC_LOG_INFO("misc", "j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", jump.zspeed, jump.sinAngle, jump.cosAngle, jump.xyspeed);
+ TC_LOG_DEBUG("misc", "j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", jump.zspeed, jump.sinAngle, jump.cosAngle, jump.xyspeed);
if (flags & MOVEMENTFLAG_SPLINE_ELEVATION)
- TC_LOG_INFO("misc", "splineElevation: %f", splineElevation);
+ TC_LOG_DEBUG("misc", "splineElevation: %f", splineElevation);
}
WorldObject::WorldObject(bool isWorldObject) : WorldLocation(), LastUsedScriptID(0),
@@ -2255,6 +2255,13 @@ void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& creatureL
cell.Visit(pair, visitor, *(this->GetMap()), *this, maxSearchRange);
}
+void WorldObject::GetPlayerListInGrid(std::list<Player*>& playerList, float maxSearchRange) const
+{
+ Trinity::AnyPlayerInObjectRangeCheck checker(this, maxSearchRange);
+ Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, playerList, checker);
+ this->VisitNearbyWorldObject(maxSearchRange, searcher);
+}
+
/*
namespace Trinity
{
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 2aa1704f7d2..c48d8ff4d18 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -683,6 +683,7 @@ class WorldObject : public Object, public WorldLocation
void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const;
void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const;
+ void GetPlayerListInGrid(std::list<Player*>& lList, float fMaxSearchRange) const;
void DestroyForNearbyPlayers();
virtual void UpdateObjectVisibility(bool forced = true);
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index be292751811..36dbdd72069 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -23,6 +23,7 @@
#include "ByteBuffer.h"
#include <functional>
+#include <unordered_set>
enum TypeID
{
@@ -202,6 +203,7 @@ typedef std::set<ObjectGuid> GuidSet;
typedef std::list<ObjectGuid> GuidList;
typedef std::deque<ObjectGuid> GuidDeque;
typedef std::vector<ObjectGuid> GuidVector;
+typedef std::unordered_set<ObjectGuid> GuidUnorderedSet;
// minimum buffer size for packed guid is 9 bytes
#define PACKED_GUID_MIN_BUFFER_SIZE 9
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 5084031880d..fdfd1fa3d4d 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1314,7 +1314,7 @@ void Pet::_LoadAuras(uint32 timediff)
}
aura->SetLoadedState(maxduration, remaintime, remaincharges, stackcount, recalculatemask, &damage[0]);
aura->ApplyForTargets();
- TC_LOG_INFO("entities.pet", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask);
+ TC_LOG_DEBUG("entities.pet", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask);
}
}
while (result->NextRow());
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 161fca432b4..ae55ac7bccb 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3902,7 +3902,7 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const
// talent dependent passives activated at form apply have proper stance data
ShapeshiftForm form = GetShapeshiftForm();
bool need_cast = (!spellInfo->Stances || (form && (spellInfo->Stances & (1 << (form - 1)))) ||
- (!form && (spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT)));
+ (!form && spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT)));
//Check CasterAuraStates
return need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState)));
@@ -4218,7 +4218,7 @@ void Player::RemoveSpellCategoryCooldown(uint32 cat, bool update /* = false */)
void Player::RemoveArenaSpellCooldowns(bool removeActivePetCooldowns)
{
- // remove cooldowns on spells that have <= 10 min CD
+ // remove cooldowns on spells that have < 10 min CD
SpellCooldowns::iterator itr, next;
for (itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end(); itr = next)
@@ -4226,10 +4226,10 @@ void Player::RemoveArenaSpellCooldowns(bool removeActivePetCooldowns)
next = itr;
++next;
SpellInfo const* entry = sSpellMgr->GetSpellInfo(itr->first);
- // check if spellentry is present and if the cooldown is less or equal to 10 min
+ // check if spellentry is present and if the cooldown is less than 10 min
if (entry &&
- entry->RecoveryTime <= 10 * MINUTE * IN_MILLISECONDS &&
- entry->CategoryRecoveryTime <= 10 * MINUTE * IN_MILLISECONDS)
+ entry->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS &&
+ entry->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS)
{
// remove & notify
RemoveSpellCooldown(itr->first, true);
@@ -4830,10 +4830,22 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt32(0, guid);
trans->Append(stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_ARENA_STATS);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA);
stmt->setUInt32(0, guid);
trans->Append(stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_BGDATA);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GIFT);
stmt->setUInt32(0, guid);
trans->Append(stmt);
@@ -4923,10 +4935,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt32(0, guid);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_BGDATA);
- stmt->setUInt32(0, guid);
- trans->Append(stmt);
-
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GLYPHS);
stmt->setUInt32(0, guid);
trans->Append(stmt);
@@ -4955,6 +4963,10 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt32(0, guid);
trans->Append(stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_STATS);
+ stmt->setUInt32(0, guid);
+ trans->Append(stmt);
+
CharacterDatabase.CommitTransaction(trans);
break;
}
@@ -5002,7 +5014,7 @@ void Player::DeleteOldCharacters()
*/
void Player::DeleteOldCharacters(uint32 keepDays)
{
- TC_LOG_INFO("entities.player", "Player::DeleteOldChars: Deleting all characters which have been deleted %u days before...", keepDays);
+ TC_LOG_INFO("entities.player", "Player::DeleteOldChars: Removing characters older than %u day(s)", keepDays);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_OLD_CHARS);
stmt->setUInt32(0, uint32(time(NULL) - time_t(keepDays * DAY)));
@@ -5010,7 +5022,7 @@ void Player::DeleteOldCharacters(uint32 keepDays)
if (result)
{
- TC_LOG_DEBUG("entities.player", "Player::DeleteOldChars: Found " UI64FMTD " character(s) to delete", result->GetRowCount());
+ TC_LOG_DEBUG("entities.player", "Player::DeleteOldChars: " UI64FMTD " character(s) to remove", result->GetRowCount());
do
{
Field* fields = result->Fetch();
@@ -6636,20 +6648,20 @@ void Player::SendActionButtons(uint32 state) const
}
GetSession()->SendPacket(&data);
- TC_LOG_INFO("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUIDLow(), m_activeSpec);
+ TC_LOG_DEBUG("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUIDLow(), m_activeSpec);
}
bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type)
{
if (button >= MAX_ACTION_BUTTONS)
{
- TC_LOG_ERROR("entities.player", "Action %u not added into button %u for player %s (GUID: %u): button must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTONS );
+ TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): button must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTONS );
return false;
}
if (action >= MAX_ACTION_BUTTON_ACTION_VALUE)
{
- TC_LOG_ERROR("entities.player", "Action %u not added into button %u for player %s (GUID: %u): action must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTON_ACTION_VALUE);
+ TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): action must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTON_ACTION_VALUE);
return false;
}
@@ -6658,20 +6670,20 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type)
case ACTION_BUTTON_SPELL:
if (!sSpellMgr->GetSpellInfo(action))
{
- TC_LOG_ERROR("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): spell not exist", action, button, GetName().c_str(), GetGUIDLow());
+ TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): spell not exist", action, button, GetName().c_str(), GetGUIDLow());
return false;
}
if (!HasSpell(action))
{
- TC_LOG_ERROR("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): player don't known this spell", action, button, GetName().c_str(), GetGUIDLow());
+ TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): player don't known this spell", action, button, GetName().c_str(), GetGUIDLow());
return false;
}
break;
case ACTION_BUTTON_ITEM:
if (!sObjectMgr->GetItemTemplate(action))
{
- TC_LOG_ERROR("entities.player", "Item action %u not added into button %u for player %s (GUID: %u): item not exist", action, button, GetName().c_str(), GetGUIDLow());
+ TC_LOG_DEBUG("entities.player", "Item action %u not added into button %u for player %s (GUID: %u): item not exist", action, button, GetName().c_str(), GetGUIDLow());
return false;
}
break;
@@ -6681,7 +6693,7 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type)
case ACTION_BUTTON_EQSET:
break;
default:
- TC_LOG_ERROR("entities.player", "Unknown action type %u", type);
+ TC_LOG_DEBUG("entities.player", "Unknown action type %u", type);
return false; // other cases not checked at this moment
}
@@ -6883,7 +6895,7 @@ void Player::CheckAreaExploreAndOutdoor()
GiveXP(XP, NULL);
SendExplorationExperience(area, XP);
}
- TC_LOG_INFO("entities.player", "Player %u discovered a new area: %u", GetGUIDLow(), area);
+ TC_LOG_DEBUG("entities.player", "Player %u discovered a new area: %u", GetGUIDLow(), area);
}
}
}
@@ -7763,7 +7775,7 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply)
if (item->IsBroken())
return;
- TC_LOG_INFO("entities.player.items", "applying mods for item %u ", item->GetGUIDLow());
+ TC_LOG_DEBUG("entities.player.items", "applying mods for item %u ", item->GetGUIDLow());
uint8 attacktype = Player::GetAttackBySlot(slot);
@@ -9774,7 +9786,7 @@ uint32 Player::GetXPRestBonus(uint32 xp)
SetRestBonus(GetRestBonus() - rested_bonus);
- TC_LOG_INFO("entities.player", "Player gain %u xp (+ %u Rested Bonus). Rested points=%f", xp+rested_bonus, rested_bonus, GetRestBonus());
+ TC_LOG_DEBUG("entities.player", "Player gain %u xp (+ %u Rested Bonus). Rested points=%f", xp+rested_bonus, rested_bonus, GetRestBonus());
return rested_bonus;
}
@@ -16361,6 +16373,8 @@ void Player::AreaExploredOrEventHappens(uint32 questId)
{
q_status.Explored = true;
m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
+ SetQuestSlotState(log_slot, QUEST_STATE_COMPLETE);
+ SendQuestComplete(questId);
}
}
if (CanCompleteQuest(questId))
@@ -17999,7 +18013,7 @@ void Player::_LoadAuras(PreparedQueryResult result, uint32 timediff)
aura->SetLoadedState(maxduration, remaintime, remaincharges, stackcount, recalculatemask, &damage[0]);
aura->ApplyForTargets();
- TC_LOG_INFO("entities.player", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask);
+ TC_LOG_DEBUG("entities.player", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask);
}
}
while (result->NextRow());
@@ -19086,7 +19100,7 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report
else if (mapDiff->hasErrorMessage) // if (missingAchievement) covered by this case
SendTransferAborted(target_map, TRANSFER_ABORT_DIFFICULTY, target_difficulty);
else if (missingItem)
- GetSession()->SendAreaTriggerMessage(GetSession()->GetTrinityString(LANG_LEVEL_MINREQUIRED_AND_ITEM), LevelMin, sObjectMgr->GetItemTemplate(missingItem)->Name1.c_str());
+ GetSession()->SendAreaTriggerMessage(GetSession()->GetTrinityString(LANG_LEVEL_MINREQUIRED_AND_ITEM), LevelMin, ASSERT_NOTNULL(sObjectMgr->GetItemTemplate(missingItem))->Name1.c_str());
else if (LevelMin)
GetSession()->SendAreaTriggerMessage(GetSession()->GetTrinityString(LANG_LEVEL_MINREQUIRED), LevelMin);
}
@@ -19732,6 +19746,7 @@ void Player::_SaveInventory(SQLTransaction& trans)
m_itemUpdateQueue.clear();
}
+
void Player::_SaveMail(SQLTransaction& trans)
{
if (!m_mailsLoaded)
@@ -20670,8 +20685,6 @@ void Player::PetSpellInitialize()
if (!pet)
return;
- TC_LOG_DEBUG("entities.pet", "Pet Spells Groups");
-
CharmInfo* charmInfo = pet->GetCharmInfo();
WorldPacket data(SMSG_PET_SPELLS, 8+2+4+4+4*MAX_UNIT_ACTION_BAR_INDEX+1+1);
@@ -20682,6 +20695,8 @@ void Player::PetSpellInitialize()
data << uint8(charmInfo->GetCommandState());
data << uint16(0); // Flags, mostly unknown
+ TC_LOG_DEBUG("entities.pet", "Player::PetspellInitialize: Creating spellgroups for summoned pet");
+
// action bar loop
charmInfo->BuildActionBar(&data);
@@ -22043,7 +22058,7 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite
if (rec > 0)
ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, rec, spell);
- if (catrec > 0 && !(spellInfo->AttributesEx6 & SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS))
+ if (catrec > 0 && !spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS))
ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, catrec, spell);
if (int32 cooldownMod = GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN))
@@ -22138,6 +22153,34 @@ void Player::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/
data << uint32(spellInfo->Id);
data << uint64(GetGUID());
SendDirectMessage(&data);
+
+ uint32 cat = spellInfo->GetCategory();
+ if (cat && spellInfo->CategoryRecoveryTime)
+ {
+ SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(cat);
+ if (ct != sSpellsByCategoryStore.end())
+ {
+ SpellCategorySet const& catSet = ct->second;
+ for (SpellCooldowns::const_iterator i = m_spellCooldowns.begin(); i != m_spellCooldowns.end(); ++i)
+ {
+ if (i->first == spellInfo->Id) // skip main spell, already handled above
+ continue;
+
+ SpellInfo const* spellInfo2 = sSpellMgr->GetSpellInfo(i->first);
+ if (!spellInfo2 || !spellInfo2->IsCooldownStartedOnEvent())
+ continue;
+
+ if (catSet.find(i->first) != catSet.end())
+ {
+ // Send activate cooldown timer (possible 0) at client side
+ WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8);
+ data << uint32(i->first);
+ data << uint64(GetGUID());
+ SendDirectMessage(&data);
+ }
+ }
+ }
+ }
}
void Player::UpdatePotionCooldown(Spell* spell)
@@ -22532,13 +22575,13 @@ bool Player::IsVisibleGloballyFor(Player const* u) const
}
template<class T>
-inline void UpdateVisibilityOf_helper(GuidSet& s64, T* target, std::set<Unit*>& /*v*/)
+inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, T* target, std::set<Unit*>& /*v*/)
{
s64.insert(target->GetGUID());
}
template<>
-inline void UpdateVisibilityOf_helper(GuidSet& s64, GameObject* target, std::set<Unit*>& /*v*/)
+inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, GameObject* target, std::set<Unit*>& /*v*/)
{
// @HACK: This is to prevent objects like deeprun tram from disappearing when player moves far from its spawn point while riding it
if ((target->GetGOInfo()->type != GAMEOBJECT_TYPE_TRANSPORT))
@@ -22546,14 +22589,14 @@ inline void UpdateVisibilityOf_helper(GuidSet& s64, GameObject* target, std::set
}
template<>
-inline void UpdateVisibilityOf_helper(GuidSet& s64, Creature* target, std::set<Unit*>& v)
+inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, Creature* target, std::set<Unit*>& v)
{
s64.insert(target->GetGUID());
v.insert(target);
}
template<>
-inline void UpdateVisibilityOf_helper(GuidSet& s64, Player* target, std::set<Unit*>& v)
+inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, Player* target, std::set<Unit*>& v)
{
s64.insert(target->GetGUID());
v.insert(target);
@@ -22615,9 +22658,9 @@ void Player::UpdateTriggerVisibility()
UpdateData udata;
WorldPacket packet;
- for (GuidSet::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
+ for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
{
- if (itr->IsCreature())
+ if (itr->IsCreatureOrVehicle())
{
Creature* creature = GetMap()->GetCreature(*itr);
// Update fields of triggers, transformed units or unselectable units (values dependent on GM state)
@@ -23674,7 +23717,7 @@ void Player::UpdateForQuestWorldObjects()
UpdateData udata;
WorldPacket packet;
- for (GuidSet::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
+ for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
{
if (itr->IsGameObject())
{
@@ -23863,7 +23906,7 @@ bool Player::HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item cons
bool Player::CanNoReagentCast(SpellInfo const* spellInfo) const
{
// don't take reagents for spells with SPELL_ATTR5_NO_REAGENT_WHILE_PREP
- if (spellInfo->AttributesEx5 & SPELL_ATTR5_NO_REAGENT_WHILE_PREP &&
+ if (spellInfo->HasAttribute(SPELL_ATTR5_NO_REAGENT_WHILE_PREP) &&
HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION))
return true;
@@ -24166,18 +24209,6 @@ void Player::UpdateAreaDependentAuras(uint32 newArea)
if (itr->second->autocast && itr->second->IsFitToRequirements(this, m_zoneUpdateId, newArea))
if (!HasAura(itr->second->spellId))
CastSpell(this, itr->second->spellId, true);
-
- if (newArea == 4273 && GetVehicleCreatureBase() && GetPositionX() > 400) // Ulduar
- {
- switch (GetVehicleBase()->GetEntry())
- {
- case 33062:
- case 33109:
- case 33060:
- GetVehicleCreatureBase()->DespawnOrUnsummon();
- break;
- }
- }
}
uint32 Player::GetCorpseReclaimDelay(bool pvp) const
@@ -24308,7 +24339,7 @@ PartyResult Player::CanUninviteFromGroup(ObjectGuid guidMember) const
return ERR_PARTY_LFG_BOOT_LIMIT;
lfg::LfgState state = sLFGMgr->GetState(gguid);
- if (state == lfg::LFG_STATE_BOOT)
+ if (sLFGMgr->IsVoteKickActive(gguid))
return ERR_PARTY_LFG_BOOT_IN_PROGRESS;
if (grp->GetMembersCount() <= lfg::LFG_GROUP_KICK_VOTES_NEEDED)
@@ -24815,7 +24846,7 @@ 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))
+ if (aura && !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_PASSIVE))
return;
ConvertRune(index, GetBaseRune(index));
SetRuneConvertAura(index, NULL);
@@ -25047,6 +25078,7 @@ void Player::_LoadSkills(PreparedQueryResult result)
// SetPQuery(PLAYER_LOGIN_QUERY_LOADSKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = '%u'", GUID_LOPART(m_guid));
uint32 count = 0;
+ std::unordered_map<uint32, uint32> loadedSkillValues;
if (result)
{
do
@@ -25114,8 +25146,7 @@ void Player::_LoadSkills(PreparedQueryResult result)
SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0);
mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED)));
-
- LearnSkillRewardedSpells(skill, value);
+ loadedSkillValues[skill] = value;
++count;
@@ -25128,6 +25159,10 @@ void Player::_LoadSkills(PreparedQueryResult result)
while (result->NextRow());
}
+ // Learn skill rewarded spells after all skills have been loaded to prevent learning a skill from them before its loaded with proper value from DB
+ for (auto& skill : loadedSkillValues)
+ LearnSkillRewardedSpells(skill.first, skill.second);
+
for (; count < PLAYER_MAX_SKILLS; ++count)
{
SetUInt32Value(PLAYER_SKILL_INDEX(count), 0);
@@ -25429,7 +25464,7 @@ void Player::LearnTalent(uint32 talentId, uint32 talentRank)
LearnSpell(spellid, false);
AddTalent(spellid, m_activeSpec, true);
- TC_LOG_INFO("entities.player", "TalentID: %u Rank: %u Spell: %u Spec: %u\n", talentId, talentRank, spellid, m_activeSpec);
+ TC_LOG_DEBUG("entities.player", "TalentID: %u Rank: %u Spell: %u Spec: %u\n", talentId, talentRank, spellid, m_activeSpec);
// update free talent points
SetFreeTalentPoints(CurTalentPoints - (talentRank - curtalent_maxrank + 1));
@@ -25564,7 +25599,7 @@ void Player::LearnPetTalent(ObjectGuid petGuid, uint32 talentId, uint32 talentRa
// learn! (other talent ranks will unlearned at learning)
pet->learnSpell(spellid);
- TC_LOG_INFO("entities.player", "PetTalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
+ TC_LOG_DEBUG("entities.player", "PetTalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid);
// update free talent points
pet->SetFreeTalentPoints(CurTalentPoints - (talentRank - curtalent_maxrank + 1));
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 61141192cd1..1e928c80f3c 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2170,7 +2170,7 @@ class Player : public Unit, public GridObject<Player>
WorldLocation GetStartPosition() const;
// currently visible objects at player client
- GuidSet m_clientGUIDs;
+ GuidUnorderedSet m_clientGUIDs;
bool HaveAtClient(WorldObject const* u) const;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index fdd91368704..f44c14a12dd 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -589,7 +589,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
// interrupting auras with AURA_INTERRUPT_FLAG_DAMAGE before checking !damage (absorbed damage breaks that type of auras)
if (spellProto)
{
- if (!(spellProto->AttributesEx4 & SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS))
+ if (!spellProto->HasAttribute(SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS))
victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TAKE_DAMAGE, spellProto->Id);
}
else
@@ -777,7 +777,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
if (damagetype != NODAMAGE && damage)
{
if (victim != this && victim->GetTypeId() == TYPEID_PLAYER && // does not support creature push_back
- (!spellProto || !(spellProto->AttributesEx7 & SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE)))
+ (!spellProto || !spellProto->HasAttribute(SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE)))
{
if (damagetype != DOT)
if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL])
@@ -981,7 +981,7 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama
uint32 crTypeMask = victim->GetCreatureTypeMask();
// Spells with SPELL_ATTR4_FIXED_DAMAGE ignore resilience because their damage is based off another spell's damage.
- if (!(spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (!spellInfo->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE))
{
if (IsDamageReducedByArmor(damageSchoolMask, spellInfo))
damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType);
@@ -1459,7 +1459,7 @@ bool Unit::IsDamageReducedByArmor(SpellSchoolMask schoolMask, SpellInfo const* s
if (spellInfo)
{
// there are spells with no specific attribute but they have "ignores armor" in tooltip
- if (spellInfo->AttributesCu & SPELL_ATTR0_CU_IGNORE_ARMOR)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_CU_IGNORE_ARMOR))
return false;
// bleeding effects are not reduced by armor
@@ -1560,7 +1560,7 @@ uint32 Unit::CalcSpellResistance(Unit* victim, SpellSchoolMask schoolMask, Spell
return 0;
// Ignore spells that can't be resisted
- if (spellInfo && spellInfo->AttributesEx4 & SPELL_ATTR4_IGNORE_RESISTANCES)
+ if (spellInfo && spellInfo->HasAttribute(SPELL_ATTR4_IGNORE_RESISTANCES))
return 0;
uint32 const BOSS_LEVEL = 83;
@@ -2234,15 +2234,15 @@ void Unit::SendMeleeAttackStop(Unit* victim)
TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP");
if (victim)
- TC_LOG_INFO("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow());
else
- TC_LOG_INFO("entities.unit", "%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow());
+ TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow());
}
bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType)
{
// These spells can't be blocked
- if (spellProto && spellProto->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)
+ if (spellProto && spellProto->HasAttribute(SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK))
return false;
if (victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION) || victim->HasInArc(float(M_PI), this))
@@ -2309,7 +2309,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
{
// Spells with SPELL_ATTR3_IGNORE_HIT_RESULT will additionally fully ignore
// resist and deflect chances
- if (spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT)
+ if (spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT))
return SPELL_MISS_NONE;
WeaponAttackType attType = BASE_ATTACK;
@@ -2357,10 +2357,10 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
bool canDodge = true;
bool canParry = true;
- bool canBlock = (spellInfo->AttributesEx3 & SPELL_ATTR3_BLOCKABLE_SPELL) != 0;
+ bool canBlock = spellInfo->HasAttribute(SPELL_ATTR3_BLOCKABLE_SPELL);
// Same spells cannot be parry/dodge
- if (spellInfo->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK))
return SPELL_MISS_NONE;
// Chance resist mechanic
@@ -2400,7 +2400,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
}
else // Only deterrence as of 3.3.5
{
- if (spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET))
canParry = false;
}
}
@@ -2491,7 +2491,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo)
{
// Can`t miss on dead target (on skinning for example)
- if ((!victim->IsAlive() && victim->GetTypeId() != TYPEID_PLAYER) || spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT)
+ if ((!victim->IsAlive() && victim->GetTypeId() != TYPEID_PLAYER) || spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT))
return SPELL_MISS_NONE;
SpellSchoolMask schoolMask = spellInfo->GetSchoolMask();
@@ -3089,7 +3089,7 @@ bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAu
{
if (!skipInstant || m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime())
{
- if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
+ if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)))
return true;
}
}
@@ -3097,7 +3097,7 @@ bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAu
if (!skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] &&
(m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() != SPELL_STATE_FINISHED))
{
- if (!isAutoshoot || !(m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
+ if (!isAutoshoot || !(m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)))
return true;
}
// autorepeat spells may be finished or delayed, but they are still considered cast
@@ -3232,7 +3232,7 @@ Aura* Unit::_TryStackingOrRefreshingExistingAura(SpellInfo const* newAura, uint8
castItemGUID = castItem->GetGUID();
// find current aura from spell and change it's stackamount, or refresh it's duration
- if (Aura* foundAura = GetOwnedAura(newAura->Id, casterGUID, (newAura->AttributesCu & SPELL_ATTR0_CU_ENCHANT_PROC) ? castItemGUID : ObjectGuid::Empty, 0))
+ if (Aura* foundAura = GetOwnedAura(newAura->Id, casterGUID, newAura->HasAttribute(SPELL_ATTR0_CU_ENCHANT_PROC) ? castItemGUID : ObjectGuid::Empty, 0))
{
// effect masks do not match
// extremely rare case
@@ -3743,7 +3743,7 @@ void Unit::RemoveAurasDueToSpellByDispel(uint32 spellId, uint32 dispellerSpellId
// Call OnDispel hook on AuraScript
aura->CallScriptDispel(&dispelInfo);
- if (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES)
+ if (aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES))
aura->ModCharges(-dispelInfo.GetRemovedCharges(), AURA_REMOVE_BY_ENEMY_SPELL);
else
aura->ModStackAmount(-dispelInfo.GetRemovedCharges(), AURA_REMOVE_BY_ENEMY_SPELL);
@@ -3788,7 +3788,7 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGUID, U
}
}
- bool stealCharge = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0;
+ bool stealCharge = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES);
// 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()));
@@ -4046,9 +4046,9 @@ void Unit::RemoveArenaAuras()
{
AuraApplication const* aurApp = iter->second;
Aura const* aura = aurApp->GetBase();
- if (!(aura->GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_UNK21) // don't remove stances, shadowform, pally/hunter auras
+ if (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_UNK21) // don't remove stances, shadowform, pally/hunter auras
&& !aura->IsPassive() // don't remove passive auras
- && (aurApp->IsPositive() || !(aura->GetSpellInfo()->AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT))) // not negative death persistent auras
+ && (aurApp->IsPositive() || !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR3_DEATH_PERSISTENT))) // not negative death persistent auras
RemoveAura(iter);
else
++iter;
@@ -4308,7 +4308,7 @@ void Unit::GetDispellableAuraList(Unit* caster, uint32 dispelMask, DispelCharges
// The charges / stack amounts don't count towards the total number of auras that can be dispelled.
// Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell
// Polymorph instead of 1 / (5 + 1) -> 16%.
- bool dispel_charges = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0;
+ bool dispel_charges = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES);
uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount();
if (charges > 0)
dispelList.push_back(std::make_pair(aura, charges));
@@ -9602,7 +9602,7 @@ bool Unit::IsMagnet() const
Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
{
// Patch 1.2 notes: Spell Reflection no longer reflects abilities
- if (spellInfo->Attributes & SPELL_ATTR0_ABILITY || spellInfo->AttributesEx & SPELL_ATTR1_CANT_BE_REDIRECTED || spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REDIRECTED) || spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
return victim;
Unit::AuraEffectList const& magnetAuras = victim->GetAuraEffectsByType(SPELL_AURA_SPELL_MAGNET);
@@ -9854,7 +9854,7 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
return pdamage;
// Some spells don't benefit from done mods
- if (spellProto->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS)
+ if (spellProto->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS))
return pdamage;
// For totems get damage bonus from owner
@@ -9985,7 +9985,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage
return 1.0f;
// Some spells don't benefit from pct done mods
- if (spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)
+ if (spellProto->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS))
return 1.0f;
// For totems pct done mods are calculated when its calculation is run on the player in SpellDamageBonusDone.
@@ -10009,7 +10009,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage
{
if ((*i)->GetSpellInfo()->EquippedItemClass == -1)
AddPct(DoneTotalMod, (*i)->GetAmount());
- else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0))
+ else if (!(*i)->GetSpellInfo()->HasAttribute(SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0))
AddPct(DoneTotalMod, (*i)->GetAmount());
else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo()))
AddPct(DoneTotalMod, (*i)->GetAmount());
@@ -10324,7 +10324,7 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
}
}
// Spells with SPELL_ATTR4_FIXED_DAMAGE should only benefit from mechanic damage mod auras.
- if (!(spellProto->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (!spellProto->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE))
{
// get all auras from caster that allow the spell to ignore resistance (sanctified wrath)
AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
@@ -10454,7 +10454,7 @@ float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto
return 0.0f;
// not critting spell
- if ((spellProto->AttributesEx2 & SPELL_ATTR2_CANT_CRIT))
+ if (spellProto->HasAttribute(SPELL_ATTR2_CANT_CRIT))
return 0.0f;
float crit_chance = 0.0f;
@@ -11063,7 +11063,7 @@ bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask) const
bool Unit::IsImmunedToDamage(SpellInfo const* spellInfo) const
{
- if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
return false;
uint32 shoolMask = spellInfo->GetSchoolMask();
@@ -11096,7 +11096,7 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo) const
if (itr->type == spellInfo->Id)
return true;
- if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
return false;
if (spellInfo->Dispel)
@@ -11154,7 +11154,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons
if (!spellInfo || !spellInfo->Effects[index].IsEffect())
return false;
- if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
return false;
// If m_immuneToEffect type contain this effect type, IMMUNE effect.
@@ -11177,7 +11177,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons
SpellImmuneList const& list = m_spellImmune[IMMUNITY_STATE];
for (SpellImmuneList::const_iterator itr = list.begin(); itr != list.end(); ++itr)
if (itr->type == aura)
- if (!(spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT))
+ if (!spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT))
return true;
// Check for immune to application of harmful magical effects
@@ -11252,7 +11252,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType
// Some spells don't benefit from pct done mods
if (spellProto)
- if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS))
+ if (!spellProto->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS))
{
AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
@@ -11261,7 +11261,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType
{
if ((*i)->GetSpellInfo()->EquippedItemClass == -1)
AddPct(DoneTotalMod, (*i)->GetAmount());
- else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0))
+ else if (!(*i)->GetSpellInfo()->HasAttribute(SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0))
AddPct(DoneTotalMod, (*i)->GetAmount());
else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo()))
AddPct(DoneTotalMod, (*i)->GetAmount());
@@ -11523,7 +11523,7 @@ void Unit::ApplySpellDispelImmunity(const SpellInfo* spellProto, DispelType type
{
ApplySpellImmune(spellProto->Id, IMMUNITY_DISPEL, type, apply);
- if (apply && spellProto->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
+ if (apply && spellProto->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
{
// Create dispel mask by dispel type
uint32 dispelMask = SpellInfo::GetDispelMask(type);
@@ -11864,7 +11864,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
return false;
// can't attack invisible (ignore stealth for aoe spells) also if the area being looked at is from a spell use the dynamic object created instead of the casting unit.
- if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && (obj ? !obj->CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()) : !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())))
+ if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && (obj ? !obj->CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()) : !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())))
return false;
// can't attack dead
@@ -11872,7 +11872,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
return false;
// can't attack untargetable
- if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
+ if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
&& target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
return false;
@@ -11981,7 +11981,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
return false;
// can't assist invisible
- if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()))
+ if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()))
return false;
// can't assist dead
@@ -11989,11 +11989,11 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
return false;
// can't assist untargetable
- if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
+ if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE))
&& target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
return false;
- if (!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
+ if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
{
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
{
@@ -12040,7 +12040,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
// PvC case - player can assist creature only if has specific type flags
// !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) &&
else if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)
- && (!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
+ && (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
&& !((target->GetByteValue(UNIT_FIELD_BYTES_2, 1) & UNIT_BYTE2_FLAG_PVP)))
{
if (Creature const* creatureTarget = target->ToCreature())
@@ -12822,7 +12822,7 @@ int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, in
return duration;
// some auras are not affected by duration modifiers
- if (spellProto->AttributesEx7 & SPELL_ATTR7_IGNORE_DURATION_MODS)
+ if (spellProto->HasAttribute(SPELL_ATTR7_IGNORE_DURATION_MODS))
return duration;
// cut duration only of negative effects
@@ -12926,17 +12926,17 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell*
if (!spellInfo || castTime < 0)
return;
- if (spellInfo->IsChanneled() && !(spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION))
+ if (spellInfo->IsChanneled() && !spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
return;
// called from caster
if (Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, castTime, spell);
- if (!((spellInfo->Attributes & (SPELL_ATTR0_ABILITY | SPELL_ATTR0_TRADESPELL)) || (spellInfo->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS)) &&
+ if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
- else if (spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO && !(spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG))
+ else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]);
else if (spellInfo->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat.
castTime = 500;
@@ -13711,7 +13711,7 @@ void CharmInfo::InitPossessCreateSpells()
{
uint32 spellId = _unit->ToCreature()->m_spells[i];
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (spellInfo && !(spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD))
+ if (spellInfo && !spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
{
if (spellInfo->IsPassive())
_unit->CastSpell(_unit, spellInfo, true);
@@ -13739,7 +13739,7 @@ void CharmInfo::InitCharmCreateSpells()
uint32 spellId = _unit->ToCreature()->m_spells[x];
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo || spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD)
+ if (!spellInfo || spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
{
_charmspells[x].SetActionAndType(spellId, ACT_DISABLED);
continue;
@@ -14126,7 +14126,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
continue;
// Triggered spells not triggering additional spells
- bool triggered = !(spellProto->AttributesEx3 & SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED) ?
+ bool triggered = !spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED) ?
(procExtra & PROC_EX_INTERNAL_TRIGGERED && !(procFlag & PROC_FLAG_DONE_TRAP_ACTIVATION)) : false;
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
@@ -14183,7 +14183,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
cooldown = i->spellProcEvent->cooldown;
// Note: must SetCantProc(false) before return
- if (spellInfo->AttributesEx3 & SPELL_ATTR3_DISABLE_PROC)
+ if (spellInfo->HasAttribute(SPELL_ATTR3_DISABLE_PROC))
SetCantProc(true);
bool handled = i->aura->CallScriptProcHandlers(aurApp, eventInfo);
@@ -14378,7 +14378,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
i->aura->CallScriptAfterProcHandlers(aurApp, eventInfo);
- if (spellInfo->AttributesEx3 & SPELL_ATTR3_DISABLE_PROC)
+ if (spellInfo->HasAttribute(SPELL_ATTR3_DISABLE_PROC))
SetCantProc(false);
}
@@ -15053,7 +15053,7 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const
// Additional checks for triggered spells (ignore trap casts)
if (procExtra & PROC_EX_INTERNAL_TRIGGERED && !(procFlag & PROC_FLAG_DONE_TRAP_ACTIVATION))
{
- if (!(spellProto->AttributesEx3 & SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED))
+ if (!spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED))
return false;
}
@@ -16213,7 +16213,7 @@ Aura* Unit::AddAura(uint32 spellId, Unit* target)
if (!spellInfo)
return NULL;
- if (!target->IsAlive() && !(spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !(spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_DEAD))
+ if (!target->IsAlive() && !spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && !spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_DEAD))
return NULL;
return AddAura(spellInfo, MAX_EFFECT_MASK, target);
@@ -17316,30 +17316,30 @@ void Unit::StopAttackFaction(uint32 faction_id)
void Unit::OutDebugInfo() const
{
TC_LOG_ERROR("entities.unit", "Unit::OutDebugInfo");
- TC_LOG_INFO("entities.unit", "%s name %s", GetGUID().ToString().c_str(), GetName().c_str());
- TC_LOG_INFO("entities.unit", "Owner %s, Minion %s, Charmer %s, Charmed %s", GetOwnerGUID().ToString().c_str(), GetMinionGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str(), GetCharmGUID().ToString().c_str());
- TC_LOG_INFO("entities.unit", "In world %u, unit type mask %u", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask);
+ TC_LOG_DEBUG("entities.unit", "%s name %s", GetGUID().ToString().c_str(), GetName().c_str());
+ TC_LOG_DEBUG("entities.unit", "Owner %s, Minion %s, Charmer %s, Charmed %s", GetOwnerGUID().ToString().c_str(), GetMinionGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str(), GetCharmGUID().ToString().c_str());
+ TC_LOG_DEBUG("entities.unit", "In world %u, unit type mask %u", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask);
if (IsInWorld())
- TC_LOG_INFO("entities.unit", "Mapid %u", GetMapId());
+ TC_LOG_DEBUG("entities.unit", "Mapid %u", GetMapId());
std::ostringstream o;
o << "Summon Slot: ";
for (uint32 i = 0; i < MAX_SUMMON_SLOT; ++i)
o << m_SummonSlot[i].ToString() << ", ";
- TC_LOG_INFO("entities.unit", "%s", o.str().c_str());
+ TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str());
o.str("");
o << "Controlled List: ";
for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
o << (*itr)->GetGUID().ToString() << ", ";
- TC_LOG_INFO("entities.unit", "%s", o.str().c_str());
+ TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str());
o.str("");
o << "Aura List: ";
for (AuraApplicationMap::const_iterator itr = m_appliedAuras.begin(); itr != m_appliedAuras.end(); ++itr)
o << itr->first << ", ";
- TC_LOG_INFO("entities.unit", "%s", o.str().c_str());
+ TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str());
o.str("");
if (IsVehicle())
@@ -17348,11 +17348,11 @@ void Unit::OutDebugInfo() const
for (SeatMap::iterator itr = GetVehicleKit()->Seats.begin(); itr != GetVehicleKit()->Seats.end(); ++itr)
if (Unit* passenger = ObjectAccessor::GetUnit(*GetVehicleBase(), itr->second.Passenger.Guid))
o << passenger->GetGUID().ToString() << ", ";
- TC_LOG_INFO("entities.unit", "%s", o.str().c_str());
+ TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str());
}
if (GetVehicle())
- TC_LOG_INFO("entities.unit", "On vehicle %u.", GetVehicleBase()->GetEntry());
+ TC_LOG_DEBUG("entities.unit", "On vehicle %u.", GetVehicleBase()->GetEntry());
}
uint32 Unit::GetRemainingPeriodicAmount(ObjectGuid caster, uint32 spellId, AuraType auraType, uint8 effectIndex) const
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index d07ec212d0c..1db9183fbe4 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3893,6 +3893,8 @@ void ObjectMgr::BuildPlayerLevelInfo(uint8 race, uint8 _class, uint8 level, Play
}
}
+int32 const ReputationMgr::Reputation_Cap;
+
void ObjectMgr::LoadQuests()
{
uint32 oldMSTime = getMSTime();
@@ -7078,6 +7080,7 @@ void ObjectMgr::LoadReputationSpilloverTemplate()
continue;
}
+ bool invalidSpilloverFaction = false;
for (uint32 i = 0; i < MAX_SPILLOVER_FACTIONS; ++i)
{
if (repTemplate.faction[i])
@@ -7087,47 +7090,28 @@ void ObjectMgr::LoadReputationSpilloverTemplate()
if (!factionSpillover)
{
TC_LOG_ERROR("sql.sql", "Spillover faction (faction.dbc) %u does not exist but is used in `reputation_spillover_template` for faction %u, skipping", repTemplate.faction[i], factionId);
- continue;
+ invalidSpilloverFaction = true;
+ break;
}
if (factionSpillover->reputationListID < 0)
{
TC_LOG_ERROR("sql.sql", "Spillover faction (faction.dbc) %u for faction %u in `reputation_spillover_template` can not be listed for client, and then useless, skipping", repTemplate.faction[i], factionId);
- continue;
+ invalidSpilloverFaction = true;
+ break;
}
if (repTemplate.faction_rank[i] >= MAX_REPUTATION_RANK)
{
TC_LOG_ERROR("sql.sql", "Rank %u used in `reputation_spillover_template` for spillover faction %u is not valid, skipping", repTemplate.faction_rank[i], repTemplate.faction[i]);
- continue;
+ invalidSpilloverFaction = true;
+ break;
}
}
}
- FactionEntry const* factionEntry0 = sFactionStore.LookupEntry(repTemplate.faction[0]);
- if (repTemplate.faction[0] && !factionEntry0)
- {
- TC_LOG_ERROR("sql.sql", "Faction (faction.dbc) %u does not exist but is used in `reputation_spillover_template`", repTemplate.faction[0]);
- continue;
- }
- FactionEntry const* factionEntry1 = sFactionStore.LookupEntry(repTemplate.faction[1]);
- if (repTemplate.faction[1] && !factionEntry1)
- {
- TC_LOG_ERROR("sql.sql", "Faction (faction.dbc) %u does not exist but is used in `reputation_spillover_template`", repTemplate.faction[1]);
- continue;
- }
- FactionEntry const* factionEntry2 = sFactionStore.LookupEntry(repTemplate.faction[2]);
- if (repTemplate.faction[2] && !factionEntry2)
- {
- TC_LOG_ERROR("sql.sql", "Faction (faction.dbc) %u does not exist but is used in `reputation_spillover_template`", repTemplate.faction[2]);
- continue;
- }
- FactionEntry const* factionEntry3 = sFactionStore.LookupEntry(repTemplate.faction[3]);
- if (repTemplate.faction[3] && !factionEntry3)
- {
- TC_LOG_ERROR("sql.sql", "Faction (faction.dbc) %u does not exist but is used in `reputation_spillover_template`", repTemplate.faction[3]);
+ if (invalidSpilloverFaction)
continue;
- }
_repSpilloverTemplateStore[factionId] = repTemplate;
@@ -8619,7 +8603,6 @@ void ObjectMgr::LoadBroadcastTexts()
}
_broadcastTextStore.rehash(result->GetRowCount());
- uint32 count = 0;
do
{
@@ -8645,26 +8628,23 @@ void ObjectMgr::LoadBroadcastTexts()
{
if (!sSoundEntriesStore.LookupEntry(bct.SoundId))
{
- TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has SoundId %u but sound does not exist. Skipped.", bct.Id, bct.SoundId);
- // don't load bct of higher expansions
- continue;
+ TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has SoundId %u but sound does not exist.", bct.Id, bct.SoundId);
+ bct.SoundId = 0;
}
}
if (!GetLanguageDescByID(bct.Language))
{
- TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` using Language %u but Language does not exist. Skipped.", bct.Id, bct.Language);
- // don't load bct of higher expansions
- continue;
+ TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` using Language %u but Language does not exist.", bct.Id, bct.Language);
+ bct.Language = LANG_UNIVERSAL;
}
if (bct.EmoteId0)
{
if (!sEmotesStore.LookupEntry(bct.EmoteId0))
{
- TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId0 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId0);
- // don't load bct of higher expansions
- continue;
+ TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId0 %u but emote does not exist.", bct.Id, bct.EmoteId0);
+ bct.EmoteId0 = 0;
}
}
@@ -8672,9 +8652,8 @@ void ObjectMgr::LoadBroadcastTexts()
{
if (!sEmotesStore.LookupEntry(bct.EmoteId1))
{
- TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId1 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId1);
- // don't load bct of higher expansions
- continue;
+ TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId1 %u but emote does not exist.", bct.Id, bct.EmoteId1);
+ bct.EmoteId1 = 0;
}
}
@@ -8682,19 +8661,16 @@ void ObjectMgr::LoadBroadcastTexts()
{
if (!sEmotesStore.LookupEntry(bct.EmoteId2))
{
- TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId2 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId2);
- // don't load bct of higher expansions
- continue;
+ TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId2 %u but emote does not exist.", bct.Id, bct.EmoteId2);
+ bct.EmoteId2 = 0;
}
}
_broadcastTextStore[bct.Id] = bct;
-
- ++count;
}
while (result->NextRow());
- TC_LOG_INFO("server.loading", ">> Loaded %u broadcast texts in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
+ TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " broadcast texts in %u ms", _broadcastTextStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadBroadcastTextLocales()
@@ -8720,8 +8696,7 @@ void ObjectMgr::LoadBroadcastTextLocales()
BroadcastTextContainer::iterator bct = _broadcastTextStore.find(id);
if (bct == _broadcastTextStore.end())
{
- TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `locales_broadcast_text` does not exist or is incompatible. Skipped!", id);
- // don't load bct of higher expansions
+ TC_LOG_ERROR("sql.sql", "BroadcastText (Id: %u) in table `locales_broadcast_text` does not exist. Skipped!", id);
continue;
}
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
index e14910bdf5e..abe302d2d3d 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp
@@ -65,7 +65,7 @@ void VisibleNotifier::SendToSelf()
}
}
- for (GuidSet::const_iterator it = vis_guids.begin(); it != vis_guids.end(); ++it)
+ for (auto it = vis_guids.begin(); it != vis_guids.end(); ++it)
{
i_player.m_clientGUIDs.erase(*it);
i_data.AddOutOfRangeGUID(*it);
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index 5eb726084b3..ccf9748e67a 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -43,7 +43,7 @@ namespace Trinity
Player &i_player;
UpdateData i_data;
std::set<Unit*> i_visibleNow;
- GuidSet vis_guids;
+ GuidUnorderedSet vis_guids;
VisibleNotifier(Player &player) : i_player(player), vis_guids(player.m_clientGUIDs) { }
template<class T> void Visit(GridRefManager<T> &m);
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index d9124551c63..5664cbb6e4b 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -1808,7 +1808,7 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const*
return ERR_BATTLEGROUND_NONE; // ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY handled on client side
// get a player as reference, to compare other players' stats to (arena team id, queue id based on level, etc.)
- Player* reference = GetFirstMember()->GetSource();
+ Player* reference = ASSERT_NOTNULL(GetFirstMember())->GetSource();
// no reference found, can't join this way
if (!reference)
return ERR_BATTLEGROUND_JOIN_FAILED;
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 0fcaa47a5e2..9ff2041ee92 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -70,7 +70,7 @@ void WorldSession::HandlePetAction(WorldPacket& recvData)
// used also for charmed creature
Unit* pet = ObjectAccessor::GetUnit(*_player, guid1);
- TC_LOG_INFO("network", "HandlePetAction: %s - flag: %u, spellid: %u, target: %s.", guid1.ToString().c_str(), uint32(flag), spellid, guid2.ToString().c_str());
+ TC_LOG_DEBUG("network", "HandlePetAction: %s - flag: %u, spellid: %u, target: %s.", guid1.ToString().c_str(), uint32(flag), spellid, guid2.ToString().c_str());
if (!pet)
{
@@ -89,7 +89,7 @@ void WorldSession::HandlePetAction(WorldPacket& recvData)
SpellInfo const* spell = (flag == ACT_ENABLED || flag == ACT_PASSIVE) ? sSpellMgr->GetSpellInfo(spellid) : NULL;
if (!spell)
return;
- if (!(spell->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD))
+ if (!spell->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
return;
}
@@ -398,7 +398,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
void WorldSession::HandlePetNameQuery(WorldPacket& recvData)
{
- TC_LOG_INFO("network", "HandlePetNameQuery. CMSG_PET_NAME_QUERY");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_NAME_QUERY");
uint32 petnumber;
ObjectGuid petguid;
@@ -465,7 +465,7 @@ bool WorldSession::CheckStableMaster(ObjectGuid guid)
void WorldSession::HandlePetSetAction(WorldPacket& recvData)
{
- TC_LOG_INFO("network", "HandlePetSetAction. CMSG_PET_SET_ACTION");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_SET_ACTION");
ObjectGuid petguid;
uint8 count;
@@ -545,7 +545,7 @@ void WorldSession::HandlePetSetAction(WorldPacket& recvData)
uint32 spell_id = UNIT_ACTION_BUTTON_ACTION(data[i]);
uint8 act_state = UNIT_ACTION_BUTTON_TYPE(data[i]);
- TC_LOG_INFO("network", "Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X",
+ TC_LOG_DEBUG("network", "Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X",
_player->GetName().c_str(), position[i], spell_id, uint32(act_state));
//if it's act for spell (en/disable/cast) and there is a spell given (0 = remove spell) which pet doesn't know, don't add
@@ -582,7 +582,7 @@ void WorldSession::HandlePetSetAction(WorldPacket& recvData)
void WorldSession::HandlePetRename(WorldPacket& recvData)
{
- TC_LOG_INFO("network", "HandlePetRename. CMSG_PET_RENAME");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_RENAME");
ObjectGuid petguid;
uint8 isdeclined;
@@ -670,7 +670,7 @@ void WorldSession::HandlePetAbandon(WorldPacket& recvData)
{
ObjectGuid guid;
recvData >> guid; //pet guid
- TC_LOG_INFO("network", "HandlePetAbandon. CMSG_PET_ABANDON %s", guid.ToString().c_str());
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_ABANDON %s", guid.ToString().c_str());
if (!_player->IsInWorld())
return;
@@ -696,7 +696,7 @@ void WorldSession::HandlePetAbandon(WorldPacket& recvData)
void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket)
{
- TC_LOG_INFO("network", "CMSG_PET_SPELL_AUTOCAST");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_SPELL_AUTOCAST");
ObjectGuid guid;
uint32 spellid;
uint8 state; //1 for on, 0 for off
@@ -744,7 +744,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket)
void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
{
- TC_LOG_DEBUG("network", "WORLD: CMSG_PET_CAST_SPELL");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_CAST_SPELL");
ObjectGuid guid;
uint8 castCount;
@@ -846,7 +846,7 @@ void WorldSession::SendPetNameInvalid(uint32 error, const std::string& name, Dec
void WorldSession::HandlePetLearnTalent(WorldPacket& recvData)
{
- TC_LOG_DEBUG("network", "WORLD: CMSG_PET_LEARN_TALENT");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_PET_LEARN_TALENT");
ObjectGuid guid;
uint32 talentId, requestedRank;
@@ -858,7 +858,7 @@ void WorldSession::HandlePetLearnTalent(WorldPacket& recvData)
void WorldSession::HandleLearnPreviewTalentsPet(WorldPacket& recvData)
{
- TC_LOG_DEBUG("network", "CMSG_LEARN_PREVIEW_TALENTS_PET");
+ TC_LOG_DEBUG("network", "WORLD: Received CMSG_LEARN_PREVIEW_TALENTS_PET");
ObjectGuid guid;
recvData >> guid;
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index d6d7e3b9876..3c6258b2d7c 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -458,6 +458,12 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData)
if (!_player->IsInSameRaidWith(originalPlayer))
return;
+ if (!originalPlayer->CanShareQuest(questId))
+ return;
+
+ if (!_player->CanTakeQuest(quest, true))
+ return;
+
if (_player->CanAddQuest(quest, true))
_player->AddQuestAndCheckCompletion(quest, NULL); // NULL, this prevent DB script from duplicate running
@@ -621,7 +627,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket
WorldPacket data(SMSG_QUESTGIVER_STATUS_MULTIPLE, 4);
data << uint32(count); // placeholder
- for (GuidSet::const_iterator itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr)
+ for (auto itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr)
{
uint32 questStatus = DIALOG_STATUS_NONE;
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index c4bd892d3cf..fede3e30211 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -417,7 +417,7 @@ void WorldSession::HandleCancelAuraOpcode(WorldPacket& recvPacket)
return;
// not allow remove spells with attr SPELL_ATTR0_CANT_CANCEL
- if (spellInfo->Attributes & SPELL_ATTR0_CANT_CANCEL)
+ if (spellInfo->HasAttribute(SPELL_ATTR0_CANT_CANCEL))
return;
// channeled spell case (it currently cast then)
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index badd151bf4c..42bf61b6e38 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -191,6 +191,12 @@ void InstanceScript::UpdateDoorState(GameObject* door)
door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
}
+BossInfo* InstanceScript::GetBossInfo(uint32 id)
+{
+ ASSERT(id < bosses.size());
+ return &bosses[id];
+}
+
void InstanceScript::AddObject(Creature* obj, bool add)
{
ObjectInfoMap::const_iterator j = _creatureInfo.find(obj->GetEntry());
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 3089a4193c9..41a9e9d0be1 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -254,12 +254,16 @@ class InstanceScript : public ZoneScript
void AddObject(GameObject* obj, bool add);
void AddObject(WorldObject* obj, uint32 type, bool add);
- void AddDoor(GameObject* door, bool add);
+ virtual void AddDoor(GameObject* door, bool add);
void AddMinion(Creature* minion, bool add);
- void UpdateDoorState(GameObject* door);
+ virtual void UpdateDoorState(GameObject* door);
void UpdateMinionState(Creature* minion, EncounterState state);
+ // Exposes private data that should never be modified unless exceptional cases.
+ // Pay very much attention at how the returned BossInfo data is modified to avoid issues.
+ BossInfo* GetBossInfo(uint32 id);
+
// Instance Load and Save
bool ReadSaveDataHeaders(std::istringstream& data);
void ReadSaveDataBossStates(std::istringstream& data);
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index db6a2c98379..52b866850a6 100644
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -1832,7 +1832,7 @@ void LoadLootTemplates_Spell()
{
// not report about not trainable spells (optionally supported by DB)
// ignore 61756 (Northrend Inscription Research (FAST QA VERSION) for example
- if (!(spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT) || (spellInfo->Attributes & SPELL_ATTR0_TRADESPELL))
+ if (!spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL))
{
LootTemplates_Spell.ReportNonExistingId(spell_id, "Spell", spellInfo->Id);
}
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 49f7bc86081..b4066b2257e 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -80,7 +80,10 @@ bool Map::ExistMap(uint32 mapid, int gx, int gy)
FILE* pf = fopen(fileName, "rb");
if (!pf)
- TC_LOG_ERROR("maps", "Map file '%s': does not exist!", fileName);
+ {
+ TC_LOG_ERROR("maps", "Map file '%s' does not exist!", fileName);
+ TC_LOG_ERROR("maps", "Please place MAP-files (*.map) in the appropriate directory (%s), or correct the DataDir setting in your worldserver.conf file.", (sWorld->GetDataPath()+"maps/").c_str());
+ }
else
{
map_fileheader header;
@@ -109,7 +112,8 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy)
if (!exists)
{
std::string name = vmgr->getDirFileName(mapid, gx, gy);
- TC_LOG_ERROR("maps", "VMap file '%s' is missing or points to wrong version of vmap file. Redo vmaps with latest version of vmap_assembler.exe.", (sWorld->GetDataPath()+"vmaps/"+name).c_str());
+ TC_LOG_ERROR("maps", "VMap file '%s' does not exist", (sWorld->GetDataPath()+"vmaps/"+name).c_str());
+ TC_LOG_ERROR("maps", "Please place VMAP-files (*.vmtree and *.vmtile) in the vmap-directory (%s), or correct the DataDir setting in your worldserver.conf file.", (sWorld->GetDataPath()+"vmaps/").c_str());
return false;
}
}
@@ -126,9 +130,9 @@ void Map::LoadMMap(int gx, int gy)
bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gx, gy);
if (mmapLoadResult)
- TC_LOG_INFO("maps", "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
+ TC_LOG_DEBUG("maps", "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
else
- TC_LOG_INFO("maps", "Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
+ TC_LOG_ERROR("maps", "Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
}
void Map::LoadVMap(int gx, int gy)
@@ -140,10 +144,10 @@ void Map::LoadVMap(int gx, int gy)
switch (vmapLoadResult)
{
case VMAP::VMAP_LOAD_RESULT_OK:
- TC_LOG_INFO("maps", "VMAP loaded name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
+ TC_LOG_DEBUG("maps", "VMAP loaded name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
break;
case VMAP::VMAP_LOAD_RESULT_ERROR:
- TC_LOG_INFO("maps", "Could not load VMAP name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
+ TC_LOG_ERROR("maps", "Could not load VMAP name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
break;
case VMAP::VMAP_LOAD_RESULT_IGNORED:
TC_LOG_DEBUG("maps", "Ignored VMAP name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy);
@@ -173,7 +177,7 @@ void Map::LoadMap(int gx, int gy, bool reload)
//map already load, delete it before reloading (Is it necessary? Do we really need the ability the reload maps during runtime?)
if (GridMaps[gx][gy])
{
- TC_LOG_INFO("maps", "Unloading previously loaded map %u before reloading.", GetId());
+ TC_LOG_DEBUG("maps", "Unloading previously loaded map %u before reloading.", GetId());
sScriptMgr->OnUnloadGridMap(this, GridMaps[gx][gy], gx, gy);
delete (GridMaps[gx][gy]);
@@ -185,7 +189,7 @@ void Map::LoadMap(int gx, int gy, bool reload)
int len = sWorld->GetDataPath().length() + strlen("maps/%03u%02u%02u.map") + 1;
tmp = new char[len];
snprintf(tmp, len, (char *)(sWorld->GetDataPath() + "maps/%03u%02u%02u.map").c_str(), GetId(), gx, gy);
- TC_LOG_INFO("maps", "Loading map %s", tmp);
+ TC_LOG_DEBUG("maps", "Loading map %s", tmp);
// loading data
GridMaps[gx][gy] = new GridMap();
if (!GridMaps[gx][gy]->loadData(tmp))
@@ -2497,7 +2501,7 @@ void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpa
void Map::SendInitSelf(Player* player)
{
- TC_LOG_INFO("maps", "Creating player data for himself %u", player->GetGUIDLow());
+ TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUIDLow());
UpdateData data;
@@ -2849,7 +2853,7 @@ bool InstanceMap::CanEnter(Player* player)
uint32 maxPlayers = GetMaxPlayers();
if (GetPlayersCountExceptGMs() >= maxPlayers)
{
- TC_LOG_INFO("maps", "MAP: Instance '%u' of map '%s' cannot have more than '%u' players. Player '%s' rejected", GetInstanceId(), GetMapName(), maxPlayers, player->GetName().c_str());
+ TC_LOG_WARN("maps", "MAP: Instance '%u' of map '%s' cannot have more than '%u' players. Player '%s' rejected", GetInstanceId(), GetMapName(), maxPlayers, player->GetName().c_str());
player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS);
return false;
}
@@ -2918,7 +2922,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
InstanceSave* mapSave = sInstanceSaveMgr->GetInstanceSave(GetInstanceId());
if (!mapSave)
{
- TC_LOG_INFO("maps", "InstanceMap::Add: creating instance save for map %d spawnmode %d with instance id %d", GetId(), GetSpawnMode(), GetInstanceId());
+ TC_LOG_DEBUG("maps", "InstanceMap::Add: creating instance save for map %d spawnmode %d with instance id %d", GetId(), GetSpawnMode(), GetInstanceId());
mapSave = sInstanceSaveMgr->AddInstanceSave(GetId(), GetInstanceId(), Difficulty(GetSpawnMode()), 0, true);
}
@@ -2994,7 +2998,7 @@ bool InstanceMap::AddPlayerToMap(Player* player)
// first player enters (no players yet)
SetResetSchedule(false);
- TC_LOG_INFO("maps", "MAP: Player '%s' entered instance '%u' of map '%s'", player->GetName().c_str(), GetInstanceId(), GetMapName());
+ TC_LOG_DEBUG("maps", "MAP: Player '%s' entered instance '%u' of map '%s'", player->GetName().c_str(), GetInstanceId(), GetMapName());
// initialize unload state
m_unloadTimer = 0;
m_resetAfterUnload = false;
@@ -3020,7 +3024,7 @@ void InstanceMap::Update(const uint32 t_diff)
void InstanceMap::RemovePlayerFromMap(Player* player, bool remove)
{
- TC_LOG_INFO("maps", "MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName());
+ TC_LOG_DEBUG("maps", "MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to another map", player->GetName().c_str(), 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);
@@ -3253,7 +3257,7 @@ bool BattlegroundMap::AddPlayerToMap(Player* player)
void BattlegroundMap::RemovePlayerFromMap(Player* player, bool remove)
{
- TC_LOG_INFO("maps", "MAP: Removing player '%s' from bg '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName());
+ TC_LOG_DEBUG("maps", "MAP: Removing player '%s' from bg '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName());
Map::RemovePlayerFromMap(player, remove);
}
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 8131984224f..9bae8fbdfae 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -207,7 +207,8 @@ enum TrinityStrings
LANG_LIQUID_STATUS = 175,
LANG_INVALID_GAMEOBJECT_TYPE = 176,
LANG_GAMEOBJECT_DAMAGED = 177,
- // Room for more level 1 178-199 not used
+ LANG_GRID_POSITION = 178,
+ // Room for more level 1 179-199 not used
// level 2 chat
LANG_NO_SELECTION = 200,
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 0775a9a299a..685bcd338a9 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -427,7 +427,7 @@ enum SpellAttr4
SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use??
SPELL_ATTR4_UNK5 = 0x00000020, // 5
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_CAN_CAST_WHILE_CASTING = 0x00000080, // 7 Can be cast while another cast is in progress - see CanCastWhileCasting(SpellRec const*,CGUnit_C *,int &)
SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 Ignores resilience and any (except mechanic related) damage or % damage taken auras on target.
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
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 298e534d58e..bda3ad851c8 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -387,6 +387,43 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee
Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
}
+void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount)
+{
+ float step = 2 * float(M_PI) / stepCount * (clockwise ? -1.0f : 1.0f);
+ Position const& pos = { x, y, z, 0.0f };
+ float angle = pos.GetAngle(_owner->GetPositionX(), _owner->GetPositionY());
+
+ Movement::MoveSplineInit init(_owner);
+
+ for (uint8 i = 0; i < stepCount; angle += step, ++i)
+ {
+ G3D::Vector3 point;
+ point.x = x + radius * cosf(angle);
+ point.y = y + radius * sinf(angle);
+
+ if (_owner->IsFlying())
+ point.z = z;
+ else
+ point.z = _owner->GetMap()->GetHeight(_owner->GetPhaseMask(), point.x, point.y, z);
+
+ init.Path().push_back(point);
+ }
+
+ if (_owner->IsFlying())
+ {
+ init.SetFly();
+ init.SetCyclic();
+ init.SetAnimation(Movement::ToFly);
+ }
+ else
+ {
+ init.SetWalk(true);
+ init.SetCyclic();
+ }
+
+ init.Launch();
+}
+
void MotionMaster::MoveFall(uint32 id /*=0*/)
{
// use larger distance for vmap height search than in most other cases
@@ -647,7 +684,7 @@ void MotionMaster::DirectDelete(_Ty curr)
void MotionMaster::DelayedDelete(_Ty curr)
{
- TC_LOG_FATAL("misc", "Unit (Entry %u) is trying to delete its updating MG (Type %u)!", _owner->GetEntry(), curr->GetMovementGeneratorType());
+ TC_LOG_FATAL("misc", "Unit (Entry %u) is trying to delete its updating Movement Generator (Type %u)!", _owner->GetEntry(), curr->GetMovementGeneratorType());
if (isStatic(curr))
return;
if (!_expList)
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 2821cd5a59b..0b547d96e7f 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -184,6 +184,7 @@ class MotionMaster //: private std::stack<MovementGenerator *>
void MoveJump(Position const& pos, float speedXY, float speedZ, uint32 id = EVENT_JUMP)
{ MoveJump(pos.m_positionX, pos.m_positionY, pos.m_positionZ, speedXY, speedZ, id); };
void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = EVENT_JUMP);
+ void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount);
void MoveFall(uint32 id = 0);
void MoveSeekAssistance(float x, float y, float z);
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index ed1ea7f4b17..a382bf9547e 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -379,9 +379,9 @@ void FlightPathMovementGenerator::PreloadEndGrid()
// Load the grid
if (endMap)
{
- TC_LOG_INFO("misc", "Preloading rid (%f, %f) for map %u at node index %u/%u", _endGridX, _endGridY, _endMapId, _preloadTargetNode, (uint32)(i_path->size()-1));
+ TC_LOG_DEBUG("misc", "Preloading rid (%f, %f) for map %u at node index %u/%u", _endGridX, _endGridY, _endMapId, _preloadTargetNode, (uint32)(i_path->size()-1));
endMap->LoadGrid(_endGridX, _endGridY);
}
else
- TC_LOG_INFO("misc", "Unable to determine map to preload flightmaster grid");
+ TC_LOG_DEBUG("misc", "Unable to determine map to preload flightmaster grid");
}
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index d3fa03c1238..1beeebbbad3 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -147,7 +147,7 @@ void MoveSpline::init_spline(const MoveSplineInitArgs& args)
/// @todo what to do in such cases? problem is in input data (all points are at same coords)
if (spline.length() < minimal_duration)
{
- TC_LOG_ERROR("misc", "MoveSpline::init_spline: zero length spline, wrong input data?");
+ TC_LOG_DEBUG("misc", "MoveSpline::init_spline: zero length spline, wrong input data?");
spline.set_length(spline.last(), spline.isCyclic() ? 1000 : 1);
}
point_Idx = spline.first();
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index ad71381a1de..b99cb677ba0 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -297,7 +297,7 @@ bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standi
{
// bonuses are already given, so just modify standing by rate
int32 spilloverRep = int32(standing * repTemplate->faction_rate[i]);
- SetOneFactionReputation(sFactionStore.LookupEntry(repTemplate->faction[i]), spilloverRep, incremental);
+ SetOneFactionReputation(sFactionStore.AssertEntry(repTemplate->faction[i]), spilloverRep, incremental);
}
}
}
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 025184ff6ef..8be5da91c32 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -356,7 +356,6 @@ void AddSC_dustwallow_marsh();
void AddSC_felwood();
void AddSC_feralas();
void AddSC_moonglade();
-void AddSC_mulgore();
void AddSC_orgrimmar();
void AddSC_silithus();
void AddSC_stonetalon_mountains();
@@ -426,7 +425,8 @@ void AddSC_boss_heigan();
void AddSC_boss_gothik();
void AddSC_boss_thaddius();
void AddSC_instance_naxxramas();
-void AddSC_boss_magus_telestra(); //The Nexus Nexus
+void AddSC_boss_nexus_commanders(); // The Nexus Nexus
+void AddSC_boss_magus_telestra();
void AddSC_boss_anomalus();
void AddSC_boss_ormorok();
void AddSC_boss_keristrasza();
@@ -1061,7 +1061,6 @@ void AddKalimdorScripts()
AddSC_felwood();
AddSC_feralas();
AddSC_moonglade();
- AddSC_mulgore();
AddSC_orgrimmar();
AddSC_silithus();
AddSC_stonetalon_mountains();
@@ -1255,7 +1254,8 @@ void AddNorthrendScripts()
AddSC_boss_gothik();
AddSC_boss_thaddius();
AddSC_instance_naxxramas();
- AddSC_boss_magus_telestra(); //The Nexus Nexus
+ AddSC_boss_nexus_commanders(); // The Nexus Nexus
+ AddSC_boss_magus_telestra();
AddSC_boss_anomalus();
AddSC_boss_ormorok();
AddSC_boss_keristrasza();
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 628452d120c..aed829a7b57 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -182,9 +182,8 @@ struct TSpellSummary
uint8 Effects; // set of enum SelectEffect
} *SpellSummary;
-ScriptMgr::ScriptMgr() : _scriptCount(0)
+ScriptMgr::ScriptMgr() : _scriptCount(0), _scheduledScripts(0)
{
- _scheduledScripts = 0;
}
ScriptMgr::~ScriptMgr() { }
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index e290b13c635..a226f1b7ed2 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -1142,7 +1142,7 @@ class ScriptMgr
uint32 _scriptCount;
//atomic op counter for active scripts amount
- std::atomic_long _scheduledScripts;
+ std::atomic<uint32> _scheduledScripts;
};
#endif
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index b6b1a4992af..fa50fd56576 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -218,8 +218,8 @@ void WorldSession::SendPacket(WorldPacket* packet)
{
uint64 minTime = uint64(cur_time - lastTime);
uint64 fullTime = uint64(lastTime - firstTime);
- TC_LOG_INFO("misc", "Send all time packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f time: %u", sendPacketCount, sendPacketBytes, float(sendPacketCount)/fullTime, float(sendPacketBytes)/fullTime, uint32(fullTime));
- TC_LOG_INFO("misc", "Send last min packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f", sendLastPacketCount, sendLastPacketBytes, float(sendLastPacketCount)/minTime, float(sendLastPacketBytes)/minTime);
+ TC_LOG_DEBUG("misc", "Send all time packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f time: %u", sendPacketCount, sendPacketBytes, float(sendPacketCount)/fullTime, float(sendPacketBytes)/fullTime, uint32(fullTime));
+ TC_LOG_DEBUG("misc", "Send last min packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f", sendLastPacketCount, sendLastPacketBytes, float(sendLastPacketCount)/minTime, float(sendLastPacketBytes)/minTime);
lastTime = cur_time;
sendLastPacketCount = 1;
@@ -981,7 +981,7 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data)
addonInfo >> enabled >> crc >> unk1;
- TC_LOG_INFO("misc", "ADDON: Name: %s, Enabled: 0x%x, CRC: 0x%x, Unknown2: 0x%x", addonName.c_str(), enabled, crc, unk1);
+ TC_LOG_DEBUG("misc", "ADDON: Name: %s, Enabled: 0x%x, CRC: 0x%x, Unknown2: 0x%x", addonName.c_str(), enabled, crc, unk1);
AddonInfo addon(addonName, enabled, crc, 2, true);
@@ -989,15 +989,15 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data)
if (savedAddon)
{
if (addon.CRC != savedAddon->CRC)
- TC_LOG_INFO("misc", "ADDON: %s was known, but didn't match known CRC (0x%x)!", addon.Name.c_str(), savedAddon->CRC);
+ TC_LOG_ERROR("misc", "ADDON: %s was known, but didn't match known CRC (0x%x)!", addon.Name.c_str(), savedAddon->CRC);
else
- TC_LOG_INFO("misc", "ADDON: %s was known, CRC is correct (0x%x)", addon.Name.c_str(), savedAddon->CRC);
+ TC_LOG_DEBUG("misc", "ADDON: %s was known, CRC is correct (0x%x)", addon.Name.c_str(), savedAddon->CRC);
}
else
{
AddonMgr::SaveAddon(addon);
- TC_LOG_INFO("misc", "ADDON: %s (0x%x) was not known, saving...", addon.Name.c_str(), addon.CRC);
+ TC_LOG_DEBUG("misc", "ADDON: %s (0x%x) was not known, saving...", addon.Name.c_str(), addon.CRC);
}
/// @todo Find out when to not use CRC/pubkey, and other possible states.
@@ -1048,7 +1048,7 @@ void WorldSession::SendAddonsInfo()
data << uint8(usepk);
if (usepk) // if CRC is wrong, add public key (client need it)
{
- TC_LOG_INFO("misc", "ADDON: CRC (0x%x) for addon %s is wrong (does not match expected 0x%x), sending pubkey",
+ TC_LOG_DEBUG("misc", "ADDON: CRC (0x%x) for addon %s is wrong (does not match expected 0x%x), sending pubkey",
itr->CRC, itr->Name.c_str(), STANDARD_ADDON_CRC);
data.append(addonPublicKey, sizeof(addonPublicKey));
@@ -1262,7 +1262,7 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) co
return true;
case POLICY_KICK:
{
- TC_LOG_INFO("network", "AntiDOS: Player kicked!");
+ TC_LOG_WARN("network", "AntiDOS: Player kicked!");
Session->KickPlayer();
return false;
}
@@ -1278,7 +1278,7 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) co
case BAN_IP: nameOrIp = Session->GetRemoteAddress(); break;
}
sWorld->BanAccount(bm, nameOrIp, duration, "DOS (Packet Flooding/Spoofing", "Server: AutoDOS");
- TC_LOG_INFO("network", "AntiDOS: Player automatically banned for %u seconds.", duration);
+ TC_LOG_WARN("network", "AntiDOS: Player automatically banned for %u seconds.", duration);
Session->KickPlayer();
return false;
}
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 5b1d9497953..0bb864de0ed 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -146,14 +146,12 @@ bool WorldSocket::ReadDataHandler()
uint16 opcode = uint16(header->cmd);
- std::string opcodeName = GetOpcodeNameForLogging(opcode);
-
WorldPacket packet(opcode, std::move(_packetBuffer));
if (sPacketLog->CanLogPacket())
sPacketLog->LogPacket(packet, CLIENT_TO_SERVER, GetRemoteIpAddress(), GetRemotePort());
- TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), opcodeName.c_str());
+ TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), GetOpcodeNameForLogging(opcode).c_str());
switch (opcode)
{
@@ -170,7 +168,7 @@ bool WorldSocket::ReadDataHandler()
HandleAuthSession(packet);
break;
case CMSG_KEEP_ALIVE:
- TC_LOG_DEBUG("network", "%s", opcodeName.c_str());
+ TC_LOG_DEBUG("network", "%s", GetOpcodeNameForLogging(opcode).c_str());
sScriptMgr->OnPacketReceive(_worldSession, packet);
break;
default:
@@ -257,7 +255,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
recvPacket >> unk4;
recvPacket.read(digest, 20);
- TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u",
+ TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u",
clientBuild,
serverId,
account.c_str(),
@@ -429,7 +427,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket)
if (allowedAccountType > SEC_PLAYER && AccountTypes(security) < allowedAccountType)
{
SendAuthResponseError(AUTH_UNAVAILABLE);
- TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough");
+ TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough");
sScriptMgr->OnFailedAccountLogin(id);
DelayedCloseSocket();
return;
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index 947bd62860c..e83d39cb922 100644
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -46,6 +46,8 @@ WorldSocketMgr::WorldSocketMgr() : BaseSocketMgr(), _socketSendBufferSize(-1), m
{
}
+int const boost::asio::socket_base::max_connections;
+
bool WorldSocketMgr::StartNetwork(boost::asio::io_service& service, std::string const& bindIp, uint16 port)
{
_tcpNoDelay = sConfigMgr->GetBoolDefault("Network.TcpNodelay", true);
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index e5b8cd111bc..5366326a022 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -542,11 +542,11 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load)
// Haste modifies periodic time of channeled spells
if (m_spellInfo->IsChanneled())
{
- if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
caster->ModSpellCastTime(m_spellInfo, m_amplitude);
}
// and periodic time of auras affected by SPELL_AURA_PERIODIC_HASTE
- else if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
+ else if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
m_amplitude = int32(m_amplitude * caster->GetFloatValue(UNIT_MOD_CAST_SPEED));
}
}
@@ -555,7 +555,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load)
{
m_tickNumber = m_amplitude ? GetBase()->GetDuration() / m_amplitude : 0;
m_periodicTimer = m_amplitude ? GetBase()->GetDuration() % m_amplitude : 0;
- if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_START_PERIODIC_AT_APPLY)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR5_START_PERIODIC_AT_APPLY))
++m_tickNumber;
}
else // aura just created or reapplied
@@ -571,7 +571,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load)
{
m_periodicTimer = 0;
// Start periodic on next tick or at aura apply
- if (m_amplitude && !(m_spellInfo->AttributesEx5 & SPELL_ATTR5_START_PERIODIC_AT_APPLY))
+ if (m_amplitude && !m_spellInfo->HasAttribute(SPELL_ATTR5_START_PERIODIC_AT_APPLY))
m_periodicTimer += m_amplitude;
}
}
@@ -1133,7 +1133,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
continue;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first);
- if (!spellInfo || !(spellInfo->Attributes & (SPELL_ATTR0_PASSIVE | SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
+ if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
continue;
if (spellInfo->Stances & (1<<(GetMiscValue()-1)))
@@ -1148,7 +1148,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
if (GlyphPropertiesEntry const* glyph = sGlyphPropertiesStore.LookupEntry(glyphId))
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(glyph->SpellId);
- if (!spellInfo || !(spellInfo->Attributes & (SPELL_ATTR0_PASSIVE | SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
+ if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
continue;
if (spellInfo->Stances & (1<<(GetMiscValue()-1)))
target->CastSpell(target, glyph->SpellId, true, NULL, this);
@@ -3243,7 +3243,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8
for (std::list <AuraType>::iterator iter = aura_immunity_list.begin(); iter != aura_immunity_list.end(); ++iter)
target->ApplySpellImmune(GetId(), IMMUNITY_STATE, *iter, apply);
- if (apply && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
+ if (apply && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
{
target->RemoveAurasWithMechanic(mechanic_immunity_list, AURA_REMOVE_BY_DEFAULT, GetId());
for (std::list <AuraType>::iterator iter = aura_immunity_list.begin(); iter != aura_immunity_list.end(); ++iter)
@@ -3300,7 +3300,7 @@ void AuraEffect::HandleModMechanicImmunity(AuraApplication const* aurApp, uint8
break;
}
- if (apply && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
+ if (apply && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
target->RemoveAurasWithMechanic(mechanic, AURA_REMOVE_BY_DEFAULT, GetId());
}
@@ -3336,7 +3336,7 @@ void AuraEffect::HandleAuraModStateImmunity(AuraApplication const* aurApp, uint8
target->ApplySpellImmune(GetId(), IMMUNITY_STATE, GetMiscValue(), apply);
- if (apply && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
+ if (apply && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
target->RemoveAurasByType(AuraType(GetMiscValue()), ObjectGuid::Empty, GetBase());
}
@@ -3372,13 +3372,13 @@ void AuraEffect::HandleAuraModSchoolImmunity(AuraApplication const* aurApp, uint
target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
// remove all flag auras (they are positive, but they must be removed when you are immune)
- if (GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY
- && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_DAMAGE_REDUCED_SHIELD)
+ if (GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
+ && GetSpellInfo()->HasAttribute(SPELL_ATTR2_DAMAGE_REDUCED_SHIELD))
target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
/// @todo optimalize this cycle - use RemoveAurasWithInterruptFlags call or something else
if ((apply)
- && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY
+ && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
&& GetSpellInfo()->IsPositive()) //Only positive immunity removes auras
{
uint32 school_mask = GetMiscValue();
@@ -3759,7 +3759,7 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8
// recalculate current HP/MP after applying aura modifications (only for spells with SPELL_ATTR0_UNK4 0x00000010 flag)
// this check is total bullshit i think
- if (GetMiscValue() == STAT_STAMINA && (m_spellInfo->Attributes & SPELL_ATTR0_ABILITY))
+ if (GetMiscValue() == STAT_STAMINA && m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
target->SetHealth(std::max<uint32>(uint32(healthPct * target->GetMaxHealth() * 0.01f), (alive ? 1 : 0)));
}
@@ -5901,7 +5901,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
else
damage = uint32(target->CountPctFromMaxHealth(damage));
- if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE))
if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura)
{
damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
@@ -5918,13 +5918,13 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const
damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target);
int32 dmg = damage;
- if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (!GetSpellInfo()->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE))
caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL);
damage = dmg;
caster->CalcAbsorbResist(target, GetSpellInfo()->GetSchoolMask(), DOT, damage, &absorb, &resist, GetSpellInfo());
- TC_LOG_INFO("spells", "PeriodicTick: %s attacked %s for %u dmg inflicted by %u absorb is %u",
+ TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s attacked %s for %u dmg inflicted by %u absorb is %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), damage, GetId(), absorb);
caster->DealDamageMods(target, damage, &absorb);
@@ -5979,7 +5979,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellDamagePctDone(target, m_spellInfo, DOT);
else
damage = std::max(int32(damage * GetDonePct()), 0);
-
+
damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount());
// Calculate armor mitigation
@@ -5990,7 +5990,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
damage = damageReductedArmor;
}
- if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE))
if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura)
{
damage = uint32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask));
@@ -6007,7 +6007,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target);
int32 dmg = damage;
- if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE))
+ if (!GetSpellInfo()->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE))
caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL);
damage = dmg;
@@ -6016,7 +6016,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
if (target->GetHealth() < damage)
damage = uint32(target->GetHealth());
- TC_LOG_INFO("spells", "PeriodicTick: %s health leech of %s for %u dmg inflicted by %u abs is %u",
+ TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s health leech of %s for %u dmg inflicted by %u abs is %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), damage, GetId(), absorb);
caster->SendSpellNonMeleeDamageLog(target, GetId(), damage, GetSpellInfo()->GetSchoolMask(), absorb, resist, false, 0, crit);
@@ -6083,7 +6083,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
}
// heal for caster damage (must be alive)
- if (target != caster && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_HEALTH_FUNNEL && !caster->IsAlive())
+ if (target != caster && GetSpellInfo()->HasAttribute(SPELL_ATTR2_HEALTH_FUNNEL) && !caster->IsAlive())
return;
// don't regen when permanent aura target has full power
@@ -6160,7 +6160,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
if (crit)
damage = caster->SpellCriticalHealingBonus(m_spellInfo, damage, target);
- TC_LOG_INFO("spells", "PeriodicTick: %s heal of %s for %u health inflicted by %u",
+ TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s heal of %s for %u health inflicted by %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), damage, GetId());
uint32 absorb = 0;
@@ -6177,7 +6177,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
// Health Funnel
// damage caster for heal amount
- if (target != caster && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_HEALTH_FUNNEL)
+ if (target != caster && GetSpellInfo()->HasAttribute(SPELL_ATTR2_HEALTH_FUNNEL))
{
uint32 funnelDamage = GetSpellInfo()->ManaPerSecond; // damage is not affected by spell power
@@ -6231,7 +6231,7 @@ void AuraEffect::HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) con
drainAmount = maxmana;
}
- TC_LOG_INFO("spells", "PeriodicTick: %s power leech of %s for %u dmg inflicted by %u",
+ TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s power leech of %s for %u dmg inflicted by %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), drainAmount, GetId());
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
@@ -6292,7 +6292,7 @@ void AuraEffect::HandleObsModPowerAuraTick(Unit* target, Unit* caster) const
// ignore negative values (can be result apply spellmods to aura damage
uint32 amount = std::max(m_amount, 0) * target->GetMaxPower(powerType) /100;
- TC_LOG_INFO("spells", "PeriodicTick: %s energize %s for %u dmg inflicted by %u",
+ TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s energize %s for %u dmg inflicted by %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), amount, GetId());
SpellPeriodicAuraLogInfo pInfo(this, amount, 0, 0, 0, 0.0f, false);
@@ -6308,7 +6308,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons
{
Powers powerType = Powers(GetMiscValue());
- if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
+ if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
return;
if (!target->IsAlive() || !target->GetMaxPower(powerType))
@@ -6330,7 +6330,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons
SpellPeriodicAuraLogInfo pInfo(this, amount, 0, 0, 0, 0.0f, false);
target->SendPeriodicAuraLog(&pInfo);
- TC_LOG_INFO("spells", "PeriodicTick: %s energize %s for %u dmg inflicted by %u",
+ TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s energize %s for %u dmg inflicted by %u",
GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), amount, GetId());
int32 gain = target->ModifyPower(powerType, amount);
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 93a4c96b92f..0ba059b1952 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -191,7 +191,7 @@ void AuraApplication::BuildUpdatePacket(ByteBuffer& data, bool remove) const
Aura const* aura = GetBase();
data << uint32(aura->GetId());
uint32 flags = _flags;
- if (aura->GetMaxDuration() > 0 && !(aura->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_HIDE_DURATION))
+ if (aura->GetMaxDuration() > 0 && !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR5_HIDE_DURATION))
flags |= AFLAG_DURATION;
data << uint8(flags);
data << uint8(aura->GetCasterLevel());
@@ -749,12 +749,13 @@ void Aura::SetDuration(int32 duration, bool withMods)
void Aura::RefreshDuration(bool withMods)
{
- if (withMods)
+ Unit* caster = GetCaster();
+ if (withMods && caster)
{
int32 duration = m_spellInfo->GetMaxDuration();
// Calculate duration of periodics affected by haste.
- if (GetCaster()->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
- duration = int32(duration * GetCaster()->GetFloatValue(UNIT_MOD_CAST_SPEED));
+ if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
+ duration = int32(duration * caster->GetFloatValue(UNIT_MOD_CAST_SPEED));
SetMaxDuration(duration);
SetDuration(duration);
@@ -1813,7 +1814,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const
if (existingAura->GetSpellInfo()->IsChanneled())
return true;
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_STACK_FOR_DIFF_CASTERS)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_STACK_FOR_DIFF_CASTERS))
return true;
// check same periodic auras
@@ -1865,7 +1866,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const
if (m_spellInfo->IsMultiSlotAura() && !IsArea())
return true;
if (GetCastItemGUID() && existingAura->GetCastItemGUID())
- if (GetCastItemGUID() != existingAura->GetCastItemGUID() && (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_ENCHANT_PROC))
+ if (GetCastItemGUID() != existingAura->GetCastItemGUID() && m_spellInfo->HasAttribute(SPELL_ATTR0_CU_ENCHANT_PROC))
return true;
// same spell with same caster should not stack
return false;
diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h
index ac45461b333..6abcd578411 100644
--- a/src/server/game/Spells/Auras/SpellAuras.h
+++ b/src/server/game/Spells/Auras/SpellAuras.h
@@ -161,8 +161,8 @@ class Aura
{
return GetCasterGUID() == target->GetGUID()
&& m_spellInfo->Stances
- && !(m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT)
- && !(m_spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT);
+ && !m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT)
+ && !m_spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT);
}
bool CanBeSaved() const;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 8e415b06745..c31386cd496 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -482,23 +482,23 @@ void SpellCastTargets::Update(Unit* caster)
void SpellCastTargets::OutDebug() const
{
if (!m_targetMask)
- TC_LOG_INFO("spells", "No targets");
+ TC_LOG_DEBUG("spells", "No targets");
- TC_LOG_INFO("spells", "target mask: %u", m_targetMask);
+ TC_LOG_DEBUG("spells", "target mask: %u", m_targetMask);
if (m_targetMask & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_CORPSE_MASK | TARGET_FLAG_GAMEOBJECT_MASK))
- TC_LOG_INFO("spells", "Object target: %s", m_objectTargetGUID.ToString().c_str());
+ TC_LOG_DEBUG("spells", "Object target: %s", m_objectTargetGUID.ToString().c_str());
if (m_targetMask & TARGET_FLAG_ITEM)
- TC_LOG_INFO("spells", "Item target: %s", m_itemTargetGUID.ToString().c_str());
+ TC_LOG_DEBUG("spells", "Item target: %s", m_itemTargetGUID.ToString().c_str());
if (m_targetMask & TARGET_FLAG_TRADE_ITEM)
- TC_LOG_INFO("spells", "Trade item target: %s", m_itemTargetGUID.ToString().c_str());
+ TC_LOG_DEBUG("spells", "Trade item target: %s", m_itemTargetGUID.ToString().c_str());
if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION)
- TC_LOG_INFO("spells", "Source location: transport guid:%s trans offset: %s position: %s", m_src._transportGUID.ToString().c_str(), m_src._transportOffset.ToString().c_str(), m_src._position.ToString().c_str());
+ TC_LOG_DEBUG("spells", "Source location: transport guid:%s trans offset: %s position: %s", m_src._transportGUID.ToString().c_str(), m_src._transportOffset.ToString().c_str(), m_src._position.ToString().c_str());
if (m_targetMask & TARGET_FLAG_DEST_LOCATION)
- TC_LOG_INFO("spells", "Destination location: transport guid:%s trans offset: %s position: %s", m_dst._transportGUID.ToString().c_str(), m_dst._transportOffset.ToString().c_str(), m_dst._position.ToString().c_str());
+ TC_LOG_DEBUG("spells", "Destination location: transport guid:%s trans offset: %s position: %s", m_dst._transportGUID.ToString().c_str(), m_dst._transportOffset.ToString().c_str(), m_dst._position.ToString().c_str());
if (m_targetMask & TARGET_FLAG_STRING)
- TC_LOG_INFO("spells", "String: %s", m_strTarget.c_str());
- TC_LOG_INFO("spells", "speed: %f", m_speed);
- TC_LOG_INFO("spells", "elevation: %f", m_elevation);
+ TC_LOG_DEBUG("spells", "String: %s", m_strTarget.c_str());
+ TC_LOG_DEBUG("spells", "speed: %f", m_speed);
+ TC_LOG_DEBUG("spells", "elevation: %f", m_elevation);
}
SpellValue::SpellValue(SpellInfo const* proto)
@@ -512,7 +512,7 @@ SpellValue::SpellValue(SpellInfo const* proto)
Spell::Spell(Unit* caster, SpellInfo const* info, TriggerCastFlags triggerFlags, ObjectGuid originalCasterGUID, bool skipCheck) :
m_spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(info, caster)),
-m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster)
+m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster)
, m_spellValue(new SpellValue(m_spellInfo)), m_preGeneratedPath(PathGenerator(m_caster))
{
m_customError = SPELL_CUSTOM_ERROR_NONE;
@@ -533,7 +533,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
switch (m_spellInfo->DmgClass)
{
case SPELL_DAMAGE_CLASS_MELEE:
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_REQ_OFFHAND)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND))
m_attackType = OFF_ATTACK;
else
m_attackType = BASE_ATTACK;
@@ -543,7 +543,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
break;
default:
// Wands
- if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
m_attackType = RANGED_ATTACK;
else
m_attackType = BASE_ATTACK;
@@ -574,8 +574,8 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
m_spellState = SPELL_STATE_NULL;
_triggeredCastFlags = triggerFlags;
- if (info->AttributesEx4 & SPELL_ATTR4_TRIGGERED)
- _triggeredCastFlags = TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT);
+ if (info->HasAttribute(SPELL_ATTR4_CAN_CAST_WHILE_CASTING))
+ _triggeredCastFlags = TriggerCastFlags(uint32(_triggeredCastFlags) | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY);
m_CastItem = NULL;
m_castItemGUID.Clear();
@@ -615,8 +615,8 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
// Determine if spell can be reflected back to the caster
// Patch 1.2 notes: Spell Reflection no longer reflects abilities
- m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !(m_spellInfo->Attributes & SPELL_ATTR0_ABILITY)
- && !(m_spellInfo->AttributesEx & SPELL_ATTR1_CANT_BE_REFLECTED) && !(m_spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY)
+ && !m_spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REFLECTED) && !m_spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
&& !m_spellInfo->IsPassive() && !m_spellInfo->IsPositive();
CleanupTargetList();
@@ -1749,11 +1749,11 @@ uint32 Spell::GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList*
default:
break;
}
- if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_DEAD))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_DEAD))
retMask &= ~GRID_MAP_TYPE_MASK_CORPSE;
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS))
retMask &= GRID_MAP_TYPE_MASK_CORPSE | GRID_MAP_TYPE_MASK_PLAYER;
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS))
retMask &= GRID_MAP_TYPE_MASK_PLAYER;
if (condList)
@@ -1843,7 +1843,7 @@ void Spell::SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTar
}
// chain lightning/heal spells and similar - allow to jump at larger distance and go out of los
- bool isBouncingFar = (m_spellInfo->AttributesEx4 & SPELL_ATTR4_AREA_TARGET_CHAIN
+ bool isBouncingFar = (m_spellInfo->HasAttribute(SPELL_ATTR4_AREA_TARGET_CHAIN)
|| m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_NONE
|| m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC);
@@ -1944,7 +1944,7 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const* /*triggeredByAura*/)
break;
case SPELL_DAMAGE_CLASS_RANGED:
// Auto attack
- if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
{
m_procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK;
m_procVictim = PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK;
@@ -1958,7 +1958,7 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const* /*triggeredByAura*/)
default:
if (m_spellInfo->EquippedItemClass == ITEM_CLASS_WEAPON &&
m_spellInfo->EquippedItemSubClassMask & (1<<ITEM_SUBCLASS_WEAPON_WAND)
- && m_spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) // Wands auto attack
+ && m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) // Wands auto attack
{
m_procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK;
m_procVictim = PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK;
@@ -1990,8 +1990,8 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const* /*triggeredByAura*/)
if (!(m_procAttacker & PROC_FLAG_DONE_RANGED_AUTO_ATTACK))
{
if (_triggeredCastFlags & TRIGGERED_DISALLOW_PROC_EVENTS &&
- (m_spellInfo->AttributesEx2 & SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC ||
- m_spellInfo->AttributesEx3 & SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2))
+ (m_spellInfo->HasAttribute(SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC) ||
+ m_spellInfo->HasAttribute(SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2)))
m_procEx |= PROC_EX_INTERNAL_CANT_PROC;
else if (_triggeredCastFlags & TRIGGERED_DISALLOW_PROC_EVENTS)
m_procEx |= PROC_EX_INTERNAL_TRIGGERED;
@@ -2275,7 +2275,7 @@ 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 cast on self
- bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2);
+ bool canEffectTrigger = !m_spellInfo->HasAttribute(SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2);
Unit* spellHitTarget = NULL;
if (missInfo == SPELL_MISS_NONE) // In case spell hit target, do all effect on that target
@@ -2395,7 +2395,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
if (canEffectTrigger && missInfo != SPELL_MISS_REFLECT)
{
caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo, m_triggeredByAuraSpell);
- if (caster->GetTypeId() == TYPEID_PLAYER && (m_spellInfo->Attributes & SPELL_ATTR0_STOP_ATTACK_TARGET) == 0 &&
+ if (caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) == 0 &&
(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))
caster->ToPlayer()->CastItemCombatSpell(unitTarget, m_attackType, procVictim, procEx);
}
@@ -2415,7 +2415,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
caster->ProcDamageAndSpell(unit, procAttacker, procVictim, procEx, 0, m_attackType, m_spellInfo, m_triggeredByAuraSpell);
// Failed Pickpocket, reveal rogue
- if (missInfo == SPELL_MISS_RESIST && m_spellInfo->AttributesCu & SPELL_ATTR0_CU_PICKPOCKET && unitTarget->GetTypeId() == TYPEID_UNIT)
+ if (missInfo == SPELL_MISS_RESIST && m_spellInfo->HasAttribute(SPELL_ATTR0_CU_PICKPOCKET) && unitTarget->GetTypeId() == TYPEID_UNIT)
{
m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TALK);
if (unitTarget->ToCreature()->IsAIEnabled)
@@ -2425,9 +2425,9 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
if (missInfo != SPELL_MISS_EVADE && !m_caster->IsFriendlyTo(unit) && (!m_spellInfo->IsPositive() || m_spellInfo->HasEffect(SPELL_EFFECT_DISPEL)))
{
- m_caster->CombatStart(unit, !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_NO_INITIAL_AGGRO));
+ m_caster->CombatStart(unit, !m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO));
- if (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_AURA_CC)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC))
if (!unit->IsStandState())
unit->SetStandState(UNIT_STAND_STATE_STAND);
}
@@ -2514,7 +2514,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
{
unit->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_HITBYSPELL);
/// @todo This is a hack. But we do not know what types of stealth should be interrupted by CC
- if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer())
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer())
unit->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
}
else if (m_caster->IsFriendlyTo(unit))
@@ -2532,7 +2532,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
if (m_caster->GetTypeId() == TYPEID_PLAYER)
m_caster->ToPlayer()->UpdatePvP(true);
}
- if (unit->IsInCombat() && !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_NO_INITIAL_AGGRO))
+ if (unit->IsInCombat() && !m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO))
{
m_caster->SetInCombatState(unit->GetCombatTimer() > 0, unit);
unit->getHostileRefManager().threatAssist(m_caster, 0.0f);
@@ -2625,7 +2625,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
if (m_spellInfo->IsChanneled())
m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this);
// and duration of auras affected by SPELL_AURA_PERIODIC_HASTE
- else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)
+ else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION))
duration = int32(duration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED));
if (duration != m_spellAura->GetMaxDuration())
@@ -3192,7 +3192,7 @@ void Spell::cast(bool skipCheck)
SendSpellGo();
// Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells
- if ((m_spellInfo->Speed > 0.0f && !m_spellInfo->IsChanneled()) || m_spellInfo->AttributesEx4 & SPELL_ATTR4_UNK4)
+ if ((m_spellInfo->Speed > 0.0f && !m_spellInfo->IsChanneled()) || m_spellInfo->HasAttribute(SPELL_ATTR4_UNK4))
{
// Remove used for cast item if need (it can be already NULL after TakeReagents call
// in case delayed spell remove item at cast delay start
@@ -3592,7 +3592,7 @@ void Spell::finish(bool ok)
break;
}
}
- if (!found && !(m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
+ if (!found && !m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))
{
m_caster->resetAttackTimer(BASE_ATTACK);
if (m_caster->haveOffhandWeapon())
@@ -3618,7 +3618,7 @@ void Spell::finish(bool ok)
}
// Stop Attack for some spells
- if (m_spellInfo->Attributes & SPELL_ATTR0_STOP_ATTACK_TARGET)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET))
m_caster->AttackStop();
}
@@ -3783,7 +3783,7 @@ void Spell::SendSpellStart()
if ((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell)
castFlags |= CAST_FLAG_PENDING;
- if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO))
castFlags |= CAST_FLAG_AMMO;
if ((m_caster->GetTypeId() == TYPEID_PLAYER ||
(m_caster->GetTypeId() == TYPEID_UNIT && m_caster->ToCreature()->IsPet()))
@@ -3836,7 +3836,7 @@ void Spell::SendSpellGo()
if ((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell)
castFlags |= CAST_FLAG_PENDING;
- if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO))
castFlags |= CAST_FLAG_AMMO; // arrows/bullets visual
if ((m_caster->GetTypeId() == TYPEID_PLAYER ||
@@ -4230,7 +4230,7 @@ void Spell::SendResurrectRequest(Player* target)
data << uint8(m_caster->GetTypeId() == TYPEID_PLAYER ? 0 : 1); // "you'll be afflicted with resurrection sickness"
// override delay sent with SMSG_CORPSE_RECLAIM_DELAY, set instant resurrection for spells with this attribute
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_RESURRECTION_TIMER)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_RESURRECTION_TIMER))
data << uint32(0);
target->GetSession()->SendPacket(&data);
}
@@ -4561,8 +4561,8 @@ void Spell::HandleThreatSpells()
if (m_UniqueTargetInfo.empty())
return;
- if ((m_spellInfo->AttributesEx & SPELL_ATTR1_NO_THREAT) ||
- (m_spellInfo->AttributesEx3 & SPELL_ATTR3_NO_INITIAL_AGGRO))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR1_NO_THREAT) ||
+ m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO))
return;
float threat = 0.0f;
@@ -4573,7 +4573,7 @@ void Spell::HandleThreatSpells()
threat += threatEntry->flatMod;
}
- else if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_NO_INITIAL_THREAT) == 0)
+ else if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_NO_INITIAL_THREAT) == 0)
threat += m_spellInfo->SpellLevel;
// past this point only multiplicative effects occur
@@ -4634,11 +4634,11 @@ void Spell::HandleEffects(Unit* pUnitTarget, Item* pItemTarget, GameObject* pGOT
SpellCastResult Spell::CheckCast(bool strict)
{
// check death state
- if (!m_caster->IsAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !((m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell)))
+ if (!m_caster->IsAlive() && !m_spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && !(m_spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell)))
return SPELL_FAILED_CASTER_DEAD;
// check cooldowns to prevent cheating
- if (m_caster->GetTypeId() == TYPEID_PLAYER && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE))
+ if (m_caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE))
{
//can cast triggered (by aura only?) spells while have this flag
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
@@ -4657,7 +4657,7 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_NOT_READY;
}
- if (m_spellInfo->AttributesEx7 & SPELL_ATTR7_IS_CHEAT_SPELL && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR7_IS_CHEAT_SPELL) && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS))
{
m_customError = SPELL_CUSTOM_ERROR_GM_ONLY;
return SPELL_FAILED_CUSTOM_ERROR;
@@ -4675,11 +4675,11 @@ SpellCastResult Spell::CheckCast(bool strict)
if (m_caster->GetTypeId() == TYPEID_PLAYER && VMAP::VMapFactory::createOrGetVMapManager()->isLineOfSightCalcEnabled())
{
- if (m_spellInfo->Attributes & SPELL_ATTR0_OUTDOORS_ONLY &&
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_OUTDOORS_ONLY) &&
!m_caster->GetMap()->IsOutdoors(m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ()))
return SPELL_FAILED_ONLY_OUTDOORS;
- if (m_spellInfo->Attributes & SPELL_ATTR0_INDOORS_ONLY &&
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_INDOORS_ONLY) &&
m_caster->GetMap()->IsOutdoors(m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ()))
return SPELL_FAILED_ONLY_INDOORS;
}
@@ -4705,7 +4705,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (shapeError != SPELL_CAST_OK)
return shapeError;
- if ((m_spellInfo->Attributes & SPELL_ATTR0_ONLY_STEALTHED) && !(m_caster->HasStealthAura()))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_ONLY_STEALTHED) && !(m_caster->HasStealthAura()))
return SPELL_FAILED_ONLY_STEALTHED;
}
}
@@ -4791,7 +4791,7 @@ SpellCastResult Spell::CheckCast(bool strict)
// those spells may have incorrect target entries or not filled at all (for example 15332)
// such spells when learned are not targeting anyone using targeting system, they should apply directly to caster instead
// also, such casts shouldn't be sent to client
- if (!((m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && (!m_targets.GetUnitTarget() || m_targets.GetUnitTarget() == m_caster)))
+ if (!(m_spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && (!m_targets.GetUnitTarget() || m_targets.GetUnitTarget() == m_caster)))
{
// Check explicit target for m_originalCaster - todo: get rid of such workarounds
SpellCastResult castResult = m_spellInfo->CheckExplicitTarget(m_originalCaster ? m_originalCaster : m_caster, m_targets.GetObjectTarget(), m_targets.GetItemTarget());
@@ -4808,11 +4808,11 @@ SpellCastResult Spell::CheckCast(bool strict)
if (target != m_caster)
{
// Must be behind the target
- if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) && target->HasInArc(static_cast<float>(M_PI), m_caster))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) && target->HasInArc(static_cast<float>(M_PI), m_caster))
return SPELL_FAILED_NOT_BEHIND;
// Target must be facing you
- if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER) && !target->HasInArc(static_cast<float>(M_PI), m_caster))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER) && !target->HasInArc(static_cast<float>(M_PI), m_caster))
return SPELL_FAILED_NOT_INFRONT;
if (m_caster->GetEntry() != WORLD_TRIGGER) // Ignore LOS for gameobjects casts (wrongly cast by a trigger)
@@ -4822,7 +4822,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (DynamicObject* dynObj = m_caster->GetDynObject(m_triggeredByAuraSpell->Id))
losTarget = dynObj;
- if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget))
return SPELL_FAILED_LINE_OF_SIGHT;
}
}
@@ -4834,7 +4834,7 @@ SpellCastResult Spell::CheckCast(bool strict)
float x, y, z;
m_targets.GetDstPos()->GetPosition(x, y, z);
- if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOS(x, y, z))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOS(x, y, z))
return SPELL_FAILED_LINE_OF_SIGHT;
}
@@ -4855,15 +4855,15 @@ SpellCastResult Spell::CheckCast(bool strict)
}
// Spell cast only in battleground
- if ((m_spellInfo->AttributesEx3 & SPELL_ATTR3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER)
if (!m_caster->ToPlayer()->InBattleground())
return SPELL_FAILED_ONLY_BATTLEGROUNDS;
// do not allow spells to be cast in arenas
// - with greater than 10 min CD without SPELL_ATTR4_USABLE_IN_ARENA flag
// - with SPELL_ATTR4_NOT_USABLE_IN_ARENA flag
- if ((m_spellInfo->AttributesEx4 & SPELL_ATTR4_NOT_USABLE_IN_ARENA) ||
- (m_spellInfo->GetRecoveryTime() > 10 * MINUTE * IN_MILLISECONDS && !(m_spellInfo->AttributesEx4 & SPELL_ATTR4_USABLE_IN_ARENA)))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR4_NOT_USABLE_IN_ARENA) ||
+ (m_spellInfo->GetRecoveryTime() > 10 * MINUTE * IN_MILLISECONDS && !m_spellInfo->HasAttribute(SPELL_ATTR4_USABLE_IN_ARENA)))
if (MapEntry const* mapEntry = sMapStore.LookupEntry(m_caster->GetMapId()))
if (mapEntry->IsBattleArena())
return SPELL_FAILED_NOT_IN_ARENA;
@@ -4881,7 +4881,7 @@ SpellCastResult Spell::CheckCast(bool strict)
// not let players cast spells at mount (and let do it to creatures)
if (m_caster->IsMounted() && m_caster->GetTypeId() == TYPEID_PLAYER && !(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE) &&
- !m_spellInfo->IsPassive() && !(m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_MOUNTED))
+ !m_spellInfo->IsPassive() && !m_spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED))
{
if (m_caster->IsInFlight())
return SPELL_FAILED_NOT_ON_TAXI;
@@ -4938,7 +4938,7 @@ SpellCastResult Spell::CheckCast(bool strict)
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (m_spellInfo->Effects[i].Effect == SPELL_EFFECT_DISPEL)
{
- if (m_spellInfo->Effects[i].IsTargetingArea() || m_spellInfo->AttributesEx & SPELL_ATTR1_MELEE_COMBAT_START)
+ if (m_spellInfo->Effects[i].IsTargetingArea() || m_spellInfo->HasAttribute(SPELL_ATTR1_MELEE_COMBAT_START))
{
hasDispellableAura = true;
break;
@@ -5522,7 +5522,7 @@ SpellCastResult Spell::CheckPetCast(Unit* target)
SpellCastResult Spell::CheckCasterAuras() const
{
// spells totally immuned to caster auras (wsg flag drop, give marks etc)
- if (m_spellInfo->AttributesEx6 & SPELL_ATTR6_IGNORE_CASTER_AURAS)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_AURAS))
return SPELL_CAST_OK;
uint8 school_immune = 0;
@@ -5531,7 +5531,7 @@ SpellCastResult Spell::CheckCasterAuras() const
// Check if the spell grants school or mechanic immunity.
// We use bitmasks so the loop is done only once and not on every aura check below.
- if (m_spellInfo->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
{
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
@@ -5547,7 +5547,7 @@ SpellCastResult Spell::CheckCasterAuras() const
mechanic_immune = IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK;
}
- bool usableInStun = (m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_STUNNED) != 0;
+ bool usableInStun = m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_STUNNED);
// Glyph of Pain Suppression
// there is no other way to handle it
@@ -5579,9 +5579,9 @@ SpellCastResult Spell::CheckCasterAuras() const
else
prevented_reason = SPELL_FAILED_STUNNED;
}
- else if (unitflag & UNIT_FLAG_CONFUSED && !(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_CONFUSED))
+ else if (unitflag & UNIT_FLAG_CONFUSED && !m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_CONFUSED))
prevented_reason = SPELL_FAILED_CONFUSED;
- else if (unitflag & UNIT_FLAG_FLEEING && !(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_FEARED))
+ else if (unitflag & UNIT_FLAG_FLEEING && !m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_FEARED))
prevented_reason = SPELL_FAILED_FLEEING;
else if (unitflag & UNIT_FLAG_SILENCED && m_spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE)
prevented_reason = SPELL_FAILED_SILENCED;
@@ -5601,7 +5601,7 @@ SpellCastResult Spell::CheckCasterAuras() const
SpellInfo const* auraInfo = aura->GetSpellInfo();
if (auraInfo->GetAllEffectsMechanicMask() & mechanic_immune)
continue;
- if (auraInfo->GetSchoolMask() & school_immune && !(auraInfo->AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE))
+ if (auraInfo->GetSchoolMask() & school_immune && !auraInfo->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE))
continue;
if (auraInfo->GetDispelMask() & dispel_immune)
continue;
@@ -5619,11 +5619,11 @@ SpellCastResult Spell::CheckCasterAuras() const
return SPELL_FAILED_STUNNED;
break;
case SPELL_AURA_MOD_CONFUSE:
- if (!(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_CONFUSED))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_CONFUSED))
return SPELL_FAILED_CONFUSED;
break;
case SPELL_AURA_MOD_FEAR:
- if (!(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_FEARED))
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_FEARED))
return SPELL_FAILED_FLEEING;
break;
case SPELL_AURA_MOD_SILENCE:
@@ -6260,7 +6260,7 @@ SpellCastResult Spell::CheckItems()
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT) && m_spellInfo->EquippedItemClass >=0)
{
// main hand weapon required
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_MAIN_HAND)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_MAIN_HAND))
{
Item* item = m_caster->ToPlayer()->GetWeaponForAttack(BASE_ATTACK);
@@ -6274,7 +6274,7 @@ SpellCastResult Spell::CheckItems()
}
// offhand hand weapon required
- if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_REQ_OFFHAND)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND))
{
Item* item = m_caster->ToPlayer()->GetWeaponForAttack(OFF_ATTACK);
@@ -6324,7 +6324,7 @@ void Spell::Delayed() // only called in DealDamage()
else
m_timer += delaytime;
- TC_LOG_INFO("spells", "Spell %u partially interrupted for (%d) ms at damage", m_spellInfo->Id, delaytime);
+ TC_LOG_DEBUG("spells", "Spell %u partially interrupted for (%d) ms at damage", m_spellInfo->Id, delaytime);
WorldPacket data(SMSG_SPELL_DELAYED, 8+4);
data << m_caster->GetPackGUID();
@@ -6463,11 +6463,11 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* lo
}
// check for ignore LOS on the effect itself
- if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS))
+ if (m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS))
return true;
// if spell is triggered, need to check for LOS disable on the aura triggering it and inherit that behaviour
- if (IsTriggered() && m_triggeredByAuraSpell && (m_triggeredByAuraSpell->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_triggeredByAuraSpell->Id, NULL, SPELL_DISABLE_LOS)))
+ if (IsTriggered() && m_triggeredByAuraSpell && (m_triggeredByAuraSpell->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_triggeredByAuraSpell->Id, NULL, SPELL_DISABLE_LOS)))
return true;
/// @todo shit below shouldn't be here, but it's temporary
@@ -6518,7 +6518,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* lo
bool Spell::IsNextMeleeSwingSpell() const
{
- return (m_spellInfo->Attributes & SPELL_ATTR0_ON_NEXT_SWING) != 0;
+ return m_spellInfo->HasAttribute(SPELL_ATTR0_ON_NEXT_SWING);
}
bool Spell::IsAutoActionResetSpell() const
@@ -6697,7 +6697,7 @@ void Spell::HandleLaunchPhase()
if (m_applyMultiplierMask & (1 << i))
multiplier[i] = m_spellInfo->Effects[i].CalcDamageMultiplier(m_originalCaster, this);
- bool usesAmmo = (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_DIRECT_DAMAGE) != 0;
+ bool usesAmmo = m_spellInfo->HasAttribute(SPELL_ATTR0_CU_DIRECT_DAMAGE);
Unit::AuraEffectList const& Auras = m_caster->GetAuraEffectsByType(SPELL_AURA_ABILITY_CONSUME_NO_AMMO);
for (Unit::AuraEffectList::const_iterator j = Auras.begin(); j != Auras.end(); ++j)
{
@@ -7140,7 +7140,7 @@ void Spell::CallScriptDestinationTargetSelectHandlers(SpellDestination& target,
bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck)
{
// Skip if there are not any script
- if (!m_loadedScripts.size())
+ if (m_loadedScripts.empty())
return true;
for (std::list<SpellScript*>::iterator itr = m_loadedScripts.begin(); itr != m_loadedScripts.end(); ++itr)
@@ -7162,7 +7162,7 @@ bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToC
bool Spell::CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* triggeredByAura) const
{
- bool only_on_caster = (triggeredByAura && (triggeredByAura->AttributesEx4 & SPELL_ATTR4_PROC_ONLY_ON_CASTER));
+ bool only_on_caster = (triggeredByAura && triggeredByAura->HasAttribute(SPELL_ATTR4_PROC_ONLY_ON_CASTER));
// If triggeredByAura has SPELL_ATTR4_PROC_ONLY_ON_CASTER then it can only proc on a cast spell with TARGET_UNIT_CASTER
for (uint8 i = 0;i < MAX_SPELL_EFFECTS; ++i)
{
@@ -7401,12 +7401,12 @@ WorldObjectSpellConeTargetCheck::WorldObjectSpellConeTargetCheck(float coneAngle
bool WorldObjectSpellConeTargetCheck::operator()(WorldObject* target)
{
- if (_spellInfo->AttributesCu & SPELL_ATTR0_CU_CONE_BACK)
+ if (_spellInfo->HasAttribute(SPELL_ATTR0_CU_CONE_BACK))
{
if (!_caster->isInBack(target, _coneAngle))
return false;
}
- else if (_spellInfo->AttributesCu & SPELL_ATTR0_CU_CONE_LINE)
+ else if (_spellInfo->HasAttribute(SPELL_ATTR0_CU_CONE_LINE))
{
if (!_caster->HasInLine(target, _caster->GetObjectSize()))
return false;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 651f28d3590..7a2f15b3370 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -324,7 +324,7 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
case SPELLFAMILY_GENERIC:
{
// Meteor like spells (divided damage to targets)
- if (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_SHARE_DAMAGE)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_SHARE_DAMAGE))
{
uint32 count = 0;
for (std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
@@ -1755,7 +1755,7 @@ void Spell::EffectEnergize(SpellEffIndex effIndex)
Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue);
- if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
+ if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
return;
if (unitTarget->GetMaxPower(power) == 0)
@@ -1870,7 +1870,7 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex)
Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue);
- if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
+ if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER))
return;
uint32 maxPower = unitTarget->GetMaxPower(power);
@@ -4226,7 +4226,7 @@ void Spell::EffectStuck(SpellEffIndex /*effIndex*/)
return;
TC_LOG_DEBUG("spells", "Spell Effect: Stuck");
- TC_LOG_INFO("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUIDLow(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
+ TC_LOG_DEBUG("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUIDLow(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
if (player->IsInFlight())
return;
@@ -4819,8 +4819,8 @@ void Spell::EffectLeapBack(SpellEffIndex effIndex)
if (!unitTarget)
return;
- float speedxy = float(m_spellInfo->Effects[effIndex].MiscValue)/10;
- float speedz = float(damage/10);
+ float speedxy = m_spellInfo->Effects[effIndex].MiscValue / 10.f;
+ float speedz = damage/ 10.f;
//1891: Disengage
m_caster->JumpTo(speedxy, speedz, m_spellInfo->SpellIconID != 1891);
}
@@ -5344,13 +5344,13 @@ void Spell::EffectStealBeneficialBuff(SpellEffIndex effIndex)
if ((aura->GetSpellInfo()->GetDispelMask()) & dispelMask)
{
// Need check for passive? this
- if (!aurApp->IsPositive() || aura->IsPassive() || aura->GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_NOT_STEALABLE)
+ if (!aurApp->IsPositive() || aura->IsPassive() || aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_NOT_STEALABLE))
continue;
// The charges / stack amounts don't count towards the total number of auras that can be dispelled.
// Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell
// Polymorph instead of 1 / (5 + 1) -> 16%.
- bool dispel_charges = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0;
+ bool dispel_charges = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES);
uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount();
if (charges > 0)
steal_list.push_back(std::make_pair(aura, charges));
@@ -5852,7 +5852,7 @@ void Spell::EffectCastButtons(SpellEffIndex effIndex)
if (!p_caster->HasSpell(spell_id) || p_caster->HasSpellCooldown(spell_id))
continue;
- if (!(spellInfo->AttributesEx7 & SPELL_ATTR7_SUMMON_PLAYER_TOTEM))
+ if (!spellInfo->HasAttribute(SPELL_ATTR7_SUMMON_PLAYER_TOTEM))
continue;
uint32 cost = spellInfo->CalcPowerCost(m_caster, spellInfo->GetSchoolMask());
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 6215f8cfa0a..862521a068c 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -453,7 +453,7 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster, int32 const* bp, Unit const
// amount multiplication based on caster's level
if (!caster->IsControlledByPlayer() &&
_spellInfo->SpellLevel && _spellInfo->SpellLevel != caster->getLevel() &&
- !basePointsPerLevel && (_spellInfo->Attributes & SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION))
+ !basePointsPerLevel && _spellInfo->HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION))
{
bool canEffectScale = false;
switch (Effect)
@@ -1049,14 +1049,14 @@ bool SpellInfo::NeedsToBeTriggeredByCaster(SpellInfo const* triggeringSpell) con
bool SpellInfo::IsPassive() const
{
- return (Attributes & SPELL_ATTR0_PASSIVE) != 0;
+ return HasAttribute(SPELL_ATTR0_PASSIVE);
}
bool SpellInfo::IsAutocastable() const
{
- if (Attributes & SPELL_ATTR0_PASSIVE)
+ if (HasAttribute(SPELL_ATTR0_PASSIVE))
return false;
- if (AttributesEx & SPELL_ATTR1_UNAUTOCASTABLE_BY_PET)
+ if (HasAttribute(SPELL_ATTR1_UNAUTOCASTABLE_BY_PET))
return false;
return true;
}
@@ -1107,37 +1107,37 @@ bool SpellInfo::IsMultiSlotAura() const
bool SpellInfo::IsStackableOnOneSlotWithDifferentCasters() const
{
/// TODO: Re-verify meaning of SPELL_ATTR3_STACK_FOR_DIFF_CASTERS and update conditions here
- return StackAmount > 1 && !IsChanneled() && !(AttributesEx3 & SPELL_ATTR3_STACK_FOR_DIFF_CASTERS);
+ return StackAmount > 1 && !IsChanneled() && !HasAttribute(SPELL_ATTR3_STACK_FOR_DIFF_CASTERS);
}
bool SpellInfo::IsCooldownStartedOnEvent() const
{
- return Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE || (CategoryEntry && CategoryEntry->Flags & SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT);
+ return HasAttribute(SPELL_ATTR0_DISABLED_WHILE_ACTIVE) || (CategoryEntry && CategoryEntry->Flags & SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT);
}
bool SpellInfo::IsDeathPersistent() const
{
- return (AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT) != 0;
+ return HasAttribute(SPELL_ATTR3_DEATH_PERSISTENT);
}
bool SpellInfo::IsRequiringDeadTarget() const
{
- return (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0;
+ return HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS);
}
bool SpellInfo::IsAllowingDeadTarget() const
{
- return AttributesEx2 & SPELL_ATTR2_CAN_TARGET_DEAD || Targets & (TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_DEAD);
+ return HasAttribute(SPELL_ATTR2_CAN_TARGET_DEAD) || Targets & (TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_DEAD);
}
bool SpellInfo::CanBeUsedInCombat() const
{
- return !(Attributes & SPELL_ATTR0_CANT_USED_IN_COMBAT);
+ return !HasAttribute(SPELL_ATTR0_CANT_USED_IN_COMBAT);
}
bool SpellInfo::IsPositive() const
{
- return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE);
+ return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE);
}
bool SpellInfo::IsPositiveEffect(uint8 effIndex) const
@@ -1146,27 +1146,27 @@ bool SpellInfo::IsPositiveEffect(uint8 effIndex) const
{
default:
case 0:
- return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF0);
+ return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE_EFF0);
case 1:
- return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF1);
+ return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE_EFF1);
case 2:
- return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF2);
+ return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE_EFF2);
}
}
bool SpellInfo::IsChanneled() const
{
- return (AttributesEx & (SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2)) != 0;
+ return HasAttribute(SPELL_ATTR1_CHANNELED_1) || HasAttribute(SPELL_ATTR1_CHANNELED_2);
}
bool SpellInfo::NeedsComboPoints() const
{
- return (AttributesEx & (SPELL_ATTR1_REQ_COMBO_POINTS1 | SPELL_ATTR1_REQ_COMBO_POINTS2)) != 0;
+ return HasAttribute(SPELL_ATTR1_REQ_COMBO_POINTS1) || HasAttribute(SPELL_ATTR1_REQ_COMBO_POINTS2);
}
bool SpellInfo::IsBreakingStealth() const
{
- return !(AttributesEx & SPELL_ATTR1_NOT_BREAK_STEALTH);
+ return !HasAttribute(SPELL_ATTR1_NOT_BREAK_STEALTH);
}
bool SpellInfo::IsRangedWeaponSpell() const
@@ -1177,12 +1177,12 @@ bool SpellInfo::IsRangedWeaponSpell() const
bool SpellInfo::IsAutoRepeatRangedSpell() const
{
- return (AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) != 0;
+ return HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG);
}
bool SpellInfo::IsAffectedBySpellMods() const
{
- return !(AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS);
+ return !HasAttribute(SPELL_ATTR3_NO_DONE_BONUS);
}
bool SpellInfo::IsAffectedBySpellMod(SpellModifier const* mod) const
@@ -1205,11 +1205,11 @@ bool SpellInfo::IsAffectedBySpellMod(SpellModifier const* mod) const
bool SpellInfo::CanPierceImmuneAura(SpellInfo const* aura) const
{
// these spells pierce all avalible spells (Resurrection Sickness for example)
- if (Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ if (HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
return true;
// these spells (Cyclone for example) can pierce all... // ...but not these (Divine shield, Ice block, Cyclone and Banish for example)
- if ((AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY || aura->Mechanic == MECHANIC_BANISH)))
+ if ((HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)) && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY || aura->Mechanic == MECHANIC_BANISH)))
return true;
return false;
@@ -1218,15 +1218,15 @@ bool SpellInfo::CanPierceImmuneAura(SpellInfo const* aura) const
bool SpellInfo::CanDispelAura(SpellInfo const* aura) const
{
// These spells (like Mass Dispel) can dispell all auras, except death persistent ones (like Dungeon and Battleground Deserter)
- if (Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY && !aura->IsDeathPersistent())
+ if (HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) && !aura->IsDeathPersistent())
return true;
// These auras (like Divine Shield) can't be dispelled
- if (aura->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
+ if (aura->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
return false;
// These auras (Cyclone for example) are not dispelable
- if (aura->AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)
+ if (aura->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE))
return false;
return true;
@@ -1235,7 +1235,7 @@ bool SpellInfo::CanDispelAura(SpellInfo const* aura) const
bool SpellInfo::IsSingleTarget() const
{
// all other single target spells have if it has AttributesEx5
- if (AttributesEx5 & SPELL_ATTR5_SINGLE_TARGET_SPELL)
+ if (HasAttribute(SPELL_ATTR5_SINGLE_TARGET_SPELL))
return true;
switch (GetSpellSpecific())
@@ -1332,7 +1332,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
if (actAsShifted)
{
- if (Attributes & SPELL_ATTR0_NOT_SHAPESHIFT) // not while shapeshifted
+ if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT)) // not while shapeshifted
return SPELL_FAILED_NOT_SHAPESHIFT;
else if (Stances != 0) // needs other shapeshift
return SPELL_FAILED_ONLY_SHAPESHIFT;
@@ -1340,7 +1340,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
else
{
// needs shapeshift
- if (!(AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT) && Stances != 0)
+ if (!HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT) && Stances != 0)
return SPELL_FAILED_ONLY_SHAPESHIFT;
}
@@ -1379,7 +1379,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a
}
// continent limitation (virtual continent)
- if (AttributesEx4 & SPELL_ATTR4_CAST_ONLY_IN_OUTLAND)
+ if (HasAttribute(SPELL_ATTR4_CAST_ONLY_IN_OUTLAND))
{
uint32 v_map = GetVirtualMapForMapAndZone(map_id, zone_id);
MapEntry const* mapEntry = sMapStore.LookupEntry(v_map);
@@ -1388,7 +1388,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a
}
// raid instance limitation
- if (AttributesEx6 & SPELL_ATTR6_NOT_IN_RAID_INSTANCE)
+ if (HasAttribute(SPELL_ATTR6_NOT_IN_RAID_INSTANCE))
{
MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
if (!mapEntry || mapEntry->IsRaid())
@@ -1493,11 +1493,11 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a
SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* target, bool implicit) const
{
- if (AttributesEx & SPELL_ATTR1_CANT_TARGET_SELF && caster == target)
+ if (HasAttribute(SPELL_ATTR1_CANT_TARGET_SELF) && caster == target)
return SPELL_FAILED_BAD_TARGETS;
// check visibility - ignore stealth for implicit (area) targets
- if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_INVISIBLE) && !caster->CanSeeOrDetect(target, implicit))
+ if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE) && !caster->CanSeeOrDetect(target, implicit))
return SPELL_FAILED_BAD_TARGETS;
Unit const* unitTarget = target->ToUnit();
@@ -1505,7 +1505,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
// creature/player specific target checks
if (unitTarget)
{
- if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT)
+ if (HasAttribute(SPELL_ATTR1_CANT_TARGET_IN_COMBAT))
{
if (unitTarget->IsInCombat())
return SPELL_FAILED_TARGET_AFFECTING_COMBAT;
@@ -1517,9 +1517,9 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
}
// only spells with SPELL_ATTR3_ONLY_TARGET_GHOSTS can target ghosts
- if (((AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0) != unitTarget->HasAuraType(SPELL_AURA_GHOST))
+ if (HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS) != unitTarget->HasAuraType(SPELL_AURA_GHOST))
{
- if (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS)
+ if (HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS))
return SPELL_FAILED_TARGET_NOT_GHOST;
else
return SPELL_FAILED_BAD_TARGETS;
@@ -1530,12 +1530,12 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
if (caster->GetTypeId() == TYPEID_PLAYER)
{
// Do not allow these spells to target creatures not tapped by us (Banish, Polymorph, many quest spells)
- if (AttributesEx2 & SPELL_ATTR2_CANT_TARGET_TAPPED)
+ if (HasAttribute(SPELL_ATTR2_CANT_TARGET_TAPPED))
if (Creature const* targetCreature = unitTarget->ToCreature())
if (targetCreature->hasLootRecipient() && !targetCreature->isTappedBy(caster->ToPlayer()))
return SPELL_FAILED_CANT_CAST_ON_TAPPED;
- if (AttributesCu & SPELL_ATTR0_CU_PICKPOCKET)
+ if (HasAttribute(SPELL_ATTR0_CU_PICKPOCKET))
{
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
return SPELL_FAILED_BAD_TARGETS;
@@ -1575,21 +1575,21 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
else return SPELL_CAST_OK;
// corpseOwner and unit specific target checks
- if (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS && !unitTarget->ToPlayer())
+ if (HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS) && !unitTarget->ToPlayer())
return SPELL_FAILED_TARGET_NOT_PLAYER;
if (!IsAllowingDeadTarget() && !unitTarget->IsAlive())
return SPELL_FAILED_TARGETS_DEAD;
// check this flag only for implicit targets (chain and area), allow to explicitly target units for spells like Shield of Righteousness
- if (implicit && AttributesEx6 & SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED && !unitTarget->CanFreeMove())
+ if (implicit && HasAttribute(SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED) && !unitTarget->CanFreeMove())
return SPELL_FAILED_BAD_TARGETS;
// checked in Unit::IsValidAttack/AssistTarget, shouldn't be checked for ENTRY targets
- //if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
// return SPELL_FAILED_BAD_TARGETS;
- //if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS)
+ //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS)
if (!CheckTargetCreatureType(unitTarget))
{
@@ -1705,7 +1705,7 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const
checkMask = VEHICLE_SEAT_FLAG_CAN_ATTACK;
VehicleSeatEntry const* vehicleSeat = vehicle->GetSeatForPassenger(caster);
- if (!(AttributesEx6 & SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !(Attributes & SPELL_ATTR0_CASTABLE_WHILE_MOUNTED)
+ if (!HasAttribute(SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED)
&& (vehicleSeat->m_flags & checkMask) != checkMask)
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
@@ -2106,7 +2106,7 @@ uint32 SpellInfo::CalcCastTime(Spell* spell /*= NULL*/) const
if (spell)
spell->GetCaster()->ModSpellCastTime(this, castTime, spell);
- if (Attributes & SPELL_ATTR0_REQ_AMMO && (!IsAutoRepeatRangedSpell()))
+ if (HasAttribute(SPELL_ATTR0_REQ_AMMO) && (!IsAutoRepeatRangedSpell()))
castTime += 500;
return (castTime > 0) ? uint32(castTime) : 0;
@@ -2147,7 +2147,7 @@ uint32 SpellInfo::GetRecoveryTime() const
int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) const
{
// Spell drain all exist power on cast (Only paladin lay of Hands)
- if (AttributesEx & SPELL_ATTR1_DRAIN_ALL_POWER)
+ if (HasAttribute(SPELL_ATTR1_DRAIN_ALL_POWER))
{
// If power type - health drain all
if (PowerType == POWER_HEALTH)
@@ -2193,7 +2193,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) c
powerCost += caster->GetInt32Value(UNIT_FIELD_POWER_COST_MODIFIER + school);
// Shiv - costs 20 + weaponSpeed*10 energy (apply only to non-triggered spell with energy cost)
- if (AttributesEx4 & SPELL_ATTR4_SPELL_VS_EXTEND_COST)
+ if (HasAttribute(SPELL_ATTR4_SPELL_VS_EXTEND_COST))
{
uint32 speed = 0;
if (SpellShapeshiftEntry const* ss = sSpellShapeshiftStore.LookupEntry(caster->GetShapeshiftForm()))
@@ -2201,7 +2201,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) c
else
{
WeaponAttackType slot = BASE_ATTACK;
- if (AttributesEx3 & SPELL_ATTR3_REQ_OFFHAND)
+ if (HasAttribute(SPELL_ATTR3_REQ_OFFHAND))
slot = OFF_ATTACK;
speed = caster->GetAttackTime(slot);
@@ -2216,7 +2216,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) c
if (!caster->IsControlledByPlayer())
{
- if (Attributes & SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION)
+ if (HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION))
{
GtNPCManaCostScalerEntry const* spellScaler = sGtNPCManaCostScalerStore.LookupEntry(SpellLevel - 1);
GtNPCManaCostScalerEntry const* casterScaler = sGtNPCManaCostScalerStore.LookupEntry(caster->getLevel() - 1);
@@ -2361,7 +2361,7 @@ void SpellInfo::_InitializeExplicitTargetMask()
bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
{
// not found a single positive spell with this attribute
- if (Attributes & SPELL_ATTR0_NEGATIVE_1)
+ if (HasAttribute(SPELL_ATTR0_NEGATIVE_1))
return false;
switch (SpellFamilyName)
@@ -2542,7 +2542,7 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
if (Effects[effIndex].TargetA.GetTarget() != TARGET_UNIT_CASTER)
return false;
// but not this if this first effect (didn't find better check)
- if (Attributes & SPELL_ATTR0_NEGATIVE_1 && effIndex == 0)
+ if (HasAttribute(SPELL_ATTR0_NEGATIVE_1) && effIndex == 0)
return false;
break;
case SPELL_AURA_MECHANIC_IMMUNITY:
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index d9c062e77fd..f2808a089e1 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -376,6 +376,16 @@ public:
bool HasAura(AuraType aura) const;
bool HasAreaAuraEffect() const;
+ inline bool HasAttribute(SpellAttr0 attribute) const { return !!(Attributes & attribute); }
+ inline bool HasAttribute(SpellAttr1 attribute) const { return !!(AttributesEx & attribute); }
+ inline bool HasAttribute(SpellAttr2 attribute) const { return !!(AttributesEx2 & attribute); }
+ inline bool HasAttribute(SpellAttr3 attribute) const { return !!(AttributesEx3 & attribute); }
+ inline bool HasAttribute(SpellAttr4 attribute) const { return !!(AttributesEx4 & attribute); }
+ inline bool HasAttribute(SpellAttr5 attribute) const { return !!(AttributesEx5 & attribute); }
+ inline bool HasAttribute(SpellAttr6 attribute) const { return !!(AttributesEx6 & attribute); }
+ inline bool HasAttribute(SpellAttr7 attribute) const { return !!(AttributesEx7 & attribute); }
+ inline bool HasAttribute(SpellCustomAttributes customAttribute) const { return !!(AttributesCu & customAttribute); }
+
bool IsExplicitDiscovery() const;
bool IsLootCrafting() const;
bool IsQuestTame() const;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index db16a7312ea..b9f046670cc 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -2238,7 +2238,7 @@ void SpellMgr::LoadEnchantCustomAttr()
continue;
/// @todo find a better check
- if (!(spellInfo->AttributesEx2 & SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA) || !(spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT))
+ if (!spellInfo->HasAttribute(SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA) || !spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT))
continue;
for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j)
@@ -2959,6 +2959,8 @@ void SpellMgr::LoadSpellInfoCorrections()
switch (spellInfo->Id)
{
case 53096: // Quetz'lun's Judgment
+ case 70743: // AoD Special
+ case 70614: // AoD Special - Vegard
spellInfo->MaxAffectedTargets = 1;
break;
case 42436: // Drink! (Brewfest)
@@ -3729,7 +3731,7 @@ void SpellMgr::LoadSpellInfoCorrections()
case 45440: // Steam Tonk Controller
case 60256: // Collect Sample
// Crashes client on pressing ESC
- spellInfo->AttributesEx4 &= ~SPELL_ATTR4_TRIGGERED;
+ spellInfo->AttributesEx4 &= ~SPELL_ATTR4_CAN_CAST_WHILE_CASTING;
break;
// ISLE OF CONQUEST SPELLS
//
@@ -3746,7 +3748,7 @@ void SpellMgr::LoadSpellInfoCorrections()
{
case SPELLFAMILY_PALADIN:
// Seals of the Pure should affect Seal of Righteousness
- if (spellInfo->SpellIconID == 25 && spellInfo->Attributes & SPELL_ATTR0_PASSIVE)
+ if (spellInfo->SpellIconID == 25 && spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE))
spellInfo->Effects[EFFECT_0].SpellClassMask[1] |= 0x20000000;
break;
case SPELLFAMILY_DEATHKNIGHT:
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 555f89aad8f..84f22f2f1a9 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -940,6 +940,12 @@ void World::LoadConfigSettings(bool reload)
}
m_bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY] = sConfigMgr->GetBoolDefault("SaveRespawnTimeImmediately", true);
+ if (!m_bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY])
+ {
+ TC_LOG_WARN("server.loading", "SaveRespawnTimeImmediately triggers assertions when disabled, overridden to Enabled");
+ m_bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY] = true;
+ }
+
m_bool_configs[CONFIG_WEATHER] = sConfigMgr->GetBoolDefault("ActivateWeather", true);
m_int_configs[CONFIG_DISABLE_BREATHING] = sConfigMgr->GetIntDefault("DisableWaterBreath", SEC_CONSOLE);
@@ -1334,7 +1340,7 @@ void World::SetInitialWorldSettings()
!MapManager::ExistMapAndVMap(530, 10349.6f, -6357.29f) ||
!MapManager::ExistMapAndVMap(530, -3961.64f, -13931.2f))))
{
- TC_LOG_ERROR("server.loading", "Correct *.map files not found in path '%smaps' or *.vmtree/*.vmtile files in '%svmaps'. Please place *.map/*.vmtree/*.vmtile files in appropriate directories or correct the DataDir value in the worldserver.conf file.", m_dataPath.c_str(), m_dataPath.c_str());
+ TC_LOG_FATAL("server.loading", "Unable to load critical files - server shutting down !!!");
exit(1);
}
@@ -3018,7 +3024,7 @@ void World::ResetRandomBG()
{
TC_LOG_INFO("misc", "Random BG status reset for all characters.");
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM_ALL);
CharacterDatabase.Execute(stmt);
for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index e7d08d69805..875e2c240ca 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -50,6 +50,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include
${CMAKE_SOURCE_DIR}/dep/g3dlite/include
${CMAKE_SOURCE_DIR}/dep/SFMT
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
${CMAKE_SOURCE_DIR}/dep/zlib
${CMAKE_SOURCE_DIR}/src/server/shared
${CMAKE_SOURCE_DIR}/src/server/shared/Configuration
@@ -62,6 +63,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Logging
${CMAKE_SOURCE_DIR}/src/server/shared/Packets
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Updater
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
${CMAKE_SOURCE_DIR}/src/server/collision
${CMAKE_SOURCE_DIR}/src/server/collision/Management
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 5d6cdb3fb63..ccd82aa3ef9 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -299,7 +299,7 @@ public:
else if (commentToken[1] == '/')
{
std::string str;
- getline(ifs, str);
+ std::getline(ifs, str);
continue;
}
// regular data
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 0e86823aa7c..dea2a5216e7 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -237,7 +237,8 @@ public:
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(),
+ object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation());
+ handler->PSendSysMessage(LANG_GRID_POSITION,
cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), object->GetInstanceId(),
zoneX, zoneY, groundZ, floorZ, haveMap, haveVMap, haveMMap);
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index 59f2ce1a2c9..92c3f83034d 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -360,17 +360,17 @@ public:
case GOSSIP_ACTION_INFO_DEF+3:
player->CLOSE_GOSSIP_MENU();
pBarnesAI->m_uiEventId = EVENT_OZ;
- TC_LOG_INFO("scripts", "player (%s) manually set Opera event to EVENT_OZ", player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_OZ", player->GetGUID().ToString().c_str());
break;
case GOSSIP_ACTION_INFO_DEF+4:
player->CLOSE_GOSSIP_MENU();
pBarnesAI->m_uiEventId = EVENT_HOOD;
- TC_LOG_INFO("scripts", "player (%s) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString().c_str());
break;
case GOSSIP_ACTION_INFO_DEF+5:
player->CLOSE_GOSSIP_MENU();
pBarnesAI->m_uiEventId = EVENT_RAJ;
- TC_LOG_INFO("scripts", "player (%s) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString().c_str());
break;
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 3db0e1092fd..326360428d2 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -174,7 +174,7 @@ public:
anchor->GetContactPoint(me, anchorX, anchorY, z, 1.0f);
playerGUID = target->GetGUID();
- Talk(SAY_EVENT_START);
+ Talk(SAY_EVENT_START, target);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
index 3ced85f09a2..97be139cefe 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp
@@ -36,19 +36,27 @@ EndContentData */
# at_malfurion_Stormrage_trigger
#####*/
-class at_malfurion_stormrage : public AreaTriggerScript
+enum MalfurionMisc
{
-public:
- at_malfurion_stormrage() : AreaTriggerScript("at_malfurion_stormrage") { }
+ NPC_MALFURION_STORMRAGE = 15362,
+ QUEST_ERANIKUS_TYRANT_OF_DREAMS = 8733,
+ QUEST_THE_CHARGE_OF_DRAGONFLIGHTS = 8555,
+};
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
- {
- if (player->GetInstanceScript() && !player->FindNearestCreature(15362, 15))
- player->SummonCreature(15362, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), -1.52f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 100000);
- return false;
- }
+class at_malfurion_stormrage : public AreaTriggerScript
+{
+ public:
+ at_malfurion_stormrage() : AreaTriggerScript("at_malfurion_stormrage") { }
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
+ {
+ if (player->GetInstanceScript() && !player->FindNearestCreature(NPC_MALFURION_STORMRAGE, 15.0f) &&
+ player->GetQuestStatus(QUEST_THE_CHARGE_OF_DRAGONFLIGHTS) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_ERANIKUS_TYRANT_OF_DREAMS) != QUEST_STATUS_REWARDED)
+ player->SummonCreature(NPC_MALFURION_STORMRAGE, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), -1.52f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 100000);
+ return false;
+ }
};
+
/*#####
# go_atalai_statue
#####*/
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index ea56494f0f9..421f3d771a0 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -207,7 +207,7 @@ public:
void DamageTaken(Unit* /*done_by*/, uint32 &damage) override
{
- if (damage > me->GetHealth() && events.IsInPhase(PHASE_ONE))
+ if (damage >= me->GetHealth() && events.IsInPhase(PHASE_ONE))
{
damage = 0;
me->RemoveAllAuras();
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
index 01ac3920082..1a98c081570 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
@@ -689,54 +689,57 @@ class boss_alyson_antille : public CreatureScript
}
};
-struct boss_gazakrothAI : public boss_hexlord_addAI
+class boss_gazakroth : public CreatureScript
{
- boss_gazakrothAI(Creature* creature) : boss_hexlord_addAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- firebolt_timer = 2000;
- }
+ public:
- uint32 firebolt_timer;
+ boss_gazakroth() : CreatureScript("boss_gazakroth") { }
+
+ struct boss_gazakrothAI : public boss_hexlord_addAI
+ {
+ boss_gazakrothAI(Creature* creature) : boss_hexlord_addAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
- {
- Initialize();
- boss_hexlord_addAI::Reset();
- }
+ void Initialize()
+ {
+ firebolt_timer = 2 * IN_MILLISECONDS;
+ }
+
+ void Reset() override
+ {
+ Initialize();
+ boss_hexlord_addAI::Reset();
+ }
- void AttackStart(Unit* who) override
- {
- if (!who)
- return;
+ void AttackStart(Unit* who) override
+ {
+ AttackStartCaster(who, 20.0f);
+ }
- if (who->isTargetableForAttack())
- {
- if (me->Attack(who, false))
+ void UpdateAI(uint32 diff) override
{
- me->GetMotionMaster()->MoveChase(who, 20);
- me->AddThreat(who, 0.0f);
+ if (!UpdateVictim())
+ return;
+
+ if (firebolt_timer <= diff)
+ {
+ DoCastVictim(SPELL_FIREBOLT, false);
+ firebolt_timer = 0.7 * IN_MILLISECONDS;
+ } else firebolt_timer -= diff;
+
+ boss_hexlord_addAI::UpdateAI(diff);
}
- }
- }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ private:
+ uint32 firebolt_timer;
+ };
- if (firebolt_timer <= diff)
+ CreatureAI* GetAI(Creature* creature) const override
{
- DoCastVictim(SPELL_FIREBOLT, false);
- firebolt_timer = 700;
- } else firebolt_timer -= diff;
-
- boss_hexlord_addAI::UpdateAI(diff);
- }
+ return GetInstanceAI<boss_gazakrothAI>(creature);
+ }
};
class boss_lord_raadan : public CreatureScript
@@ -1062,7 +1065,7 @@ void AddSC_boss_hex_lord_malacrass()
{
new boss_hexlord_malacrass();
new boss_thurg();
- // new boss_gazakroth();
+ new boss_gazakroth();
new boss_lord_raadan();
new boss_darkheart();
new boss_slither();
diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
index 898e3f9a2cb..ecfd705cf4d 100644
--- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp
@@ -92,7 +92,7 @@ public:
me->SetWalk(false);
break;
case 115:
- player->AreaExploredOrEventHappens(QUEST_MISSING_IN_ACTION);
+ player->GroupEventHappens(QUEST_MISSING_IN_ACTION, me);
timer = 2000;
phase = 4;
break;
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index 9ce694fb76c..ca281bab60a 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -40,25 +40,44 @@ EndContentData */
enum Sylvanas
{
- QUEST_JOURNEY_TO_UNDERCITY = 9180,
- EMOTE_LAMENT_END = 0,
- SAY_LAMENT_END = 1,
+ QUEST_JOURNEY_TO_UNDERCITY = 9180,
- SOUND_CREDIT = 10896,
- ENTRY_HIGHBORNE_LAMENTER = 21628,
- ENTRY_HIGHBORNE_BUNNY = 21641,
+ EMOTE_LAMENT_END = 0,
+ SAY_LAMENT_END = 1,
+ EMOTE_LAMENT = 2,
- SPELL_HIGHBORNE_AURA = 37090,
- SPELL_SYLVANAS_CAST = 36568,
- SPELL_RIBBON_OF_SOULS = 34432, // the real one to use might be 37099
+ // Ambassador Sunsorrow
+ SAY_SUNSORROW_WHISPER = 0,
+
+ SOUND_CREDIT = 10896,
+
+ NPC_HIGHBORNE_LAMENTER = 21628,
+ NPC_HIGHBORNE_BUNNY = 21641,
+ NPC_AMBASSADOR_SUNSORROW = 16287,
+
+ SPELL_HIGHBORNE_AURA = 37090,
+ SPELL_SYLVANAS_CAST = 36568,
+ //SPELL_RIBBON_OF_SOULS = 34432, the real one to use might be 37099
+ SPELL_RIBBON_OF_SOULS = 37099,
// Combat spells
- SPELL_BLACK_ARROW = 59712,
- SPELL_FADE = 20672,
- SPELL_FADE_BLINK = 29211,
- SPELL_MULTI_SHOT = 59713,
- SPELL_SHOT = 59710,
- SPELL_SUMMON_SKELETON = 59711
+ SPELL_BLACK_ARROW = 59712,
+ SPELL_FADE = 20672,
+ SPELL_FADE_BLINK = 29211,
+ SPELL_MULTI_SHOT = 59713,
+ SPELL_SHOT = 59710,
+ SPELL_SUMMON_SKELETON = 59711,
+
+ // Events
+ EVENT_FADE = 1,
+ EVENT_SUMMON_SKELETON = 2,
+ EVENT_BLACK_ARROW = 3,
+ EVENT_SHOOT = 4,
+ EVENT_MULTI_SHOT = 5,
+ EVENT_LAMENT_OF_THE_HIGHBORN = 6,
+ EVENT_SUNSORROW_WHISPER = 7,
+
+ GUID_EVENT_INVOKER = 1,
};
float HighborneLoc[4][3]=
@@ -77,26 +96,14 @@ class npc_lady_sylvanas_windrunner : public CreatureScript
public:
npc_lady_sylvanas_windrunner() : CreatureScript("npc_lady_sylvanas_windrunner") { }
- bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest *_Quest, uint32 /*slot*/) override
+ bool OnQuestReward(Player* player, Creature* creature, const Quest *_Quest, uint32 /*slot*/) override
{
if (_Quest->GetQuestId() == QUEST_JOURNEY_TO_UNDERCITY)
- {
- ENSURE_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->LamentEvent = true;
- ENSURE_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->DoPlaySoundToSet(creature, SOUND_CREDIT);
- creature->CastSpell(creature, SPELL_SYLVANAS_CAST, false);
-
- for (uint8 i = 0; i < 4; ++i)
- creature->SummonCreature(ENTRY_HIGHBORNE_LAMENTER, HighborneLoc[i][0], HighborneLoc[i][1], HIGHBORNE_LOC_Y, HighborneLoc[i][2], TEMPSUMMON_TIMED_DESPAWN, 160000);
- }
+ creature->AI()->SetGUID(player->GetGUID(), GUID_EVENT_INVOKER);
return true;
}
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_lady_sylvanas_windrunnerAI(creature);
- }
-
struct npc_lady_sylvanas_windrunnerAI : public ScriptedAI
{
npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature)
@@ -106,41 +113,51 @@ public:
void Initialize()
{
- LamentEventTimer = 5000;
LamentEvent = false;
targetGUID.Clear();
-
- FadeTimer = 30000;
- SummonSkeletonTimer = 20000;
- BlackArrowTimer = 15000;
- ShotTimer = 8000;
- MultiShotTimer = 10000;
+ playerGUID.Clear();
}
- uint32 LamentEventTimer;
- bool LamentEvent;
- ObjectGuid targetGUID;
-
- uint32 FadeTimer;
- uint32 SummonSkeletonTimer;
- uint32 BlackArrowTimer;
- uint32 ShotTimer;
- uint32 MultiShotTimer;
-
void Reset() override
{
Initialize();
+ _events.Reset();
}
- void EnterCombat(Unit* /*who*/) override { }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _events.ScheduleEvent(EVENT_FADE, 30000);
+ _events.ScheduleEvent(EVENT_SUMMON_SKELETON, 20000);
+ _events.ScheduleEvent(EVENT_BLACK_ARROW, 15000);
+ _events.ScheduleEvent(EVENT_SHOOT, 8000);
+ _events.ScheduleEvent(EVENT_MULTI_SHOT, 10000);
+ }
+
+ void SetGUID(ObjectGuid guid, int32 type) override
+ {
+ if (type == GUID_EVENT_INVOKER)
+ {
+ Talk(EMOTE_LAMENT);
+ DoPlaySoundToSet(me, SOUND_CREDIT);
+ DoCast(me, SPELL_SYLVANAS_CAST, false);
+ playerGUID = guid;
+ LamentEvent = true;
+
+ for (uint8 i = 0; i < 4; ++i)
+ me->SummonCreature(NPC_HIGHBORNE_LAMENTER, HighborneLoc[i][0], HighborneLoc[i][1], HIGHBORNE_LOC_Y, HighborneLoc[i][2], TEMPSUMMON_TIMED_DESPAWN, 160000);
+
+ _events.ScheduleEvent(EVENT_LAMENT_OF_THE_HIGHBORN, 2000);
+ _events.ScheduleEvent(EVENT_SUNSORROW_WHISPER, 10000);
+ }
+ }
void JustSummoned(Creature* summoned) override
{
- if (summoned->GetEntry() == ENTRY_HIGHBORNE_BUNNY)
+ if (summoned->GetEntry() == NPC_HIGHBORNE_BUNNY)
{
if (Creature* target = ObjectAccessor::GetCreature(*summoned, targetGUID))
{
- target->MonsterMoveWithSpeed(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0);
+ target->GetMotionMaster()->MoveJump(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ() + 15.0f, 0);
target->SetPosition(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0.0f);
summoned->CastSpell(target, SPELL_RIBBON_OF_SOULS, false);
}
@@ -152,75 +169,86 @@ public:
void UpdateAI(uint32 diff) override
{
- if (LamentEvent)
- {
- if (LamentEventTimer <= diff)
- {
- DoSummon(ENTRY_HIGHBORNE_BUNNY, me, 10.0f, 3000, TEMPSUMMON_TIMED_DESPAWN);
-
- LamentEventTimer = 2000;
- if (!me->HasAura(SPELL_SYLVANAS_CAST))
- {
- Talk(SAY_LAMENT_END);
- Talk(EMOTE_LAMENT_END);
- LamentEvent = false;
- }
- } else LamentEventTimer -= diff;
- }
-
- if (!UpdateVictim())
+ if (!UpdateVictim() && !LamentEvent)
return;
- // Combat spells
-
- if (FadeTimer <= diff)
- {
- DoCast(me, SPELL_FADE);
- // add a blink to simulate a stealthed movement and reappearing elsewhere
- DoCast(me, SPELL_FADE_BLINK);
- FadeTimer = 30000 + rand32() % 5000;
- // if the victim is out of melee range she cast multi shot
- if (Unit* victim = me->GetVictim())
- if (me->GetDistance(victim) > 10.0f)
- DoCast(victim, SPELL_MULTI_SHOT);
- } else FadeTimer -= diff;
-
- if (SummonSkeletonTimer <= diff)
- {
- DoCast(me, SPELL_SUMMON_SKELETON);
- SummonSkeletonTimer = 20000 + rand32() % 10000;
- } else SummonSkeletonTimer -= diff;
-
- if (BlackArrowTimer <= diff)
- {
- if (Unit* victim = me->GetVictim())
- {
- DoCast(victim, SPELL_BLACK_ARROW);
- BlackArrowTimer = 15000 + rand32() % 5000;
- }
- } else BlackArrowTimer -= diff;
+ _events.Update(diff);
- if (ShotTimer <= diff)
- {
- if (Unit* victim = me->GetVictim())
- {
- DoCast(victim, SPELL_SHOT);
- ShotTimer = 8000 + rand32() % 2000;
- }
- } else ShotTimer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (MultiShotTimer <= diff)
+ while (uint32 eventId = _events.ExecuteEvent())
{
- if (Unit* victim = me->GetVictim())
+ switch (eventId)
{
- DoCast(victim, SPELL_MULTI_SHOT);
- MultiShotTimer = 10000 + rand32() % 3000;
+ case EVENT_FADE:
+ DoCast(me, SPELL_FADE);
+ // add a blink to simulate a stealthed movement and reappearing elsewhere
+ DoCast(me, SPELL_FADE_BLINK);
+ // if the victim is out of melee range she cast multi shot
+ if (Unit* victim = me->GetVictim())
+ if (me->GetDistance(victim) > 10.0f)
+ DoCast(victim, SPELL_MULTI_SHOT);
+ _events.ScheduleEvent(EVENT_FADE, urand(30000, 35000));
+ break;
+ case EVENT_SUMMON_SKELETON:
+ DoCast(me, SPELL_SUMMON_SKELETON);
+ _events.ScheduleEvent(EVENT_SUMMON_SKELETON, urand(20000, 30000));
+ break;
+ case EVENT_BLACK_ARROW:
+ if (Unit* victim = me->GetVictim())
+ DoCast(victim, SPELL_BLACK_ARROW);
+ _events.ScheduleEvent(EVENT_BLACK_ARROW, urand(15000, 20000));
+ break;
+ case EVENT_SHOOT:
+ if (Unit* victim = me->GetVictim())
+ DoCast(victim, SPELL_SHOT);
+ _events.ScheduleEvent(EVENT_SHOOT, urand(8000, 10000));
+ break;
+ case EVENT_MULTI_SHOT:
+ if (Unit* victim = me->GetVictim())
+ DoCast(victim, SPELL_MULTI_SHOT);
+ _events.ScheduleEvent(EVENT_MULTI_SHOT, urand(10000, 13000));
+ break;
+ case EVENT_LAMENT_OF_THE_HIGHBORN:
+ if (!me->HasAura(SPELL_SYLVANAS_CAST))
+ {
+ Talk(SAY_LAMENT_END);
+ Talk(EMOTE_LAMENT_END);
+ LamentEvent = false;
+ me->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
+ Reset();
+ }
+ else
+ {
+ DoSummon(NPC_HIGHBORNE_BUNNY, me, 10.0f, 3000, TEMPSUMMON_TIMED_DESPAWN);
+ _events.ScheduleEvent(EVENT_LAMENT_OF_THE_HIGHBORN, 2000);
+ }
+ break;
+ case EVENT_SUNSORROW_WHISPER:
+ if (Creature* ambassador = me->FindNearestCreature(NPC_AMBASSADOR_SUNSORROW, 20.0f))
+ if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
+ ambassador->AI()->Talk(SAY_SUNSORROW_WHISPER, player);
+ break;
+ default:
+ break;
}
- } else MultiShotTimer -= diff;
+ }
DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap _events;
+ bool LamentEvent;
+ ObjectGuid targetGUID;
+ ObjectGuid playerGUID;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_lady_sylvanas_windrunnerAI(creature);
+ }
};
/*######
diff --git a/src/server/scripts/Kalimdor/CMakeLists.txt b/src/server/scripts/Kalimdor/CMakeLists.txt
index 9a68973b8d1..ce8d0cfbcfd 100644
--- a/src/server/scripts/Kalimdor/CMakeLists.txt
+++ b/src/server/scripts/Kalimdor/CMakeLists.txt
@@ -92,7 +92,6 @@ set(scripts_STAT_SRCS
Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp
Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h
Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp
- Kalimdor/zone_mulgore.cpp
Kalimdor/zone_bloodmyst_isle.cpp
Kalimdor/zone_thunder_bluff.cpp
Kalimdor/zone_azshara.cpp
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
index a7c17a9df3e..f4a7e1f4185 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
@@ -136,131 +136,7 @@ public:
}
};
-enum SnufflenoseGopher
-{
- NPC_SNUFFLENOSE_GOPHER = 4781,
- GO_BLUELEAF_TUBBER = 20920,
- ACTION_FIND_NEW_TUBBER = 0,
- POINT_TUBBER = 0
-};
-
-struct npc_snufflenose_gopher : public CreatureScript
-{
-public:
- npc_snufflenose_gopher() : CreatureScript("npc_snufflenose_gopher") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_snufflenose_gopherAI(creature);
- }
-
- struct npc_snufflenose_gopherAI : public PetAI
- {
- npc_snufflenose_gopherAI(Creature* creature) : PetAI(creature)
- {
- IsMovementActive = false;
- }
-
- void Reset() override
- {
- IsMovementActive = false;
- TargetTubberGUID.Clear();
- }
-
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == POINT_MOTION_TYPE && id == POINT_TUBBER)
- {
- if (GameObject* go = me->GetMap()->GetGameObject(TargetTubberGUID))
- {
- go->SetRespawnTime(5 * MINUTE);
- go->Refresh();
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- }
-
- IsMovementActive = false;
- }
- else
- PetAI::MovementInform(type, id);
- }
-
- void DoFindNewTubber()
- {
- std::list<GameObject*> tubbersInRange;
- GetGameObjectListWithEntryInGrid(tubbersInRange, me, GO_BLUELEAF_TUBBER, 40.0f);
-
- if (tubbersInRange.empty())
- return;
-
- tubbersInRange.remove_if([](GameObject* go)
- {
- return go->isSpawned() || !go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
- });
-
- tubbersInRange.sort(Trinity::ObjectDistanceOrderPred(me));
-
- GameObject* nearestTubber = tubbersInRange.front();
- if (!nearestTubber)
- return;
-
- TargetTubberGUID = nearestTubber->GetGUID();
-
- // XFurry was wrong...
- me->GetMotionMaster()->MovePoint(POINT_TUBBER, nearestTubber->GetPositionX(),
- nearestTubber->GetPositionY(),
- nearestTubber->GetPositionZ());
- IsMovementActive = true;
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!IsMovementActive)
- PetAI::UpdateAI(diff);
- }
-
- void DoAction(int32 action) override
- {
- if (action == ACTION_FIND_NEW_TUBBER)
- DoFindNewTubber();
- }
-
-
- bool IsMovementActive;
- ObjectGuid TargetTubberGUID;
- };
-};
-
-class spell_snufflenose_command : public SpellScriptLoader
-{
- public:
- spell_snufflenose_command() : SpellScriptLoader("spell_snufflenose_command") { }
-
- class spell_snufflenose_commandSpellScript : public SpellScript
- {
- PrepareSpellScript(spell_snufflenose_commandSpellScript);
-
- void HandleEffect(SpellEffIndex /*effIndex*/)
- {
- if (Creature* target = GetHitCreature())
- if (target->GetEntry() == NPC_SNUFFLENOSE_GOPHER)
- target->AI()->DoAction(ACTION_FIND_NEW_TUBBER);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_snufflenose_commandSpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_snufflenose_commandSpellScript();
- }
-};
-
void AddSC_razorfen_kraul()
{
- new npc_snufflenose_gopher();
new npc_willix();
- new spell_snufflenose_command();
}
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index 82dabd2dd68..0e436bd1b3c 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -31,6 +31,7 @@ EndContentData */
#include "ScriptedEscortAI.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "PassiveAI.h"
#include "Player.h"
/*######
@@ -50,14 +51,18 @@ class npc_webbed_creature : public CreatureScript
public:
npc_webbed_creature() : CreatureScript("npc_webbed_creature") { }
- struct npc_webbed_creatureAI : public ScriptedAI
+ struct npc_webbed_creatureAI : public NullCreatureAI
{
- npc_webbed_creatureAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_webbed_creatureAI(Creature* creature) : NullCreatureAI(creature) { }
void Reset() override { }
void EnterCombat(Unit* /*who*/) override { }
+ void AttackStart(Unit* /*who*/) override { }
+
+ void MoveInLineOfSight(Unit* /*who*/) override { }
+
void JustDied(Unit* killer) override
{
uint32 spawnCreatureID = 0;
diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp
index cdf04b1d4cc..91b9ce08010 100644
--- a/src/server/scripts/Kalimdor/zone_felwood.cpp
+++ b/src/server/scripts/Kalimdor/zone_felwood.cpp
@@ -100,7 +100,44 @@ public:
}
};
+/*######
+## at_ancient_leaf
+######*/
+
+enum AncientMisc
+{
+ QUEST_ANCIENT_LEAF = 7632,
+ NPC_VARTRUS = 14524,
+ NPC_STOMA = 14525,
+ NPC_HASTAT = 14526,
+ CREATURE_GROUP_ANCIENTS = 1
+};
+
+class at_ancient_leaf : public AreaTriggerScript
+{
+ public:
+ at_ancient_leaf() : AreaTriggerScript("at_ancient_leaf") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
+ {
+ if (player->IsGameMaster() || !player->IsAlive())
+ return false;
+
+ // Handle Call Ancients event start - The area trigger summons 3 ancients
+ if ((player->GetQuestStatus(QUEST_ANCIENT_LEAF) == QUEST_STATUS_COMPLETE) || (player->GetQuestStatus(QUEST_ANCIENT_LEAF) == QUEST_STATUS_REWARDED))
+ {
+ // If ancients are already spawned, skip the rest
+ if (GetClosestCreatureWithEntry(player, NPC_VARTRUS, 50.0f) || GetClosestCreatureWithEntry(player, NPC_STOMA, 50.0f) || GetClosestCreatureWithEntry(player, NPC_HASTAT, 50.0f))
+ return true;
+
+ player->GetMap()->SummonCreatureGroup(CREATURE_GROUP_ANCIENTS);
+ }
+ return false;
+ }
+};
+
void AddSC_felwood()
{
new npcs_riverbreeze_and_silversky();
+ new at_ancient_leaf();
}
diff --git a/src/server/scripts/Kalimdor/zone_mulgore.cpp b/src/server/scripts/Kalimdor/zone_mulgore.cpp
deleted file mode 100644
index 0d0ef218885..00000000000
--- a/src/server/scripts/Kalimdor/zone_mulgore.cpp
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * 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/>.
- */
-
-/* ScriptData
-SDName: Mulgore
-SD%Complete: 100
-SDComment: Support for quest: 11129, 772
-SDCategory: Mulgore
-EndScriptData */
-
-/* ContentData
-npc_kyle_frenzied
-npc_plains_vision
-EndContentData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "Player.h"
-#include "SpellInfo.h"
-
-/*#####
-# npc_kyle_frenzied
-######*/
-
-enum KyleFrenzied
-{
- EMOTE_SEE_LUNCH = 0,
- EMOTE_EAT_LUNCH = 1,
- EMOTE_DANCE = 2,
-
- SPELL_LUNCH = 42222,
- NPC_KYLE_FRENZIED = 23616,
- NPC_KYLE_FRIENDLY = 23622,
- POINT_ID = 1
-};
-
-class npc_kyle_frenzied : public CreatureScript
-{
-public:
- npc_kyle_frenzied() : CreatureScript("npc_kyle_frenzied") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_kyle_frenziedAI(creature);
- }
-
- struct npc_kyle_frenziedAI : public ScriptedAI
- {
- npc_kyle_frenziedAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- EventActive = false;
- IsMovingToLunch = false;
- PlayerGUID.Clear();
- EventTimer = 5000;
- EventPhase = 0;
- }
-
- bool EventActive;
- bool IsMovingToLunch;
- ObjectGuid PlayerGUID;
- uint32 EventTimer;
- uint8 EventPhase;
-
- void Reset() override
- {
- Initialize();
-
- if (me->GetEntry() == NPC_KYLE_FRIENDLY)
- me->UpdateEntry(NPC_KYLE_FRENZIED);
- }
-
- void SpellHit(Unit* Caster, SpellInfo const* Spell) override
- {
- if (!me->GetVictim() && !EventActive && Spell->Id == SPELL_LUNCH)
- {
- if (Caster->GetTypeId() == TYPEID_PLAYER)
- PlayerGUID = Caster->GetGUID();
-
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE)
- {
- me->GetMotionMaster()->MovementExpired();
- me->GetMotionMaster()->MoveIdle();
- me->StopMoving();
- }
-
- EventActive = true;
- Talk(EMOTE_SEE_LUNCH);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_CREATURE_SPECIAL);
- }
- }
-
- void MovementInform(uint32 Type, uint32 PointId) override
- {
- if (Type != POINT_MOTION_TYPE || !EventActive)
- return;
-
- if (PointId == POINT_ID)
- IsMovingToLunch = false;
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (EventActive)
- {
- if (IsMovingToLunch)
- return;
-
- if (EventTimer <= diff)
- {
- EventTimer = 5000;
- ++EventPhase;
-
- switch (EventPhase)
- {
- case 1:
- if (Unit* unit = ObjectAccessor::GetUnit(*me, PlayerGUID))
- {
- if (GameObject* go = unit->GetGameObject(SPELL_LUNCH))
- {
- IsMovingToLunch = true;
- me->GetMotionMaster()->MovePoint(POINT_ID, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ());
- }
- }
- break;
- case 2:
- Talk(EMOTE_EAT_LUNCH);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING);
- break;
- case 3:
- if (Player* unit = ObjectAccessor::GetPlayer(*me, PlayerGUID))
- unit->TalkedToCreature(me->GetEntry(), me->GetGUID());
-
- me->UpdateEntry(NPC_KYLE_FRIENDLY);
- break;
- case 4:
- EventTimer = 30000;
- Talk(EMOTE_DANCE);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DANCESPECIAL);
- break;
- case 5:
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
- Reset();
- me->GetMotionMaster()->Clear();
- break;
- }
- }
- else
- EventTimer -= diff;
- }
- }
- };
-
-};
-
-/*#####
-# npc_plains_vision
-######*/
-
-Position const wpPlainVision[50] =
-{
- {-2226.32f, -408.095f, -9.36235f, 0.0f},
- {-2203.04f, -437.212f, -5.72498f, 0.0f},
- {-2163.91f, -457.851f, -7.09049f, 0.0f},
- {-2123.87f, -448.137f, -9.29591f, 0.0f},
- {-2104.66f, -427.166f, -6.49513f, 0.0f},
- {-2101.48f, -422.826f, -5.3567f, 0.0f},
- {-2097.56f, -417.083f, -7.16716f, 0.0f},
- {-2084.87f, -398.626f, -9.88973f, 0.0f},
- {-2072.71f, -382.324f, -10.2488f, 0.0f},
- {-2054.05f, -356.728f, -6.22468f, 0.0f},
- {-2051.8f, -353.645f, -5.35791f, 0.0f},
- {-2049.08f, -349.912f, -6.15723f, 0.0f},
- {-2030.6f, -310.724f, -9.59302f, 0.0f},
- {-2002.15f, -249.308f, -10.8124f, 0.0f},
- {-1972.85f, -195.811f, -10.6316f, 0.0f},
- {-1940.93f, -147.652f, -11.7055f, 0.0f},
- {-1888.06f, -81.943f, -11.4404f, 0.0f},
- {-1837.05f, -34.0109f, -12.258f, 0.0f},
- {-1796.12f, -14.6462f, -10.3581f, 0.0f},
- {-1732.61f, -4.27746f, -10.0213f, 0.0f},
- {-1688.94f, -0.829945f, -11.7103f, 0.0f},
- {-1681.32f, 13.0313f, -9.48056f, 0.0f},
- {-1677.04f, 36.8349f, -7.10318f, 0.0f},
- {-1675.2f, 68.559f, -8.95384f, 0.0f},
- {-1676.57f, 89.023f, -9.65104f, 0.0f},
- {-1678.16f, 110.939f, -10.1782f, 0.0f},
- {-1677.86f, 128.681f, -5.73869f, 0.0f},
- {-1675.27f, 144.324f, -3.47916f, 0.0f},
- {-1671.7f, 163.169f, -1.23098f, 0.0f},
- {-1666.61f, 181.584f, 5.26145f, 0.0f},
- {-1661.51f, 196.154f, 8.95252f, 0.0f},
- {-1655.47f, 210.811f, 8.38727f, 0.0f},
- {-1647.07f, 226.947f, 5.27755f, 0.0f},
- {-1621.65f, 232.91f, 2.69579f, 0.0f},
- {-1600.23f, 237.641f, 2.98539f, 0.0f},
- {-1576.07f, 242.546f, 4.66541f, 0.0f},
- {-1554.57f, 248.494f, 6.60377f, 0.0f},
- {-1547.53f, 259.302f, 10.6741f, 0.0f},
- {-1541.7f, 269.847f, 16.4418f, 0.0f},
- {-1539.83f, 278.989f, 21.0597f, 0.0f},
- {-1540.16f, 290.219f, 27.8247f, 0.0f},
- {-1538.99f, 298.983f, 34.0032f, 0.0f},
- {-1540.38f, 307.337f, 41.3557f, 0.0f},
- {-1536.61f, 314.884f, 48.0179f, 0.0f},
- {-1532.42f, 323.277f, 55.6667f, 0.0f},
- {-1528.77f, 329.774f, 61.1525f, 0.0f},
- {-1525.65f, 333.18f, 63.2161f, 0.0f},
- {-1517.01f, 350.713f, 62.4286f, 0.0f},
- {-1511.39f, 362.537f, 62.4539f, 0.0f},
- {-1508.68f, 366.822f, 62.733f, 0.0f}
-};
-
-class npc_plains_vision : public CreatureScript
-{
-public:
- npc_plains_vision() : CreatureScript("npc_plains_vision") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_plains_visionAI(creature);
- }
-
- struct npc_plains_visionAI : public ScriptedAI
- {
- npc_plains_visionAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- WayPointId = 0;
- newWaypoint = true;
- amountWP = 49;
- }
-
- bool newWaypoint;
- uint8 WayPointId;
- uint8 amountWP;
-
- void Reset() override
- {
- Initialize();
- }
-
- void EnterCombat(Unit* /*who*/) override { }
-
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type != POINT_MOTION_TYPE)
- return;
-
- if (id < amountWP)
- {
- ++WayPointId;
- newWaypoint = true;
- }
- else
- {
- me->setDeathState(JUST_DIED);
- me->RemoveCorpse();
- }
- }
-
- void UpdateAI(uint32 /*diff*/) override
- {
- if (newWaypoint)
- {
- me->GetMotionMaster()->MovePoint(WayPointId, wpPlainVision[WayPointId]);
- newWaypoint = false;
- }
- }
- };
-
-};
-
-/*#####
-#
-######*/
-
-void AddSC_mulgore()
-{
- new npc_kyle_frenzied();
- new npc_plains_vision();
-}
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index c167bc700f7..eab104d8df2 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -659,6 +659,7 @@ public:
if (quest->GetQuestId() == QUEST_ESCAPE)
{
creature->setFaction(FACTION_RATCHET);
+ creature->AI()->Talk(SAY_START);
if (npc_escortAI* pEscortAI = CAST_AI(npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI, creature->AI()))
pEscortAI->Start(true, false, player->GetGUID());
}
diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt
index e04dcf0ec96..66d9021223f 100644
--- a/src/server/scripts/Northrend/CMakeLists.txt
+++ b/src/server/scripts/Northrend/CMakeLists.txt
@@ -78,8 +78,7 @@ set(scripts_STAT_SRCS
Northrend/Nexus/Oculus/boss_urom.cpp
Northrend/Nexus/Oculus/oculus.cpp
Northrend/Nexus/Oculus/instance_oculus.cpp
- Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
- Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
+ Northrend/Nexus/Nexus/boss_nexus_commanders.cpp
Northrend/Nexus/Nexus/boss_ormorok.cpp
Northrend/Nexus/Nexus/boss_magus_telestra.cpp
Northrend/Nexus/Nexus/instance_nexus.cpp
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 4f883fd7e90..23bfd773a9b 100644
--- 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
@@ -255,12 +255,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
if (GetBossState(BOSS_VALKIRIES) == SPECIAL)
state = DONE;
break;
- case DONE:
- if (instance->GetPlayers().getFirst()->GetSource()->GetTeam() == ALLIANCE)
- EventStage = 4020;
- else
- EventStage = 4030;
- break;
default:
break;
}
@@ -336,7 +330,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
if (type < MAX_ENCOUNTERS)
{
- TC_LOG_INFO("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state);
+ TC_LOG_DEBUG("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state);
if (state == FAIL)
{
if (instance->IsHeroic())
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 16526b694e9..974bd4672f1 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -133,7 +133,7 @@ class npc_announcer_toc10 : public CreatureScript
char const* _message = "We are ready!";
- if (player->IsInCombat() || instance->IsEncounterInProgress() || instance->GetData(TYPE_EVENT))
+ if (player->IsInCombat() || instance->IsEncounterInProgress())
return true;
uint8 i = 0;
@@ -199,17 +199,11 @@ class npc_announcer_toc10 : public CreatureScript
}
else if (instance->GetBossState(BOSS_LICH_KING) != DONE)
{
- if (GameObject* floor = ObjectAccessor::GetGameObject(*player, instance->GetGuidData(GO_ARGENT_COLISEUM_FLOOR)))
- floor->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
-
- creature->CastSpell(creature, SPELL_CORPSE_TELEPORT, false);
- creature->CastSpell(creature, SPELL_DESTROY_FLOOR_KNOCKUP, false);
-
- if (!ObjectAccessor::GetCreature(*creature, instance->GetGuidData(NPC_ANUBARAK)))
- creature->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
-
- if (creature->IsVisible())
- creature->SetVisible(false);
+ if (creature->GetMap()->GetPlayers().getFirst()->GetSource()->GetTeam() == ALLIANCE)
+ instance->SetData(TYPE_EVENT, 4020);
+ else
+ instance->SetData(TYPE_EVENT, 4030);
+ instance->SetBossState(BOSS_LICH_KING, NOT_STARTED);
}
creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
return true;
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index 97c4372f0e6..0b829c2c6dd 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -27,7 +27,7 @@ enum Yells
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_SOUL_STORM = 3,
- SAY_CORRUPT_SOUL = 4,
+ SAY_CORRUPT_SOUL = 4
};
enum Spells
@@ -39,9 +39,9 @@ enum Spells
SPELL_TELEPORT = 68988,
SPELL_FEAR = 68950,
SPELL_SOULSTORM = 68872,
- SPELL_SOULSTORM_CHANNEL = 69008, // pre-fight
- SPELL_SOULSTORM_VISUAL = 68870, // pre-cast soulstorm
- SPELL_PURPLE_BANISH_VISUAL = 68862 // Used by Soul Fragment (Aura)
+ SPELL_SOULSTORM_CHANNEL = 69008, // Pre-fight
+ SPELL_SOULSTORM_VISUAL = 68870, // Pre-cast Soulstorm
+ SPELL_PURPLE_BANISH_VISUAL = 68862 // Used by Soul Fragment (Aura)
};
enum Events
@@ -50,7 +50,7 @@ enum Events
EVENT_SHADOW_BOLT = 2,
EVENT_CORRUPT_SOUL = 3,
EVENT_SOULSTORM = 4,
- EVENT_FEAR = 5,
+ EVENT_FEAR = 5
};
enum CombatPhases
@@ -59,6 +59,11 @@ enum CombatPhases
PHASE_2 = 2
};
+enum Misc
+{
+ DATA_SOUL_POWER = 1
+};
+
class boss_bronjahm : public CreatureScript
{
public:
@@ -73,33 +78,30 @@ class boss_bronjahm : public CreatureScript
void Reset() override
{
- events.Reset();
+ _Reset();
events.SetPhase(PHASE_1);
events.ScheduleEvent(EVENT_SHADOW_BOLT, 2000);
events.ScheduleEvent(EVENT_MAGIC_BANE, urand(8000, 20000));
events.ScheduleEvent(EVENT_CORRUPT_SOUL, urand(25000, 35000), 0, PHASE_1);
-
- instance->SetBossState(DATA_BRONJAHM, NOT_STARTED);
}
- void JustReachedHome() override
- {
- DoCast(me, SPELL_SOULSTORM_CHANNEL, true);
- }
+ void JustReachedHome() override
+ {
+ _JustReachedHome();
+ DoCast(me, SPELL_SOULSTORM_CHANNEL, true);
+ }
void EnterCombat(Unit* /*who*/) override
{
+ _EnterCombat();
Talk(SAY_AGGRO);
me->RemoveAurasDueToSpell(SPELL_SOULSTORM_CHANNEL);
-
- instance->SetBossState(DATA_BRONJAHM, IN_PROGRESS);
}
void JustDied(Unit* /*killer*/) override
{
+ _JustDied();
Talk(SAY_DEATH);
-
- instance->SetBossState(DATA_BRONJAHM, DONE);
}
void KilledUnit(Unit* who) override
@@ -128,6 +130,23 @@ class boss_bronjahm : public CreatureScript
summon->CastSpell(summon, SPELL_PURPLE_BANISH_VISUAL, true);
}
+ uint32 GetData(uint32 type) const override
+ {
+ if (type == DATA_SOUL_POWER)
+ {
+ uint32 count = 0;
+ for (ObjectGuid const& guid : summons)
+ {
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, guid))
+ if (summon->GetEntry() == NPC_CORRUPTED_SOUL_FRAGMENT && summon->IsAlive())
+ ++count;
+ }
+ return count;
+ }
+
+ return 0;
+ }
+
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -143,13 +162,21 @@ class boss_bronjahm : public CreatureScript
switch (eventId)
{
case EVENT_MAGIC_BANE:
- DoCastVictim(SPELL_MAGIC_S_BANE);
+ DoCastAOE(SPELL_MAGIC_S_BANE);
events.ScheduleEvent(EVENT_MAGIC_BANE, urand(8000, 20000));
break;
case EVENT_SHADOW_BOLT:
- if (!me->IsWithinMeleeRange(me->GetVictim()))
+ if (events.IsInPhase(PHASE_2))
+ {
DoCastVictim(SPELL_SHADOW_BOLT);
- events.ScheduleEvent(EVENT_SHADOW_BOLT, 2000);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(1, 2) * IN_MILLISECONDS);
+ }
+ else
+ {
+ if (!me->IsWithinMeleeRange(me->GetVictim()))
+ DoCastVictim(SPELL_SHADOW_BOLT);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, 2 * IN_MILLISECONDS);
+ }
break;
case EVENT_CORRUPT_SOUL:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true))
@@ -165,8 +192,7 @@ class boss_bronjahm : public CreatureScript
me->CastSpell(me, SPELL_SOULSTORM, false);
break;
case EVENT_FEAR:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true))
- me->CastCustomSpell(SPELL_FEAR, SPELLVALUE_MAX_TARGETS, 1, target, false);
+ me->CastCustomSpell(SPELL_FEAR, SPELLVALUE_MAX_TARGETS, 1, nullptr, false);
events.ScheduleEvent(EVENT_FEAR, urand(8000, 12000), 0, PHASE_2);
break;
default:
@@ -174,7 +200,8 @@ class boss_bronjahm : public CreatureScript
}
}
- DoMeleeAttackIfReady();
+ if (!events.IsInPhase(PHASE_2))
+ DoMeleeAttackIfReady();
}
};
@@ -201,17 +228,11 @@ class npc_corrupted_soul_fragment : public CreatureScript
if (type != CHASE_MOTION_TYPE)
return;
- if (TempSummon* summ = me->ToTempSummon())
- {
- ObjectGuid BronjahmGUID(instance->GetGuidData(DATA_BRONJAHM));
- if (BronjahmGUID.GetCounter() != id)
- return;
-
- if (Creature* bronjahm = ObjectAccessor::GetCreature(*me, BronjahmGUID))
- me->CastSpell(bronjahm, SPELL_CONSUME_SOUL, true);
+ if (instance->GetGuidData(DATA_BRONJAHM).GetCounter() != id)
+ return;
- summ->UnSummon();
- }
+ me->CastSpell((Unit*)nullptr, SPELL_CONSUME_SOUL, true);
+ me->DespawnOrUnsummon();
}
private:
@@ -220,7 +241,7 @@ class npc_corrupted_soul_fragment : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
- return GetInstanceAI<npc_corrupted_soul_fragmentAI>(creature);
+ return GetInstanceAI<npc_corrupted_soul_fragmentAI>(creature, FoSScriptName);
}
};
@@ -238,12 +259,10 @@ class spell_bronjahm_magic_bane : public SpellScriptLoader
if (GetHitUnit()->getPowerType() != POWER_MANA)
return;
- const int32 maxDamage = GetCaster()->GetMap()->GetSpawnMode() == 1 ? 15000 : 10000;
- int32 newDamage = GetHitDamage();
- newDamage += GetHitUnit()->GetMaxPower(POWER_MANA)/2;
- newDamage = std::min<int32>(maxDamage, newDamage);
+ int32 const maxDamage = GetCaster()->GetMap()->IsHeroic() ? 15000 : 10000;
+ int32 newDamage = GetHitDamage() + (GetHitUnit()->GetMaxPower(POWER_MANA) / 2);
- SetHitDamage(newDamage);
+ SetHitDamage(std::min<int32>(maxDamage, newDamage));
}
void Register() override
@@ -261,7 +280,7 @@ class spell_bronjahm_magic_bane : public SpellScriptLoader
class spell_bronjahm_consume_soul : public SpellScriptLoader
{
public:
- spell_bronjahm_consume_soul() : SpellScriptLoader("spell_bronjahm_consume_soul") { }
+ spell_bronjahm_consume_soul() : SpellScriptLoader("spell_bronjahm_consume_soul") { }
class spell_bronjahm_consume_soul_SpellScript : public SpellScript
{
@@ -285,38 +304,22 @@ class spell_bronjahm_consume_soul : public SpellScriptLoader
}
};
-class spell_bronjahm_soulstorm_channel : public SpellScriptLoader
+static uint32 const SoulstormVisualSpells[] =
{
- public:
- spell_bronjahm_soulstorm_channel() : SpellScriptLoader("spell_bronjahm_soulstorm_channel") { }
-
- class spell_bronjahm_soulstorm_channel_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_bronjahm_soulstorm_channel_AuraScript);
-
- void HandlePeriodicTick(AuraEffect const* /*aurEff*/)
- {
- PreventDefaultAction();
- for (uint32 i = 68904; i <= 68907; ++i)
- GetTarget()->CastSpell(GetTarget(), i, true);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_bronjahm_soulstorm_channel_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_bronjahm_soulstorm_channel_AuraScript();
- }
+ 68904,
+ 68886,
+ 68905,
+ 68896,
+ 68906,
+ 68897,
+ 68907,
+ 68898
};
class spell_bronjahm_soulstorm_visual : public SpellScriptLoader
{
public:
- spell_bronjahm_soulstorm_visual() : SpellScriptLoader("spell_bronjahm_soulstorm_visual") { }
+ spell_bronjahm_soulstorm_visual(char const* scriptName) : SpellScriptLoader(scriptName) { }
class spell_bronjahm_soulstorm_visual_AuraScript : public AuraScript
{
@@ -325,11 +328,7 @@ class spell_bronjahm_soulstorm_visual : public SpellScriptLoader
void HandlePeriodicTick(AuraEffect const* aurEff)
{
PreventDefaultAction();
- if (aurEff->GetTickNumber()%5)
- return;
- GetTarget()->CastSpell(GetTarget(), 68886, true);
- for (uint32 i = 68896; i <= 68898; ++i)
- GetTarget()->CastSpell(GetTarget(), i, true);
+ GetTarget()->CastSpell(GetTarget(), SoulstormVisualSpells[aurEff->GetTickNumber() % 8], true);
}
void Register() override
@@ -344,21 +343,6 @@ class spell_bronjahm_soulstorm_visual : public SpellScriptLoader
}
};
-class DistanceCheck
-{
- public:
- explicit DistanceCheck(Unit* _caster) : caster(_caster) { }
-
- bool operator() (WorldObject* unit) const
- {
- if (caster->GetExactDist2d(unit) <= 10.0f)
- return true;
- return false;
- }
-
- Unit* caster;
-};
-
class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader
{
public:
@@ -368,25 +352,19 @@ class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader
{
PrepareSpellScript(spell_bronjahm_soulstorm_targeting_SpellScript);
- void FilterTargetsInitial(std::list<WorldObject*>& targets)
- {
- targets.remove_if(DistanceCheck(GetCaster()));
- sharedTargets = targets;
- }
-
- // use the same target for first and second effect
- void FilterTargetsSubsequent(std::list<WorldObject*>& targets)
+ void FilterTargets(std::list<WorldObject*>& targets)
{
- targets = sharedTargets;
+ Unit* caster = GetCaster();
+ targets.remove_if([caster](WorldObject* target)
+ {
+ return caster->GetExactDist2d(target) <= 10.0f;
+ });
}
void Register() override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargetsInitial, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargetsSubsequent, EFFECT_2, TARGET_UNIT_DEST_AREA_ENEMY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_DEST_AREA_ENEMY);
}
-
- std::list<WorldObject*> sharedTargets;
};
SpellScript* GetSpellScript() const override
@@ -395,13 +373,25 @@ class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader
}
};
+class achievement_bronjahm_soul_power : public AchievementCriteriaScript
+{
+ public:
+ achievement_bronjahm_soul_power() : AchievementCriteriaScript("achievement_bronjahm_soul_power") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target) override
+ {
+ return target && target->GetAI()->GetData(DATA_SOUL_POWER) >= 4;
+ }
+};
+
void AddSC_boss_bronjahm()
{
new boss_bronjahm();
new npc_corrupted_soul_fragment();
new spell_bronjahm_magic_bane();
new spell_bronjahm_consume_soul();
- new spell_bronjahm_soulstorm_channel();
- new spell_bronjahm_soulstorm_visual();
+ new spell_bronjahm_soulstorm_visual("spell_bronjahm_soulstorm_channel");
+ new spell_bronjahm_soulstorm_visual("spell_bronjahm_soulstorm_visual");
new spell_bronjahm_soulstorm_targeting();
+ new achievement_bronjahm_soul_power();
}
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 2f1d4943019..d5f00757039 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
@@ -128,7 +128,7 @@ class boss_devourer_of_souls : public CreatureScript
struct boss_devourer_of_soulsAI : public BossAI
{
- boss_devourer_of_soulsAI(Creature* creature) : BossAI(creature, DATA_DEVOURER_EVENT)
+ boss_devourer_of_soulsAI(Creature* creature) : BossAI(creature, DATA_DEVOURER_OF_SOULS)
{
Initialize();
beamAngle = 0.f;
@@ -143,20 +143,17 @@ class boss_devourer_of_souls : public CreatureScript
void Reset() override
{
+ _Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
me->SetDisplayId(DISPLAY_ANGER);
me->SetReactState(REACT_AGGRESSIVE);
- events.Reset();
- summons.DespawnAll();
-
Initialize();
-
- instance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
+ _EnterCombat();
Talk(SAY_FACE_AGGRO);
if (!me->FindNearestCreature(NPC_CRUCIBLE_OF_SOULS, 60)) // Prevent double spawn
@@ -166,8 +163,6 @@ class boss_devourer_of_souls : public CreatureScript
events.ScheduleEvent(EVENT_WELL_OF_SOULS, 30000);
events.ScheduleEvent(EVENT_UNLEASHED_SOULS, 20000);
events.ScheduleEvent(EVENT_WAILING_SOULS, urand(60000, 70000));
-
- instance->SetData(DATA_DEVOURER_EVENT, IN_PROGRESS);
}
void KilledUnit(Unit* victim) override
@@ -175,7 +170,7 @@ class boss_devourer_of_souls : public CreatureScript
if (victim->GetTypeId() != TYPEID_PLAYER)
return;
- int32 textId = 0;
+ uint8 textId = 0;
switch (me->GetDisplayId())
{
case DISPLAY_ANGER:
@@ -197,14 +192,12 @@ class boss_devourer_of_souls : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- summons.DespawnAll();
+ _JustDied();
Position spawnPoint = {5618.139f, 2451.873f, 705.854f, 0};
Talk(SAY_FACE_DEATH);
- instance->SetData(DATA_DEVOURER_EVENT, DONE);
-
int32 entryIndex;
if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
entryIndex = 0;
@@ -402,11 +395,6 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader
return true;
}
- bool Load() override
- {
- return true;
- }
-
bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
return GetCaster() && GetCaster()->IsAlive();
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 054e5d5a7bd..ddbc117e7fd 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h
@@ -15,38 +15,44 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_FORGE_OF_SOULS_H
-#define DEF_FORGE_OF_SOULS_H
+#ifndef FORGE_OF_SOULS_H_
+#define FORGE_OF_SOULS_H_
#define FoSScriptName "instance_forge_of_souls"
#define DataHeader "FOS"
+uint32 const EncounterCount = 2;
+
enum Data
{
- DATA_BRONJAHM = 0,
- DATA_DEVOURER = 1,
- DATA_DEVOURER_EVENT = 2,
- DATA_TEAM_IN_INSTANCE = 3,
+ // Encounter states and GUIDs
+ DATA_BRONJAHM = 0,
+ DATA_DEVOURER_OF_SOULS = 1,
+
+ // Additional Data
+ DATA_TEAM_IN_INSTANCE = 2
};
enum Creatures
{
- CREATURE_BRONJAHM = 36497,
- CREATURE_DEVOURER = 36502,
-
- NPC_SYLVANAS_PART1 = 37596,
- NPC_SYLVANAS_PART2 = 38161,
- NPC_JAINA_PART1 = 37597,
- NPC_JAINA_PART2 = 38160,
- NPC_KALIRA = 37583,
- NPC_ELANDRA = 37774,
- NPC_LORALEN = 37779,
- NPC_KORELN = 37582,
- NPC_CHAMPION_1_HORDE = 37584,
- NPC_CHAMPION_2_HORDE = 37587,
- NPC_CHAMPION_3_HORDE = 37588,
- NPC_CHAMPION_1_ALLIANCE = 37496,
- NPC_CHAMPION_2_ALLIANCE = 37497,
- NPC_CRUCIBLE_OF_SOULS = 37094,
+ NPC_BRONJAHM = 36497,
+ NPC_DEVOURER = 36502,
+ NPC_CORRUPTED_SOUL_FRAGMENT = 36535,
+
+ NPC_SYLVANAS_PART1 = 37596,
+ NPC_SYLVANAS_PART2 = 38161,
+ NPC_JAINA_PART1 = 37597,
+ NPC_JAINA_PART2 = 38160,
+ NPC_KALIRA = 37583,
+ NPC_ELANDRA = 37774,
+ NPC_LORALEN = 37779,
+ NPC_KORELN = 37582,
+ NPC_CHAMPION_1_HORDE = 37584,
+ NPC_CHAMPION_2_HORDE = 37587,
+ NPC_CHAMPION_3_HORDE = 37588,
+ NPC_CHAMPION_1_ALLIANCE = 37496,
+ NPC_CHAMPION_2_ALLIANCE = 37497,
+ NPC_CRUCIBLE_OF_SOULS = 37094
};
-#endif
+
+#endif // FORGE_OF_SOULS_H_
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 8b586ea7fc2..db7628ebada 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
@@ -20,13 +20,6 @@
#include "forge_of_souls.h"
#include "Player.h"
-#define MAX_ENCOUNTER 2
-
-/* Forge of Souls encounters:
-0- Bronjahm, The Godfather of Souls
-1- The Devourer of Souls
-*/
-
class instance_forge_of_souls : public InstanceMapScript
{
public:
@@ -37,7 +30,7 @@ class instance_forge_of_souls : public InstanceMapScript
instance_forge_of_souls_InstanceScript(Map* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
- SetBossNumber(MAX_ENCOUNTER);
+ SetBossNumber(EncounterCount);
teamInInstance = 0;
}
@@ -60,10 +53,10 @@ class instance_forge_of_souls : public InstanceMapScript
switch (creature->GetEntry())
{
- case CREATURE_BRONJAHM:
+ case NPC_BRONJAHM:
bronjahm = creature->GetGUID();
break;
- case CREATURE_DEVOURER:
+ case NPC_DEVOURER:
devourerOfSouls = creature->GetGUID();
break;
case NPC_SYLVANAS_PART1:
@@ -100,7 +93,7 @@ class instance_forge_of_souls : public InstanceMapScript
{
case DATA_BRONJAHM:
return bronjahm;
- case DATA_DEVOURER:
+ case DATA_DEVOURER_OF_SOULS:
return devourerOfSouls;
default:
break;
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 7b80db7dd39..927ebfbc55c 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -21,6 +21,7 @@
#include "SpellScript.h"
#include "Transport.h"
#include "Player.h"
+#include "MoveSplineInit.h"
#include "halls_of_reflection.h"
enum Text
@@ -342,6 +343,20 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
public:
npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { }
+ bool OnGossipHello(Player* player, Creature* creature) override
+ {
+ // override default gossip
+ if (InstanceScript* instance = creature->GetInstanceScript())
+ if (instance->GetData(DATA_QUEL_DELAR_EVENT) == IN_PROGRESS || instance->GetData(DATA_QUEL_DELAR_EVENT) == SPECIAL)
+ {
+ player->PlayerTalkClass->ClearMenus();
+ return true;
+ }
+
+ // load default gossip
+ return false;
+ }
+
struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI
{
npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature)
@@ -1998,6 +2013,13 @@ class at_hor_intro_start : public AreaTriggerScript
if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
_instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
+ if (player->HasAura(SPELL_QUEL_DELAR_COMPULSION) && (player->GetQuestStatus(QUEST_HALLS_OF_REFLECTION_ALLIANCE) == QUEST_STATUS_INCOMPLETE ||
+ player->GetQuestStatus(QUEST_HALLS_OF_REFLECTION_HORDE) == QUEST_STATUS_INCOMPLETE) && _instance->GetData(DATA_QUEL_DELAR_EVENT) == NOT_STARTED)
+ {
+ _instance->SetData(DATA_QUEL_DELAR_EVENT, IN_PROGRESS);
+ _instance->SetGuidData(DATA_QUEL_DELAR_INVOKER, player->GetGUID());
+ }
+
return true;
}
};
@@ -2330,6 +2352,374 @@ class npc_lumbering_abomination : public CreatureScript
}
};
+enum QuelDelarUther
+{
+ ACTION_UTHER_START_SCREAM = 1,
+ ACTION_UTHER_OUTRO = 2,
+
+ EVENT_UTHER_1 = 1,
+ EVENT_UTHER_2 = 2,
+ EVENT_UTHER_3 = 3,
+ EVENT_UTHER_4 = 4,
+ EVENT_UTHER_5 = 5,
+ EVENT_UTHER_6 = 6,
+ EVENT_UTHER_7 = 7,
+ EVENT_UTHER_8 = 8,
+ EVENT_UTHER_9 = 9,
+ EVENT_UTHER_10 = 10,
+ EVENT_UTHER_11 = 11,
+ EVENT_UTHER_FACING = 12,
+ EVENT_UTHER_KNEEL = 13,
+
+ SAY_UTHER_QUEL_DELAR_1 = 16,
+ SAY_UTHER_QUEL_DELAR_2 = 17,
+ SAY_UTHER_QUEL_DELAR_3 = 18,
+ SAY_UTHER_QUEL_DELAR_4 = 19,
+ SAY_UTHER_QUEL_DELAR_5 = 20,
+ SAY_UTHER_QUEL_DELAR_6 = 21,
+
+ SPELL_ESSENCE_OF_CAPTURED_1 = 73036
+};
+
+enum QuelDelarSword
+{
+ SPELL_WHIRLWIND_VISUAL = 70300,
+ SPELL_HEROIC_STRIKE = 29426,
+ SPELL_WHIRLWIND = 67716,
+ SPELL_BLADESTORM = 67541,
+
+ NPC_QUEL_DELAR = 37158,
+ POINT_TAKE_OFF = 1,
+
+ EVENT_QUEL_DELAR_INIT = 1,
+ EVENT_QUEL_DELAR_FLIGHT_INIT = 2,
+ EVENT_QUEL_DELAR_FLIGHT = 3,
+ EVENT_QUEL_DELAR_LAND = 4,
+ EVENT_QUEL_DELAR_FIGHT = 5,
+ EVENT_QUEL_DELAR_BLADESTORM = 6,
+ EVENT_QUEL_DELAR_HEROIC_STRIKE = 7,
+ EVENT_QUEL_DELAR_WHIRLWIND = 8,
+
+ SAY_QUEL_DELAR_SWORD = 0
+};
+
+enum QuelDelarMisc
+{
+ SAY_FROSTMOURNE_BUNNY = 0,
+ SPELL_QUEL_DELAR_WILL = 70698
+};
+
+Position const QuelDelarCenterPos = { 5309.259f, 2006.390f, 718.046f, 0.0f };
+Position const QuelDelarSummonPos = { 5298.473f, 1994.852f, 709.424f, 3.979351f };
+Position const QuelDelarMovement[] =
+{
+ { 5292.870f, 1998.950f, 718.046f, 0.0f },
+ { 5295.819f, 1991.912f, 707.707f, 0.0f },
+ { 5295.301f, 1989.782f, 708.696f, 0.0f }
+};
+
+Position const UtherQuelDelarMovement[] =
+{
+ { 5336.830f, 1981.700f, 709.319f, 0.0f },
+ { 5314.350f, 1993.440f, 707.726f, 0.0f }
+};
+
+class npc_uther_quel_delar : public CreatureScript
+{
+ public:
+ npc_uther_quel_delar() : CreatureScript("npc_uther_quel_delar") { }
+
+ struct npc_uther_quel_delarAI : public ScriptedAI
+ {
+ npc_uther_quel_delarAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ }
+
+ void Reset() override
+ {
+ // Prevent to break Uther in intro event during instance encounter
+ if (_instance->GetData(DATA_QUEL_DELAR_EVENT) != IN_PROGRESS && _instance->GetData(DATA_QUEL_DELAR_EVENT) != SPECIAL)
+ return;
+
+ _events.Reset();
+ _events.ScheduleEvent(EVENT_UTHER_1, 1);
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (damage >= me->GetHealth())
+ damage = me->GetHealth() - 1;
+ }
+
+ void DoAction(int32 action) override
+ {
+ switch (action)
+ {
+ case ACTION_UTHER_START_SCREAM:
+ _instance->SetData(DATA_QUEL_DELAR_EVENT, SPECIAL);
+ _events.ScheduleEvent(EVENT_UTHER_2, 0);
+ break;
+ case ACTION_UTHER_OUTRO:
+ _events.ScheduleEvent(EVENT_UTHER_6, 0);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void MovementInform(uint32 /*type*/, uint32 pointId) override
+ {
+ switch (pointId)
+ {
+ case 1:
+ _events.ScheduleEvent(EVENT_UTHER_FACING, 1000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ // Prevent to break Uther in intro event during instance encounter
+ if (_instance->GetData(DATA_QUEL_DELAR_EVENT) != IN_PROGRESS && _instance->GetData(DATA_QUEL_DELAR_EVENT) != SPECIAL)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_UTHER_1:
+ Talk(SAY_UTHER_QUEL_DELAR_1);
+ break;
+ case EVENT_UTHER_2:
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FROSTMOURNE_ALTAR_BUNNY)))
+ if (Unit* target = ObjectAccessor::GetPlayer(*me, _instance->GetGuidData(DATA_QUEL_DELAR_INVOKER)))
+ bunny->CastSpell(target, SPELL_QUEL_DELAR_WILL, true);
+ _events.ScheduleEvent(EVENT_UTHER_3, 2000);
+ break;
+ case EVENT_UTHER_3:
+ me->SummonCreature(NPC_QUEL_DELAR, QuelDelarSummonPos);
+ _events.ScheduleEvent(EVENT_UTHER_4, 2000);
+ break;
+ case EVENT_UTHER_4:
+ Talk(SAY_UTHER_QUEL_DELAR_2);
+ _events.ScheduleEvent(EVENT_UTHER_5, 8000);
+ break;
+ case EVENT_UTHER_5:
+ me->GetMotionMaster()->MovePoint(1, UtherQuelDelarMovement[0]);
+ break;
+ case EVENT_UTHER_6:
+ me->SetWalk(true);
+ me->GetMotionMaster()->MovePoint(0, UtherQuelDelarMovement[1]);
+ _events.ScheduleEvent(EVENT_UTHER_7, 5000);
+ break;
+ case EVENT_UTHER_7:
+ Talk(SAY_UTHER_QUEL_DELAR_3);
+ _events.ScheduleEvent(EVENT_UTHER_8, 12000);
+ break;
+ case EVENT_UTHER_8:
+ Talk(SAY_UTHER_QUEL_DELAR_4);
+ _events.ScheduleEvent(EVENT_UTHER_9, 7000);
+ break;
+ case EVENT_UTHER_9:
+ Talk(SAY_UTHER_QUEL_DELAR_5);
+ _events.ScheduleEvent(EVENT_UTHER_10, 10000);
+ break;
+ case EVENT_UTHER_10:
+ Talk(SAY_UTHER_QUEL_DELAR_6);
+ _events.ScheduleEvent(EVENT_UTHER_11, 5000);
+ break;
+ case EVENT_UTHER_11:
+ DoCast(me, SPELL_ESSENCE_OF_CAPTURED_1, true);
+ me->DespawnOrUnsummon(3000);
+ _instance->SetData(DATA_QUEL_DELAR_EVENT, DONE);
+ break;
+ case EVENT_UTHER_FACING:
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FROSTMOURNE_ALTAR_BUNNY)))
+ me->SetFacingToObject(bunny);
+ _events.ScheduleEvent(EVENT_UTHER_KNEEL, 1000);
+ break;
+ case EVENT_UTHER_KNEEL:
+ me->HandleEmoteCommand(EMOTE_STATE_KNEEL);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private:
+ EventMap _events;
+ InstanceScript* _instance;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_uther_quel_delarAI>(creature);
+ }
+};
+
+class npc_quel_delar_sword : public CreatureScript
+{
+ public:
+ npc_quel_delar_sword() : CreatureScript("npc_quel_delar_sword") { }
+
+ struct npc_quel_delar_swordAI : public ScriptedAI
+ {
+ npc_quel_delar_swordAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
+ _intro = true;
+ }
+
+ void Reset() override
+ {
+ _events.Reset();
+ me->SetSpeed(MOVE_FLIGHT, 4.5f, true);
+ DoCast(SPELL_WHIRLWIND_VISUAL);
+ if (_intro)
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_INIT, 0);
+ else
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ }
+
+ void EnterCombat(Unit* /*victim*/) override
+ {
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_HEROIC_STRIKE, 4000);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_BLADESTORM, 6000);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_WHIRLWIND, 6000);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (Creature* uther = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_UTHER_QUEL_DELAR)))
+ uther->AI()->DoAction(ACTION_UTHER_OUTRO);
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
+ {
+ if (type != EFFECT_MOTION_TYPE)
+ return;
+
+ switch (pointId)
+ {
+ case POINT_TAKE_OFF:
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_FLIGHT, 0);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ if (!UpdateVictim())
+ {
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_QUEL_DELAR_INIT:
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FROSTMOURNE_ALTAR_BUNNY)))
+ bunny->AI()->Talk(SAY_FROSTMOURNE_BUNNY);
+ _intro = false;
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_FLIGHT_INIT, 2500);
+ break;
+ case EVENT_QUEL_DELAR_FLIGHT_INIT:
+ me->GetMotionMaster()->MoveTakeoff(POINT_TAKE_OFF, QuelDelarMovement[0]);
+ break;
+ case EVENT_QUEL_DELAR_FLIGHT:
+ {
+ me->GetMotionMaster()->MoveCirclePath(QuelDelarCenterPos.GetPositionX(), QuelDelarCenterPos.GetPositionY(), 718.046f, 18.0f, true, 16);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_LAND, 15000);
+ break;
+ }
+ case EVENT_QUEL_DELAR_LAND:
+ me->StopMoving();
+ me->GetMotionMaster()->Clear();
+ me->GetMotionMaster()->MoveLand(0, QuelDelarMovement[1]);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_FIGHT, 6000);
+ break;
+ case EVENT_QUEL_DELAR_FIGHT:
+ Talk(SAY_QUEL_DELAR_SWORD);
+ me->GetMotionMaster()->MovePoint(0, QuelDelarMovement[2]);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ else
+ {
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_QUEL_DELAR_BLADESTORM:
+ DoCast(me, SPELL_BLADESTORM);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_BLADESTORM, 10000);
+ break;
+ case EVENT_QUEL_DELAR_HEROIC_STRIKE:
+ DoCastVictim(SPELL_HEROIC_STRIKE);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_HEROIC_STRIKE, 6000);
+ break;
+ case EVENT_QUEL_DELAR_WHIRLWIND:
+ DoCastAOE(SPELL_WHIRLWIND);
+ _events.ScheduleEvent(EVENT_QUEL_DELAR_WHIRLWIND, 1000);
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ }
+
+ private:
+ EventMap _events;
+ InstanceScript* _instance;
+ bool _intro;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetHallsOfReflectionAI<npc_quel_delar_swordAI>(creature);
+ }
+};
+
+// 5660
+class at_hor_uther_quel_delar_start : public AreaTriggerScript
+{
+ public:
+ at_hor_uther_quel_delar_start() : AreaTriggerScript("at_hor_uther_quel_delar_start") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
+ {
+ if (player->IsGameMaster())
+ return true;
+
+ InstanceScript* _instance = player->GetInstanceScript();
+
+ if (_instance->GetData(DATA_QUEL_DELAR_EVENT) == IN_PROGRESS)
+ if (Creature* uther = ObjectAccessor::GetCreature(*player, _instance->GetGuidData(DATA_UTHER_QUEL_DELAR)))
+ uther->AI()->DoAction(ACTION_UTHER_START_SCREAM);
+
+ return true;
+ }
+};
+
// 72900 - Start Halls of Reflection Quest AE
class spell_hor_start_halls_of_reflection_quest_ae : public SpellScriptLoader
{
@@ -2447,6 +2837,7 @@ void AddSC_halls_of_reflection()
new at_hor_waves_restarter();
new at_hor_impenetrable_door();
new at_hor_shadow_throne();
+ new at_hor_uther_quel_delar_start();
new npc_jaina_or_sylvanas_intro_hor();
new npc_jaina_or_sylvanas_escape_hor();
new npc_the_lich_king_escape_hor();
@@ -2461,6 +2852,8 @@ void AddSC_halls_of_reflection()
new npc_raging_ghoul();
new npc_risen_witch_doctor();
new npc_lumbering_abomination();
+ new npc_uther_quel_delar();
+ new npc_quel_delar_sword();
new spell_hor_start_halls_of_reflection_quest_ae();
new spell_hor_evasion();
new spell_hor_gunship_cannon_fire();
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 9594617fa9a..d2f9ab5d262 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h
@@ -46,7 +46,13 @@ enum DataTypes
DATA_ESCAPE_LEADER = 10,
DATA_ICEWALL = 11,
DATA_ICEWALL_TARGET = 12,
- DATA_GUNSHIP = 13
+ DATA_GUNSHIP = 13,
+
+ // Quest stuff
+ DATA_QUEL_DELAR_EVENT = 14,
+ DATA_FROSTMOURNE_ALTAR_BUNNY = 15,
+ DATA_UTHER_QUEL_DELAR = 16,
+ DATA_QUEL_DELAR_INVOKER = 17
};
enum CreatureIds
@@ -131,7 +137,8 @@ enum InstanceEvents
EVENT_NEXT_WAVE = 2,
EVENT_DO_WIPE = 3,
EVENT_ADD_WAVE = 4,
- EVENT_SPAWN_ESCAPE_EVENT = 5
+ EVENT_SPAWN_ESCAPE_EVENT = 5,
+ EVENT_QUEL_DELAR_SUMMON_UTHER = 6
};
enum InstanceEventIds
@@ -160,7 +167,17 @@ enum InstanceSpells
// Gunship
SPELL_GUNSHIP_CANNON_FIRE = 70017,
SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021,
- SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246
+ SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246,
+
+ // Halls of Reflection quest
+ SPELL_QUEL_DELAR_COMPULSION = 70013,
+ SPELL_ESSENCE_OF_CAPTURED = 70720
+};
+
+enum InstanceQuests
+{
+ QUEST_HALLS_OF_REFLECTION_ALLIANCE = 24480,
+ QUEST_HALLS_OF_REFLECTION_HORDE = 24561
};
enum InstanceWorldStates
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 ea2a1539f1c..660a639487f 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
@@ -73,6 +73,8 @@ Position const SpawnPos[] =
{ 5299.250f, 2035.998f, 707.7781f, 5.026548f }
};
+Position const UtherQuelDalarPos = { 5302.001f, 1988.698f, 707.7781f, 3.700098f };
+
class instance_halls_of_reflection : public InstanceMapScript
{
public:
@@ -89,6 +91,7 @@ class instance_halls_of_reflection : public InstanceMapScript
_waveCount = 0;
_introState = NOT_STARTED;
_frostswornGeneralState = NOT_STARTED;
+ _quelDelarState = NOT_STARTED;
events.Reset();
}
@@ -159,6 +162,9 @@ class instance_halls_of_reflection : public InstanceMapScript
case NPC_ICE_WALL_TARGET:
IcewallTargetGUID = creature->GetGUID();
break;
+ case NPC_UTHER:
+ UtherGUID = creature->GetGUID();
+ break;
default:
break;
}
@@ -439,6 +445,18 @@ class instance_halls_of_reflection : public InstanceMapScript
HandleGameObject(ShadowThroneDoorGUID, true);
_frostswornGeneralState = data;
break;
+ case DATA_QUEL_DELAR_EVENT:
+ if (data == IN_PROGRESS)
+ {
+ if (_quelDelarState == NOT_STARTED)
+ {
+ if (Creature* bunny = instance->GetCreature(FrostmourneAltarBunnyGUID))
+ bunny->CastSpell((Unit*)NULL, SPELL_ESSENCE_OF_CAPTURED);
+ events.ScheduleEvent(EVENT_QUEL_DELAR_SUMMON_UTHER, 2000);
+ }
+ }
+ _quelDelarState = data;
+ break;
default:
break;
}
@@ -446,6 +464,18 @@ class instance_halls_of_reflection : public InstanceMapScript
SaveToDB();
}
+ void SetGuidData(uint32 type, ObjectGuid data) override
+ {
+ switch (type)
+ {
+ case DATA_QUEL_DELAR_INVOKER:
+ QuelDelarInvokerGUID = data;
+ break;
+ default:
+ break;
+ }
+ }
+
// wave scheduling, checked when wave npcs die
void OnUnitDeath(Unit* unit) override
{
@@ -491,6 +521,9 @@ class instance_halls_of_reflection : public InstanceMapScript
case EVENT_SPAWN_ESCAPE_EVENT:
SpawnEscapeEvent();
break;
+ case EVENT_QUEL_DELAR_SUMMON_UTHER:
+ instance->SummonCreature(NPC_UTHER, UtherQuelDalarPos);
+ break;
}
}
@@ -649,6 +682,8 @@ class instance_halls_of_reflection : public InstanceMapScript
return _introState;
case DATA_FROSTSWORN_GENERAL:
return _frostswornGeneralState;
+ case DATA_QUEL_DELAR_EVENT:
+ return _quelDelarState;
default:
break;
}
@@ -682,6 +717,12 @@ class instance_halls_of_reflection : public InstanceMapScript
return IcewallGUID;
case DATA_ICEWALL_TARGET:
return IcewallTargetGUID;
+ case DATA_FROSTMOURNE_ALTAR_BUNNY:
+ return FrostmourneAltarBunnyGUID;
+ case DATA_UTHER_QUEL_DELAR:
+ return UtherGUID;
+ case DATA_QUEL_DELAR_INVOKER:
+ return QuelDelarInvokerGUID;
default:
break;
}
@@ -691,7 +732,7 @@ class instance_halls_of_reflection : public InstanceMapScript
void WriteSaveDataMore(std::ostringstream& data) override
{
- data << _introState << ' ' << _frostswornGeneralState;
+ data << _introState << ' ' << _frostswornGeneralState << ' ' << _quelDelarState;
}
void ReadSaveDataMore(std::istringstream& data) override
@@ -708,6 +749,12 @@ class instance_halls_of_reflection : public InstanceMapScript
SetData(DATA_FROSTSWORN_GENERAL, DONE);
else
SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
+
+ data >> temp;
+ if (temp == DONE)
+ SetData(DATA_QUEL_DELAR_EVENT, DONE);
+ else
+ SetData(DATA_QUEL_DELAR_EVENT, NOT_STARTED);
}
private:
@@ -731,6 +778,7 @@ class instance_halls_of_reflection : public InstanceMapScript
uint32 _waveCount;
uint32 _introState;
uint32 _frostswornGeneralState;
+ uint32 _quelDelarState;
EventMap events;
GuidSet waveGuidList[8];
@@ -740,6 +788,8 @@ class instance_halls_of_reflection : public InstanceMapScript
ObjectGuid CaptainGUID;
ObjectGuid IcewallGUID;
ObjectGuid IcewallTargetGUID;
+ ObjectGuid QuelDelarInvokerGUID;
+ ObjectGuid UtherGUID;
GuidSet GunshipCannonGUIDs;
GuidSet GunshipStairGUIDs;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index 4c6fd0f2fcc..63082808e03 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -1259,7 +1259,7 @@ class spell_putricide_mutated_plague : public SpellScriptLoader
return;
uint32 triggerSpell = GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell;
- SpellInfo const* spell = sSpellMgr->GetSpellInfo(triggerSpell);
+ SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(triggerSpell);
spell = sSpellMgr->GetSpellForDifficultyFromSpell(spell, caster);
int32 damage = spell->Effects[EFFECT_0].CalcValue(caster);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 4d7b9ec42b4..d56a3f80f75 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -18,7 +18,7 @@
#include "ObjectMgr.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-#include "SpellAuras.h"
+#include "SpellAuraEffects.h"
#include "GridNotifiers.h"
#include "icecrown_citadel.h"
@@ -213,7 +213,7 @@ class boss_rotface : public CreatureScript
}
break;
case EVENT_MUTATED_INFECTION:
- me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, NULL, false);
+ DoCastAOE(SPELL_MUTATED_INFECTION);
events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown);
break;
case EVENT_VILE_GAS:
@@ -509,13 +509,6 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
{
PrepareSpellScript(spell_rotface_mutated_infection_SpellScript);
- public:
- spell_rotface_mutated_infection_SpellScript()
- {
- _target = nullptr;
- }
-
- private:
void FilterTargets(std::list<WorldObject*>& targets)
{
// remove targets with this aura already
@@ -527,14 +520,6 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
targets.clear();
targets.push_back(target);
- _target = target;
- }
-
- void ReplaceTargets(std::list<WorldObject*>& targets)
- {
- targets.clear();
- if (_target)
- targets.push_back(_target);
}
void NotifyTargets()
@@ -546,19 +531,43 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
void Register() override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY);
AfterHit += SpellHitFn(spell_rotface_mutated_infection_SpellScript::NotifyTargets);
}
+ };
+
+ class spell_rotface_mutated_infection_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_rotface_mutated_infection_AuraScript);
- WorldObject* _target;
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ if (!sSpellMgr->GetSpellInfo(uint32(spellInfo->Effects[EFFECT_2].CalcValue())))
+ return false;
+ return true;
+ }
+
+ void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), true, nullptr, aurEff, GetCasterGUID());
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_rotface_mutated_infection_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
+ }
};
SpellScript* GetSpellScript() const override
{
return new spell_rotface_mutated_infection_SpellScript();
}
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_rotface_mutated_infection_AuraScript();
+ }
};
class spell_rotface_little_ooze_combine : public SpellScriptLoader
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 ae0e00cb849..07816ebbe39 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -2417,6 +2417,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader
void CorrectRange(std::list<WorldObject*>& targets)
{
targets.remove_if(ExactDistanceCheck(GetCaster(), 10.0f * GetCaster()->GetObjectScale()));
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HARVEST_SOUL_VALKYR));
}
void ChangeDamageAndGrow()
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 43069f10464..6c3b2187325 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -520,11 +520,7 @@ public:
_despawned = false;
break;
case ACTION_CYCLIC_MOVEMENT:
- Movement::MoveSplineInit init(me);
- FillCirclePath(MalygosPositions[3], 120.0f, 283.2763f, init.Path(), true);
- init.SetFly();
- init.SetCyclic();
- init.Launch();
+ me->GetMotionMaster()->MoveCirclePath(MalygosPositions[3].GetPositionX(), MalygosPositions[3].GetPositionY(), 283.2763f, 120.0f, true, 16);
break;
}
}
@@ -1020,22 +1016,6 @@ public:
}
private:
- // Used to generate perfect cyclic movements (Enter Circle).
- void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
- {
- float step = clockwise ? float(-M_PI) / 8.0f : float(M_PI) / 8.0f;
- float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
-
- for (uint8 i = 0; i < 16; angle += step, ++i)
- {
- G3D::Vector3 point;
- point.x = centerPos.GetPositionX() + radius * cosf(angle);
- point.y = centerPos.GetPositionY() + radius * sinf(angle);
- point.z = z; // Don't use any height getters unless all bugs are fixed.
- path.push_back(point);
- }
- }
-
uint8 _phase; // Counter for phases used with a getter.
uint8 _summonDeaths; // Keeps count of arcane trash.
uint8 _preparingPulsesChecker; // In retail they use 2 preparing pulses with 7 sec CD, after they pass 2 seconds.
@@ -1326,11 +1306,7 @@ public:
{
if (action < ACTION_DELAYED_DESPAWN)
{
- Movement::MoveSplineInit init(me);
- FillCirclePath(MalygosPositions[3], 35.0f, 282.3402f, init.Path(), true);
- init.SetFly();
- init.SetCyclic();
- init.Launch();
+ me->GetMotionMaster()->MoveCirclePath(MalygosPositions[3].GetPositionX(), MalygosPositions[3].GetPositionY(), 282.3402f, 35.0f, true, 16);
}
else
{
@@ -1339,21 +1315,6 @@ public:
}
private:
- void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
- {
- float step = clockwise ? float(-M_PI) / 9.0f : float(M_PI) / 9.0f;
- float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
-
- for (uint8 i = 0; i < 18; angle += step, ++i)
- {
- G3D::Vector3 point;
- point.x = centerPos.GetPositionX() + radius * cosf(angle);
- point.y = centerPos.GetPositionY() + radius * sinf(angle);
- point.z = z; // Don't use any height getters unless all bugs are fixed.
- path.push_back(point);
- }
- }
-
InstanceScript* _instance;
};
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
deleted file mode 100644
index fc56f541a4b..00000000000
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
- *
- * This program 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/>.
- */
-
-/* Script Data Start
-SDName: Boss Commander Kolurg
-SDAuthor: LordVanMartin
-SD%Complete:
-SDComment: Only Alliance Heroic
-SDCategory:
-Script Data End */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum Spells
-{
- SPELL_BATTLE_SHOUT = 31403,
- SPELL_CHARGE = 60067,
- SPELL_FRIGHTENING_SHOUT = 19134,
- SPELL_WHIRLWIND_1 = 38619,
- SPELL_WHIRLWIND_2 = 38618
-
-};
-
-//not used
-//Yell
-#define SAY_AGGRO -1576024
-#define SAY_KILL -1576025
-#define SAY_DEATH -1576026
-
-class boss_commander_kolurg : public CreatureScript
-{
-public:
- boss_commander_kolurg() : CreatureScript("boss_commander_kolurg") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_commander_kolurgAI(creature);
- }
-
- struct boss_commander_kolurgAI : public ScriptedAI
- {
- boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override { }
- void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) override { }
-
- void UpdateAI(uint32 /*diff*/) override
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- DoMeleeAttackIfReady();
- }
- void JustDied(Unit* /*killer*/) override { }
- };
-
-};
-
-void AddSC_boss_commander_kolurg()
-{
- new boss_commander_kolurg();
-}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
deleted file mode 100644
index ff08038d898..00000000000
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
- *
- * This program 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/>.
- */
-
-/* Script Data Start
-SDName: Boss Commander Stoutbeard
-SDAuthor: LordVanMartin
-SD%Complete:
-SDComment: Only Horde Heroic
-SDCategory:
-Script Data End */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-
-enum CommanderStoutbeard
-{
- SPELL_BATTLE_SHOUT = 31403,
- SPELL_CHARGE = 60067,
- SPELL_FRIGHTENING_SHOUT = 19134,
- SPELL_WHIRLWIND_1 = 38619,
- SPELL_WHIRLWIND_2 = 38618
-};
-
-
-class boss_commander_stoutbeard : public CreatureScript
-{
-public:
- boss_commander_stoutbeard() : CreatureScript("boss_commander_stoutbeard") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_commander_stoutbeardAI(creature);
- }
-
- struct boss_commander_stoutbeardAI : public ScriptedAI
- {
- boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override { }
- void AttackStart(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) override { }
-
- void UpdateAI(uint32 /*diff*/) override
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- DoMeleeAttackIfReady();
- }
- };
-
-};
-
-void AddSC_boss_commander_stoutbeard()
-{
- new boss_commander_stoutbeard();
-}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp
new file mode 100644
index 00000000000..d40f9fecc6a
--- /dev/null
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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 "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "nexus.h"
+
+enum Spells
+{
+ SPELL_BATTLE_SHOUT = 31403,
+ SPELL_CHARGE = 60067,
+ SPELL_FRIGHTENING_SHOUT = 19134,
+ SPELL_WHIRLWIND = 38618,
+ SPELL_FROZEN_PRISON = 47543
+};
+
+enum Yells
+{
+ SAY_AGGRO = 0,
+ SAY_KILL = 1,
+ SAY_DEATH = 2
+};
+
+enum Events
+{
+ EVENT_CHARGE_COMMANDER = 1,
+ EVENT_WHIRLWIND,
+ EVENT_FRIGHTENING_SHOUT
+};
+
+class boss_nexus_commanders : public CreatureScript
+{
+ public:
+ boss_nexus_commanders() : CreatureScript("boss_nexus_commanders") { }
+
+ struct boss_nexus_commandersAI : public BossAI
+ {
+ boss_nexus_commandersAI(Creature* creature) : BossAI(creature, DATA_COMMANDER) { }
+
+ void EnterCombat(Unit* /*who*/) override
+ {
+ _EnterCombat();
+ Talk(SAY_AGGRO);
+ me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON);
+ DoCast(me, SPELL_BATTLE_SHOUT);
+
+ events.ScheduleEvent(EVENT_CHARGE_COMMANDER, urand(3000, 4000));
+ events.ScheduleEvent(EVENT_WHIRLWIND, urand(6000, 8000));
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(13000, 15000));
+ }
+
+ void ExecuteEvent(uint32 eventId) override
+ {
+ switch (eventId)
+ {
+ case EVENT_CHARGE_COMMANDER:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ DoCast(target, SPELL_CHARGE);
+ events.ScheduleEvent(EVENT_CHARGE_COMMANDER, urand(11000, 15000));
+ break;
+ case EVENT_WHIRLWIND:
+ DoCast(me, SPELL_WHIRLWIND);
+ events.ScheduleEvent(EVENT_WHIRLWIND, urand(19500, 25000));
+ break;
+ case EVENT_FRIGHTENING_SHOUT:
+ DoCastAOE(SPELL_FRIGHTENING_SHOUT);
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(45000, 55000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
+ }
+
+ void KilledUnit(Unit* who) override
+ {
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_KILL);
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_nexus_commandersAI>(creature);
+ }
+};
+
+void AddSC_boss_nexus_commanders()
+{
+ new boss_nexus_commanders();
+}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
index 90866ea83f8..c48c7323301 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
+++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h
@@ -21,32 +21,33 @@
#define NexusScriptName "instance_nexus"
#define DataHeader "NEX"
-uint32 const EncounterCount = 4;
+uint32 const EncounterCount = 5;
enum DataTypes
{
- DATA_MAGUS_TELESTRA = 0,
- DATA_ANOMALUS = 1,
- DATA_ORMOROK = 2,
- DATA_KERISTRASZA = 3,
+ DATA_COMMANDER = 0,
+ DATA_MAGUS_TELESTRA = 1,
+ DATA_ANOMALUS = 2,
+ DATA_ORMOROK = 3,
+ DATA_KERISTRASZA = 4,
- ANOMALUS_CONTAINMET_SPHERE = 4,
- ORMOROKS_CONTAINMET_SPHERE = 5,
- TELESTRAS_CONTAINMET_SPHERE = 6
+ ANOMALUS_CONTAINMET_SPHERE = 5,
+ ORMOROKS_CONTAINMET_SPHERE = 6,
+ TELESTRAS_CONTAINMET_SPHERE = 7
};
enum CreatureIds
{
NPC_ANOMALUS = 26763,
NPC_KERISTRASZA = 26723,
-
+
// Alliance
NPC_ALLIANCE_BERSERKER = 26800,
NPC_ALLIANCE_RANGER = 26802,
NPC_ALLIANCE_CLERIC = 26805,
NPC_ALLIANCE_COMMANDER = 27949,
NPC_COMMANDER_STOUTBEARD = 26796,
-
+
// Horde
NPC_HORDE_BERSERKER = 26799,
NPC_HORDE_RANGER = 26801,
@@ -59,7 +60,7 @@ enum GameObjectIds
{
GO_ANOMALUS_CONTAINMET_SPHERE = 188527,
GO_ORMOROKS_CONTAINMET_SPHERE = 188528,
- GO_TELESTRAS_CONTAINMET_SPHERE = 188526
+ GO_TELESTRAS_CONTAINMET_SPHERE = 188526
};
#endif
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index 7bc8a5300f4..536cae08483 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -29,7 +29,7 @@ EndScriptData */
#include "Player.h"
#include "SpellInfo.h"
-enum Enums
+enum Texts
{
SAY_AGGRO = 0,
SAY_FORGE = 1,
@@ -38,29 +38,50 @@ enum Enums
SAY_DEATH = 4,
EMOTE_TO_ANVIL = 5,
EMOTE_SHATTER = 6,
+};
+enum Spells
+{
SPELL_HEAT = 52387,
SPELL_SHATTERING_STOMP = 52237,
-
SPELL_TEMPER = 52238,
SPELL_TEMPER_DUMMY = 52654,
-
SPELL_SUMMON_MOLTEN_GOLEM = 52405,
+ SPELL_FORGE_VISUAL = 52654,
// Molten Golem
SPELL_BLAST_WAVE = 23113,
SPELL_IMMOLATION_STRIKE = 52433,
SPELL_SHATTER = 52429,
+};
+enum Events
+{
+ EVENT_PAUSE = 1,
+ EVENT_SHATTERING_STOMP = 2,
+ EVENT_SHATTER = 3,
+ EVENT_FORGE_CAST = 4,
+
+ // Molten Golem
+ EVENT_BLAST = 5,
+ EVENT_IMMOLATION = 6
+};
+
+enum Npcs
+{
NPC_VOLKHAN_ANVIL = 28823,
NPC_MOLTEN_GOLEM = 28695,
NPC_BRITTLE_GOLEM = 28681,
-
MAX_GOLEM = 2,
-
DATA_SHATTER_RESISTANT = 2042
};
+enum Phases
+{
+ PHASE_INTRO = 1,
+ PHASE_NORMAL
+};
+
/*######
## Boss Volkhan
######*/
@@ -68,68 +89,44 @@ class boss_volkhan : public CreatureScript
{
public:
boss_volkhan() : CreatureScript("boss_volkhan") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_volkhanAI>(creature);
- }
-
- struct boss_volkhanAI : public ScriptedAI
+
+ struct boss_volkhanAI : public BossAI
{
- boss_volkhanAI(Creature* creature) : ScriptedAI(creature)
+ boss_volkhanAI(Creature* creature) : BossAI(creature, DATA_VOLKHAN)
{
Initialize();
- instance = creature->GetInstanceScript();
}
void Initialize()
{
- m_bIsStriking = false;
- m_bHasTemper = false;
+ m_bIsStriking = false;
+ m_bHasTemper = false;
m_bCanShatterGolem = false;
-
- m_uiPause_Timer = 3500;
- m_uiShatteringStomp_Timer = 0;
- m_uiShatter_Timer = 5000;
- m_uiDelay_Timer = 1000;
- m_uiSummonPhase = 0;
- GolemsShattered = 0;
+ m_uiDelay_Timer = 1000;
+ m_uiSummonPhase = 0;
+ GolemsShattered = 0;
m_uiHealthAmountModifier = 1;
}
- InstanceScript* instance;
-
- GuidList m_lGolemGUIDList;
-
- bool m_bHasTemper;
- bool m_bIsStriking;
- bool m_bCanShatterGolem;
-
- uint8 GolemsShattered;
- uint32 m_uiPause_Timer;
- uint32 m_uiShatteringStomp_Timer;
- uint32 m_uiShatter_Timer;
- uint32 m_uiDelay_Timer;
- uint32 m_uiSummonPhase;
-
- uint32 m_uiHealthAmountModifier;
-
void Reset() override
{
Initialize();
-
+ _Reset();
DespawnGolem();
m_lGolemGUIDList.clear();
-
- instance->SetBossState(DATA_VOLKHAN, NOT_STARTED);
+ events.SetPhase(PHASE_INTRO);
+ events.ScheduleEvent(EVENT_FORGE_CAST, 2 * IN_MILLISECONDS, 0, PHASE_INTRO);
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
-
- instance->SetBossState(DATA_VOLKHAN, IN_PROGRESS);
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_PAUSE, 3.5 * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_SHATTERING_STOMP, 0 * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_SHATTER, 5 * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ _EnterCombat();
}
void AttackStart(Unit* who) override
@@ -150,7 +147,7 @@ public:
Talk(SAY_DEATH);
DespawnGolem();
- instance->SetBossState(DATA_VOLKHAN, DONE);
+ _JustDied();
}
void KilledUnit(Unit* who) override
@@ -224,59 +221,61 @@ public:
return 0;
}
- void UpdateAI(uint32 uiDiff) override
+ void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim())
+ // Return since we have no target and are in CombatPhase
+ if (events.IsInPhase(PHASE_NORMAL) && !UpdateVictim())
return;
- if (m_bIsStriking)
- {
- if (m_uiPause_Timer <= uiDiff)
- {
- if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE)
- if (me->GetVictim())
- me->GetMotionMaster()->MoveChase(me->GetVictim());
-
- m_bHasTemper = false;
- m_bIsStriking = false;
- m_uiPause_Timer = 3500;
- }
- else
- m_uiPause_Timer -= uiDiff;
+ events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- }
- // When to start shatter? After 60, 40 or 20% hp?
- if (!m_bHasTemper && m_uiHealthAmountModifier >= 3)
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (m_uiShatteringStomp_Timer <= uiDiff)
+ switch (eventId)
{
- // Should he stomp even if he has no brittle golem to shatter?
- Talk(SAY_STOMP);
-
- DoCast(me, SPELL_SHATTERING_STOMP);
+ case EVENT_PAUSE:
+ if (m_bIsStriking)
+ {
+ if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE)
+ if (me->GetVictim())
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
- Talk(EMOTE_SHATTER);
+ m_bHasTemper = false;
+ m_bIsStriking = false;
+ events.ScheduleEvent(EVENT_PAUSE, 3.5 * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ }
+ break;
+ case EVENT_SHATTERING_STOMP:
+ if (!m_bHasTemper && m_uiHealthAmountModifier >= 3)
+ {
+ // Should he stomp even if he has no brittle golem to shatter?
+ Talk(SAY_STOMP);
- m_uiShatteringStomp_Timer = 30000;
- m_bCanShatterGolem = true;
- }
- else
- m_uiShatteringStomp_Timer -= uiDiff;
- }
+ DoCast(me, SPELL_SHATTERING_STOMP);
- // Shatter Golems 3 seconds after Shattering Stomp
- if (m_bCanShatterGolem)
- {
- if (m_uiShatter_Timer <= uiDiff)
- {
- ShatterGolem();
- m_uiShatter_Timer = 3000;
- m_bCanShatterGolem = false;
+ Talk(EMOTE_SHATTER);
+ events.ScheduleEvent(EVENT_SHATTERING_STOMP, 30 * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ m_bCanShatterGolem = true;
+ }
+ break;
+ case EVENT_SHATTER:
+ if (m_bCanShatterGolem)
+ {
+ ShatterGolem();
+ events.ScheduleEvent(EVENT_SHATTER, 3 * IN_MILLISECONDS, 0, PHASE_NORMAL);
+ m_bCanShatterGolem = false;
+ }
+ break;
+ case EVENT_FORGE_CAST:
+ DoCast(me, SPELL_FORGE_VISUAL);
+ events.ScheduleEvent(EVENT_FORGE_CAST, 15 * IN_MILLISECONDS, 0, PHASE_INTRO);
+ break;
+ default:
+ break;
}
- else
- m_uiShatter_Timer -= uiDiff;
}
// Health check
@@ -302,12 +301,10 @@ public:
me->GetMotionMaster()->MoveTargetedHome();
m_uiSummonPhase = 2; // Set Next Phase
break;
-
case 2:
// 2 - Check if reached Anvil
// This is handled in: void JustReachedHome() override
break;
-
case 3:
// 3 - Cast Temper on the Anvil
if (Unit* target = GetClosestCreatureWithEntry(me, NPC_VOLKHAN_ANVIL, 1000.0f, true))
@@ -319,10 +316,9 @@ public:
m_uiDelay_Timer = 1000; // Delay 2 seconds before next phase can begin
m_uiSummonPhase = 4; // Set Next Phase
break;
-
case 4:
// 4 - Wait for delay to expire
- if (m_uiDelay_Timer <= uiDiff)
+ if (m_uiDelay_Timer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0))
{
@@ -333,9 +329,8 @@ public:
m_uiSummonPhase = 5;
}
else
- m_uiDelay_Timer -= uiDiff;
+ m_uiDelay_Timer -= diff;
break;
-
case 5:
// 5 - Spawn the Golems
if (Creature* creatureTarget = GetClosestCreatureWithEntry(me, NPC_VOLKHAN_ANVIL, 1000.0f, true))
@@ -349,13 +344,30 @@ public:
DoMeleeAttackIfReady();
}
+
+ private:
+ GuidList m_lGolemGUIDList;
+ uint32 m_uiHealthAmountModifier;
+ uint8 GolemsShattered;
+ uint32 m_uiDelay_Timer;
+ uint32 m_uiSummonPhase;
+
+ bool m_bHasTemper;
+ bool m_bIsStriking;
+ bool m_bCanShatterGolem;
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_volkhanAI>(creature);
+ }
+
};
/*######
## npc_molten_golem
######*/
+
class npc_molten_golem : public CreatureScript
{
public:
@@ -376,18 +388,12 @@ public:
void Initialize()
{
m_bIsFrozen = false;
-
- m_uiBlast_Timer = 20000;
- m_uiDeathDelay_Timer = 0;
- m_uiImmolation_Timer = 5000;
+ events.ScheduleEvent(EVENT_BLAST, 20 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_IMMOLATION, 5 * IN_MILLISECONDS);
}
bool m_bIsFrozen;
- uint32 m_uiBlast_Timer;
- uint32 m_uiDeathDelay_Timer;
- uint32 m_uiImmolation_Timer;
-
void Reset() override
{
Initialize();
@@ -433,30 +439,39 @@ public:
me->DespawnOrUnsummon();
}
- void UpdateAI(uint32 uiDiff) override
+ void UpdateAI(uint32 diff) override
{
// Return since we have no target or if we are frozen
if (!UpdateVictim() || m_bIsFrozen)
return;
- if (m_uiBlast_Timer <= uiDiff)
- {
- DoCast(me, SPELL_BLAST_WAVE);
- m_uiBlast_Timer = 20000;
- }
- else
- m_uiBlast_Timer -= uiDiff;
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (m_uiImmolation_Timer <= uiDiff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- DoCastVictim(SPELL_IMMOLATION_STRIKE);
- m_uiImmolation_Timer = 5000;
+ switch (eventId)
+ {
+ case EVENT_BLAST:
+ DoCast(me, SPELL_BLAST_WAVE);
+ events.ScheduleEvent(EVENT_BLAST, 20 * IN_MILLISECONDS);
+ break;
+ case EVENT_IMMOLATION:
+ DoCastVictim(SPELL_IMMOLATION_STRIKE);
+ events.ScheduleEvent(EVENT_BLAST, 5 * IN_MILLISECONDS);
+ break;
+ default:
+ break;
+ }
}
- else
- m_uiImmolation_Timer -= uiDiff;
DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap events;
};
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index a682e405d08..a7a9f8dde88 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -1126,30 +1126,11 @@ class npc_ominous_cloud : public CreatureScript
DoCast(me, SPELL_OMINOUS_CLOUD_VISUAL);
}
- void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
- {
- float step = clockwise ? float(-M_PI) / 8.0f : float(M_PI) / 8.0f;
- float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
-
- for (uint8 i = 0; i < 16; angle += step, ++i)
- {
- G3D::Vector3 point;
- point.x = centerPos.GetPositionX() + radius * cosf(angle);
- point.y = centerPos.GetPositionY() + radius * sinf(angle);
- point.z = me->GetMap()->GetHeight(me->GetPhaseMask(), point.x, point.y, z + 5.0f);
- path.push_back(point);
- }
- }
-
void UpdateAI(uint32 /*diff*/) override { }
void DoAction(int32 action) override
{
- Movement::MoveSplineInit init(me);
- FillCirclePath(YoggSaronSpawnPos, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), me->GetPositionZ(), init.Path(), action != 0);
- init.SetWalk(true);
- init.SetCyclic();
- init.Launch();
+ me->GetMotionMaster()->MoveCirclePath(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY(), me->GetPositionZ() + 5.0f, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), true, 16);
}
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 952e35642d0..49ed9609a03 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -16,6 +16,7 @@
*/
#include "InstanceScript.h"
+#include "Vehicle.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptMgr.h"
@@ -91,6 +92,7 @@ class instance_ulduar : public InstanceMapScript
// Creatures
ObjectGuid LeviathanGUID;
+ GuidVector LeviathanVehicleGUIDs;
ObjectGuid IgnisGUID;
ObjectGuid RazorscaleGUID;
ObjectGuid RazorscaleController;
@@ -217,6 +219,11 @@ class instance_ulduar : public InstanceMapScript
case NPC_LEVIATHAN:
LeviathanGUID = creature->GetGUID();
break;
+ case NPC_SALVAGED_DEMOLISHER:
+ case NPC_SALVAGED_SIEGE_ENGINE:
+ case NPC_SALVAGED_CHOPPER:
+ LeviathanVehicleGUIDs.push_back(creature->GetGUID());
+ break;
case NPC_IGNIS:
IgnisGUID = creature->GetGUID();
break;
@@ -682,6 +689,24 @@ class instance_ulduar : public InstanceMapScript
switch (type)
{
case BOSS_LEVIATHAN:
+ if (state == DONE)
+ {
+ // Eject all players from vehicles and make them untargetable.
+ // They will be despawned after a while
+ for (auto const& vehicleGuid : LeviathanVehicleGUIDs)
+ {
+ if (Creature* vehicleCreature = instance->GetCreature(vehicleGuid))
+ {
+ if (Vehicle* vehicle = vehicleCreature->GetVehicleKit())
+ {
+ vehicle->RemoveAllPassengers();
+ vehicleCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ vehicleCreature->DespawnOrUnsummon(5 * MINUTE * IN_MILLISECONDS);
+ }
+ }
+ }
+ }
+ break;
case BOSS_IGNIS:
case BOSS_RAZORSCALE:
case BOSS_XT002:
@@ -1143,6 +1168,34 @@ class instance_ulduar : public InstanceMapScript
}
}
+ void UpdateDoorState(GameObject* door) override
+ {
+ // Leviathan doors are set to DOOR_TYPE_ROOM except the one it uses to enter the room
+ // which has to be set to DOOR_TYPE_PASSAGE
+ if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
+ door->SetGoState(GetBossState(BOSS_LEVIATHAN) == DONE ? GO_STATE_ACTIVE : GO_STATE_READY);
+ else
+ InstanceScript::UpdateDoorState(door);
+ }
+
+ void AddDoor(GameObject* door, bool add) override
+ {
+ // Leviathan doors are South except the one it uses to enter the room
+ // which is North and should not be used for boundary checks in BossAI::CheckBoundary()
+ if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
+ {
+ if (add)
+ GetBossInfo(BOSS_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].insert(door->GetGUID());
+ else
+ GetBossInfo(BOSS_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].erase(door->GetGUID());
+
+ if (add)
+ UpdateDoorState(door);
+ }
+ else
+ InstanceScript::AddDoor(door, add);
+ }
+
private:
EventMap _events;
uint32 _algalonTimer;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index ddf293dd8b8..d40fb698658 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -54,6 +54,7 @@ enum UlduarNPCs
NPC_LEVIATHAN = 33113,
NPC_SALVAGED_DEMOLISHER = 33109,
NPC_SALVAGED_SIEGE_ENGINE = 33060,
+ NPC_SALVAGED_CHOPPER = 33062,
NPC_IGNIS = 33118,
NPC_RAZORSCALE = 33186,
NPC_RAZORSCALE_CONTROLLER = 33233,
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index d1df244b733..90fd936e853 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -26,9 +26,6 @@ enum Spells
SPELL_SUMMON_VOID_SENTRY = 54369,
SPELL_VOID_SHIFT = 54361,
H_SPELL_VOID_SHIFT = 59743,
-
- SPELL_ZURAMAT_ADD_2 = 54342,
- H_SPELL_ZURAMAT_ADD_2 = 59747
};
enum Creatures
@@ -192,12 +189,6 @@ public:
Talk(SAY_SLAY);
}
- void JustSummoned(Creature* summon) override
- {
- summon->AI()->AttackStart(me->GetVictim());
- summon->CastSpell((Unit*)NULL, SPELL_ZURAMAT_ADD_2);
- summon->SetPhaseMask(17, true);
- }
};
};
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 3e3ce5cde75..a462c68e084 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -133,6 +133,7 @@ public:
uiCyanigosaEventTimer = 3 * IN_MILLISECONDS;
bActive = false;
+ bWiped = false;
bIsDoorSpellCast = false;
bCrystalActivated = false;
defenseless = true;
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 9a577516126..4aea36e3fe7 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -29,7 +29,6 @@ npc_corastrasza
npc_sinkhole_kill_credit
npc_khunok_the_behemoth
npc_nerubar_victim
-npc_keristrasza
npc_nesingwary_trapper
npc_lurgglbr
npc_nexus_drake_hatchling
@@ -223,48 +222,6 @@ public:
};
/*######
-## npc_keristrasza
-######*/
-
-enum Keristrasza
-{
- SPELL_TELEPORT_TO_SARAGOSA = 46772
-};
-
-#define GOSSIP_HELLO_KERI "I am prepared to face Saragosa!"
-
-class npc_keristrasza : public CreatureScript
-{
-public:
- npc_keristrasza() : CreatureScript("npc_keristrasza") { }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(11957) == QUEST_STATUS_INCOMPLETE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_KERI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
-
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF + 1)
- {
- player->CLOSE_GOSSIP_MENU();
- player->CastSpell(player, SPELL_TELEPORT_TO_SARAGOSA, true);
- }
-
- return true;
- }
-};
-
-/*######
## npc_corastrasza
######*/
@@ -438,6 +395,9 @@ enum NesingwaryTrapper
GO_CARIBOU_TRAP_15 = 188008,
SPELL_TRAPPED = 46104,
+
+ // Texts
+ SAY_NESINGWARY_1 = 0
};
#define CaribouTrapsNum 15
@@ -514,7 +474,7 @@ public:
phase = 3;
break;
case 3:
- //Talk(SAY_NESINGWARY_1);
+ Talk(SAY_NESINGWARY_1);
phaseTimer = 2000;
phase = 4;
break;
@@ -2488,7 +2448,6 @@ void AddSC_borean_tundra()
{
new npc_sinkhole_kill_credit();
new npc_khunok_the_behemoth();
- new npc_keristrasza();
new npc_corastrasza();
new npc_iruk();
new npc_nerubar_victim();
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index dad71ab0c24..15fa6d836cd 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -816,6 +816,44 @@ class spell_shredder_delivery : public SpellScriptLoader
}
};
+enum InfectedWorgenBite
+{
+ SPELL_INFECTED_WORGEN_BITE = 53094,
+ SPELL_WORGENS_CALL = 53095
+};
+
+class spell_infected_worgen_bite : public SpellScriptLoader
+{
+ public:
+ spell_infected_worgen_bite() : SpellScriptLoader("spell_infected_worgen_bite") { }
+
+ class spell_infected_worgen_bite_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_infected_worgen_bite_AuraScript);
+
+ void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ if (GetStackAmount() == GetSpellInfo()->StackAmount)
+ {
+ Remove();
+ target->CastSpell(target, SPELL_WORGENS_CALL, true);
+ }
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_infected_worgen_bite_AuraScript::HandleAfterEffectApply, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAPPLY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_infected_worgen_bite_AuraScript();
+ }
+};
+
void AddSC_grizzly_hills()
{
new npc_emily();
@@ -827,4 +865,5 @@ void AddSC_grizzly_hills()
new npc_venture_co_straggler();
new npc_lake_frog();
new spell_shredder_delivery();
+ new spell_infected_worgen_bite();
}
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index bfdea4a1435..bb1e88ce158 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -641,97 +641,6 @@ enum JokkumScriptcast
EVENT_KROLMIR_9 = 24,
};
-class npc_king_jokkum_vehicle : public CreatureScript
-{
-public:
- npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { }
-
- struct npc_king_jokkum_vehicleAI : public VehicleAI
- {
- npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature)
- {
- pathEnd = false;
- }
-
- void Reset() override
- {
- playerGUID.Clear();
- pathEnd = false;
- }
-
- void OnCharmed(bool /*apply*/) override { }
-
- void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override
- {
- if (apply)
- {
- playerGUID = who->GetGUID();
- Talk(SAY_HOLD_ON, who);
- me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
- me->GetMotionMaster()->MovePath(PATH_JOKKUM, false);
- }
- }
-
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type != WAYPOINT_MOTION_TYPE)
- return;
-
- if (pathEnd)
- {
- if (id == 4)
- {
-
- }
- }
- else
- {
- if (id == 19)
- {
- pathEnd = true;
- me->SetFacingTo(0.418879f);
- Talk(SAY_JOKKUM_1);
- if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
- me->CastSpell(player, SPELL_PLAYER_CAST_VERANUS_SUMMON);
- me->CastSpell(me, SPELL_EJECT_ALL_PASSENGERS);
-
- }
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!pathEnd)
- return;
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_KROLMIR_1:
- Talk(SAY_JOKKUM_2);
- events.ScheduleEvent(EVENT_KROLMIR_2, 4000);
- break;
- }
- }
- }
-
- private:
- EventMap events;
- ObjectGuid playerGUID;
- bool pathEnd;
-
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_king_jokkum_vehicleAI(creature);
- }
-};
-
class spell_jokkum_scriptcast : public SpellScriptLoader
{
public: spell_jokkum_scriptcast() : SpellScriptLoader("spell_jokkum_scriptcast") { }
@@ -855,7 +764,6 @@ void AddSC_storm_peaks()
new npc_icefang();
new npc_hyldsmeet_protodrake();
new npc_brann_bronzebeard_keystone();
- new npc_king_jokkum_vehicle();
new spell_jokkum_scriptcast();
new spell_veranus_summon();
new spell_close_rift();
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index f73930181f0..91c796a6e69 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -313,7 +313,7 @@ public:
{
player->KilledMonsterCredit(gymerDummy->GetEntry(), gymerDummy->GetGUID());
gymerDummy->CastSpell(gymerDummy, SPELL_GYMER_LOCK_EXPLOSION, true);
- gymerDummy->DespawnOrUnsummon();
+ gymerDummy->DespawnOrUnsummon(4 * IN_MILLISECONDS);
}
}
return true;
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 728b164cc04..e4369f0348d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -93,15 +93,12 @@ enum Factions
FACTION_COMBAT = 1868
};
-enum SetData
+enum Actions
{
- SETDATA_DATA = 1,
- SETDATA_RESET = 1,
- SETDATA_CHANNELER_DIED = 2,
- SETDATA_START_SPAWNING = 3,
- SETDATA_STOP_SPAWNING = 4,
- SETDATA_DESPAWN_ALL_SPAWNS = 5,
- SETDATA_START_ATTACK_AKAMA = 6
+ ACTION_CHANNELER_DIED = 1,
+ ACTION_START_SPAWNING = 2,
+ ACTION_STOP_SPAWNING = 3,
+ ACTION_DESPAWN_ALL_SPAWNS = 4,
};
enum Events
@@ -158,12 +155,11 @@ class boss_shade_of_akama : public CreatureScript
public:
boss_shade_of_akama() : CreatureScript("boss_shade_of_akama") { }
- struct boss_shade_of_akamaAI : public ScriptedAI
+ struct boss_shade_of_akamaAI : public BossAI
{
- boss_shade_of_akamaAI(Creature* creature) : ScriptedAI(creature)
+ boss_shade_of_akamaAI(Creature* creature) : BossAI(creature, DATA_SHADE_OF_AKAMA)
{
Initialize();
- instance = creature->GetInstanceScript();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
@@ -177,6 +173,7 @@ public:
void Reset() override
{
+ _Reset();
if (!HasKilledAkamaAndReseting)
{
for (GuidList::const_iterator itr = Channelers.begin(); itr != Channelers.end(); ++itr)
@@ -185,7 +182,7 @@ public:
for (GuidList::const_iterator itr = Spawners.begin(); itr != Spawners.end(); ++itr)
if (Creature* Spawner = ObjectAccessor::GetCreature(*me, *itr))
- Spawner->AI()->SetData(SETDATA_DATA, SETDATA_DESPAWN_ALL_SPAWNS);
+ Spawner->AI()->DoAction(ACTION_DESPAWN_ALL_SPAWNS);
events.ScheduleEvent(EVENT_FIND_CHANNELERS_SPAWNERS, 3000);
events.ScheduleEvent(EVENT_RESET_ENCOUNTER, 5000);
@@ -197,11 +194,6 @@ public:
Initialize();
}
- void JustDied(Unit* /*killer*/) override
- {
- instance->SetBossState(DATA_SHADE_OF_AKAMA, DONE);
- }
-
void EnterCombat(Unit* /*who*/) override { }
void AttackStart(Unit* who) override
@@ -216,9 +208,9 @@ public:
ScriptedAI::AttackStart(who);
}
- void SetData(uint32 data, uint32 value) override
+ void DoAction(int32 actionId) override
{
- if (data == SETDATA_DATA && value == SETDATA_CHANNELER_DIED)
+ if (actionId == ACTION_CHANNELER_DIED)
me->RemoveAuraFromStack(SPELL_SHADE_SOUL_CHANNEL_2);
UpdateSpeed();
@@ -314,7 +306,7 @@ public:
for (GuidList::const_iterator itr = Spawners.begin(); itr != Spawners.end(); ++itr)
if (Creature* Spawner = ObjectAccessor::GetCreature(*me, *itr))
- Spawner->AI()->SetData(SETDATA_DATA, SETDATA_START_SPAWNING);
+ Spawner->AI()->DoAction(ACTION_START_SPAWNING);
break;
}
case EVENT_START_ATTACK_AKAMA:
@@ -353,7 +345,7 @@ public:
for (GuidList::const_iterator itr = Spawners.begin(); itr != Spawners.end(); ++itr)
if (Creature* Spawner = ObjectAccessor::GetCreature(*me, *itr))
- Spawner->AI()->SetData(SETDATA_DATA, SETDATA_DESPAWN_ALL_SPAWNS);
+ Spawner->AI()->DoAction(ACTION_DESPAWN_ALL_SPAWNS);
events.ScheduleEvent(EVENT_FIND_CHANNELERS_SPAWNERS, 10000);
events.ScheduleEvent(EVENT_RESET_ENCOUNTER, 20000);
@@ -378,7 +370,7 @@ public:
for (GuidList::const_iterator itr = Spawners.begin(); itr != Spawners.end(); ++itr)
if (Creature* Spawner = ObjectAccessor::GetCreature(*me, *itr))
- Spawner->AI()->SetData(SETDATA_DATA, SETDATA_STOP_SPAWNING);
+ Spawner->AI()->DoAction(ACTION_STOP_SPAWNING);
}
}
}
@@ -390,8 +382,6 @@ public:
public:
bool HasKilledAkama;
private:
- InstanceScript* instance;
- EventMap events;
GuidList Channelers;
GuidList Spawners;
bool akamaReached;
@@ -433,9 +423,11 @@ public:
void Reset() override
{
me->setFaction(FACTION_FRIENDLY);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
DoCast(me, SPELL_STEALTH);
Initialize();
+
+ if (instance->GetBossState(DATA_SHADE_OF_AKAMA) != DONE)
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
void JustDied(Unit* /*killer*/) override
@@ -581,7 +573,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
- Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED);
+ Shade->AI()->DoAction(ACTION_CHANNELER_DIED);
}
void EnterCombat(Unit* /*who*/) override { }
@@ -603,7 +595,7 @@ public:
else
{
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
- Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED);
+ Shade->AI()->DoAction(ACTION_CHANNELER_DIED);
}
}
events.ScheduleEvent(EVENT_CHANNEL, 2000);
@@ -663,36 +655,33 @@ public:
Summons.Summon(summon);
}
- void SetData(uint32 data, uint32 value) override
+ void DoAction(int32 actionId) override
{
- if (data == SETDATA_DATA)
- {
- doSpawning = true;
+ doSpawning = true;
- switch (value)
- {
- case SETDATA_START_SPAWNING:
- if (leftSide)
- {
- events.ScheduleEvent(EVENT_SPAWN_WAVE_B, 100);
- events.ScheduleEvent(EVENT_SUMMON_ASHTONGUE_SORCERER, urand(2000, 5000));
- }
- else
- {
- events.ScheduleEvent(EVENT_SPAWN_WAVE_B, 10000);
- events.ScheduleEvent(EVENT_SUMMON_ASHTONGUE_DEFENDER, urand(2000, 5000));
- }
- break;
- case SETDATA_STOP_SPAWNING:
- doSpawning = false;
- break;
- case SETDATA_DESPAWN_ALL_SPAWNS:
- doSpawning = false;
- Summons.DespawnAll();
- break;
- default:
- break;
- }
+ switch (actionId)
+ {
+ case ACTION_START_SPAWNING:
+ if (leftSide)
+ {
+ events.ScheduleEvent(EVENT_SPAWN_WAVE_B, 100);
+ events.ScheduleEvent(EVENT_SUMMON_ASHTONGUE_SORCERER, urand(2000, 5000));
+ }
+ else
+ {
+ events.ScheduleEvent(EVENT_SPAWN_WAVE_B, 10000);
+ events.ScheduleEvent(EVENT_SUMMON_ASHTONGUE_DEFENDER, urand(2000, 5000));
+ }
+ break;
+ case ACTION_STOP_SPAWNING:
+ doSpawning = false;
+ break;
+ case ACTION_DESPAWN_ALL_SPAWNS:
+ doSpawning = false;
+ Summons.DespawnAll();
+ break;
+ default:
+ break;
}
}
@@ -778,23 +767,16 @@ public:
}
}
- summonerGuid.Clear();
Initialize();
}
void JustDied(Unit* /*killer*/) override
{
if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
- Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED);
+ Shade->AI()->DoAction(ACTION_CHANNELER_DIED);
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
- ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
- }
-
void EnterCombat(Unit* /*who*/) override { }
void AttackStart(Unit* who) override
@@ -824,7 +806,7 @@ public:
else
{
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
- Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED);
+ Shade->AI()->DoAction(ACTION_CHANNELER_DIED);
switchToCombat = true;
if (Unit* target = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
AttackStart(target);
@@ -855,7 +837,6 @@ public:
private:
InstanceScript* instance;
EventMap events;
- ObjectGuid summonerGuid;
bool startedBanishing;
bool switchToCombat;
};
@@ -884,8 +865,6 @@ public:
void Reset() override
{
- summonerGuid.Clear();
-
if (Unit* target = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
AttackStart(target);
}
@@ -895,12 +874,6 @@ public:
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
- ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
- }
-
void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_HEROIC_STRIKE, 5000);
@@ -947,7 +920,6 @@ public:
private:
InstanceScript* instance;
EventMap events;
- ObjectGuid summonerGuid;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -974,8 +946,6 @@ public:
void Reset() override
{
- summonerGuid.Clear();
-
if (Unit* target = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
AttackStart(target);
}
@@ -985,12 +955,6 @@ public:
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
- ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
- }
-
void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_DEBILITATING_POISON, urand(500, 2000));
@@ -1027,7 +991,6 @@ public:
private:
InstanceScript* instance;
EventMap events;
- ObjectGuid summonerGuid;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -1054,8 +1017,6 @@ public:
void Reset() override
{
- summonerGuid.Clear();
-
if (Unit* target = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
AttackStart(target);
}
@@ -1065,12 +1026,6 @@ public:
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
- ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
- }
-
void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 18000);
@@ -1107,7 +1062,6 @@ public:
private:
InstanceScript* instance;
EventMap events;
- ObjectGuid summonerGuid;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -1137,7 +1091,6 @@ public:
{
spiritMend = false;
chainHeal = false;
- summonerGuid.Clear();
}
void Reset() override
@@ -1153,12 +1106,6 @@ public:
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid)))
- ENSURE_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me);
- }
-
void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_SPIRIT_HEAL, urand (5000, 6000));
@@ -1208,7 +1155,6 @@ public:
private:
InstanceScript* instance;
EventMap events;
- ObjectGuid summonerGuid;
bool spiritMend;
bool chainHeal;
};
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index 2407f3980de..9ffc151b3b9 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -338,6 +338,13 @@ class npc_warden_mellichar : public CreatureScript
IsRunning = true;
}
+ void JustSummoned(Creature* summon) override
+ {
+ DoZoneInCombat(summon);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
+ summon->AI()->AttackStart(target);
+ }
+
bool CanProgress()
{
if (Phase == 7 && instance->GetData(DATA_WARDEN_4) == DONE)
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 50b77aac410..213f31b280f 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
@@ -283,7 +283,10 @@ class boss_harbinger_skyriss_illusion : public CreatureScript
{
boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() override { }
+ void Reset() override
+ {
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ }
void EnterCombat(Unit* /*who*/) override { }
};
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index ee70cca2e50..993e64f22dc 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -3629,6 +3629,43 @@ class spell_gen_eject_all_passengers : public SpellScriptLoader
}
};
+class spell_gen_eject_passenger : public SpellScriptLoader
+{
+ public:
+ spell_gen_eject_passenger() : SpellScriptLoader("spell_gen_eject_passenger") { }
+
+ class spell_gen_eject_passenger_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_eject_passenger_SpellScript);
+
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Effects[EFFECT_0].CalcValue() < 1)
+ return false;
+ return true;
+ }
+
+ void EjectPassenger(SpellEffIndex /*effIndex*/)
+ {
+ if (Vehicle* vehicle = GetHitUnit()->GetVehicleKit())
+ {
+ if (Unit* passenger = vehicle->GetPassenger(GetEffectValue() - 1))
+ passenger->ExitVehicle();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_eject_passenger_SpellScript::EjectPassenger, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gen_eject_passenger_SpellScript();
+ }
+};
+
enum GMFreeze
{
SPELL_GM_FREEZE = 9454
@@ -4121,6 +4158,7 @@ void AddSC_generic_spell_scripts()
new spell_gen_wg_water();
new spell_gen_whisper_gulch_yogg_saron_whisper();
new spell_gen_eject_all_passengers();
+ new spell_gen_eject_passenger();
new spell_gen_gm_freeze();
new spell_gen_stand();
new spell_gen_mixology_bonus();
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 629630d0bef..d98ef2ec799 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -2422,6 +2422,36 @@ class spell_q10929_fumping : SpellScriptLoader
}
};
+class spell_q12414_hand_over_reins : public SpellScriptLoader
+{
+ public:
+ spell_q12414_hand_over_reins() : SpellScriptLoader("spell_q12414_hand_over_reins") { }
+
+ class spell_q12414_hand_over_reins_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q12414_hand_over_reins_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Creature* caster = GetCaster()->ToCreature();
+ GetHitUnit()->ExitVehicle();
+
+ if (caster)
+ caster->DespawnOrUnsummon();
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q12414_hand_over_reins_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_q12414_hand_over_reins_SpellScript();
+ }
+};
+
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -2480,4 +2510,5 @@ void AddSC_quest_spell_scripts()
new spell_q13400_illidan_kill_master();
new spell_q14100_q14111_make_player_destroy_totems();
new spell_q10929_fumping();
+ new spell_q12414_hand_over_reins();
}
diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt
index fb86ac7db18..4be94e334da 100644
--- a/src/server/shared/CMakeLists.txt
+++ b/src/server/shared/CMakeLists.txt
@@ -21,6 +21,7 @@ file(GLOB_RECURSE sources_Logging Logging/*.cpp Logging/*.h)
file(GLOB_RECURSE sources_Networking Networking/*.cpp Networking/*.h)
file(GLOB_RECURSE sources_Packets Packets/*.cpp Packets/*.h)
file(GLOB_RECURSE sources_Threading Threading/*.cpp Threading/*.h)
+file(GLOB_RECURSE sources_Updater Updater/*.cpp Updater/*.h)
file(GLOB_RECURSE sources_Utilities Utilities/*.cpp Utilities/*.h)
file(GLOB sources_localdir *.cpp *.h)
@@ -51,6 +52,7 @@ set(shared_STAT_SRCS
${sources_Networking}
${sources_Packets}
${sources_Threading}
+ ${sources_Updater}
${sources_Utilities}
${sources_localdir}
)
@@ -59,8 +61,9 @@ include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour
${CMAKE_SOURCE_DIR}/dep/SFMT
- ${CMAKE_SOURCE_DIR}/dep/sockets/include
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
${CMAKE_SOURCE_DIR}/dep/utf8cpp
+ ${CMAKE_SOURCE_DIR}/dep/process
${CMAKE_SOURCE_DIR}/src/server
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/Configuration
@@ -74,6 +77,7 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/Packets
${CMAKE_CURRENT_SOURCE_DIR}/Threading
${CMAKE_CURRENT_SOURCE_DIR}/Utilities
+ ${CMAKE_CURRENT_SOURCE_DIR}/Updater
${CMAKE_SOURCE_DIR}/src/server/game/Entities/Object
${MYSQL_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
diff --git a/src/server/shared/Cryptography/BigNumber.cpp b/src/server/shared/Cryptography/BigNumber.cpp
index 434268097fe..7b353eb5616 100644
--- a/src/server/shared/Cryptography/BigNumber.cpp
+++ b/src/server/shared/Cryptography/BigNumber.cpp
@@ -171,19 +171,20 @@ bool BigNumber::isZero() const
std::unique_ptr<uint8[]> BigNumber::AsByteArray(int32 minSize, bool littleEndian)
{
- int length = (minSize >= GetNumBytes()) ? minSize : GetNumBytes();
+ int numBytes = GetNumBytes();
+ int length = (minSize >= numBytes) ? minSize : numBytes;
uint8* array = new uint8[length];
// If we need more bytes than length of BigNumber set the rest to 0
- if (length > GetNumBytes())
+ if (length > numBytes)
memset((void*)array, 0, length);
BN_bn2bin(_bn, (unsigned char *)array);
// openssl's BN stores data internally in big endian format, reverse if little endian desired
if (littleEndian)
- std::reverse(array, array + length);
+ std::reverse(array, array + numBytes);
std::unique_ptr<uint8[]> ret(array);
return ret;
diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h
index 10d4ff1bec9..1cb67a4235e 100644
--- a/src/server/shared/DataStores/DBCStore.h
+++ b/src/server/shared/DataStores/DBCStore.h
@@ -87,6 +87,13 @@ class DBCStorage
return (id >= nCount) ? NULL : indexTable.asT[id];
}
+ T const* AssertEntry(uint32 id) const
+ {
+ T const* entry = LookupEntry(id);
+ ASSERT(entry);
+ return entry;
+ }
+
uint32 GetNumRows() const { return nCount; }
char const* GetFormat() const { return fmt; }
uint32 GetFieldCount() const { return fieldCount; }
diff --git a/src/server/shared/Database/DatabaseLoader.cpp b/src/server/shared/Database/DatabaseLoader.cpp
new file mode 100644
index 00000000000..36ee4b12c83
--- /dev/null
+++ b/src/server/shared/Database/DatabaseLoader.cpp
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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 "DatabaseLoader.h"
+#include "DBUpdater.h"
+#include "Config.h"
+
+#include <mysqld_error.h>
+
+DatabaseLoader::DatabaseLoader(std::string const& logger, uint32 const defaultUpdateMask)
+ : _logger(logger), _autoSetup(sConfigMgr->GetBoolDefault("Updates.AutoSetup", true)),
+ _updateFlags(sConfigMgr->GetIntDefault("Updates.EnableDatabases", defaultUpdateMask))
+{
+}
+
+template <class T>
+DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::string const& name)
+{
+ bool const updatesEnabledForThis = DBUpdater<T>::IsEnabled(_updateFlags);
+
+ _open.push(std::make_pair([this, name, updatesEnabledForThis, &pool]() -> bool
+ {
+ std::string const dbString = sConfigMgr->GetStringDefault(name + "DatabaseInfo", "");
+ if (dbString.empty())
+ {
+ TC_LOG_ERROR(_logger.c_str(), "Database %s not specified in configuration file!", name.c_str());
+ return false;
+ }
+
+ uint8 const asyncThreads = uint8(sConfigMgr->GetIntDefault(name + "Database.WorkerThreads", 1));
+ if (asyncThreads < 1 || asyncThreads > 32)
+ {
+ TC_LOG_ERROR(_logger.c_str(), "%s database: invalid number of worker threads specified. "
+ "Please pick a value between 1 and 32.", name.c_str());
+ return false;
+ }
+
+ uint8 const synchThreads = uint8(sConfigMgr->GetIntDefault(name + "Database.SynchThreads", 1));
+
+ pool.SetConnectionInfo(dbString, asyncThreads, synchThreads);
+ if (uint32 error = pool.Open())
+ {
+ // Database does not exist
+ if ((error == ER_BAD_DB_ERROR) && updatesEnabledForThis && _autoSetup)
+ {
+ // Try to create the database and connect again if auto setup is enabled
+ if (DBUpdater<T>::Create(pool) && (!pool.Open()))
+ error = 0;
+ }
+
+ // If the error wasn't handled quit
+ if (error)
+ {
+ TC_LOG_ERROR("sql.driver", "\nDatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile "
+ "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", name.c_str());
+
+ return false;
+ }
+ }
+ return true;
+ },
+ [&pool]()
+ {
+ pool.Close();
+ }));
+
+ // Populate and update only if updates are enabled for this pool
+ if (updatesEnabledForThis)
+ {
+ _populate.push([this, name, &pool]() -> bool
+ {
+ if (!DBUpdater<T>::Populate(pool))
+ {
+ TC_LOG_ERROR(_logger.c_str(), "Could not populate the %s database, see log for details.", name.c_str());
+ return false;
+ }
+ return true;
+ });
+
+ _update.push([this, name, &pool]() -> bool
+ {
+ if (!DBUpdater<T>::Update(pool))
+ {
+ TC_LOG_ERROR(_logger.c_str(), "Could not update the %s database, see log for details.", name.c_str());
+ return false;
+ }
+ return true;
+ });
+ }
+
+ _prepare.push([this, name, &pool]() -> bool
+ {
+ if (!pool.PrepareStatements())
+ {
+ TC_LOG_ERROR(_logger.c_str(), "Could not prepare statements of the %s database, see log for details.", name.c_str());
+ return false;
+ }
+ return true;
+ });
+
+ return *this;
+}
+
+bool DatabaseLoader::Load()
+{
+ if (!OpenDatabases())
+ return false;
+
+ if (!PopulateDatabases())
+ return false;
+
+ if (!UpdateDatabases())
+ return false;
+
+ if (!PrepareStatements())
+ return false;
+
+ return true;
+}
+
+bool DatabaseLoader::OpenDatabases()
+{
+ while (!_open.empty())
+ {
+ std::pair<Predicate, std::function<void()>> const load = _open.top();
+ if (load.first())
+ _close.push(load.second);
+ else
+ {
+ // Close all loaded databases
+ while (!_close.empty())
+ {
+ _close.top()();
+ _close.pop();
+ }
+ return false;
+ }
+
+ _open.pop();
+ }
+ return true;
+}
+
+// Processes the elements of the given stack until a predicate returned false.
+bool DatabaseLoader::Process(std::stack<Predicate>& stack)
+{
+ while (!stack.empty())
+ {
+ if (!stack.top()())
+ return false;
+
+ stack.pop();
+ }
+ return true;
+}
+
+bool DatabaseLoader::PopulateDatabases()
+{
+ return Process(_populate);
+}
+
+bool DatabaseLoader::UpdateDatabases()
+{
+ return Process(_update);
+}
+
+bool DatabaseLoader::PrepareStatements()
+{
+ return Process(_prepare);
+}
+
+template
+DatabaseLoader& DatabaseLoader::AddDatabase<LoginDatabaseConnection>(DatabaseWorkerPool<LoginDatabaseConnection>& pool, std::string const& name);
+template
+DatabaseLoader& DatabaseLoader::AddDatabase<WorldDatabaseConnection>(DatabaseWorkerPool<WorldDatabaseConnection>& pool, std::string const& name);
+template
+DatabaseLoader& DatabaseLoader::AddDatabase<CharacterDatabaseConnection>(DatabaseWorkerPool<CharacterDatabaseConnection>& pool, std::string const& name);
diff --git a/src/server/shared/Database/DatabaseLoader.h b/src/server/shared/Database/DatabaseLoader.h
new file mode 100644
index 00000000000..d35597ba807
--- /dev/null
+++ b/src/server/shared/Database/DatabaseLoader.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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/>.
+ */
+
+#ifndef DatabaseLoader_h__
+#define DatabaseLoader_h__
+
+#include "DatabaseWorkerPool.h"
+#include "DatabaseEnv.h"
+
+#include <stack>
+#include <functional>
+
+// A helper class to initiate all database worker pools,
+// handles updating, delays preparing of statements and cleans up on failure.
+class DatabaseLoader
+{
+public:
+ DatabaseLoader(std::string const& logger, uint32 const defaultUpdateMask);
+
+ // Register a database to the loader (lazy implemented)
+ template <class T>
+ DatabaseLoader& AddDatabase(DatabaseWorkerPool<T>& pool, std::string const& name);
+
+ // Load all databases
+ bool Load();
+
+ enum DatabaseTypeFlags
+ {
+ DATABASE_NONE = 0,
+
+ DATABASE_LOGIN = 1,
+ DATABASE_CHARACTER = 2,
+ DATABASE_WORLD = 4,
+
+ DATABASE_MASK_ALL = DATABASE_LOGIN | DATABASE_CHARACTER | DATABASE_WORLD
+ };
+
+private:
+ bool OpenDatabases();
+ bool PopulateDatabases();
+ bool UpdateDatabases();
+ bool PrepareStatements();
+
+ using Predicate = std::function<bool()>;
+
+ static bool Process(std::stack<Predicate>& stack);
+
+ std::string const _logger;
+ bool const _autoSetup;
+ uint32 const _updateFlags;
+
+ std::stack<std::pair<Predicate, std::function<void()>>> _open;
+ std::stack<std::function<void()>> _close;
+ std::stack<Predicate> _populate, _update, _prepare;
+};
+
+#endif // DatabaseLoader_h__
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index 5a06ad69a1d..deafbf3e80d 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -29,6 +29,9 @@
#include "QueryHolder.h"
#include "AdhocStatement.h"
+#include <mysqld_error.h>
+#include <memory>
+
#define MIN_MYSQL_SERVER_VERSION 50100u
#define MIN_MYSQL_CLIENT_VERSION 50100u
@@ -55,9 +58,9 @@ class DatabaseWorkerPool
public:
/* Activity state */
- DatabaseWorkerPool() : _connectionInfo(NULL)
+ DatabaseWorkerPool() : _queue(new ProducerConsumerQueue<SQLOperation*>()),
+ _async_threads(0), _synch_threads(0)
{
- _queue = new ProducerConsumerQueue<SQLOperation*>();
memset(_connectionCount, 0, sizeof(_connectionCount));
_connections.resize(IDX_SIZE);
@@ -68,31 +71,37 @@ class DatabaseWorkerPool
~DatabaseWorkerPool()
{
_queue->Cancel();
+ }
- delete _queue;
+ void SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads)
+ {
+ _connectionInfo.reset(new MySQLConnectionInfo(infoString));
- delete _connectionInfo;
+ _async_threads = asyncThreads;
+ _synch_threads = synchThreads;
}
- bool Open(const std::string& infoString, uint8 async_threads, uint8 synch_threads)
+ uint32 Open()
{
- _connectionInfo = new MySQLConnectionInfo(infoString);
+ WPFatal(_connectionInfo.get(), "Connection info was not set!");
TC_LOG_INFO("sql.driver", "Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.",
- GetDatabaseName(), async_threads, synch_threads);
+ GetDatabaseName(), _async_threads, _synch_threads);
- bool res = OpenConnections(IDX_ASYNC, async_threads);
+ uint32 error = OpenConnections(IDX_ASYNC, _async_threads);
- if (!res)
- return res;
+ if (error)
+ return error;
- res = OpenConnections(IDX_SYNCH, synch_threads);
+ error = OpenConnections(IDX_SYNCH, _synch_threads);
- if (res)
+ if (!error)
+ {
TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. %u total connections running.", GetDatabaseName(),
(_connectionCount[IDX_SYNCH] + _connectionCount[IDX_ASYNC]));
+ }
- return res;
+ return error;
}
void Close()
@@ -118,6 +127,32 @@ class DatabaseWorkerPool
TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName());
}
+ //! Prepares all prepared statements
+ bool PrepareStatements()
+ {
+ for (uint8 i = 0; i < IDX_SIZE; ++i)
+ for (uint32 c = 0; c < _connectionCount[i]; ++c)
+ {
+ T* t = _connections[i][c];
+ t->LockIfReady();
+ if (!t->PrepareStatements())
+ {
+ t->Unlock();
+ Close();
+ return false;
+ }
+ else
+ t->Unlock();
+ }
+
+ return true;
+ }
+
+ inline MySQLConnectionInfo const* GetConnectionInfo() const
+ {
+ return _connectionInfo.get();
+ }
+
/**
Delayed one-way statement methods.
*/
@@ -368,7 +403,8 @@ class DatabaseWorkerPool
void DirectCommitTransaction(SQLTransaction& transaction)
{
T* con = GetFreeConnection();
- if (con->ExecuteTransaction(transaction))
+ int errorCode = con->ExecuteTransaction(transaction);
+ if (!errorCode)
{
con->Unlock(); // OK, operation succesful
return;
@@ -376,12 +412,12 @@ class DatabaseWorkerPool
//! Handle MySQL Errno 1213 without extending deadlock to the core itself
/// @todo More elegant way
- if (con->GetLastError() == 1213)
+ if (errorCode == ER_LOCK_DEADLOCK)
{
uint8 loopBreaker = 5;
for (uint8 i = 0; i < loopBreaker; ++i)
{
- if (con->ExecuteTransaction(transaction))
+ if (!con->ExecuteTransaction(transaction))
break;
}
}
@@ -458,7 +494,7 @@ class DatabaseWorkerPool
}
private:
- bool OpenConnections(InternalIndex type, uint8 numConnections)
+ uint32 OpenConnections(InternalIndex type, uint8 numConnections)
{
_connections[type].resize(numConnections);
for (uint8 i = 0; i < numConnections; ++i)
@@ -466,7 +502,7 @@ class DatabaseWorkerPool
T* t;
if (type == IDX_ASYNC)
- t = new T(_queue, *_connectionInfo);
+ t = new T(_queue.get(), *_connectionInfo);
else if (type == IDX_SYNCH)
t = new T(*_connectionInfo);
else
@@ -475,35 +511,32 @@ class DatabaseWorkerPool
_connections[type][i] = t;
++_connectionCount[type];
- bool res = t->Open();
+ uint32 error = t->Open();
- if (res)
+ if (!error)
{
if (mysql_get_server_version(t->GetHandle()) < MIN_MYSQL_SERVER_VERSION)
{
TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1");
- res = false;
+ error = 1;
}
}
// Failed to open a connection or invalid version, abort and cleanup
- if (!res)
+ if (error)
{
- TC_LOG_ERROR("sql.driver", "DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile "
- "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", GetDatabaseName());
-
while (_connectionCount[type] != 0)
{
T* t = _connections[type][i--];
delete t;
--_connectionCount[type];
}
-
- return false;
+ return error;
}
}
- return true;
+ // Everything is fine
+ return 0;
}
unsigned long EscapeString(char *to, const char *from, unsigned long length)
@@ -543,10 +576,13 @@ class DatabaseWorkerPool
return _connectionInfo->database.c_str();
}
- ProducerConsumerQueue<SQLOperation*>* _queue; //! Queue shared by async worker threads.
- std::vector< std::vector<T*> > _connections;
- uint32 _connectionCount[2]; //! Counter of MySQL connections;
- MySQLConnectionInfo* _connectionInfo;
+ //! Queue shared by async worker threads.
+ std::unique_ptr<ProducerConsumerQueue<SQLOperation*>> _queue;
+ std::vector<std::vector<T*>> _connections;
+ //! Counter of MySQL connections;
+ uint32 _connectionCount[IDX_SIZE];
+ std::unique_ptr<MySQLConnectionInfo> _connectionInfo;
+ uint8 _async_threads, _synch_threads;
};
#endif
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 265b0578841..c8632b8a3c2 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -60,7 +60,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_SEL_CHAR_POSITION_XYZ, "SELECT map, position_x, position_y, position_z FROM characters WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_CHAR_POSITION, "SELECT position_x, position_y, position_z, orientation, map, taxi_path FROM characters WHERE guid = ?", CONNECTION_SYNCH);
- PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM_ALL, "DELETE FROM character_battleground_random", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
@@ -300,6 +301,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_ARENA_TEAM_MEMBER, "DELETE FROM arena_team_member WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_ARENA_TEAM_STATS, "UPDATE arena_team SET rating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ?, rank = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_ARENA_TEAM_MEMBER, "UPDATE arena_team_member SET personalRating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ? WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_DEL_CHARACTER_ARENA_STATS, "DELETE FROM character_arena_stats WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_REP_CHARACTER_ARENA_STATS, "REPLACE INTO character_arena_stats (guid, slot, matchMakerRating) VALUES (?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(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);
PrepareStatement(CHAR_UPD_ARENA_TEAM_NAME, "UPDATE arena_team SET name = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC);
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index f7ff5b9186e..e56a24d6865 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -72,6 +72,7 @@ enum CharacterDatabaseStatements
CHAR_SEL_CHAR_POSITION_XYZ,
CHAR_SEL_CHAR_POSITION,
+ CHAR_DEL_BATTLEGROUND_RANDOM_ALL,
CHAR_DEL_BATTLEGROUND_RANDOM,
CHAR_INS_BATTLEGROUND_RANDOM,
@@ -253,6 +254,7 @@ enum CharacterDatabaseStatements
CHAR_DEL_ARENA_TEAM_MEMBER,
CHAR_UPD_ARENA_TEAM_STATS,
CHAR_UPD_ARENA_TEAM_MEMBER,
+ CHAR_DEL_CHARACTER_ARENA_STATS,
CHAR_REP_CHARACTER_ARENA_STATS,
CHAR_SEL_PLAYER_ARENA_TEAMS,
CHAR_UPD_ARENA_TEAM_NAME,
diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp
index bea229df184..1fa3f01a5e1 100644
--- a/src/server/shared/Database/MySQLConnection.cpp
+++ b/src/server/shared/Database/MySQLConnection.cpp
@@ -72,7 +72,7 @@ void MySQLConnection::Close()
delete this;
}
-bool MySQLConnection::Open()
+uint32 MySQLConnection::Open()
{
MYSQL *mysqlInit;
mysqlInit = mysql_init(NULL);
@@ -137,13 +137,13 @@ bool MySQLConnection::Open()
// set connection properties to UTF8 to properly handle locales for different
// server configs - core sends data in UTF8, so MySQL must expect UTF8 too
mysql_set_character_set(m_Mysql, "utf8");
- return PrepareStatements();
+ return 0;
}
else
{
- TC_LOG_ERROR("sql.sql", "Could not connect to MySQL database at %s: %s\n", m_connectionInfo.host.c_str(), mysql_error(mysqlInit));
+ TC_LOG_ERROR("sql.sql", "Could not connect to MySQL database at %s: %s", m_connectionInfo.host.c_str(), mysql_error(mysqlInit));
mysql_close(mysqlInit);
- return false;
+ return mysql_errno(mysqlInit);
}
}
@@ -359,11 +359,11 @@ void MySQLConnection::CommitTransaction()
Execute("COMMIT");
}
-bool MySQLConnection::ExecuteTransaction(SQLTransaction& transaction)
+int MySQLConnection::ExecuteTransaction(SQLTransaction& transaction)
{
std::list<SQLElementData> const& queries = transaction->m_queries;
if (queries.empty())
- return false;
+ return -1;
BeginTransaction();
@@ -380,8 +380,9 @@ bool MySQLConnection::ExecuteTransaction(SQLTransaction& transaction)
if (!Execute(stmt))
{
TC_LOG_WARN("sql.sql", "Transaction aborted. %u queries not executed.", (uint32)queries.size());
+ int errorCode = GetLastError();
RollbackTransaction();
- return false;
+ return errorCode;
}
}
break;
@@ -392,8 +393,9 @@ bool MySQLConnection::ExecuteTransaction(SQLTransaction& transaction)
if (!Execute(sql))
{
TC_LOG_WARN("sql.sql", "Transaction aborted. %u queries not executed.", (uint32)queries.size());
+ int errorCode = GetLastError();
RollbackTransaction();
- return false;
+ return errorCode;
}
}
break;
@@ -406,7 +408,7 @@ bool MySQLConnection::ExecuteTransaction(SQLTransaction& transaction)
// and not while iterating over every element.
CommitTransaction();
- return true;
+ return 0;
}
MySQLPreparedStatement* MySQLConnection::GetPreparedStatement(uint32 index)
diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h
index 33f17d02228..78d8d2fb5dd 100644
--- a/src/server/shared/Database/MySQLConnection.h
+++ b/src/server/shared/Database/MySQLConnection.h
@@ -72,9 +72,11 @@ class MySQLConnection
MySQLConnection(ProducerConsumerQueue<SQLOperation*>* queue, MySQLConnectionInfo& connInfo); //! Constructor for asynchronous connections.
virtual ~MySQLConnection();
- virtual bool Open();
+ virtual uint32 Open();
void Close();
+ bool PrepareStatements();
+
public:
bool Execute(const char* sql);
bool Execute(PreparedStatement* stmt);
@@ -86,7 +88,7 @@ class MySQLConnection
void BeginTransaction();
void RollbackTransaction();
void CommitTransaction();
- bool ExecuteTransaction(SQLTransaction& transaction);
+ int ExecuteTransaction(SQLTransaction& transaction);
operator bool () const { return m_Mysql != NULL; }
void Ping() { mysql_ping(m_Mysql); }
@@ -111,7 +113,6 @@ class MySQLConnection
MySQLPreparedStatement* GetPreparedStatement(uint32 index);
void PrepareStatement(uint32 index, const char* sql, ConnectionFlags flags);
- bool PrepareStatements();
virtual void DoPrepareStatements() = 0;
protected:
diff --git a/src/server/shared/Database/Transaction.cpp b/src/server/shared/Database/Transaction.cpp
index 3dee865267b..9f36d198bde 100644
--- a/src/server/shared/Database/Transaction.cpp
+++ b/src/server/shared/Database/Transaction.cpp
@@ -17,6 +17,9 @@
#include "DatabaseEnv.h"
#include "Transaction.h"
+#include <mysqld_error.h>
+
+std::mutex TransactionTask::_deadlockLock;
//- Append a raw ad-hoc query to the transaction
void Transaction::Append(const char* sql)
@@ -74,14 +77,17 @@ void Transaction::Cleanup()
bool TransactionTask::Execute()
{
- if (m_conn->ExecuteTransaction(m_trans))
+ int errorCode = m_conn->ExecuteTransaction(m_trans);
+ if (!errorCode)
return true;
- if (m_conn->GetLastError() == 1213)
+ if (errorCode == ER_LOCK_DEADLOCK)
{
+ // Make sure only 1 async thread retries a transaction so they don't keep dead-locking each other
+ std::lock_guard<std::mutex> lock(_deadlockLock);
uint8 loopBreaker = 5; // Handle MySQL Errno 1213 without extending deadlock to the core itself
for (uint8 i = 0; i < loopBreaker; ++i)
- if (m_conn->ExecuteTransaction(m_trans))
+ if (!m_conn->ExecuteTransaction(m_trans))
return true;
}
diff --git a/src/server/shared/Database/Transaction.h b/src/server/shared/Database/Transaction.h
index cf6aa98b386..83d59006ddc 100644
--- a/src/server/shared/Database/Transaction.h
+++ b/src/server/shared/Database/Transaction.h
@@ -66,6 +66,7 @@ class TransactionTask : public SQLOperation
bool Execute() override;
SQLTransaction m_trans;
+ static std::mutex _deadlockLock;
};
#endif
diff --git a/src/server/shared/Debugging/Errors.h b/src/server/shared/Debugging/Errors.h
index df770c2aa47..4d4624b63dd 100644
--- a/src/server/shared/Debugging/Errors.h
+++ b/src/server/shared/Debugging/Errors.h
@@ -49,4 +49,10 @@ namespace Trinity
#define ASSERT WPAssert
+template <typename T> inline T* ASSERT_NOTNULL(T* pointer)
+{
+ ASSERT(pointer);
+ return pointer;
+}
+
#endif
diff --git a/src/server/shared/Debugging/WheatyExceptionReport.cpp b/src/server/shared/Debugging/WheatyExceptionReport.cpp
index e9f4f9ca9ac..f8f641a9ea7 100644
--- a/src/server/shared/Debugging/WheatyExceptionReport.cpp
+++ b/src/server/shared/Debugging/WheatyExceptionReport.cpp
@@ -1068,7 +1068,7 @@ bool logChildren)
{
case btChar:
case btStdString:
- FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer));
+ FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer), elementsCount);
symbolDetails.top().Value = buffer;
break;
default:
@@ -1196,7 +1196,8 @@ void WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer,
BasicType basicType,
DWORD64 length,
PVOID pAddress,
-size_t bufferSize)
+size_t bufferSize,
+size_t countOverride)
{
__try
{
@@ -1204,10 +1205,15 @@ size_t bufferSize)
{
case btChar:
{
- if (strlen((char*)pAddress) > bufferSize - 6)
+ // Special case handling for char[] type
+ if (countOverride != 0)
+ length = countOverride;
+ else
+ length = strlen((char*)pAddress);
+ if (length > bufferSize - 6)
pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, (char*)pAddress);
else
- pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", (char*)pAddress);
+ pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s\"", length, (char*)pAddress);
break;
}
case btStdString:
diff --git a/src/server/shared/Debugging/WheatyExceptionReport.h b/src/server/shared/Debugging/WheatyExceptionReport.h
index 9137b91aac9..b7731daaa2b 100644
--- a/src/server/shared/Debugging/WheatyExceptionReport.h
+++ b/src/server/shared/Debugging/WheatyExceptionReport.h
@@ -172,7 +172,7 @@ class WheatyExceptionReport
static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, const char*, char*, bool, bool);
- static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize);
+ static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize, size_t countOverride = 0);
static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase);
static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address);
diff --git a/src/server/shared/Logging/Appender.cpp b/src/server/shared/Logging/Appender.cpp
index dff931e3da8..ca40a857419 100644
--- a/src/server/shared/Logging/Appender.cpp
+++ b/src/server/shared/Logging/Appender.cpp
@@ -18,6 +18,10 @@
#include "Appender.h"
#include "Common.h"
#include "Util.h"
+#include "StringFormat.h"
+
+#include <utility>
+#include <sstream>
std::string LogMessage::getTimeStr(time_t time)
{
@@ -68,38 +72,36 @@ void Appender::setLogLevel(LogLevel _level)
level = _level;
}
-void Appender::write(LogMessage& message)
+void Appender::write(LogMessage* message)
{
- if (!level || level > message.level)
+ if (!level || level > message->level)
return;
- message.prefix.clear();
+ std::ostringstream ss;
+
if (flags & APPENDER_FLAGS_PREFIX_TIMESTAMP)
- message.prefix.append(message.getTimeStr());
+ ss << message->getTimeStr();
if (flags & APPENDER_FLAGS_PREFIX_LOGLEVEL)
{
- if (!message.prefix.empty())
- message.prefix.push_back(' ');
+ if (ss.rdbuf()->in_avail() == 0)
+ ss << ' ';
- char text[MAX_QUERY_LEN];
- snprintf(text, MAX_QUERY_LEN, "%-5s", Appender::getLogLevelString(message.level));
- message.prefix.append(text);
+ ss << Trinity::StringFormat("%-5s", Appender::getLogLevelString(message->level));
}
if (flags & APPENDER_FLAGS_PREFIX_LOGFILTERTYPE)
{
- if (!message.prefix.empty())
- message.prefix.push_back(' ');
+ if (ss.rdbuf()->in_avail() == 0)
+ ss << ' ';
- message.prefix.push_back('[');
- message.prefix.append(message.type);
- message.prefix.push_back(']');
+ ss << '[' << message->type << ']';
}
- if (!message.prefix.empty())
- message.prefix.push_back(' ');
+ if (ss.rdbuf()->in_avail() == 0)
+ ss << ' ';
+ message->prefix = std::move(ss.str());
_write(message);
}
diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h
index 6f38eb6aaf7..38c45b3bcf1 100644
--- a/src/server/shared/Logging/Appender.h
+++ b/src/server/shared/Logging/Appender.h
@@ -21,6 +21,7 @@
#include <unordered_map>
#include <string>
#include <time.h>
+#include <type_traits>
#include "Define.h"
// Values assigned have their equivalent in enum ACE_Log_Priority
@@ -57,16 +58,16 @@ enum AppenderFlags
struct LogMessage
{
- LogMessage(LogLevel _level, std::string const& _type, std::string const& _text)
- : level(_level), type(_type), text(_text), mtime(time(NULL))
+ LogMessage(LogLevel _level, std::string const& _type, std::string&& _text)
+ : level(_level), type(_type), text(std::forward<std::string>(_text)), mtime(time(NULL))
{ }
static std::string getTimeStr(time_t time);
std::string getTimeStr();
- LogLevel level;
- std::string type;
- std::string text;
+ LogLevel const level;
+ std::string const type;
+ std::string const text;
std::string prefix;
std::string param1;
time_t mtime;
@@ -91,11 +92,11 @@ class Appender
AppenderFlags getFlags() const;
void setLogLevel(LogLevel);
- void write(LogMessage& message);
+ void write(LogMessage* message);
static const char* getLogLevelString(LogLevel level);
private:
- virtual void _write(LogMessage const& /*message*/) = 0;
+ virtual void _write(LogMessage const* /*message*/) = 0;
uint8 id;
std::string name;
diff --git a/src/server/shared/Logging/AppenderConsole.cpp b/src/server/shared/Logging/AppenderConsole.cpp
index ae27337fb9a..2efa4db4d2e 100644
--- a/src/server/shared/Logging/AppenderConsole.cpp
+++ b/src/server/shared/Logging/AppenderConsole.cpp
@@ -158,14 +158,14 @@ void AppenderConsole::ResetColor(bool stdout_stream)
#endif
}
-void AppenderConsole::_write(LogMessage const& message)
+void AppenderConsole::_write(LogMessage const* message)
{
- bool stdout_stream = !(message.level == LOG_LEVEL_ERROR || message.level == LOG_LEVEL_FATAL);
+ bool stdout_stream = !(message->level == LOG_LEVEL_ERROR || message->level == LOG_LEVEL_FATAL);
if (_colored)
{
uint8 index;
- switch (message.level)
+ switch (message->level)
{
case LOG_LEVEL_TRACE:
index = 5;
@@ -189,9 +189,9 @@ void AppenderConsole::_write(LogMessage const& message)
}
SetColor(stdout_stream, _colors[index]);
- utf8printf(stdout_stream ? stdout : stderr, "%s%s", message.prefix.c_str(), message.text.c_str());
+ utf8printf(stdout_stream ? stdout : stderr, "%s%s\n", message->prefix.c_str(), message->text.c_str());
ResetColor(stdout_stream);
}
else
- utf8printf(stdout_stream ? stdout : stderr, "%s%s", message.prefix.c_str(), message.text.c_str());
+ utf8printf(stdout_stream ? stdout : stderr, "%s%s\n", message->prefix.c_str(), message->text.c_str());
}
diff --git a/src/server/shared/Logging/AppenderConsole.h b/src/server/shared/Logging/AppenderConsole.h
index 0f9536b3111..0acf7636e35 100644
--- a/src/server/shared/Logging/AppenderConsole.h
+++ b/src/server/shared/Logging/AppenderConsole.h
@@ -51,7 +51,7 @@ class AppenderConsole: public Appender
private:
void SetColor(bool stdout_stream, ColorTypes color);
void ResetColor(bool stdout_stream);
- void _write(LogMessage const& message) override;
+ void _write(LogMessage const* message) override;
bool _colored;
ColorTypes _colors[MaxLogLevels];
};
diff --git a/src/server/shared/Logging/AppenderDB.cpp b/src/server/shared/Logging/AppenderDB.cpp
index d297d6d08d3..8a329ea3a0f 100644
--- a/src/server/shared/Logging/AppenderDB.cpp
+++ b/src/server/shared/Logging/AppenderDB.cpp
@@ -23,18 +23,18 @@ AppenderDB::AppenderDB(uint8 id, std::string const& name, LogLevel level)
AppenderDB::~AppenderDB() { }
-void AppenderDB::_write(LogMessage const& message)
+void AppenderDB::_write(LogMessage const* message)
{
// Avoid infinite loop, PExecute triggers Logging with "sql.sql" type
- if (!enabled || !message.type.find("sql"))
+ if (!enabled || (message->type.find("sql") != std::string::npos))
return;
PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_LOG);
- stmt->setUInt64(0, message.mtime);
+ stmt->setUInt64(0, message->mtime);
stmt->setUInt32(1, realmId);
- stmt->setString(2, message.type);
- stmt->setUInt8(3, uint8(message.level));
- stmt->setString(4, message.text);
+ stmt->setString(2, message->type);
+ stmt->setUInt8(3, uint8(message->level));
+ stmt->setString(4, message->text);
LoginDatabase.Execute(stmt);
}
diff --git a/src/server/shared/Logging/AppenderDB.h b/src/server/shared/Logging/AppenderDB.h
index e20ceaf77b4..09affdb46f1 100644
--- a/src/server/shared/Logging/AppenderDB.h
+++ b/src/server/shared/Logging/AppenderDB.h
@@ -31,7 +31,7 @@ class AppenderDB: public Appender
private:
uint32 realmId;
bool enabled;
- void _write(LogMessage const& message) override;
+ void _write(LogMessage const* message) override;
};
#endif
diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp
index 07a88a367ae..3892adbe3be 100644
--- a/src/server/shared/Logging/AppenderFile.cpp
+++ b/src/server/shared/Logging/AppenderFile.cpp
@@ -43,21 +43,21 @@ AppenderFile::~AppenderFile()
CloseFile();
}
-void AppenderFile::_write(LogMessage const& message)
+void AppenderFile::_write(LogMessage const* message)
{
- bool exceedMaxSize = maxFileSize > 0 && (fileSize.load() + message.Size()) > maxFileSize;
+ bool exceedMaxSize = maxFileSize > 0 && (fileSize.load() + message->Size()) > maxFileSize;
if (dynamicName)
{
char namebuf[TRINITY_PATH_MAX];
- snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str());
+ snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message->param1.c_str());
// always use "a" with dynamic name otherwise it could delete the log we wrote in last _write() call
FILE* file = OpenFile(namebuf, "a", backup || exceedMaxSize);
if (!file)
return;
- fprintf(file, "%s%s", message.prefix.c_str(), message.text.c_str());
+ fprintf(file, "%s%s", message->prefix.c_str(), message->text.c_str());
fflush(file);
- fileSize += uint64(message.Size());
+ fileSize += uint64(message->Size());
fclose(file);
return;
}
@@ -67,9 +67,9 @@ void AppenderFile::_write(LogMessage const& message)
if (!logfile)
return;
- fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str());
+ fprintf(logfile, "%s%s\n", message->prefix.c_str(), message->text.c_str());
fflush(logfile);
- fileSize += uint64(message.Size());
+ fileSize += uint64(message->Size());
}
FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup)
diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h
index 23651fc1129..36afdd23ad1 100644
--- a/src/server/shared/Logging/AppenderFile.h
+++ b/src/server/shared/Logging/AppenderFile.h
@@ -30,7 +30,7 @@ class AppenderFile: public Appender
private:
void CloseFile();
- void _write(LogMessage const& message) override;
+ void _write(LogMessage const* message) override;
FILE* logfile;
std::string filename;
std::string logDir;
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index 4bf4dacb302..c9a4432039f 100644
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -199,6 +199,9 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
return;
}
+ if (level < lowestLogLevel)
+ lowestLogLevel = level;
+
logger.Create(name, level);
//fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Level %u\n", name.c_str(), level);
@@ -261,30 +264,18 @@ void Log::ReadLoggersFromConfig()
}
}
-void Log::vlog(std::string const& filter, LogLevel level, char const* str, va_list argptr)
-{
- char text[MAX_QUERY_LEN];
- vsnprintf(text, MAX_QUERY_LEN, str, argptr);
- write(new LogMessage(level, filter, text));
-}
-
-void Log::write(LogMessage* msg) const
+void Log::write(std::unique_ptr<LogMessage>&& msg) const
{
Logger const* logger = GetLoggerByType(msg->type);
- msg->text.append("\n");
if (_ioService)
{
- auto logOperation = std::shared_ptr<LogOperation>(new LogOperation(logger, msg));
+ auto logOperation = std::shared_ptr<LogOperation>(new LogOperation(logger, std::forward<std::unique_ptr<LogMessage>>(msg)));
_ioService->post(_strand->wrap([logOperation](){ logOperation->call(); }));
-
}
else
- {
- logger->write(*msg);
- delete msg;
- }
+ logger->write(msg.get());
}
std::string Log::GetTimestampStr()
@@ -321,6 +312,9 @@ bool Log::SetLogLevel(std::string const& name, const char* newLevelc, bool isLog
return false;
it->second.setLogLevel(newLevel);
+
+ if (newLevel != LOG_LEVEL_DISABLED && newLevel < lowestLogLevel)
+ lowestLogLevel = newLevel;
}
else
{
@@ -343,40 +337,20 @@ void Log::outCharDump(char const* str, uint32 accountId, uint64 guid, char const
ss << "== START DUMP == (account: " << accountId << " guid: " << guid << " name: " << name
<< ")\n" << str << "\n== END DUMP ==\n";
- LogMessage* msg = new LogMessage(LOG_LEVEL_INFO, "entities.player.dump", ss.str());
+ std::unique_ptr<LogMessage> msg(new LogMessage(LOG_LEVEL_INFO, "entities.player.dump", ss.str()));
std::ostringstream param;
param << guid << '_' << name;
msg->param1 = param.str();
- write(msg);
-}
-
-void Log::outCommand(uint32 account, const char * str, ...)
-{
- if (!str || !ShouldLog("commands.gm", LOG_LEVEL_INFO))
- return;
-
- va_list ap;
- va_start(ap, str);
- char text[MAX_QUERY_LEN];
- vsnprintf(text, MAX_QUERY_LEN, str, ap);
- va_end(ap);
-
- LogMessage* msg = new LogMessage(LOG_LEVEL_INFO, "commands.gm", text);
-
- std::ostringstream ss;
- ss << account;
- msg->param1 = ss.str();
-
- write(msg);
+ write(std::move(msg));
}
void Log::SetRealmId(uint32 id)
{
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
if (it->second && it->second->getType() == APPENDER_DB)
- ((AppenderDB *)it->second)->setRealmId(id);
+ static_cast<AppenderDB*>(it->second)->setRealmId(id);
}
void Log::Close()
@@ -394,6 +368,7 @@ void Log::LoadFromConfig()
{
Close();
+ lowestLogLevel = LOG_LEVEL_FATAL;
AppenderId = 0;
m_logsDir = sConfigMgr->GetStringDefault("LogsDir", "");
if (!m_logsDir.empty())
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h
index 1d67ff87f76..20d83d2dcf0 100644
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -22,12 +22,14 @@
#include "Define.h"
#include "Appender.h"
#include "Logger.h"
-#include <stdarg.h>
+#include "StringFormat.h"
#include <boost/asio/io_service.hpp>
#include <boost/asio/strand.hpp>
+#include <stdarg.h>
#include <unordered_map>
#include <string>
+#include <memory>
#define LOGGER_ROOT "root"
@@ -59,17 +61,34 @@ class Log
bool ShouldLog(std::string const& type, LogLevel level) const;
bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true);
- void outMessage(std::string const& f, LogLevel level, char const* str, ...) ATTR_PRINTF(4, 5);
+ template<typename... Args>
+ inline void outMessage(std::string const& filter, LogLevel const level, const char* fmt, Args const&... args)
+ {
+ write(std::move(std::unique_ptr<LogMessage>(new LogMessage(level, filter, std::move(Trinity::StringFormat(fmt, args...))))));
+ }
+
+ template<typename... Args>
+ void outCommand(uint32 account, const char* fmt, Args const&... args)
+ {
+ if (!ShouldLog("commands.gm", LOG_LEVEL_INFO))
+ return;
+
+ std::unique_ptr<LogMessage> msg(new LogMessage(LOG_LEVEL_INFO, "commands.gm", std::move(Trinity::StringFormat(fmt, args...))));
+
+ std::ostringstream ss;
+ ss << account;
+ msg->param1 = ss.str();
+
+ write(std::move(msg));
+ }
- void outCommand(uint32 account, const char * str, ...) ATTR_PRINTF(3, 4);
void outCharDump(char const* str, uint32 account_id, uint64 guid, char const* name);
void SetRealmId(uint32 id);
private:
static std::string GetTimestampStr();
- void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr);
- void write(LogMessage* msg) const;
+ void write(std::unique_ptr<LogMessage>&& msg) const;
Logger const* GetLoggerByType(std::string const& type) const;
Appender* GetAppenderByName(std::string const& name);
@@ -82,6 +101,7 @@ class Log
AppenderMap appenders;
LoggerMap loggers;
uint8 AppenderId;
+ LogLevel lowestLogLevel;
std::string m_logsDir;
std::string m_logsTimestamp;
@@ -113,6 +133,10 @@ inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
// Speed up in cases where requesting "Type.sub1.sub2" but only configured
// Logger "Type"
+ // Don't even look for a logger if the LogLevel is lower than lowest log levels across all loggers
+ if (level < lowestLogLevel)
+ return false;
+
Logger const* logger = GetLoggerByType(type);
if (!logger)
return false;
@@ -121,23 +145,34 @@ inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
return logLevel != LOG_LEVEL_DISABLED && logLevel <= level;
}
-inline void Log::outMessage(std::string const& filter, LogLevel level, const char * str, ...)
-{
- va_list ap;
- va_start(ap, str);
-
- vlog(filter, level, str, ap);
-
- va_end(ap);
-}
-
#define sLog Log::instance()
+#define LOG_EXCEPTION_FREE(filterType__, level__, ...) \
+ { \
+ try \
+ { \
+ sLog->outMessage(filterType__, level__, __VA_ARGS__); \
+ } \
+ catch (std::exception& e) \
+ { \
+ sLog->outMessage("server", LOG_LEVEL_ERROR, "Wrong format occurred (%s) at %s:%u.", \
+ e.what(), __FILE__, __LINE__); \
+ } \
+ }
+
#if PLATFORM != PLATFORM_WINDOWS
+void check_args(const char* format, ...) ATTR_PRINTF(1, 2);
+
+// This will catch format errors on build time
#define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \
do { \
if (sLog->ShouldLog(filterType__, level__)) \
- sLog->outMessage(filterType__, level__, __VA_ARGS__); \
+ { \
+ if (false) \
+ check_args(__VA_ARGS__); \
+ \
+ LOG_EXCEPTION_FREE(filterType__, level__, __VA_ARGS__); \
+ } \
} while (0)
#else
#define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \
@@ -145,7 +180,7 @@ inline void Log::outMessage(std::string const& filter, LogLevel level, const cha
__pragma(warning(disable:4127)) \
do { \
if (sLog->ShouldLog(filterType__, level__)) \
- sLog->outMessage(filterType__, level__, __VA_ARGS__); \
+ LOG_EXCEPTION_FREE(filterType__, level__, __VA_ARGS__); \
} while (0) \
__pragma(warning(pop))
#endif
diff --git a/src/server/shared/Logging/LogOperation.cpp b/src/server/shared/Logging/LogOperation.cpp
index 9afb28a49c2..bcd923c705e 100644
--- a/src/server/shared/Logging/LogOperation.cpp
+++ b/src/server/shared/Logging/LogOperation.cpp
@@ -18,14 +18,8 @@
#include "LogOperation.h"
#include "Logger.h"
-LogOperation::~LogOperation()
-{
- delete msg;
-}
-
int LogOperation::call()
{
- if (logger && msg)
- logger->write(*msg);
+ logger->write(msg.get());
return 0;
}
diff --git a/src/server/shared/Logging/LogOperation.h b/src/server/shared/Logging/LogOperation.h
index b8655413273..ffdd35c3c09 100644
--- a/src/server/shared/Logging/LogOperation.h
+++ b/src/server/shared/Logging/LogOperation.h
@@ -18,23 +18,25 @@
#ifndef LOGOPERATION_H
#define LOGOPERATION_H
+#include <memory>
+
class Logger;
struct LogMessage;
class LogOperation
{
public:
- LogOperation(Logger const* _logger, LogMessage* _msg)
- : logger(_logger), msg(_msg)
+ LogOperation(Logger const* _logger, std::unique_ptr<LogMessage>&& _msg)
+ : logger(_logger), msg(std::forward<std::unique_ptr<LogMessage>>(_msg))
{ }
- ~LogOperation();
+ ~LogOperation() { }
int call();
protected:
Logger const* logger;
- LogMessage* msg;
+ std::unique_ptr<LogMessage> msg;
};
#endif
diff --git a/src/server/shared/Logging/Logger.cpp b/src/server/shared/Logging/Logger.cpp
index 615732deb30..3b02eb47575 100644
--- a/src/server/shared/Logging/Logger.cpp
+++ b/src/server/shared/Logging/Logger.cpp
@@ -50,9 +50,9 @@ void Logger::setLogLevel(LogLevel _level)
level = _level;
}
-void Logger::write(LogMessage& message) const
+void Logger::write(LogMessage* message) const
{
- if (!level || level > message.level || message.text.empty())
+ if (!level || level > message->level || message->text.empty())
{
//fprintf(stderr, "Logger::write: Logger %s, Level %u. Msg %s Level %u WRONG LEVEL MASK OR EMPTY MSG\n", getName().c_str(), getLogLevel(), message.text.c_str(), message.level);
return;
diff --git a/src/server/shared/Logging/Logger.h b/src/server/shared/Logging/Logger.h
index a81ee8d7bd2..1aee75c5d72 100644
--- a/src/server/shared/Logging/Logger.h
+++ b/src/server/shared/Logging/Logger.h
@@ -32,7 +32,7 @@ class Logger
std::string const& getName() const;
LogLevel getLogLevel() const;
void setLogLevel(LogLevel level);
- void write(LogMessage& message) const;
+ void write(LogMessage* message) const;
private:
std::string name;
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h
index f6bf3976b85..f7a1b954cb0 100644
--- a/src/server/shared/Networking/Socket.h
+++ b/src/server/shared/Networking/Socket.h
@@ -34,7 +34,9 @@
using boost::asio::ip::tcp;
#define READ_BLOCK_SIZE 4096
-#define TC_SOCKET_USE_IOCP BOOST_ASIO_HAS_IOCP
+#ifdef BOOST_ASIO_HAS_IOCP
+#define TC_SOCKET_USE_IOCP
+#endif
template<class T>
class Socket : public std::enable_shared_from_this<T>
diff --git a/src/server/shared/Networking/SocketMgr.h b/src/server/shared/Networking/SocketMgr.h
index df57baf257e..2078ae90c62 100644
--- a/src/server/shared/Networking/SocketMgr.h
+++ b/src/server/shared/Networking/SocketMgr.h
@@ -99,7 +99,7 @@ public:
}
catch (boost::system::system_error const& err)
{
- TC_LOG_INFO("network", "Failed to retrieve client's remote address %s", err.what());
+ TC_LOG_WARN("network", "Failed to retrieve client's remote address %s", err.what());
}
}
diff --git a/src/server/shared/Updater/DBUpdater.cpp b/src/server/shared/Updater/DBUpdater.cpp
new file mode 100644
index 00000000000..15226577504
--- /dev/null
+++ b/src/server/shared/Updater/DBUpdater.cpp
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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 "DBUpdater.h"
+#include "Log.h"
+#include "revision.h"
+#include "UpdateFetcher.h"
+#include "DatabaseLoader.h"
+#include "Config.h"
+
+#include <fstream>
+#include <iostream>
+#include <unordered_map>
+#include <boost/process.hpp>
+#include <boost/process/mitigate.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/system/system_error.hpp>
+
+using namespace boost::process;
+using namespace boost::process::initializers;
+using namespace boost::iostreams;
+
+template<class T>
+std::string DBUpdater<T>::GetSourceDirectory()
+{
+ std::string const entry = sConfigMgr->GetStringDefault("Updates.SourcePath", "");
+ if (!entry.empty())
+ return entry;
+ else
+ return _SOURCE_DIRECTORY;
+}
+
+template<class T>
+std::string DBUpdater<T>::GetMySqlCli()
+{
+ std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", "");
+ if (!entry.empty())
+ return entry;
+ else
+ return _MYSQL_EXECUTABLE;
+}
+
+// Auth Database
+template<>
+std::string DBUpdater<LoginDatabaseConnection>::GetConfigEntry()
+{
+ return "Updates.Auth";
+}
+
+template<>
+std::string DBUpdater<LoginDatabaseConnection>::GetTableName()
+{
+ return "Auth";
+}
+
+template<>
+std::string DBUpdater<LoginDatabaseConnection>::GetBaseFile()
+{
+ return DBUpdater<LoginDatabaseConnection>::GetSourceDirectory() + "/sql/base/auth_database.sql";
+}
+
+template<>
+bool DBUpdater<LoginDatabaseConnection>::IsEnabled(uint32 const updateMask)
+{
+ // This way silences warnings under msvc
+ return (updateMask & DatabaseLoader::DATABASE_LOGIN) ? true : false;
+}
+
+// World Database
+template<>
+std::string DBUpdater<WorldDatabaseConnection>::GetConfigEntry()
+{
+ return "Updates.World";
+}
+
+template<>
+std::string DBUpdater<WorldDatabaseConnection>::GetTableName()
+{
+ return "World";
+}
+
+template<>
+std::string DBUpdater<WorldDatabaseConnection>::GetBaseFile()
+{
+ return _FULL_DATABASE;
+}
+
+template<>
+bool DBUpdater<WorldDatabaseConnection>::IsEnabled(uint32 const updateMask)
+{
+ // This way silences warnings under msvc
+ return (updateMask & DatabaseLoader::DATABASE_WORLD) ? true : false;
+}
+
+template<>
+BaseLocation DBUpdater<WorldDatabaseConnection>::GetBaseLocationType()
+{
+ return LOCATION_DOWNLOAD;
+}
+
+// Character Database
+template<>
+std::string DBUpdater<CharacterDatabaseConnection>::GetConfigEntry()
+{
+ return "Updates.Character";
+}
+
+template<>
+std::string DBUpdater<CharacterDatabaseConnection>::GetTableName()
+{
+ return "Character";
+}
+
+template<>
+std::string DBUpdater<CharacterDatabaseConnection>::GetBaseFile()
+{
+ return DBUpdater<CharacterDatabaseConnection>::GetSourceDirectory() + "/sql/base/characters_database.sql";
+}
+
+template<>
+bool DBUpdater<CharacterDatabaseConnection>::IsEnabled(uint32 const updateMask)
+{
+ // This way silences warnings under msvc
+ return (updateMask & DatabaseLoader::DATABASE_CHARACTER) ? true : false;
+}
+
+// All
+template<class T>
+BaseLocation DBUpdater<T>::GetBaseLocationType()
+{
+ return LOCATION_REPOSITORY;
+}
+
+template<class T>
+bool DBUpdater<T>::CheckExecutable()
+{
+ DBUpdater<T>::Path const exe(DBUpdater<T>::GetMySqlCli());
+ if (!exists(exe))
+ {
+ // Check for mysql in path
+ std::vector<std::string> args = {"--version"};
+ uint32 ret;
+ try
+ {
+ child c = execute(run_exe("mysql"), set_args(args), throw_on_error(), close_stdout());
+ ret = wait_for_exit(c);
+ }
+ catch (boost::system::system_error&)
+ {
+ ret = EXIT_FAILURE;
+ }
+
+ if (ret == EXIT_FAILURE)
+ {
+ TC_LOG_FATAL("sql.updates", "Didn't find executeable mysql binary at \'%s\', correct the path in the *.conf (\"Updates.MySqlCLIPath\").",
+ absolute(exe).generic_string().c_str());
+
+ return false;
+ }
+ }
+ return true;
+}
+
+template<class T>
+bool DBUpdater<T>::Create(DatabaseWorkerPool<T>& pool)
+{
+ TC_LOG_INFO("sql.updates", "Database \"%s\" does not exist, do you want to create it? [yes (default) / no]: ",
+ pool.GetConnectionInfo()->database.c_str());
+
+ std::string answer;
+ std::getline(std::cin, answer);
+ if (!answer.empty() && !(answer.substr(0, 1) == "y"))
+ return false;
+
+ TC_LOG_INFO("sql.updates", "Creating database \"%s\"...", pool.GetConnectionInfo()->database.c_str());
+
+ // Path of temp file
+ static Path const temp("create_table.sql");
+
+ // Create temporary query to use external mysql cli
+ std::ofstream file(temp.generic_string());
+ if (!file.is_open())
+ {
+ TC_LOG_FATAL("sql.updates", "Failed to create temporary query file \"%s\"!", temp.generic_string().c_str());
+ return false;
+ }
+
+ file << "CREATE DATABASE `" << pool.GetConnectionInfo()->database << "` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci\n\n";
+
+ file.close();
+
+ try
+ {
+ DBUpdater<T>::ApplyFile(pool, pool.GetConnectionInfo()->host, pool.GetConnectionInfo()->user, pool.GetConnectionInfo()->password,
+ pool.GetConnectionInfo()->port_or_socket, "", temp);
+ }
+ catch (UpdateException&)
+ {
+ TC_LOG_FATAL("sql.updates", "Failed to create database %s! Has the user `CREATE` priviliges?", pool.GetConnectionInfo()->database.c_str());
+ boost::filesystem::remove(temp);
+ return false;
+ }
+
+ TC_LOG_INFO("sql.updates", "Done.");
+ boost::filesystem::remove(temp);
+ return true;
+}
+
+template<class T>
+bool DBUpdater<T>::Update(DatabaseWorkerPool<T>& pool)
+{
+ if (!DBUpdater<T>::CheckExecutable())
+ return false;
+
+ TC_LOG_INFO("sql.updates", "Updating %s database...", DBUpdater<T>::GetTableName().c_str());
+
+ Path const sourceDirectory(GetSourceDirectory());
+
+ if (!is_directory(sourceDirectory))
+ {
+ TC_LOG_ERROR("sql.updates", "DBUpdater: Given source directory %s does not exist, skipped!", sourceDirectory.generic_string().c_str());
+ return false;
+ }
+
+ UpdateFetcher updateFetcher(sourceDirectory, [&](std::string const& query) { DBUpdater<T>::Apply(pool, query); },
+ [&](Path const& file) { DBUpdater<T>::ApplyFile(pool, file); },
+ [&](std::string const& query) -> QueryResult { return DBUpdater<T>::Retrieve(pool, query); });
+
+ uint32 const count = updateFetcher.Update(
+ sConfigMgr->GetBoolDefault("Updates.Redundancy", true),
+ sConfigMgr->GetBoolDefault("Updates.AllowRehash", true),
+ sConfigMgr->GetBoolDefault("Updates.ArchivedRedundancy", false),
+ sConfigMgr->GetIntDefault("Updates.CleanDeadRefMaxCount", 3));
+
+ if (!count)
+ TC_LOG_INFO("sql.updates", ">> %s database is up-to-date!", DBUpdater<T>::GetTableName().c_str());
+ else
+ TC_LOG_INFO("sql.updates", ">> Applied %d %s.", count, count == 1 ? "query" : "queries");
+
+ return true;
+}
+
+template<class T>
+bool DBUpdater<T>::Populate(DatabaseWorkerPool<T>& pool)
+{
+ {
+ QueryResult const result = Retrieve(pool, "SHOW TABLES");
+ if (result && (result->GetRowCount() > 0))
+ return true;
+ }
+
+ if (!DBUpdater<T>::CheckExecutable())
+ return false;
+
+ TC_LOG_INFO("sql.updates", "Database %s is empty, auto populating it...", DBUpdater<T>::GetTableName().c_str());
+
+ std::string const p = DBUpdater<T>::GetBaseFile();
+ if (p.empty())
+ {
+ TC_LOG_INFO("sql.updates", ">> No base file provided, skipped!");
+ return true;
+ }
+
+ Path const base(p);
+ if (!exists(base))
+ {
+ switch (DBUpdater<T>::GetBaseLocationType())
+ {
+ case LOCATION_REPOSITORY:
+ {
+ TC_LOG_ERROR("sql.updates", ">> Base file \"%s\" is missing, try to clone the source again.",
+ base.generic_string().c_str());
+
+ break;
+ }
+ case LOCATION_DOWNLOAD:
+ {
+ TC_LOG_ERROR("sql.updates", ">> File \"%s\" is missing, download it from \"http://www.trinitycore.org/f/files/category/1-database/\"" \
+ " and place it in your server directory.", base.filename().generic_string().c_str());
+ break;
+ }
+ }
+ return false;
+ }
+
+ // Update database
+ TC_LOG_INFO("sql.updates", ">> Applying \'%s\'...", base.generic_string().c_str());
+ ApplyFile(pool, base);
+
+ TC_LOG_INFO("sql.updates", ">> Done!");
+ return true;
+}
+
+template<class T>
+QueryResult DBUpdater<T>::Retrieve(DatabaseWorkerPool<T>& pool, std::string const& query)
+{
+ return pool.PQuery(query.c_str());
+}
+
+template<class T>
+void DBUpdater<T>::Apply(DatabaseWorkerPool<T>& pool, std::string const& query)
+{
+ pool.DirectExecute(query.c_str());
+}
+
+template<class T>
+void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, Path const& path)
+{
+ DBUpdater<T>::ApplyFile(pool, pool.GetConnectionInfo()->host, pool.GetConnectionInfo()->user, pool.GetConnectionInfo()->password,
+ pool.GetConnectionInfo()->port_or_socket, pool.GetConnectionInfo()->database, path);
+}
+
+template<class T>
+void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& host, std::string const& user,
+ std::string const& password, std::string const& port_or_socket, std::string const& database, Path const& path)
+{
+ std::vector<std::string> args;
+ args.reserve(7);
+
+ // CLI Client connection info
+ args.push_back("-h" + host);
+ args.push_back("-u" + user);
+ args.push_back("-p" + password);
+ args.push_back("-P" + port_or_socket);
+
+ // Set the default charset to utf8
+ args.push_back("--default-character-set=utf8");
+
+ // Set max allowed packet to 1 GB
+ args.push_back("--max-allowed-packet=1GB");
+
+ // Database
+ if (!database.empty())
+ args.push_back(database);
+
+ // ToDo: use the existing query in memory as virtual file if possible
+ file_descriptor_source source(path);
+
+ uint32 ret;
+ try
+ {
+ child c = execute(run_exe(DBUpdater<T>::GetMySqlCli().empty() ? "mysql" :
+ boost::filesystem::absolute(DBUpdater<T>::GetMySqlCli()).generic_string()),
+ set_args(args), bind_stdin(source), throw_on_error());
+
+ ret = wait_for_exit(c);
+ }
+ catch (boost::system::system_error&)
+ {
+ ret = EXIT_FAILURE;
+ }
+
+ source.close();
+
+ if (ret != EXIT_SUCCESS)
+ {
+ TC_LOG_FATAL("sql.updates", "Applying of file \'%s\' to database \'%s\' failed!" \
+ " If you are an user pull the latest revision from the repository. If you are a developer fix your sql query.",
+ path.generic_string().c_str(), pool.GetConnectionInfo()->database.c_str());
+
+ throw UpdateException("update failed");
+ }
+}
+
+template class DBUpdater<LoginDatabaseConnection>;
+template class DBUpdater<WorldDatabaseConnection>;
+template class DBUpdater<CharacterDatabaseConnection>;
diff --git a/src/server/shared/Updater/DBUpdater.h b/src/server/shared/Updater/DBUpdater.h
new file mode 100644
index 00000000000..0caf8a438fb
--- /dev/null
+++ b/src/server/shared/Updater/DBUpdater.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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/>.
+ */
+
+#ifndef DBUpdater_h__
+#define DBUpdater_h__
+
+#include "DatabaseEnv.h"
+
+#include <string>
+#include <boost/filesystem.hpp>
+
+class UpdateException : public std::exception
+{
+public:
+ UpdateException(std::string const& msg) : _msg(msg) { }
+ ~UpdateException() throw() { }
+
+ char const* what() const throw() override { return _msg.c_str(); }
+
+private:
+ std::string const _msg;
+};
+
+enum BaseLocation
+{
+ LOCATION_REPOSITORY,
+ LOCATION_DOWNLOAD
+};
+
+template <class T>
+class DBUpdater
+{
+public:
+ using Path = boost::filesystem::path;
+
+ static std::string GetSourceDirectory();
+
+ static inline std::string GetConfigEntry();
+
+ static inline std::string GetTableName();
+
+ static std::string GetBaseFile();
+
+ static bool IsEnabled(uint32 const updateMask);
+
+ static BaseLocation GetBaseLocationType();
+
+ static bool Create(DatabaseWorkerPool<T>& pool);
+
+ static bool Update(DatabaseWorkerPool<T>& pool);
+
+ static bool Populate(DatabaseWorkerPool<T>& pool);
+
+private:
+ static std::string GetMySqlCli();
+ static bool CheckExecutable();
+
+ static QueryResult Retrieve(DatabaseWorkerPool<T>& pool, std::string const& query);
+ static void Apply(DatabaseWorkerPool<T>& pool, std::string const& query);
+ static void ApplyFile(DatabaseWorkerPool<T>& pool, Path const& path);
+ static void ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& host, std::string const& user,
+ std::string const& password, std::string const& port_or_socket, std::string const& database, Path const& path);
+};
+
+#endif // DBUpdater_h__
diff --git a/src/server/shared/Updater/UpdateFetcher.cpp b/src/server/shared/Updater/UpdateFetcher.cpp
new file mode 100644
index 00000000000..2b12f39780c
--- /dev/null
+++ b/src/server/shared/Updater/UpdateFetcher.cpp
@@ -0,0 +1,401 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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 "UpdateFetcher.h"
+#include "Log.h"
+#include "Util.h"
+
+#include <fstream>
+#include <chrono>
+#include <vector>
+#include <sstream>
+#include <exception>
+#include <unordered_map>
+#include <openssl/sha.h>
+
+using namespace boost::filesystem;
+
+UpdateFetcher::UpdateFetcher(Path const& sourceDirectory,
+ std::function<void(std::string const&)> const& apply,
+ std::function<void(Path const& path)> const& applyFile,
+ std::function<QueryResult(std::string const&)> const& retrieve) :
+ _sourceDirectory(sourceDirectory), _apply(apply), _applyFile(applyFile),
+ _retrieve(retrieve)
+{
+}
+
+UpdateFetcher::LocaleFileStorage UpdateFetcher::GetFileList() const
+{
+ LocaleFileStorage files;
+ DirectoryStorage directories = ReceiveIncludedDirectories();
+ for (auto const& entry : directories)
+ FillFileListRecursively(entry.path, files, entry.state, 1);
+
+ return files;
+}
+
+void UpdateFetcher::FillFileListRecursively(Path const& path, LocaleFileStorage& storage, State const state, uint32 const depth) const
+{
+ static uint32 const MAX_DEPTH = 10;
+ static directory_iterator const end;
+
+ for (directory_iterator itr(path); itr != end; ++itr)
+ {
+ if (is_directory(itr->path()))
+ {
+ if (depth < MAX_DEPTH)
+ FillFileListRecursively(itr->path(), storage, state, depth + 1);
+ }
+ else if (itr->path().extension() == ".sql")
+ {
+ TC_LOG_TRACE("sql.updates", "Added locale file \"%s\".", itr->path().filename().generic_string().c_str());
+
+ LocaleFileEntry const entry = { itr->path(), state };
+
+ // Check for doubled filenames
+ // Since elements are only compared through their filenames this is ok
+ if (storage.find(entry) != storage.end())
+ {
+ TC_LOG_FATAL("sql.updates", "Duplicated filename occurred \"%s\", since updates are ordered " \
+ "through its filename every name needs to be unique!", itr->path().generic_string().c_str());
+
+ throw UpdateException("Updating failed, see the log for details.");
+ }
+
+ storage.insert(entry);
+ }
+ }
+}
+
+UpdateFetcher::DirectoryStorage UpdateFetcher::ReceiveIncludedDirectories() const
+{
+ DirectoryStorage directories;
+
+ QueryResult const result = _retrieve("SELECT `path`, `state` FROM `updates_include`");
+ if (!result)
+ return directories;
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ std::string path = fields[0].GetString();
+ if (path.substr(0, 1) == "$")
+ path = _sourceDirectory.generic_string() + path.substr(1);
+
+ Path const p(path);
+
+ if (!is_directory(p))
+ {
+ TC_LOG_WARN("sql.updates", "DBUpdater: Given update include directory \"%s\" isn't existing, skipped!", p.generic_string().c_str());
+ continue;
+ }
+
+ DirectoryEntry const entry = { p, AppliedFileEntry::StateConvert(fields[1].GetString()) };
+ directories.push_back(entry);
+
+ TC_LOG_TRACE("sql.updates", "Added applied file \"%s\" from remote.", p.filename().generic_string().c_str());
+
+ } while (result->NextRow());
+
+ return directories;
+}
+
+UpdateFetcher::AppliedFileStorage UpdateFetcher::ReceiveAppliedFiles() const
+{
+ AppliedFileStorage map;
+
+ QueryResult result = _retrieve("SELECT `name`, `hash`, `state`, UNIX_TIMESTAMP(`timestamp`) FROM `updates` ORDER BY `name` ASC");
+ if (!result)
+ return map;
+
+ do
+ {
+ Field* fields = result->Fetch();
+
+ AppliedFileEntry const entry = { fields[0].GetString(), fields[1].GetString(),
+ AppliedFileEntry::StateConvert(fields[2].GetString()), fields[3].GetUInt64() };
+
+ map.insert(std::make_pair(entry.name, entry));
+ }
+ while (result->NextRow());
+
+ return map;
+}
+
+UpdateFetcher::SQLUpdate UpdateFetcher::ReadSQLUpdate(boost::filesystem::path const& file) const
+{
+ std::ifstream in(file.c_str());
+ WPFatal(in.is_open(), "Could not read an update file.");
+
+ auto const start_pos = in.tellg();
+ in.ignore(std::numeric_limits<std::streamsize>::max());
+ auto const char_count = in.gcount();
+ in.seekg(start_pos);
+
+ SQLUpdate const update(new std::string(char_count, char{}));
+
+ in.read(&(*update)[0], update->size());
+ in.close();
+ return update;
+}
+
+uint32 UpdateFetcher::Update(bool const redundancyChecks, bool const allowRehash, bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const
+{
+ LocaleFileStorage const available = GetFileList();
+ AppliedFileStorage applied = ReceiveAppliedFiles();
+
+ // Fill hash to name cache
+ HashToFileNameStorage hashToName;
+ for (auto entry : applied)
+ hashToName.insert(std::make_pair(entry.second.hash, entry.first));
+
+ uint32 importedUpdates = 0;
+
+ for (auto const& availableQuery : available)
+ {
+ TC_LOG_DEBUG("sql.updates", "Checking update \"%s\"...", availableQuery.first.filename().generic_string().c_str());
+
+ AppliedFileStorage::const_iterator iter = applied.find(availableQuery.first.filename().string());
+ if (iter != applied.end())
+ {
+ // If redundancy is disabled skip it since the update is already applied.
+ if (!redundancyChecks)
+ {
+ TC_LOG_DEBUG("sql.updates", ">> Update is already applied, skipping redundancy checks.");
+ applied.erase(iter);
+ continue;
+ }
+
+ // If the update is in an archived directory and is marked as archived in our database skip redundancy checks (archived updates never change).
+ if (!archivedRedundancy && (iter->second.state == ARCHIVED) && (availableQuery.second == ARCHIVED))
+ {
+ TC_LOG_DEBUG("sql.updates", ">> Update is archived and marked as archived in database, skipping redundancy checks.");
+ applied.erase(iter);
+ continue;
+ }
+ }
+
+ // Read update from file
+ SQLUpdate const update = ReadSQLUpdate(availableQuery.first);
+
+ // Calculate hash
+ std::string const hash = CalculateHash(update);
+
+ UpdateMode mode = MODE_APPLY;
+
+ // Update is not in our applied list
+ if (iter == applied.end())
+ {
+ // Catch renames (different filename but same hash)
+ HashToFileNameStorage::const_iterator const hashIter = hashToName.find(hash);
+ if (hashIter != hashToName.end())
+ {
+ // Check if the original file was removed if not we've got a problem.
+ LocaleFileStorage::const_iterator localeIter;
+ // Push localeIter forward
+ for (localeIter = available.begin(); (localeIter != available.end()) &&
+ (localeIter->first.filename().string() != hashIter->second); ++localeIter);
+
+ // Conflict!
+ if (localeIter != available.end())
+ {
+ TC_LOG_WARN("sql.updates", ">> Seems like update \"%s\" \'%s\' was renamed, but the old file is still there! " \
+ "Trade it as a new file! (Probably its an unmodified copy of file \"%s\")",
+ availableQuery.first.filename().string().c_str(), hash.substr(0, 7).c_str(),
+ localeIter->first.filename().string().c_str());
+ }
+ // Its save to trade the file as renamed here
+ else
+ {
+ TC_LOG_INFO("sql.updates", ">> Renaming update \"%s\" to \"%s\" \'%s\'.",
+ hashIter->second.c_str(), availableQuery.first.filename().string().c_str(), hash.substr(0, 7).c_str());
+
+ RenameEntry(hashIter->second, availableQuery.first.filename().string());
+ applied.erase(hashIter->second);
+ continue;
+ }
+ }
+ // Apply the update if it was never seen before.
+ else
+ {
+ TC_LOG_INFO("sql.updates", ">> Applying update \"%s\" \'%s\'...",
+ availableQuery.first.filename().string().c_str(), hash.substr(0, 7).c_str());
+ }
+ }
+ // Rehash the update entry if it is contained in our database but with an empty hash.
+ else if (allowRehash && iter->second.hash.empty())
+ {
+ mode = MODE_REHASH;
+
+ TC_LOG_INFO("sql.updates", ">> Re-hashing update \"%s\" \'%s\'...", availableQuery.first.filename().string().c_str(),
+ hash.substr(0, 7).c_str());
+ }
+ else
+ {
+ // If the hash of the files differs from the one stored in our database reapply the update (because it was changed).
+ if (iter->second.hash != hash)
+ {
+ TC_LOG_INFO("sql.updates", ">> Reapplying update \"%s\" \'%s\' -> \'%s\' (it changed)...", availableQuery.first.filename().string().c_str(),
+ iter->second.hash.substr(0, 7).c_str(), hash.substr(0, 7).c_str());
+ }
+ else
+ {
+ // If the file wasn't changed and just moved update its state if necessary.
+ if (iter->second.state != availableQuery.second)
+ {
+ TC_LOG_DEBUG("sql.updates", ">> Updating state of \"%s\" to \'%s\'...",
+ availableQuery.first.filename().string().c_str(), AppliedFileEntry::StateConvert(availableQuery.second).c_str());
+
+ UpdateState(availableQuery.first.filename().string(), availableQuery.second);
+ }
+
+ TC_LOG_DEBUG("sql.updates", ">> Update is already applied and is matching hash \'%s\'.", hash.substr(0, 7).c_str());
+
+ applied.erase(iter);
+ continue;
+ }
+ }
+
+ uint32 speed = 0;
+ AppliedFileEntry const file = { availableQuery.first.filename().string(), hash, availableQuery.second, 0 };
+
+ switch (mode)
+ {
+ case MODE_APPLY:
+ speed = Apply(availableQuery.first);
+ /*no break*/
+ case MODE_REHASH:
+ UpdateEntry(file, speed);
+ break;
+ }
+
+ if (iter != applied.end())
+ applied.erase(iter);
+
+ if (mode == MODE_APPLY)
+ ++importedUpdates;
+ }
+
+ // Cleanup up orphaned entries if enabled
+ if (!applied.empty())
+ {
+ bool const doCleanup = (cleanDeadReferencesMaxCount < 0) || (applied.size() <= static_cast<size_t>(cleanDeadReferencesMaxCount));
+
+ for (auto const& entry : applied)
+ {
+ TC_LOG_WARN("sql.updates", ">> File \'%s\' was applied to the database but is missing in" \
+ " your update directory now!", entry.first.c_str());
+
+ if (doCleanup)
+ TC_LOG_INFO("sql.updates", "Deleting orphaned entry \'%s\'...", entry.first.c_str());
+ }
+
+ if (doCleanup)
+ CleanUp(applied);
+ else
+ {
+ TC_LOG_ERROR("sql.updates", "Cleanup is disabled! There are " SZFMTD " dirty files that were applied to your database " \
+ "but are now missing in your source directory!", applied.size());
+ }
+ }
+
+ return importedUpdates;
+}
+
+std::string UpdateFetcher::CalculateHash(SQLUpdate const& query) const
+{
+ // Calculate a Sha1 hash based on query content.
+ unsigned char digest[SHA_DIGEST_LENGTH];
+ SHA1((unsigned char*)query->c_str(), query->length(), (unsigned char*)&digest);
+
+ return ByteArrayToHexStr(digest, SHA_DIGEST_LENGTH);
+}
+
+uint32 UpdateFetcher::Apply(Path const& path) const
+{
+ using Time = std::chrono::high_resolution_clock;
+ using ms = std::chrono::milliseconds;
+
+ // Benchmark query speed
+ auto const begin = Time::now();
+
+ // Update database
+ _applyFile(path);
+
+ // Return time the query took to apply
+ return std::chrono::duration_cast<ms>(Time::now() - begin).count();
+}
+
+void UpdateFetcher::UpdateEntry(AppliedFileEntry const& entry, uint32 const speed) const
+{
+ std::string const update = "REPLACE INTO `updates` (`name`, `hash`, `state`, `speed`) VALUES (\"" +
+ entry.name + "\", \"" + entry.hash + "\", \'" + entry.GetStateAsString() + "\', " + std::to_string(speed) + ")";
+
+ // Update database
+ _apply(update);
+}
+
+void UpdateFetcher::RenameEntry(std::string const& from, std::string const& to) const
+{
+ // Delete target if it exists
+ {
+ std::string const update = "DELETE FROM `updates` WHERE `name`=\"" + to + "\"";
+
+ // Update database
+ _apply(update);
+ }
+
+ // Rename
+ {
+ std::string const update = "UPDATE `updates` SET `name`=\"" + to + "\" WHERE `name`=\"" + from + "\"";
+
+ // Update database
+ _apply(update);
+ }
+}
+
+void UpdateFetcher::CleanUp(AppliedFileStorage const& storage) const
+{
+ if (storage.empty())
+ return;
+
+ std::stringstream update;
+ size_t remaining = storage.size();
+
+ update << "DELETE FROM `updates` WHERE `name` IN(";
+
+ for (auto const& entry : storage)
+ {
+ update << "\"" << entry.first << "\"";
+ if ((--remaining) > 0)
+ update << ", ";
+ }
+
+ update << ")";
+
+ // Update database
+ _apply(update.str());
+}
+
+void UpdateFetcher::UpdateState(std::string const& name, State const state) const
+{
+ std::string const update = "UPDATE `updates` SET `state`=\'" + AppliedFileEntry::StateConvert(state) + "\' WHERE `name`=\"" + name + "\"";
+
+ // Update database
+ _apply(update);
+}
diff --git a/src/server/shared/Updater/UpdateFetcher.h b/src/server/shared/Updater/UpdateFetcher.h
new file mode 100644
index 00000000000..094e353f274
--- /dev/null
+++ b/src/server/shared/Updater/UpdateFetcher.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program 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/>.
+ */
+
+#ifndef UpdateFetcher_h__
+#define UpdateFetcher_h__
+
+#include <DBUpdater.h>
+
+#include <functional>
+#include <string>
+#include <memory>
+#include <vector>
+
+class UpdateFetcher
+{
+ using Path = boost::filesystem::path;
+
+public:
+ UpdateFetcher(Path const& updateDirectory,
+ std::function<void(std::string const&)> const& apply,
+ std::function<void(Path const& path)> const& applyFile,
+ std::function<QueryResult(std::string const&)> const& retrieve);
+
+ uint32 Update(bool const redundancyChecks, bool const allowRehash,
+ bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const;
+
+private:
+ enum UpdateMode
+ {
+ MODE_APPLY,
+ MODE_REHASH
+ };
+
+ enum State
+ {
+ RELEASED,
+ ARCHIVED
+ };
+
+ struct AppliedFileEntry
+ {
+ std::string const name;
+
+ std::string const hash;
+
+ State const state;
+
+ uint64 const timestamp;
+
+ static inline State StateConvert(std::string const& state)
+ {
+ return (state == "RELEASED") ? RELEASED : ARCHIVED;
+ }
+
+ static inline std::string StateConvert(State const state)
+ {
+ return (state == RELEASED) ? "RELEASED" : "ARCHIVED";
+ }
+
+ std::string GetStateAsString() const
+ {
+ return StateConvert(state);
+ }
+ };
+
+ struct DirectoryEntry
+ {
+ Path const path;
+
+ State const state;
+ };
+
+ using LocaleFileEntry = std::pair<Path, State>;
+
+ struct PathCompare
+ {
+ inline bool operator() (LocaleFileEntry const& left, LocaleFileEntry const& right) const
+ {
+ return left.first.filename().string() < right.first.filename().string();
+ }
+ };
+
+ using LocaleFileStorage = std::set<LocaleFileEntry, PathCompare>;
+ using HashToFileNameStorage = std::unordered_map<std::string, std::string>;
+ using AppliedFileStorage = std::unordered_map<std::string, AppliedFileEntry>;
+ using DirectoryStorage = std::vector<UpdateFetcher::DirectoryEntry>;
+ using SQLUpdate = std::shared_ptr<std::string>;
+
+ LocaleFileStorage GetFileList() const;
+ void FillFileListRecursively(Path const& path, LocaleFileStorage& storage, State const state, uint32 const depth) const;
+
+ DirectoryStorage ReceiveIncludedDirectories() const;
+ AppliedFileStorage ReceiveAppliedFiles() const;
+
+ SQLUpdate ReadSQLUpdate(Path const& file) const;
+ std::string CalculateHash(SQLUpdate const& query) const;
+
+ uint32 Apply(Path const& path) const;
+
+ void UpdateEntry(AppliedFileEntry const& entry, uint32 const speed = 0) const;
+ void RenameEntry(std::string const& from, std::string const& to) const;
+ void CleanUp(AppliedFileStorage const& storage) const;
+
+ void UpdateState(std::string const& name, State const state) const;
+
+ Path const _sourceDirectory;
+
+ std::function<void(std::string const&)> const _apply;
+ std::function<void(Path const& path)> const _applyFile;
+ std::function<QueryResult(std::string const&)> const _retrieve;
+};
+
+#endif // UpdateFetcher_h__
diff --git a/src/server/shared/Utilities/StringFormat.h b/src/server/shared/Utilities/StringFormat.h
new file mode 100644
index 00000000000..70d9aefb14d
--- /dev/null
+++ b/src/server/shared/Utilities/StringFormat.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+ *
+ * This program 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/>.
+ */
+
+#ifndef TRINITYCORE_STRING_FORMAT_H
+#define TRINITYCORE_STRING_FORMAT_H
+
+#include <format.h>
+
+namespace Trinity
+{
+ //! Default TC string format function
+ template<typename... Args>
+ inline std::string StringFormat(const char* fmt, Args const&... args)
+ {
+ return fmt::sprintf(fmt, args...);
+ }
+}
+
+#endif
diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt
index 97180fb36a0..ded076d8925 100644
--- a/src/server/worldserver/CMakeLists.txt
+++ b/src/server/worldserver/CMakeLists.txt
@@ -47,6 +47,8 @@ include_directories(
${CMAKE_SOURCE_DIR}/dep/gsoap
${CMAKE_SOURCE_DIR}/dep/sockets/include
${CMAKE_SOURCE_DIR}/dep/SFMT
+ ${CMAKE_SOURCE_DIR}/dep/cppformat
+ ${CMAKE_SOURCE_DIR}/dep/process
${CMAKE_SOURCE_DIR}/src/server/collision
${CMAKE_SOURCE_DIR}/src/server/collision/Management
${CMAKE_SOURCE_DIR}/src/server/collision/Models
@@ -63,6 +65,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/src/server/shared/Networking
${CMAKE_SOURCE_DIR}/src/server/shared/Packets
${CMAKE_SOURCE_DIR}/src/server/shared/Threading
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Updater
${CMAKE_SOURCE_DIR}/src/server/shared/Utilities
${CMAKE_SOURCE_DIR}/src/server/game
${CMAKE_SOURCE_DIR}/src/server/game/Accounts
@@ -168,6 +171,7 @@ target_link_libraries(worldserver
g3dlib
gsoap
Detour
+ format
${JEMALLOC_LIBRARY}
${READLINE_LIBRARY}
${TERMCAP_LIBRARY}
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 7b47dba8759..fbf2c74ac0b 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -47,6 +47,7 @@
#include "SystemConfig.h"
#include "WorldSocket.h"
#include "WorldSocketMgr.h"
+#include "DatabaseLoader.h"
using namespace boost::program_options;
@@ -447,80 +448,15 @@ bool StartDB()
{
MySQL::Library_Init();
- std::string dbString;
- uint8 asyncThreads, synchThreads;
+ // Load databases
+ DatabaseLoader loader("server.worldserver", DatabaseLoader::DATABASE_NONE);
+ loader
+ .AddDatabase(WorldDatabase, "World")
+ .AddDatabase(CharacterDatabase, "Character")
+ .AddDatabase(LoginDatabase, "Login");
- dbString = sConfigMgr->GetStringDefault("WorldDatabaseInfo", "");
- if (dbString.empty())
- {
- TC_LOG_ERROR("server.worldserver", "World database not specified in configuration file");
- return false;
- }
-
- asyncThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.WorkerThreads", 1));
- if (asyncThreads < 1 || asyncThreads > 32)
- {
- TC_LOG_ERROR("server.worldserver", "World database: invalid number of worker threads specified. "
- "Please pick a value between 1 and 32.");
- return false;
- }
-
- synchThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.SynchThreads", 1));
- ///- Initialize the world database
- if (!WorldDatabase.Open(dbString, asyncThreads, synchThreads))
- {
- TC_LOG_ERROR("server.worldserver", "Cannot connect to world database %s", dbString.c_str());
+ if (!loader.Load())
return false;
- }
-
- ///- Get character database info from configuration file
- dbString = sConfigMgr->GetStringDefault("CharacterDatabaseInfo", "");
- if (dbString.empty())
- {
- TC_LOG_ERROR("server.worldserver", "Character database not specified in configuration file");
- return false;
- }
-
- asyncThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.WorkerThreads", 1));
- if (asyncThreads < 1 || asyncThreads > 32)
- {
- TC_LOG_ERROR("server.worldserver", "Character database: invalid number of worker threads specified. "
- "Please pick a value between 1 and 32.");
- return false;
- }
-
- synchThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.SynchThreads", 2));
-
- ///- Initialize the Character database
- if (!CharacterDatabase.Open(dbString, asyncThreads, synchThreads))
- {
- TC_LOG_ERROR("server.worldserver", "Cannot connect to Character database %s", dbString.c_str());
- return false;
- }
-
- ///- Get login database info from configuration file
- dbString = sConfigMgr->GetStringDefault("LoginDatabaseInfo", "");
- if (dbString.empty())
- {
- TC_LOG_ERROR("server.worldserver", "Login database not specified in configuration file");
- return false;
- }
-
- asyncThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.WorkerThreads", 1));
- if (asyncThreads < 1 || asyncThreads > 32)
- {
- TC_LOG_ERROR("server.worldserver", "Login database: invalid number of worker threads specified. "
- "Please pick a value between 1 and 32.");
- return false;
- }
-
- synchThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.SynchThreads", 1));
- ///- Initialise the login database
- if (!LoginDatabase.Open(dbString, asyncThreads, synchThreads))
- {
- TC_LOG_ERROR("server.worldserver", "Cannot connect to login database %s", dbString.c_str());
- return false;
- }
///- Get the realm Id from the configuration file
realmID = sConfigMgr->GetIntDefault("RealmID", 0);
diff --git a/src/server/worldserver/RemoteAccess/RASession.h b/src/server/worldserver/RemoteAccess/RASession.h
index d272f323c6a..efd2106fdd1 100644
--- a/src/server/worldserver/RemoteAccess/RASession.h
+++ b/src/server/worldserver/RemoteAccess/RASession.h
@@ -30,8 +30,6 @@ using boost::asio::ip::tcp;
const size_t bufferSize = 4096;
-#define BUFFER_SIZE 4096
-
class RASession : public std::enable_shared_from_this <RASession>
{
public:
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index eaef902addc..0a98922b295 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -11,6 +11,7 @@
# PERFORMANCE SETTINGS
# SERVER LOGGING
# SERVER SETTINGS
+# UPDATE SETTINGS
# WARDEN SETTINGS
# PLAYER INTERACTION
# CREATURE SETTINGS
@@ -1121,6 +1122,92 @@ BirthdayTime = 1222964635
###################################################################################################
###################################################################################################
+# UPDATE SETTINGS
+#
+# Updates.EnableDatabases
+# Description: A mask that describes which databases shall be updated.
+#
+# Following flags are available
+# DATABASE_LOGIN = 1, // Auth database
+# DATABASE_CHARACTER = 2, // Character database
+# DATABASE_WORLD = 4, // World database
+#
+# Default: 0 - (All Disabled)
+# 4 - (Enable world only)
+# 7 - (All enabled)
+
+Updates.EnableDatabases = 0
+
+#
+# Updates.SourcePath
+# Description: The path to your TrinityCore source directory.
+# If the path is left empty, built-in CMAKE_SOURCE_DIR is used.
+# Example: "../TrinityCore"
+# Default: ""
+
+Updates.SourcePath = ""
+
+#
+# Updates.SourcePath
+# Description: The path to your mysql cli binary.
+# If the path is left empty, built-in path from cmake is used.
+# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe"
+# "mysql.exe"
+# "/usr/bin/mysql"
+# Default: ""
+
+Updates.MySqlCLIPath = ""
+
+#
+# Updates.AutoSetup
+# Description: Auto populate empty databases.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.AutoSetup = 1
+
+#
+# Updates.Redundancy
+# Description: Perform data redundancy checks through hashing
+# to detect changes on sql updates and reapply it.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.Redundancy = 1
+
+#
+# Updates.ArchivedRedundancy
+# Description: Check hashes of archived updates (slows down startup).
+# Default: 0 - (Disabled)
+# 1 - (Enabled)
+
+Updates.ArchivedRedundancy = 0
+
+#
+# Updates.AllowRehash
+# Description: Inserts the current file hash in the database if it is left empty.
+# Useful if you want to mark a file as applied but you don't know its hash.
+# Default: 1 - (Enabled)
+# 0 - (Disabled)
+
+Updates.AllowRehash = 1
+
+#
+# Updates.CleanDeadRefMaxCount
+# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step.
+# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value.
+# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision).
+# Disable this if you want to know if the database is in a possible "dirty state".
+# Default: 3 - (Enabled)
+# 0 - (Disabled)
+# -1 - (Enabled - unlimited)
+
+Updates.CleanDeadRefMaxCount = 3
+
+#
+###################################################################################################
+
+###################################################################################################
# WARDEN SETTINGS
#
# Warden.Enabled
@@ -3029,33 +3116,54 @@ AuctionHouseBot.Buyer.Horde.Enabled = 0
AuctionHouseBot.Buyer.Neutral.Enabled = 0
#
-# AuctionHouseBot.BuyPrice.Buyer
-# Description: Should the Buyer use BuyPrice or SellPrice to determine Bid Prices
-# Default: 1 - (use BuyPrice)
-# 0 - (use SellPrice)
-
-AuctionHouseBot.Buyer.Buyprice = 1
+# AuctionHouseBot.Buyer.Baseprice.QUALITY
+# Description: Base sellprices in copper for non priced items for each quality.
+# The default values are based on average item prices of each quality.
+# Defaults: Gray 3504
+# White 5429
+# Green 21752
+# Blue 36463
+# Purple 87124
+# Orange 214347
+# Yellow 407406
+
+AuctionHouseBot.Buyer.Baseprice.Gray = 3504
+AuctionHouseBot.Buyer.Baseprice.White = 5429
+AuctionHouseBot.Buyer.Baseprice.Green = 21752
+AuctionHouseBot.Buyer.Baseprice.Blue = 36463
+AuctionHouseBot.Buyer.Baseprice.Purple = 87124
+AuctionHouseBot.Buyer.Baseprice.Orange = 214347
+AuctionHouseBot.Buyer.Baseprice.Yellow = 407406
+
+#
+# AuctionHouseBot.Buyer.ChanceMultiplier.QUALITY
+# Description: Multipliers for the buy/bid chances for each quality. 100 means the chance is 100% of the original,
+# 1 would mean 1 % of the original and 200 would mean 200% of the original chance.
+# Defaults: Gray 100
+# White 100
+# Green 100
+# Blue 100
+# Purple 100
+# Orange 100
+# Yellow 100
+
+AuctionHouseBot.Buyer.ChanceMultiplier.Gray = 100
+AuctionHouseBot.Buyer.ChanceMultiplier.White = 100
+AuctionHouseBot.Buyer.ChanceMultiplier.Green = 100
+AuctionHouseBot.Buyer.ChanceMultiplier.Blue = 100
+AuctionHouseBot.Buyer.ChanceMultiplier.Purple = 100
+AuctionHouseBot.Buyer.ChanceMultiplier.Orange = 100
+AuctionHouseBot.Buyer.ChanceMultiplier.Yellow = 100
#
# AuctionHouseBot.Buyer.Recheck.Interval
-# Description: This specifies the time interval (in minutes) between two evaluations of the same selled item.
-# The lesser this value is, the more chances you give for item to be bought by ahbot.
+# Description: This specifies the time interval (in minutes) between two evaluations of the same sold item.
+# The smaller this value is, the more chances you give for an item to be bought by ahbot.
# Default: 20 (20min.)
AuctionHouseBot.Buyer.Recheck.Interval = 20
#
-# AuctionHouseBot.Buyer.Alliance.Chance.Ratio
-# Description: Chance ratio for the buyer to buy an item. Higher the value, lesser the probability
-# Example: 3 (1 out of 3 change, that is, 33%).
-# Default: 3
-#
-
-AuctionHouseBot.Buyer.Alliance.Chance.Ratio = 3
-AuctionHouseBot.Buyer.Horde.Chance.Ratio = 3
-AuctionHouseBot.Buyer.Neutral.Chance.Ratio = 3
-
-#
###################################################################################################
###################################################################################################
@@ -3152,6 +3260,7 @@ Logger.root=5,Console Server
Logger.server=3,Console Server
Logger.commands.gm=3,Console GM
Logger.sql.sql=5,Console DBErrors
+Logger.sql.updates=3,Console Server
#Logger.achievement=3,Console Server
#Logger.ahbot=3,Console Server
@@ -3192,6 +3301,7 @@ Logger.sql.sql=5,Console DBErrors
#Logger.scripts.ai=3,Console Server
#Logger.server.authserver=3,Console Server
#Logger.spells=3,Console Server
+#Logger.spells.periodic=3,Console Server
#Logger.sql.dev=3,Console Server
#Logger.sql.driver=3,Console Server
#Logger.warden=3,Console Server